@things-factory/warehouse-base 6.0.68 → 6.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"location-query.js","sourceRoot":"","sources":["../../../server/service/location/location-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { User } from '@things-factory/auth-base'\nimport { getPermittedBizplaceIds } from '@things-factory/biz-base'\nimport { buildQuery, Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\n\nimport { INVENTORY_STATUS } from '../../constants/inventory'\nimport { Warehouse } from '../warehouse/warehouse'\nimport { Location } from './location'\nimport { LocationInventories, LocationList, LocationOccupancy } from './location-types'\n\n@Resolver(Location)\nexport class LocationQuery {\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\")')\n @Query(returns => LocationList)\n async locations(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<LocationList> {\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(Location),\n params,\n domain: context.state.domain,\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n /**\n * @description this resolver was specially made to return huge locations data\n * without dropping off performance due to typegraphql limitations\n * @returns pure location data only. there will be no other table joined to avoid\n * ORM lagging issue (converting to object extremely withdraws the performance)\n * */\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\")')\n @Query(returns => LocationList)\n async pureLocations(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<LocationList> {\n const queryBuilder = getRepository(Location).createQueryBuilder('location')\n buildQuery(queryBuilder, params, context)\n const items = await queryBuilder.getRawMany()\n const total = await queryBuilder.getCount()\n\n return { items: items.map(item => new Location(item)), total }\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\")')\n @Query(returns => LocationOccupancy)\n async locationOccupancies(\n @Arg('warehouse') warehouse: string,\n @Arg('types', type => [String], { nullable: true }) types: string[],\n @Ctx() context: ResolverContext\n ): Promise<LocationOccupancy> {\n const { domain } = context.state\n\n const foundWarehouse: Warehouse = await getRepository(Warehouse).findOne({\n where: {\n domain: { id: domain.id },\n name: warehouse\n },\n relations: ['locations']\n })\n\n if (!foundWarehouse) throw new Error(`${warehouse} was not found!`)\n\n const locations: Location[] =\n types && types.length\n ? foundWarehouse?.locations?.filter((location: Location) => types.indexOf(location.type) !== -1)\n : foundWarehouse?.locations\n\n const total: number = locations.length\n const occupied: number = locations.filter((location: Location) => location.status === 'OCCUPIED')?.length || 0\n const empty: number = total - occupied\n const percentage: number = occupied > 0 ? Math.round((occupied / total) * 100) : 0\n\n return { total, occupied, empty, percentage }\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\")')\n @Query(returns => Location)\n async location(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Location> {\n const foundLocation: Location | null = await getRepository(Location).findOne({\n where: { name },\n relations: ['domain', 'warehouse', 'creator', 'updater']\n })\n if (!foundLocation) throw new Error(context.t('error.no_location_found'))\n\n return foundLocation\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\")')\n @Query(returns => Location)\n async locationByName(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Location> {\n const { domain } = context.state\n\n return await getRepository(Location).findOne({\n where: {\n domain: { id: domain.id },\n name\n },\n relations: ['domain', 'warehouse', 'creator', 'updater']\n })\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\")')\n @Query(returns => LocationList)\n async locationsByGroup(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<LocationList> {\n const { domain } = context.state\n const warehouseIdParam = params.filters.find(param => (param.name = 'warehouse_id'))\n\n if (!warehouseIdParam.value) throw new Error(`invalid warehouse ID`)\n\n const items = await getRepository(Location).query(`\n SELECT CONCAT(\"zone\",'-',\"row\",'-',\"column\") as name, \"zone\", \"row\", \"column\"\n FROM locations WHERE domain_id = '${domain.id}'\n AND warehouse_id = '${warehouseIdParam.value}'\n GROUP BY \"zone\", \"row\", \"column\"\n `)\n\n let [{ total }] = await getRepository(Location).query(`\n SELECT COUNT(DISTINCT(\"zone\", \"row\", \"column\")) as total\n FROM locations WHERE domain_id = '${domain.id}'\n AND warehouse_id = '${warehouseIdParam.value}'\n `)\n\n total = parseInt(total)\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\")')\n @Query(returns => LocationInventories)\n async locationWithInventories(\n @Args() params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<LocationInventories> {\n const { domain, user } = context.state\n const bizplaceIds = await getPermittedBizplaceIds(domain, user)\n const queryBuilder = getRepository(Location).createQueryBuilder()\n\n const warehouseNames = params.filters.find(\n x => x.name === 'warehouseNames' && x.operator.toLowerCase() === 'in'\n )?.value\n\n const locationTypes = params.filters.find(\n x => x.name === 'locationTypes' && x.operator.toLowerCase() === 'in'\n )?.value\n\n params.filters = []\n buildQuery(queryBuilder, params, context)\n\n queryBuilder\n .leftJoinAndSelect('Location.warehouse', 'Warehouse')\n .leftJoinAndSelect(\n 'inventories',\n 'Inventory',\n 'Location.id = Inventory.location_id AND Inventory.status = :InvStatus',\n {\n InvStatus: INVENTORY_STATUS.STORED\n }\n )\n .leftJoinAndSelect('Inventory.product', 'Product')\n .leftJoinAndSelect('Inventory.bizplace', 'Bizplace', 'Bizplace.id IN (:...bizplaceIds)', {\n bizplaceIds: [...new Set(bizplaceIds)]\n })\n .leftJoinAndSelect('Inventory.creator', 'Creator')\n .leftJoinAndSelect('Inventory.updater', 'Updater')\n .addSelect('SUM(\"Inventory\".\"qty\") OVER(PARTITION BY \"Location\".\"id\")', 'accumulate_qty')\n .where('Location.domain_id = :domainId', { domainId: domain.id })\n\n if (warehouseNames) {\n queryBuilder.andWhere('Warehouse.name IN (:...warehouseNames)', { warehouseNames: [...new Set(warehouseNames)] })\n }\n\n if (locationTypes) {\n queryBuilder.andWhere('Location.type ILIKE ANY (ARRAY[:...locationTypes])', {\n locationTypes: [...new Set(locationTypes)]\n })\n }\n\n let items = await queryBuilder.getRawMany()\n const total = await queryBuilder.getCount()\n\n items = items.map(item => {\n return {\n id: item.Location_id,\n name: item.Location_name,\n bizplace: {\n name: item.Bizplace_name || '',\n description: item.Bizplace_description || ''\n },\n product: {\n name: item.Product_name || '',\n sku: item.Product_sku || '',\n description: item.Product_description || ''\n },\n palletId: item.Inventory_pallet_id || '',\n batchId: item.Inventory_batch_id || '',\n qty: item.Inventory_qty || 0,\n accumulatedQty: item.accumulate_qty || 0,\n uomValue: item.Inventory_uom_value || 0.0,\n uom: item.Inventory_uom || '',\n packingType: item.Inventory_packing_type || '',\n packingSize: item.Inventory_packing_size || 0.0,\n expirationDate: item.Inventory_expiration_date\n ? new Date(item.Inventory_expiration_date).toISOString().split('T')[0].split('-').reverse().join('-')\n : '',\n warehouse: {\n name: item.Warehouse_name,\n description: item.Warehouse_description,\n type: item.Warehouse_type\n },\n zone: item.Location_zone\n }\n })\n\n return { items, total }\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() location: Location) {\n return await getRepository(Domain).findOneBy({ id: location.domain?.id })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() location: Location) {\n return await getRepository(User).findOneBy({ id: location.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() location: Location) {\n return await getRepository(User).findOneBy({ id: location.creatorId })\n }\n\n @FieldResolver(type => Warehouse)\n async warehouse(@Root() location: Location): Promise<Warehouse> {\n return await getRepository(Warehouse).findOneBy({ id: location.warehouse?.id })\n }\n}\n"]}
1
+ {"version":3,"file":"location-query.js","sourceRoot":"","sources":["../../../server/service/location/location-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { User } from '@things-factory/auth-base'\nimport { getPermittedBizplaceIds } from '@things-factory/biz-base'\nimport { buildQuery, Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\n\nimport { INVENTORY_STATUS } from '../../constants/inventory'\nimport { Warehouse } from '../warehouse/warehouse'\nimport { Location } from './location'\nimport { LocationInventories, LocationList, LocationOccupancy } from './location-types'\n\n@Resolver(Location)\nexport class LocationQuery {\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => LocationList)\n async locations(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<LocationList> {\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(Location),\n params,\n domain: context.state.domain,\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n /**\n * @description this resolver was specially made to return huge locations data\n * without dropping off performance due to typegraphql limitations\n * @returns pure location data only. there will be no other table joined to avoid\n * ORM lagging issue (converting to object extremely withdraws the performance)\n * */\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => LocationList)\n async pureLocations(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<LocationList> {\n const queryBuilder = getRepository(Location).createQueryBuilder('location')\n buildQuery(queryBuilder, params, context)\n const items = await queryBuilder.getRawMany()\n const total = await queryBuilder.getCount()\n\n return { items: items.map(item => new Location(item)), total }\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => LocationOccupancy)\n async locationOccupancies(\n @Arg('warehouse') warehouse: string,\n @Arg('types', type => [String], { nullable: true }) types: string[],\n @Ctx() context: ResolverContext\n ): Promise<LocationOccupancy> {\n const { domain } = context.state\n\n const foundWarehouse: Warehouse = await getRepository(Warehouse).findOne({\n where: {\n domain: { id: domain.id },\n name: warehouse\n },\n relations: ['locations']\n })\n\n if (!foundWarehouse) throw new Error(`${warehouse} was not found!`)\n\n const locations: Location[] =\n types && types.length\n ? foundWarehouse?.locations?.filter((location: Location) => types.indexOf(location.type) !== -1)\n : foundWarehouse?.locations\n\n const total: number = locations.length\n const occupied: number = locations.filter((location: Location) => location.status === 'OCCUPIED')?.length || 0\n const empty: number = total - occupied\n const percentage: number = occupied > 0 ? Math.round((occupied / total) * 100) : 0\n\n return { total, occupied, empty, percentage }\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Location)\n async location(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Location> {\n const foundLocation: Location | null = await getRepository(Location).findOne({\n where: { name },\n relations: ['domain', 'warehouse', 'creator', 'updater']\n })\n if (!foundLocation) throw new Error(context.t('error.no_location_found'))\n\n return foundLocation\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Location)\n async locationByName(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Location> {\n const { domain } = context.state\n\n return await getRepository(Location).findOne({\n where: {\n domain: { id: domain.id },\n name\n },\n relations: ['domain', 'warehouse', 'creator', 'updater']\n })\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => LocationList)\n async locationsByGroup(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<LocationList> {\n const { domain } = context.state\n const warehouseIdParam = params.filters.find(param => (param.name = 'warehouse_id'))\n\n if (!warehouseIdParam.value) throw new Error(`invalid warehouse ID`)\n\n const items = await getRepository(Location).query(`\n SELECT CONCAT(\"zone\",'-',\"row\",'-',\"column\") as name, \"zone\", \"row\", \"column\"\n FROM locations WHERE domain_id = '${domain.id}'\n AND warehouse_id = '${warehouseIdParam.value}'\n GROUP BY \"zone\", \"row\", \"column\"\n `)\n\n let [{ total }] = await getRepository(Location).query(`\n SELECT COUNT(DISTINCT(\"zone\", \"row\", \"column\")) as total\n FROM locations WHERE domain_id = '${domain.id}'\n AND warehouse_id = '${warehouseIdParam.value}'\n `)\n\n total = parseInt(total)\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"warehouse\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => LocationInventories)\n async locationWithInventories(\n @Args() params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<LocationInventories> {\n const { domain, user } = context.state\n const bizplaceIds = await getPermittedBizplaceIds(domain, user)\n const queryBuilder = getRepository(Location).createQueryBuilder()\n\n const warehouseNames = params.filters.find(\n x => x.name === 'warehouseNames' && x.operator.toLowerCase() === 'in'\n )?.value\n\n const locationTypes = params.filters.find(\n x => x.name === 'locationTypes' && x.operator.toLowerCase() === 'in'\n )?.value\n\n params.filters = []\n buildQuery(queryBuilder, params, context)\n\n queryBuilder\n .leftJoinAndSelect('Location.warehouse', 'Warehouse')\n .leftJoinAndSelect(\n 'inventories',\n 'Inventory',\n 'Location.id = Inventory.location_id AND Inventory.status = :InvStatus',\n {\n InvStatus: INVENTORY_STATUS.STORED\n }\n )\n .leftJoinAndSelect('Inventory.product', 'Product')\n .leftJoinAndSelect('Inventory.bizplace', 'Bizplace', 'Bizplace.id IN (:...bizplaceIds)', {\n bizplaceIds: [...new Set(bizplaceIds)]\n })\n .leftJoinAndSelect('Inventory.creator', 'Creator')\n .leftJoinAndSelect('Inventory.updater', 'Updater')\n .addSelect('SUM(\"Inventory\".\"qty\") OVER(PARTITION BY \"Location\".\"id\")', 'accumulate_qty')\n .where('Location.domain_id = :domainId', { domainId: domain.id })\n\n if (warehouseNames) {\n queryBuilder.andWhere('Warehouse.name IN (:...warehouseNames)', { warehouseNames: [...new Set(warehouseNames)] })\n }\n\n if (locationTypes) {\n queryBuilder.andWhere('Location.type ILIKE ANY (ARRAY[:...locationTypes])', {\n locationTypes: [...new Set(locationTypes)]\n })\n }\n\n let items = await queryBuilder.getRawMany()\n const total = await queryBuilder.getCount()\n\n items = items.map(item => {\n return {\n id: item.Location_id,\n name: item.Location_name,\n bizplace: {\n name: item.Bizplace_name || '',\n description: item.Bizplace_description || ''\n },\n product: {\n name: item.Product_name || '',\n sku: item.Product_sku || '',\n description: item.Product_description || ''\n },\n palletId: item.Inventory_pallet_id || '',\n batchId: item.Inventory_batch_id || '',\n qty: item.Inventory_qty || 0,\n accumulatedQty: item.accumulate_qty || 0,\n uomValue: item.Inventory_uom_value || 0.0,\n uom: item.Inventory_uom || '',\n packingType: item.Inventory_packing_type || '',\n packingSize: item.Inventory_packing_size || 0.0,\n expirationDate: item.Inventory_expiration_date\n ? new Date(item.Inventory_expiration_date).toISOString().split('T')[0].split('-').reverse().join('-')\n : '',\n warehouse: {\n name: item.Warehouse_name,\n description: item.Warehouse_description,\n type: item.Warehouse_type\n },\n zone: item.Location_zone\n }\n })\n\n return { items, total }\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() location: Location) {\n return await getRepository(Domain).findOneBy({ id: location.domain?.id })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() location: Location) {\n return await getRepository(User).findOneBy({ id: location.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() location: Location) {\n return await getRepository(User).findOneBy({ id: location.creatorId })\n }\n\n @FieldResolver(type => Warehouse)\n async warehouse(@Root() location: Location): Promise<Warehouse> {\n return await getRepository(Warehouse).findOneBy({ id: location.warehouse?.id })\n }\n}\n"]}
@@ -193,7 +193,7 @@ let MovementQuery = class MovementQuery {
193
193
  }
194
194
  };
195
195
  tslib_1.__decorate([
196
- (0, type_graphql_1.Directive)('@privilege(category: "movement", privilege: "query")'),
196
+ (0, type_graphql_1.Directive)('@privilege(category: "movement", privilege: "query", domainOwnerGranted: true)'),
197
197
  (0, type_graphql_1.Query)(returns => movement_types_1.MovementList),
198
198
  tslib_1.__param(0, (0, type_graphql_1.Args)()),
199
199
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
@@ -202,7 +202,7 @@ tslib_1.__decorate([
202
202
  tslib_1.__metadata("design:returntype", Promise)
203
203
  ], MovementQuery.prototype, "movements", null);
204
204
  tslib_1.__decorate([
205
- (0, type_graphql_1.Directive)('@privilege(category: "movement", privilege: "query")'),
205
+ (0, type_graphql_1.Directive)('@privilege(category: "movement", privilege: "query", domainOwnerGranted: true)'),
206
206
  (0, type_graphql_1.Query)(returns => movement_1.Movement),
207
207
  tslib_1.__param(0, (0, type_graphql_1.Arg)('name')),
208
208
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
@@ -1 +1 @@
1
- {"version":3,"file":"movement-query.js","sourceRoot":"","sources":["../../../server/service/movement/movement-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { getPermittedBizplaceIds } from '@things-factory/biz-base'\nimport { convertListParams, Domain, getRepository, ListParam } from '@things-factory/shell'\n\nimport { InventoryHistory } from '../inventory-history/inventory-history'\nimport { Movement } from './movement'\nimport { MovementCount, MovementList } from './movement-types'\n\n@Resolver(Movement)\nexport class MovementQuery {\n @Directive('@privilege(category: \"movement\", privilege: \"query\")')\n @Query(returns => MovementList)\n async movements(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<MovementList> {\n const convertedParams = convertListParams(params)\n convertedParams.where.bizplace = In(await getPermittedBizplaceIds(context.state.domain, context.state.user))\n\n const [items, total] = await getRepository(Movement).findAndCount({\n ...convertedParams,\n relations: ['domain', 'bizplace', 'inventory', 'creator', 'updater']\n })\n return { items, total }\n }\n\n @Directive('@privilege(category: \"movement\", privilege: \"query\")')\n @Query(returns => Movement)\n async movement(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Movement> {\n const { domain, user } = context.state\n\n return await getRepository(Movement).findOne({\n where: {\n domain: { id: domain.id },\n /* name,*/\n bizplace: { id: In(await getPermittedBizplaceIds(domain, user)) }\n },\n relations: ['domain', 'bizplace', 'inventory', 'creator', 'updater']\n })\n }\n\n @Query(returns => [MovementCount])\n async inboundMovementsCounter(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<MovementCount[]> {\n const { domain, user } = context.state\n\n let bizplaces = (await getPermittedBizplaceIds(domain, user))\n .map(bizplace => {\n return \"'\" + bizplace.trim() + \"'\"\n })\n .join(',')\n\n let startDate = new Date()\n let endDate = new Date()\n startDate.setDate(startDate.getDate() - 30)\n startDate.setHours(0)\n startDate.setMinutes(0)\n startDate.setSeconds(0)\n const timeNow = `${endDate.getHours()}:${endDate.getMinutes()}:${endDate.getSeconds()}`\n\n const counter = await getRepository(InventoryHistory).query(`\n select inbound_date, count(*) from(\n select date(ih.created_at) inbound_date from inventory_histories ih\n where ih.bizplace_id in (${bizplaces})\n and ih.transaction_type in ('NEW', 'PUTAWAY')\n and created_at between '${startDate.toLocaleDateString()} 00:00:00' and '${endDate.toLocaleDateString()} ${timeNow}'\n and domain_id = '${domain.id}'\n ) as foo\n group by inbound_date\n order by inbound_date asc\n `)\n\n let items = []\n for (let i = 0; i < 30; i++) {\n const month = startDate.toLocaleString('default', { month: 'short' })\n const day = startDate.getDate()\n\n items.push({\n date: `${month} ${day.toString().padStart(2, '0')}`,\n count: '0'\n })\n startDate.setDate(startDate.getDate() + 1)\n }\n\n let compareDate = new Date()\n compareDate.setDate(compareDate.getDate() - 30)\n compareDate.setHours(0)\n compareDate.setMinutes(0)\n compareDate.setSeconds(0)\n\n items = items.map((item: { date: string; count: number }) => {\n item.count =\n counter.find(ctr => ctr.inbound_date.toLocaleDateString() === compareDate.toLocaleDateString())?.count || 0\n\n compareDate.setDate(compareDate.getDate() + 1)\n\n return item\n })\n\n return items\n }\n\n @Query(returns => [MovementCount])\n async outboundMovementsCounter(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<MovementCount[]> {\n const { domain, user } = context.state\n\n let bizplaces = (await getPermittedBizplaceIds(domain, user))\n .map(bizplace => {\n return \"'\" + bizplace.trim() + \"'\"\n })\n .join(',')\n\n let startDate = new Date()\n let endDate = new Date()\n startDate.setDate(startDate.getDate() - 30)\n startDate.setHours(0)\n startDate.setMinutes(0)\n startDate.setSeconds(0)\n const timeNow = `${endDate.getHours()}:${endDate.getMinutes()}:${endDate.getSeconds()}`\n\n const counter = await getRepository(InventoryHistory).query(`\n select outbound_date, count(*) from(\n select date(ih.created_at) outbound_date, row_number() over(partition by ih.pallet_id order by ih.created_at desc) as rn, ih.*, iv.bizplace_id\n from inventory_histories ih\n inner join inventories iv on iv.pallet_id = ih.pallet_id and iv.domain_id = ih.domain_id\n where ih.domain_id='${domain.id}'\n and iv.bizplace_id in (${bizplaces}) and ih.status = 'TERMINATED'\n ) as src \n where rn = 1\n and created_at between '${startDate.toLocaleDateString()} 00:00:00' and '${endDate.toLocaleDateString()} ${timeNow}'\n group by src.outbound_date\n order by src.outbound_date\n `)\n\n let items = []\n for (let i = 0; i < 30; i++) {\n const month = startDate.toLocaleString('default', { month: 'short' })\n const day = startDate.getDate()\n\n items.push({\n date: `${month} ${day.toString().padStart(2, '0')}`,\n count: '0'\n })\n startDate.setDate(startDate.getDate() + 1)\n }\n\n let compareDate = new Date()\n compareDate.setDate(compareDate.getDate() - 30)\n compareDate.setHours(0)\n compareDate.setMinutes(0)\n compareDate.setSeconds(0)\n\n items = items.map((item: { date: string; count: number }) => {\n item.count =\n counter.find(ctr => ctr.outbound_date.toLocaleDateString() === compareDate.toLocaleDateString())?.count || 0\n\n compareDate.setDate(compareDate.getDate() + 1)\n\n return item\n })\n\n return items\n }\n\n @Query(returns => [MovementCount])\n async weeklyMovementsCounter(\n @Arg('month') month: number,\n @Arg('year') year: number,\n @Ctx() context: ResolverContext\n ): Promise<MovementCount[]> {\n const { domain, user } = context.state\n\n let bizplaces = (await getPermittedBizplaceIds(domain, user))\n .map(bizplace => {\n return \"'\" + bizplace.trim() + \"'\"\n })\n .join(',')\n\n if (!month && !year) {\n // if user didn't specify the month and year, set default as last month\n var firstOfMonth = new Date()\n var lastOfMonth = new Date()\n\n firstOfMonth.setMonth(firstOfMonth.getMonth() - 1)\n firstOfMonth.setDate(1)\n lastOfMonth.setDate(0)\n } else {\n var firstOfMonth = new Date(year, month - 1, 1)\n var lastOfMonth = new Date(year, month, 0)\n }\n\n // get data from database\n const data = await getRepository(InventoryHistory).query(`\n\t\t\tselect movement_date, sum(outbound_count) as outbound_count, sum(inbound_count) as inbound_count from (\n\t\t\t\tselect movement_date, count(*) as outbound_count, 0 as inbound_count from(\n\t\t\t\t\tselect date(ih.created_at) movement_date, row_number() over(partition by ih.pallet_id order by ih.created_at desc) as rn, ih.*, iv.bizplace_id\n\t\t\t\t\tfrom inventory_histories ih\n\t\t\t\t\tinner join inventories iv on iv.pallet_id = ih.pallet_id and iv.domain_id = ih.domain_id\n\t\t\t\t\twhere ih.domain_id = '${domain.id}'\n\t\t\t\t\tand iv.bizplace_id in (${bizplaces}) and ih.status = 'TERMINATED'\n\t\t\t\t) as src \n\t\t\t\twhere rn = 1\n\t\t\t\tand created_at between '${firstOfMonth.toLocaleDateString()} 00:00:00' and '${lastOfMonth.toLocaleDateString()} 23:59:59'\n\t\t\t\tgroup by movement_date\n\t\t\t\tunion all\n\t\t\t\tselect movement_date, 0 as outbound_count, count(*) as inbound_count from(\n\t\t\t\t\t\tselect date(ih.created_at) movement_date from inventory_histories ih\n\t\t\t\t\t\twhere ih.bizplace_id in (${bizplaces})\n\t\t\t\t\t\tand ih.transaction_type in ('NEW', 'PUTAWAY')\n\t\t\t\t\t\tand created_at between '${firstOfMonth.toLocaleDateString()} 00:00:00' and '${lastOfMonth.toLocaleDateString()} 23:59:59'\n\t\t\t\t\tand domain_id = '${domain.id}'\n\t\t\t\t) as foo\n\t\t\t\tgroup by movement_date\n\t\t\t\torder by movement_date\n\t\t\t) src\n\t\t\tgroup by movement_date\n\t\t`)\n\n let movements = [\n { week: 'Week 01', ...getMovementByWeek(data, [0, 7]) },\n { week: 'Week 02', ...getMovementByWeek(data, [8, 14]) },\n { week: 'Week 03', ...getMovementByWeek(data, [15, 21]) },\n { week: 'Week 04', ...getMovementByWeek(data, [21, 31]) }\n ]\n\n // return total 4 weeks of in/outbound movements for a specific month\n return movements\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() movement: Movement) {\n return await getRepository(Domain).findOneBy({ id: movement.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() movement: Movement) {\n return await getRepository(User).findOneBy({ id: movement.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() movement: Movement) {\n return await getRepository(User).findOneBy({ id: movement.creatorId })\n }\n}\n\nfunction getMovementByWeek(data, range): { inbound: number; outbound: number } {\n return data\n .filter(item => item.movement_date.getDate() > range[0] && item.movement_date.getDate() <= range[1])\n .reduce(\n (inout: { inbound: number; outbound: number }, curr) => {\n inout.inbound += Number(curr.inbound_count)\n inout.outbound += Number(curr.outbound_count)\n\n return inout\n },\n { inbound: 0, outbound: 0 }\n )\n}\n"]}
1
+ {"version":3,"file":"movement-query.js","sourceRoot":"","sources":["../../../server/service/movement/movement-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { getPermittedBizplaceIds } from '@things-factory/biz-base'\nimport { convertListParams, Domain, getRepository, ListParam } from '@things-factory/shell'\n\nimport { InventoryHistory } from '../inventory-history/inventory-history'\nimport { Movement } from './movement'\nimport { MovementCount, MovementList } from './movement-types'\n\n@Resolver(Movement)\nexport class MovementQuery {\n @Directive('@privilege(category: \"movement\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => MovementList)\n async movements(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<MovementList> {\n const convertedParams = convertListParams(params)\n convertedParams.where.bizplace = In(await getPermittedBizplaceIds(context.state.domain, context.state.user))\n\n const [items, total] = await getRepository(Movement).findAndCount({\n ...convertedParams,\n relations: ['domain', 'bizplace', 'inventory', 'creator', 'updater']\n })\n return { items, total }\n }\n\n @Directive('@privilege(category: \"movement\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Movement)\n async movement(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Movement> {\n const { domain, user } = context.state\n\n return await getRepository(Movement).findOne({\n where: {\n domain: { id: domain.id },\n /* name,*/\n bizplace: { id: In(await getPermittedBizplaceIds(domain, user)) }\n },\n relations: ['domain', 'bizplace', 'inventory', 'creator', 'updater']\n })\n }\n\n @Query(returns => [MovementCount])\n async inboundMovementsCounter(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<MovementCount[]> {\n const { domain, user } = context.state\n\n let bizplaces = (await getPermittedBizplaceIds(domain, user))\n .map(bizplace => {\n return \"'\" + bizplace.trim() + \"'\"\n })\n .join(',')\n\n let startDate = new Date()\n let endDate = new Date()\n startDate.setDate(startDate.getDate() - 30)\n startDate.setHours(0)\n startDate.setMinutes(0)\n startDate.setSeconds(0)\n const timeNow = `${endDate.getHours()}:${endDate.getMinutes()}:${endDate.getSeconds()}`\n\n const counter = await getRepository(InventoryHistory).query(`\n select inbound_date, count(*) from(\n select date(ih.created_at) inbound_date from inventory_histories ih\n where ih.bizplace_id in (${bizplaces})\n and ih.transaction_type in ('NEW', 'PUTAWAY')\n and created_at between '${startDate.toLocaleDateString()} 00:00:00' and '${endDate.toLocaleDateString()} ${timeNow}'\n and domain_id = '${domain.id}'\n ) as foo\n group by inbound_date\n order by inbound_date asc\n `)\n\n let items = []\n for (let i = 0; i < 30; i++) {\n const month = startDate.toLocaleString('default', { month: 'short' })\n const day = startDate.getDate()\n\n items.push({\n date: `${month} ${day.toString().padStart(2, '0')}`,\n count: '0'\n })\n startDate.setDate(startDate.getDate() + 1)\n }\n\n let compareDate = new Date()\n compareDate.setDate(compareDate.getDate() - 30)\n compareDate.setHours(0)\n compareDate.setMinutes(0)\n compareDate.setSeconds(0)\n\n items = items.map((item: { date: string; count: number }) => {\n item.count =\n counter.find(ctr => ctr.inbound_date.toLocaleDateString() === compareDate.toLocaleDateString())?.count || 0\n\n compareDate.setDate(compareDate.getDate() + 1)\n\n return item\n })\n\n return items\n }\n\n @Query(returns => [MovementCount])\n async outboundMovementsCounter(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<MovementCount[]> {\n const { domain, user } = context.state\n\n let bizplaces = (await getPermittedBizplaceIds(domain, user))\n .map(bizplace => {\n return \"'\" + bizplace.trim() + \"'\"\n })\n .join(',')\n\n let startDate = new Date()\n let endDate = new Date()\n startDate.setDate(startDate.getDate() - 30)\n startDate.setHours(0)\n startDate.setMinutes(0)\n startDate.setSeconds(0)\n const timeNow = `${endDate.getHours()}:${endDate.getMinutes()}:${endDate.getSeconds()}`\n\n const counter = await getRepository(InventoryHistory).query(`\n select outbound_date, count(*) from(\n select date(ih.created_at) outbound_date, row_number() over(partition by ih.pallet_id order by ih.created_at desc) as rn, ih.*, iv.bizplace_id\n from inventory_histories ih\n inner join inventories iv on iv.pallet_id = ih.pallet_id and iv.domain_id = ih.domain_id\n where ih.domain_id='${domain.id}'\n and iv.bizplace_id in (${bizplaces}) and ih.status = 'TERMINATED'\n ) as src \n where rn = 1\n and created_at between '${startDate.toLocaleDateString()} 00:00:00' and '${endDate.toLocaleDateString()} ${timeNow}'\n group by src.outbound_date\n order by src.outbound_date\n `)\n\n let items = []\n for (let i = 0; i < 30; i++) {\n const month = startDate.toLocaleString('default', { month: 'short' })\n const day = startDate.getDate()\n\n items.push({\n date: `${month} ${day.toString().padStart(2, '0')}`,\n count: '0'\n })\n startDate.setDate(startDate.getDate() + 1)\n }\n\n let compareDate = new Date()\n compareDate.setDate(compareDate.getDate() - 30)\n compareDate.setHours(0)\n compareDate.setMinutes(0)\n compareDate.setSeconds(0)\n\n items = items.map((item: { date: string; count: number }) => {\n item.count =\n counter.find(ctr => ctr.outbound_date.toLocaleDateString() === compareDate.toLocaleDateString())?.count || 0\n\n compareDate.setDate(compareDate.getDate() + 1)\n\n return item\n })\n\n return items\n }\n\n @Query(returns => [MovementCount])\n async weeklyMovementsCounter(\n @Arg('month') month: number,\n @Arg('year') year: number,\n @Ctx() context: ResolverContext\n ): Promise<MovementCount[]> {\n const { domain, user } = context.state\n\n let bizplaces = (await getPermittedBizplaceIds(domain, user))\n .map(bizplace => {\n return \"'\" + bizplace.trim() + \"'\"\n })\n .join(',')\n\n if (!month && !year) {\n // if user didn't specify the month and year, set default as last month\n var firstOfMonth = new Date()\n var lastOfMonth = new Date()\n\n firstOfMonth.setMonth(firstOfMonth.getMonth() - 1)\n firstOfMonth.setDate(1)\n lastOfMonth.setDate(0)\n } else {\n var firstOfMonth = new Date(year, month - 1, 1)\n var lastOfMonth = new Date(year, month, 0)\n }\n\n // get data from database\n const data = await getRepository(InventoryHistory).query(`\n\t\t\tselect movement_date, sum(outbound_count) as outbound_count, sum(inbound_count) as inbound_count from (\n\t\t\t\tselect movement_date, count(*) as outbound_count, 0 as inbound_count from(\n\t\t\t\t\tselect date(ih.created_at) movement_date, row_number() over(partition by ih.pallet_id order by ih.created_at desc) as rn, ih.*, iv.bizplace_id\n\t\t\t\t\tfrom inventory_histories ih\n\t\t\t\t\tinner join inventories iv on iv.pallet_id = ih.pallet_id and iv.domain_id = ih.domain_id\n\t\t\t\t\twhere ih.domain_id = '${domain.id}'\n\t\t\t\t\tand iv.bizplace_id in (${bizplaces}) and ih.status = 'TERMINATED'\n\t\t\t\t) as src \n\t\t\t\twhere rn = 1\n\t\t\t\tand created_at between '${firstOfMonth.toLocaleDateString()} 00:00:00' and '${lastOfMonth.toLocaleDateString()} 23:59:59'\n\t\t\t\tgroup by movement_date\n\t\t\t\tunion all\n\t\t\t\tselect movement_date, 0 as outbound_count, count(*) as inbound_count from(\n\t\t\t\t\t\tselect date(ih.created_at) movement_date from inventory_histories ih\n\t\t\t\t\t\twhere ih.bizplace_id in (${bizplaces})\n\t\t\t\t\t\tand ih.transaction_type in ('NEW', 'PUTAWAY')\n\t\t\t\t\t\tand created_at between '${firstOfMonth.toLocaleDateString()} 00:00:00' and '${lastOfMonth.toLocaleDateString()} 23:59:59'\n\t\t\t\t\tand domain_id = '${domain.id}'\n\t\t\t\t) as foo\n\t\t\t\tgroup by movement_date\n\t\t\t\torder by movement_date\n\t\t\t) src\n\t\t\tgroup by movement_date\n\t\t`)\n\n let movements = [\n { week: 'Week 01', ...getMovementByWeek(data, [0, 7]) },\n { week: 'Week 02', ...getMovementByWeek(data, [8, 14]) },\n { week: 'Week 03', ...getMovementByWeek(data, [15, 21]) },\n { week: 'Week 04', ...getMovementByWeek(data, [21, 31]) }\n ]\n\n // return total 4 weeks of in/outbound movements for a specific month\n return movements\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() movement: Movement) {\n return await getRepository(Domain).findOneBy({ id: movement.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() movement: Movement) {\n return await getRepository(User).findOneBy({ id: movement.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() movement: Movement) {\n return await getRepository(User).findOneBy({ id: movement.creatorId })\n }\n}\n\nfunction getMovementByWeek(data, range): { inbound: number; outbound: number } {\n return data\n .filter(item => item.movement_date.getDate() > range[0] && item.movement_date.getDate() <= range[1])\n .reduce(\n (inout: { inbound: number; outbound: number }, curr) => {\n inout.inbound += Number(curr.inbound_count)\n inout.outbound += Number(curr.outbound_count)\n\n return inout\n },\n { inbound: 0, outbound: 0 }\n )\n}\n"]}