From ad530510a4aba72f3074f1a7dec82cc9018db7b4 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Fri, 19 Mar 2021 23:57:18 +0300 Subject: feat: add Transfers service --- src/services/waybills.service.ts | 63 ++++------------------------------------ 1 file changed, 6 insertions(+), 57 deletions(-) (limited to 'src/services/waybills.service.ts') diff --git a/src/services/waybills.service.ts b/src/services/waybills.service.ts index e36e4f9..02ab2de 100644 --- a/src/services/waybills.service.ts +++ b/src/services/waybills.service.ts @@ -1,14 +1,9 @@ import { Application } from '@feathersjs/express'; -import { HookContext } from '@feathersjs/feathers'; import service from 'feathers-mongoose'; -import { populate, alterItems } from 'feathers-hooks-common'; -import Bluebird from 'bluebird'; -import _ from 'lodash'; -import moment from 'moment'; -import Model from '../models/waybill/waybill.model'; -import { WaybillSchema } from '../models/waybill/waybill.schema'; +import { populate } from 'feathers-hooks-common'; +import Model from '../models/transfer/transfer.model'; -const waybills = service({ Model }); +const transfers = service({ Model }); const populateSchema = { include: [ @@ -17,65 +12,19 @@ const populateSchema = { nameAs: 'contractor', parentField: 'contractorId', childField: '_id' - }, - { - service: 'products', - nameAs: 'product', - parentField: 'productId', - childField: '_id' - }, + } ] }; -const reflectStatus = async (context: HookContext): Promise => { - const { status } = context.data; - if (['cancelled', 'executed'].includes(status) && context.id) { - const waybill: WaybillSchema = await context.service.get(context.id); - - const signMultiplier = (waybill.operation === 'in' ? 1 : -1) * (status === 'cancelled' ? -1 : 1); - const total = waybill.records.reduce((sum, record) => sum + record.price * record.quantity, 0); - - await Bluebird.map(waybill.records, record => { - return context.app.service('products').patch(record.productId, { - $inc: { - quantity: record.quantity * signMultiplier - } - }); - }); - - await context.app.service('contractors').patch(waybill.contractorId, { - $inc: { - debt: total * signMultiplier * (-1) - } - }); - } - return context; -}; - - - -const addFields = (item: WaybillSchema) => { - const { operation, records, date } = item; - const total = item.records.reduce((sum, record) => sum + record.price * record.quantity, 0); - const op = operation === 'in' ? 'приход' : 'расход'; - const name = `Накладная: ${op} $${total}`; - const formattedDate = moment(date).format('YYYY-MM-DD'); - return { ...item, name, total, date: formattedDate }; -}; - export default (app: Application): void => { - app.use('/waybills', waybills); + app.use('/transfers', transfers); - app.service('waybills').hooks({ + app.service('transfers').hooks({ after: { all: [ populate({ schema: populateSchema }), - alterItems(addFields) ], }, - before: { - patch: reflectStatus, - }, }) }; -- cgit v1.2.3