summaryrefslogtreecommitdiff
path: root/src/services/waybills.service.ts
diff options
context:
space:
mode:
authoreug-vs <eug-vs@keemail.me>2021-03-20 00:12:40 +0300
committereug-vs <eug-vs@keemail.me>2021-03-20 00:12:40 +0300
commitcd284d9e4c1f28bf7c31c52d71e76878a3ff5f4a (patch)
treeed6b97b4e9bc85c921869de004dfff8f5e2066dc /src/services/waybills.service.ts
parentad530510a4aba72f3074f1a7dec82cc9018db7b4 (diff)
downloadcommercel-api-cd284d9e4c1f28bf7c31c52d71e76878a3ff5f4a.tar.gz
feat: move formatDate to hooks
Diffstat (limited to 'src/services/waybills.service.ts')
-rw-r--r--src/services/waybills.service.ts63
1 files changed, 57 insertions, 6 deletions
diff --git a/src/services/waybills.service.ts b/src/services/waybills.service.ts
index 02ab2de..824be4b 100644
--- a/src/services/waybills.service.ts
+++ b/src/services/waybills.service.ts
@@ -1,9 +1,14 @@
import { Application } from '@feathersjs/express';
+import { HookContext } from '@feathersjs/feathers';
import service from 'feathers-mongoose';
-import { populate } from 'feathers-hooks-common';
-import Model from '../models/transfer/transfer.model';
+import { populate, alterItems } from 'feathers-hooks-common';
+import Bluebird from 'bluebird';
+import _ from 'lodash';
+import Model from '../models/waybill/waybill.model';
+import { WaybillSchema } from '../models/waybill/waybill.schema';
+import formatDate from '../hooks/formatDate';
-const transfers = service({ Model });
+const waybills = service({ Model });
const populateSchema = {
include: [
@@ -12,19 +17,65 @@ const populateSchema = {
nameAs: 'contractor',
parentField: 'contractorId',
childField: '_id'
- }
+ },
+ {
+ service: 'products',
+ nameAs: 'product',
+ parentField: 'productId',
+ childField: '_id'
+ },
]
};
+const reflectStatus = async (context: HookContext): Promise<HookContext> => {
+ 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}`;
+ return { ...item, name, total };
+};
+
export default (app: Application): void => {
- app.use('/transfers', transfers);
+ app.use('/waybills', waybills);
- app.service('transfers').hooks({
+ app.service('waybills').hooks({
after: {
all: [
populate({ schema: populateSchema }),
+ alterItems(addFields),
+ formatDate(),
],
},
+ before: {
+ patch: reflectStatus,
+ },
})
};