diff options
Diffstat (limited to 'src/services')
| -rw-r--r-- | src/services/index.ts | 2 | ||||
| -rw-r--r-- | src/services/tranfers.service.ts | 81 | ||||
| -rw-r--r-- | src/services/waybills.service.ts | 63 | 
3 files changed, 89 insertions, 57 deletions
| diff --git a/src/services/index.ts b/src/services/index.ts index dd1591c..120b98a 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -2,12 +2,14 @@ import { Application } from '@feathersjs/express';  import Products from './products.service';  import Contractors from './contractors.service';  import Waybills from './waybills.service'; +import Tranfers from './tranfers.service';  import Spreadsheets from './spreadsheets.service';  export default (app: Application): void => {    app.configure(Products);    app.configure(Contractors);    app.configure(Waybills); +  app.configure(Tranfers);    app.configure(Spreadsheets);    app.get('/ping', (req, res) => res.send('pong')); diff --git a/src/services/tranfers.service.ts b/src/services/tranfers.service.ts new file mode 100644 index 0000000..e36e4f9 --- /dev/null +++ b/src/services/tranfers.service.ts @@ -0,0 +1,81 @@ +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'; + +const waybills = service({ Model }); + +const populateSchema = { +  include: [ +    { +      service: 'contractors', +      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}`; +  const formattedDate = moment(date).format('YYYY-MM-DD'); +  return { ...item, name, total, date: formattedDate }; +}; + +export default (app: Application): void => { +  app.use('/waybills', waybills); + +  app.service('waybills').hooks({ +    after: { +      all: [ +        populate({ schema: populateSchema }), +        alterItems(addFields) +      ], +    }, +    before: { +      patch: reflectStatus, +    }, +  }) +}; + 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<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}`; -  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, -    },    })  }; | 
