@things-factory/operato-pms 3.7.5 → 3.8.13
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.
- package/client/bootstrap.js +20 -7
- package/client/component/block-selector-popup.js +125 -24
- package/client/component/driver-selector-popup.js +223 -0
- package/client/component/mill-selector-popup.js +200 -0
- package/client/component/tracked-plantation-setting.js +113 -0
- package/client/component/truck-selector-popup.js +202 -0
- package/client/menu.js +34 -2
- package/client/pages/constants/index.js +1 -0
- package/client/pages/constants/organization.js +5 -0
- package/client/pages/dispatchment/daily-dispatch-detail.js +57 -18
- package/client/pages/dispatchment/dispatchment-create-record.js +140 -13
- package/client/pages/dispatchment/dispatchment-list.js +26 -34
- package/client/pages/harvesting/daily-harvesting-detail.js +55 -18
- package/client/pages/harvesting/edit-harvesting-record.js +89 -23
- package/client/pages/harvesting/harvesting-create-record.js +102 -16
- package/client/pages/harvesting/harvesting-list.js +58 -12
- package/client/pages/inventory/inventory-field-bunches.js +6 -4
- package/client/pages/loading/daily-loading-detail.js +47 -93
- package/client/pages/loading/edit-loading-record.js +75 -294
- package/client/pages/loading/loading-create-record.js +52 -329
- package/client/pages/loading/loading-list.js +20 -83
- package/client/pages/master/block.js +1 -0
- package/client/pages/master/company.js +26 -13
- package/client/pages/master/home.js +67 -65
- package/client/pages/master/ramp.js +1 -0
- package/client/pages/master/staff.js +54 -3
- package/client/pages/master/truck.js +416 -0
- package/client/pages/report/home.js +72 -65
- package/client/pages/report/report-daily-ffb-dispatch-and-production.js +393 -0
- package/client/pages/report/report-daily-production.js +38 -6
- package/client/pages/report/report-daily-staff-harvest.js +50 -5
- package/client/pages/report/report-ffb-tonnage-between-individual-block.js +393 -0
- package/client/pages/report/report-monthly-ffb-sale.js +413 -0
- package/client/pages/report/report-monthly-production.js +33 -4
- package/client/pages/report/report-yearly-production.js +24 -8
- package/client/pages/setting/home.js +107 -0
- package/client/pages/setting/plantation-setting.js +109 -0
- package/client/route.js +25 -0
- package/dist-server/constants/index.js +1 -0
- package/dist-server/constants/index.js.map +1 -1
- package/dist-server/constants/organization.js +9 -0
- package/dist-server/constants/organization.js.map +1 -0
- package/dist-server/controllers/render-dispatchment.js +1 -1
- package/dist-server/controllers/render-dispatchment.js.map +1 -1
- package/dist-server/entities/daily-dispatch.js +19 -4
- package/dist-server/entities/daily-dispatch.js.map +1 -1
- package/dist-server/entities/daily-harvest-detail.js +9 -11
- package/dist-server/entities/daily-harvest-detail.js.map +1 -1
- package/dist-server/entities/daily-harvest.js +16 -6
- package/dist-server/entities/daily-harvest.js.map +1 -1
- package/dist-server/entities/daily-loading-detail.js +14 -6
- package/dist-server/entities/daily-loading-detail.js.map +1 -1
- package/dist-server/entities/daily-loading.js +3 -11
- package/dist-server/entities/daily-loading.js.map +1 -1
- package/dist-server/entities/index.js +7 -1
- package/dist-server/entities/index.js.map +1 -1
- package/dist-server/entities/organization-staff.js +5 -1
- package/dist-server/entities/organization-staff.js.map +1 -1
- package/dist-server/entities/plantation-inventory.js +4 -10
- package/dist-server/entities/plantation-inventory.js.map +1 -1
- package/dist-server/entities/plantation-setting.js +76 -0
- package/dist-server/entities/plantation-setting.js.map +1 -0
- package/dist-server/entities/truck.js +77 -0
- package/dist-server/entities/truck.js.map +1 -0
- package/dist-server/graphql/resolvers/daily-dispatch/daily-dispatch-query.js +13 -2
- package/dist-server/graphql/resolvers/daily-dispatch/daily-dispatch-query.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.js +25 -11
- package/dist-server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js +3 -2
- package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-harvest/daily-harvest-query.js +3 -1
- package/dist-server/graphql/resolvers/daily-harvest/daily-harvest-query.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js +21 -2
- package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-harvest/update-daily-harvest.js +8 -2
- package/dist-server/graphql/resolvers/daily-harvest/update-daily-harvest.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-loading/daily-loading-query.js +4 -6
- package/dist-server/graphql/resolvers/daily-loading/daily-loading-query.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-loading/generate-daily-loading.js +20 -54
- package/dist-server/graphql/resolvers/daily-loading/generate-daily-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js +17 -105
- package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/dashboard-query.js +82 -0
- package/dist-server/graphql/resolvers/dashboard/dashboard-query.js.map +1 -0
- package/dist-server/graphql/resolvers/dashboard/index.js +8 -0
- package/dist-server/graphql/resolvers/dashboard/index.js.map +1 -0
- package/dist-server/graphql/resolvers/index.js +9 -6
- package/dist-server/graphql/resolvers/index.js.map +1 -1
- package/dist-server/graphql/resolvers/organization-staff/organization-staff-query.js +7 -3
- package/dist-server/graphql/resolvers/organization-staff/organization-staff-query.js.map +1 -1
- package/dist-server/graphql/resolvers/plantation-setting/create-plantation-setting.js +12 -0
- package/dist-server/graphql/resolvers/plantation-setting/create-plantation-setting.js.map +1 -0
- package/dist-server/graphql/resolvers/plantation-setting/delete-plantation-setting.js +13 -0
- package/dist-server/graphql/resolvers/plantation-setting/delete-plantation-setting.js.map +1 -0
- package/dist-server/graphql/resolvers/plantation-setting/delete-plantation-settings.js +16 -0
- package/dist-server/graphql/resolvers/plantation-setting/delete-plantation-settings.js.map +1 -0
- package/dist-server/graphql/resolvers/plantation-setting/index.js +15 -0
- package/dist-server/graphql/resolvers/plantation-setting/index.js.map +1 -0
- package/dist-server/graphql/resolvers/plantation-setting/plantation-setting-query.js +33 -0
- package/dist-server/graphql/resolvers/plantation-setting/plantation-setting-query.js.map +1 -0
- package/dist-server/graphql/resolvers/plantation-setting/update-multiple-plantation-setting.js +31 -0
- package/dist-server/graphql/resolvers/plantation-setting/update-multiple-plantation-setting.js.map +1 -0
- package/dist-server/graphql/resolvers/plantation-setting/update-plantation-setting.js +16 -0
- package/dist-server/graphql/resolvers/plantation-setting/update-plantation-setting.js.map +1 -0
- package/dist-server/graphql/resolvers/report/daily-production-reports.js +46 -33
- package/dist-server/graphql/resolvers/report/daily-production-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/daily-staff-harvest-reports.js +21 -10
- package/dist-server/graphql/resolvers/report/daily-staff-harvest-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/index.js +4 -1
- package/dist-server/graphql/resolvers/report/index.js.map +1 -1
- package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js +89 -0
- package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js.map +1 -0
- package/dist-server/graphql/resolvers/report/monthly-dispatch-summary-reports.js +89 -0
- package/dist-server/graphql/resolvers/report/monthly-dispatch-summary-reports.js.map +1 -0
- package/dist-server/graphql/resolvers/report/monthly-ffb-sale-reports.js +87 -0
- package/dist-server/graphql/resolvers/report/monthly-ffb-sale-reports.js.map +1 -0
- package/dist-server/graphql/resolvers/report/monthly-production-reports.js +46 -31
- package/dist-server/graphql/resolvers/report/monthly-production-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/report/yearly-production-reports.js +38 -28
- package/dist-server/graphql/resolvers/report/yearly-production-reports.js.map +1 -1
- package/dist-server/graphql/resolvers/truck/delete-trucks.js +18 -0
- package/dist-server/graphql/resolvers/truck/delete-trucks.js.map +1 -0
- package/dist-server/graphql/resolvers/truck/index.js +12 -0
- package/dist-server/graphql/resolvers/truck/index.js.map +1 -0
- package/dist-server/graphql/resolvers/truck/truck-query.js +46 -0
- package/dist-server/graphql/resolvers/truck/truck-query.js.map +1 -0
- package/dist-server/graphql/resolvers/truck/update-multiple-truck.js +40 -0
- package/dist-server/graphql/resolvers/truck/update-multiple-truck.js.map +1 -0
- package/dist-server/graphql/types/daily-dispatch/daily-dispatch-patch.js +4 -1
- package/dist-server/graphql/types/daily-dispatch/daily-dispatch-patch.js.map +1 -1
- package/dist-server/graphql/types/daily-dispatch/daily-dispatch.js +4 -1
- package/dist-server/graphql/types/daily-dispatch/daily-dispatch.js.map +1 -1
- package/dist-server/graphql/types/daily-dispatch/index.js +6 -1
- package/dist-server/graphql/types/daily-dispatch/index.js.map +1 -1
- package/dist-server/graphql/types/daily-dispatch/new-daily-dispatch.js +4 -1
- package/dist-server/graphql/types/daily-dispatch/new-daily-dispatch.js.map +1 -1
- package/dist-server/graphql/types/daily-harvest/daily-harvest-patch.js +5 -2
- package/dist-server/graphql/types/daily-harvest/daily-harvest-patch.js.map +1 -1
- package/dist-server/graphql/types/daily-harvest/daily-harvest.js +3 -0
- package/dist-server/graphql/types/daily-harvest/daily-harvest.js.map +1 -1
- package/dist-server/graphql/types/daily-harvest/new-daily-harvest.js +4 -1
- package/dist-server/graphql/types/daily-harvest/new-daily-harvest.js.map +1 -1
- package/dist-server/graphql/types/daily-harvest-detail/daily-harvest-detail-patch.js +1 -0
- package/dist-server/graphql/types/daily-harvest-detail/daily-harvest-detail-patch.js.map +1 -1
- package/dist-server/graphql/types/daily-harvest-detail/daily-harvest-detail.js +1 -0
- package/dist-server/graphql/types/daily-harvest-detail/daily-harvest-detail.js.map +1 -1
- package/dist-server/graphql/types/daily-harvest-detail/new-daily-harvest-detail.js +1 -0
- package/dist-server/graphql/types/daily-harvest-detail/new-daily-harvest-detail.js.map +1 -1
- package/dist-server/graphql/types/daily-loading/daily-loading-patch.js +0 -2
- package/dist-server/graphql/types/daily-loading/daily-loading-patch.js.map +1 -1
- package/dist-server/graphql/types/daily-loading/daily-loading.js +0 -2
- package/dist-server/graphql/types/daily-loading/daily-loading.js.map +1 -1
- package/dist-server/graphql/types/daily-loading/new-daily-loading.js +0 -2
- package/dist-server/graphql/types/daily-loading/new-daily-loading.js.map +1 -1
- package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail-patch.js +6 -3
- package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail-patch.js.map +1 -1
- package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail.js +3 -0
- package/dist-server/graphql/types/daily-loading-detail/daily-loading-detail.js.map +1 -1
- package/dist-server/graphql/types/daily-loading-detail/new-daily-loading-detail.js +6 -3
- package/dist-server/graphql/types/daily-loading-detail/new-daily-loading-detail.js.map +1 -1
- package/dist-server/graphql/types/dashboard/bunches-count.js +15 -0
- package/dist-server/graphql/types/dashboard/bunches-count.js.map +1 -0
- package/dist-server/graphql/types/dashboard/index.js +32 -0
- package/dist-server/graphql/types/dashboard/index.js.map +1 -0
- package/dist-server/graphql/types/dashboard/productions-overview.js +15 -0
- package/dist-server/graphql/types/dashboard/productions-overview.js.map +1 -0
- package/dist-server/graphql/types/dashboard/tonnage-bunches-inventories.js +14 -0
- package/dist-server/graphql/types/dashboard/tonnage-bunches-inventories.js.map +1 -0
- package/dist-server/graphql/types/dashboard/tonnage-production.js +17 -0
- package/dist-server/graphql/types/dashboard/tonnage-production.js.map +1 -0
- package/dist-server/graphql/types/dashboard/yield-production.js +17 -0
- package/dist-server/graphql/types/dashboard/yield-production.js.map +1 -0
- package/dist-server/graphql/types/index.js +9 -6
- package/dist-server/graphql/types/index.js.map +1 -1
- package/dist-server/graphql/types/organization-staff/organization-staff-patch.js +2 -0
- package/dist-server/graphql/types/organization-staff/organization-staff-patch.js.map +1 -1
- package/dist-server/graphql/types/organization-staff/organization-staff.js +3 -0
- package/dist-server/graphql/types/organization-staff/organization-staff.js.map +1 -1
- package/dist-server/graphql/types/plantation-setting/index.js +36 -0
- package/dist-server/graphql/types/plantation-setting/index.js.map +1 -0
- package/dist-server/graphql/types/plantation-setting/new-plantation-setting.js +16 -0
- package/dist-server/graphql/types/plantation-setting/new-plantation-setting.js.map +1 -0
- package/dist-server/graphql/types/plantation-setting/plantation-setting-list.js +14 -0
- package/dist-server/graphql/types/plantation-setting/plantation-setting-list.js.map +1 -0
- package/dist-server/graphql/types/plantation-setting/plantation-setting-patch.js +18 -0
- package/dist-server/graphql/types/plantation-setting/plantation-setting-patch.js.map +1 -0
- package/dist-server/graphql/types/plantation-setting/plantation-setting.js +22 -0
- package/dist-server/graphql/types/plantation-setting/plantation-setting.js.map +1 -0
- package/dist-server/graphql/types/report/index.js +20 -0
- package/dist-server/graphql/types/report/index.js.map +1 -1
- package/dist-server/graphql/types/report/monthly-block-dispatch-report-list.js +14 -0
- package/dist-server/graphql/types/report/monthly-block-dispatch-report-list.js.map +1 -0
- package/dist-server/graphql/types/report/monthly-block-dispatch-report.js +19 -0
- package/dist-server/graphql/types/report/monthly-block-dispatch-report.js.map +1 -0
- package/dist-server/graphql/types/report/monthly-dispatch-summary-report-list.js +14 -0
- package/dist-server/graphql/types/report/monthly-dispatch-summary-report-list.js.map +1 -0
- package/dist-server/graphql/types/report/monthly-dispatch-summary-report.js +25 -0
- package/dist-server/graphql/types/report/monthly-dispatch-summary-report.js.map +1 -0
- package/dist-server/graphql/types/report/monthly-ffb-sale-report-list.js +14 -0
- package/dist-server/graphql/types/report/monthly-ffb-sale-report-list.js.map +1 -0
- package/dist-server/graphql/types/report/monthly-ffb-sale-report.js +24 -0
- package/dist-server/graphql/types/report/monthly-ffb-sale-report.js.map +1 -0
- package/dist-server/graphql/types/truck/index.js +33 -0
- package/dist-server/graphql/types/truck/index.js.map +1 -0
- package/dist-server/graphql/types/truck/new-truck.js +14 -0
- package/dist-server/graphql/types/truck/new-truck.js.map +1 -0
- package/dist-server/graphql/types/truck/truck-list.js +14 -0
- package/dist-server/graphql/types/truck/truck-list.js.map +1 -0
- package/dist-server/graphql/types/truck/truck-patch.js +17 -0
- package/dist-server/graphql/types/truck/truck-patch.js.map +1 -0
- package/dist-server/graphql/types/truck/truck.js +22 -0
- package/dist-server/graphql/types/truck/truck.js.map +1 -0
- package/package.json +29 -29
- package/server/constants/index.ts +1 -0
- package/server/constants/organization.ts +5 -0
- package/server/controllers/render-dispatchment.ts +1 -1
- package/server/entities/daily-dispatch.ts +21 -5
- package/server/entities/daily-harvest-detail.ts +10 -11
- package/server/entities/daily-harvest.ts +16 -7
- package/server/entities/daily-loading-detail.ts +14 -6
- package/server/entities/daily-loading.ts +7 -11
- package/server/entities/index.ts +6 -0
- package/server/entities/organization-staff.ts +6 -1
- package/server/entities/plantation-inventory.ts +6 -10
- package/server/entities/plantation-setting.ts +60 -0
- package/server/entities/truck.ts +58 -0
- package/server/graphql/resolvers/daily-dispatch/daily-dispatch-query.ts +15 -2
- package/server/graphql/resolvers/daily-dispatch/generate-daily-dispatch.ts +40 -14
- package/server/graphql/resolvers/daily-dispatch/update-daily-dispatch.ts +6 -2
- package/server/graphql/resolvers/daily-harvest/daily-harvest-query.ts +7 -2
- package/server/graphql/resolvers/daily-harvest/generate-daily-harvest.ts +50 -4
- package/server/graphql/resolvers/daily-harvest/update-daily-harvest.ts +12 -2
- package/server/graphql/resolvers/daily-loading/daily-loading-query.ts +6 -6
- package/server/graphql/resolvers/daily-loading/generate-daily-loading.ts +27 -109
- package/server/graphql/resolvers/daily-loading/update-daily-loading.ts +27 -213
- package/server/graphql/resolvers/dashboard/dashboard-query.ts +96 -0
- package/server/graphql/resolvers/dashboard/index.ts +5 -0
- package/server/graphql/resolvers/index.ts +10 -6
- package/server/graphql/resolvers/organization-staff/organization-staff-query.ts +13 -4
- package/server/graphql/resolvers/plantation-setting/create-plantation-setting.ts +16 -0
- package/server/graphql/resolvers/plantation-setting/delete-plantation-setting.ts +13 -0
- package/server/graphql/resolvers/plantation-setting/delete-plantation-settings.ts +16 -0
- package/server/graphql/resolvers/plantation-setting/index.ts +19 -0
- package/server/graphql/resolvers/plantation-setting/plantation-setting-query.ts +38 -0
- package/server/graphql/resolvers/plantation-setting/update-multiple-plantation-setting.ts +46 -0
- package/server/graphql/resolvers/plantation-setting/update-plantation-setting.ts +19 -0
- package/server/graphql/resolvers/report/daily-production-reports.ts +55 -44
- package/server/graphql/resolvers/report/daily-staff-harvest-reports.ts +28 -20
- package/server/graphql/resolvers/report/index.ts +7 -1
- package/server/graphql/resolvers/report/monthly-block-dispatch-reports.ts +112 -0
- package/server/graphql/resolvers/report/monthly-dispatch-summary-reports.ts +110 -0
- package/server/graphql/resolvers/report/monthly-ffb-sale-reports.ts +107 -0
- package/server/graphql/resolvers/report/monthly-production-reports.ts +54 -40
- package/server/graphql/resolvers/report/yearly-production-reports.ts +43 -38
- package/server/graphql/resolvers/truck/delete-trucks.ts +21 -0
- package/server/graphql/resolvers/truck/index.ts +12 -0
- package/server/graphql/resolvers/truck/truck-query.ts +52 -0
- package/server/graphql/resolvers/truck/update-multiple-truck.ts +55 -0
- package/server/graphql/types/daily-dispatch/daily-dispatch-patch.ts +4 -1
- package/server/graphql/types/daily-dispatch/daily-dispatch.ts +4 -1
- package/server/graphql/types/daily-dispatch/index.ts +6 -1
- package/server/graphql/types/daily-dispatch/new-daily-dispatch.ts +4 -1
- package/server/graphql/types/daily-harvest/daily-harvest-patch.ts +5 -2
- package/server/graphql/types/daily-harvest/daily-harvest.ts +3 -0
- package/server/graphql/types/daily-harvest/new-daily-harvest.ts +4 -1
- package/server/graphql/types/daily-harvest-detail/daily-harvest-detail-patch.ts +1 -0
- package/server/graphql/types/daily-harvest-detail/daily-harvest-detail.ts +1 -0
- package/server/graphql/types/daily-harvest-detail/new-daily-harvest-detail.ts +1 -0
- package/server/graphql/types/daily-loading/daily-loading-patch.ts +0 -2
- package/server/graphql/types/daily-loading/daily-loading.ts +0 -2
- package/server/graphql/types/daily-loading/new-daily-loading.ts +0 -2
- package/server/graphql/types/daily-loading-detail/daily-loading-detail-patch.ts +6 -3
- package/server/graphql/types/daily-loading-detail/daily-loading-detail.ts +3 -0
- package/server/graphql/types/daily-loading-detail/new-daily-loading-detail.ts +6 -3
- package/server/graphql/types/dashboard/bunches-count.ts +9 -0
- package/server/graphql/types/dashboard/index.ts +17 -0
- package/server/graphql/types/dashboard/productions-overview.ts +9 -0
- package/server/graphql/types/dashboard/tonnage-bunches-inventories.ts +8 -0
- package/server/graphql/types/dashboard/tonnage-production.ts +11 -0
- package/server/graphql/types/dashboard/yield-production.ts +11 -0
- package/server/graphql/types/index.ts +10 -6
- package/server/graphql/types/organization-staff/organization-staff-patch.ts +2 -0
- package/server/graphql/types/organization-staff/organization-staff.ts +3 -0
- package/server/graphql/types/plantation-setting/index.ts +21 -0
- package/server/graphql/types/plantation-setting/new-plantation-setting.ts +10 -0
- package/server/graphql/types/plantation-setting/plantation-setting-list.ts +8 -0
- package/server/graphql/types/plantation-setting/plantation-setting-patch.ts +12 -0
- package/server/graphql/types/plantation-setting/plantation-setting.ts +16 -0
- package/server/graphql/types/report/index.ts +20 -0
- package/server/graphql/types/report/monthly-block-dispatch-report-list.ts +7 -0
- package/server/graphql/types/report/monthly-block-dispatch-report.ts +13 -0
- package/server/graphql/types/report/monthly-dispatch-summary-report-list.ts +7 -0
- package/server/graphql/types/report/monthly-dispatch-summary-report.ts +19 -0
- package/server/graphql/types/report/monthly-ffb-sale-report-list.ts +7 -0
- package/server/graphql/types/report/monthly-ffb-sale-report.ts +18 -0
- package/server/graphql/types/truck/index.ts +18 -0
- package/server/graphql/types/truck/new-truck.ts +8 -0
- package/server/graphql/types/truck/truck-list.ts +8 -0
- package/server/graphql/types/truck/truck-patch.ts +11 -0
- package/server/graphql/types/truck/truck.ts +16 -0
- package/things-factory.config.js +27 -1
- package/translations/en.json +78 -16
- package/translations/ko.json +77 -48
- package/translations/ms.json +74 -45
- package/translations/zh.json +77 -48
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { EntityManager, IsNull } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { buildQuery, Domain, ListParam } from '@things-factory/shell'
|
|
4
|
+
|
|
3
5
|
import { OrganizationStaff as OrganizationStaffEntity } from '../../../entities'
|
|
4
6
|
|
|
5
7
|
export const Query = {
|
|
@@ -15,7 +17,7 @@ export const Query = {
|
|
|
15
17
|
async organizationStaffs(_: any, params: ListParam, context: any) {
|
|
16
18
|
const { tx }: { tx: EntityManager } = context.state
|
|
17
19
|
|
|
18
|
-
const queryBuilder = tx.getRepository(OrganizationStaffEntity).createQueryBuilder()
|
|
20
|
+
const queryBuilder = await tx.getRepository(OrganizationStaffEntity).createQueryBuilder()
|
|
19
21
|
buildQuery(queryBuilder, params, context)
|
|
20
22
|
|
|
21
23
|
queryBuilder
|
|
@@ -27,7 +29,14 @@ export const Query = {
|
|
|
27
29
|
if (params.filters?.length > 0) queryBuilder.andWhere('OrganizationStaff.deletedAt IS NULL')
|
|
28
30
|
else queryBuilder.where('OrganizationStaff.deletedAt IS NULL')
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
let [items, total] = await queryBuilder.getManyAndCount()
|
|
33
|
+
|
|
34
|
+
items = items.map(item => {
|
|
35
|
+
return {
|
|
36
|
+
...item,
|
|
37
|
+
organizationName: item.organization?.name
|
|
38
|
+
}
|
|
39
|
+
})
|
|
31
40
|
|
|
32
41
|
return { items, total }
|
|
33
42
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getRepository } from 'typeorm'
|
|
2
|
+
import { PlantationSetting } from '../../../entities'
|
|
3
|
+
|
|
4
|
+
export const createPlantationSetting = {
|
|
5
|
+
async createPlantationSetting(_: any, { plantationSetting }, context: any) {
|
|
6
|
+
const { domain, user } = context.state
|
|
7
|
+
|
|
8
|
+
return await getRepository(PlantationSetting).save({
|
|
9
|
+
...plantationSetting,
|
|
10
|
+
domain,
|
|
11
|
+
creator: user,
|
|
12
|
+
updater: user
|
|
13
|
+
})
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { getRepository } from 'typeorm'
|
|
2
|
+
import { PlantationSetting } from '../../../entities'
|
|
3
|
+
|
|
4
|
+
export const deletePlantationSetting = {
|
|
5
|
+
async deletePlantationSetting(_: any, { name }, context: any) {
|
|
6
|
+
const { domain, user } = context.state
|
|
7
|
+
|
|
8
|
+
await getRepository(PlantationSetting).delete({ domain, name })
|
|
9
|
+
|
|
10
|
+
return true
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getRepository, In } from 'typeorm'
|
|
2
|
+
import { PlantationSetting } from '../../../entities'
|
|
3
|
+
|
|
4
|
+
export const deletePlantationSettings = {
|
|
5
|
+
async deletePlantationSettings(_: any, { names }, context: any) {
|
|
6
|
+
const { domain, user } = context.state
|
|
7
|
+
|
|
8
|
+
await getRepository(PlantationSetting).delete({
|
|
9
|
+
domain,
|
|
10
|
+
name: In(names)
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
return true
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Query, PlantationSetting } from './plantation-setting-query'
|
|
2
|
+
|
|
3
|
+
import { updatePlantationSetting } from './update-plantation-setting'
|
|
4
|
+
import { updateMultiplePlantationSetting } from './update-multiple-plantation-setting'
|
|
5
|
+
import { createPlantationSetting } from './create-plantation-setting'
|
|
6
|
+
import { deletePlantationSetting } from './delete-plantation-setting'
|
|
7
|
+
import { deletePlantationSettings } from './delete-plantation-settings'
|
|
8
|
+
|
|
9
|
+
export const PlantationSettingResolver = {
|
|
10
|
+
PlantationSetting,
|
|
11
|
+
Query,
|
|
12
|
+
Mutation: {
|
|
13
|
+
...updatePlantationSetting,
|
|
14
|
+
...updateMultiplePlantationSetting,
|
|
15
|
+
...createPlantationSetting,
|
|
16
|
+
...deletePlantationSetting,
|
|
17
|
+
...deletePlantationSettings
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { getRepository } from 'typeorm'
|
|
2
|
+
import { Domain, ListParam, convertListParams } from '@things-factory/shell'
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { PlantationSetting as PlantationSettingEntity } from '../../../entities'
|
|
5
|
+
|
|
6
|
+
export const Query = {
|
|
7
|
+
async plantationSetting(_: any, { name }, context: any) {
|
|
8
|
+
const { domain, user } = context.state
|
|
9
|
+
const repository = getRepository(PlantationSettingEntity)
|
|
10
|
+
|
|
11
|
+
return await repository.findOne({
|
|
12
|
+
where: { domain, name }
|
|
13
|
+
})
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
async plantationSettings(_: any, params: ListParam, context: any) {
|
|
17
|
+
const convertedParams = convertListParams(params)
|
|
18
|
+
const [items, total] = await getRepository(PlantationSettingEntity).findAndCount({
|
|
19
|
+
...convertedParams
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
return { items, total }
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const PlantationSetting = {
|
|
27
|
+
async domain(plantationSetting) {
|
|
28
|
+
return await getRepository(Domain).findOne(plantationSetting.domainId)
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
async creator(plantationSetting) {
|
|
32
|
+
return await getRepository(User).findOne(plantationSetting.creatorId)
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
async updater(plantationSetting) {
|
|
36
|
+
return await getRepository(User).findOne(plantationSetting.updaterId)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { getRepository } from 'typeorm'
|
|
2
|
+
import { PlantationSetting } from '../../../entities'
|
|
3
|
+
|
|
4
|
+
export const updateMultiplePlantationSetting = {
|
|
5
|
+
async updateMultiplePlantationSetting(_: any, { patches }, context: any) {
|
|
6
|
+
const { domain, user } = context.state
|
|
7
|
+
|
|
8
|
+
let results = []
|
|
9
|
+
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
|
10
|
+
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
|
11
|
+
const plantationSettingRepo = getRepository(PlantationSetting)
|
|
12
|
+
|
|
13
|
+
if (_createRecords.length > 0) {
|
|
14
|
+
for (let i = 0; i < _createRecords.length; i++) {
|
|
15
|
+
const newRecord = _createRecords[i]
|
|
16
|
+
|
|
17
|
+
const result = await plantationSettingRepo.save({
|
|
18
|
+
...newRecord,
|
|
19
|
+
domain: domain,
|
|
20
|
+
creator: user,
|
|
21
|
+
updater: user,
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
results.push({ ...result, cuFlag: '+' })
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (_updateRecords.length > 0) {
|
|
29
|
+
for (let i = 0; i < _updateRecords.length; i++) {
|
|
30
|
+
const newRecord = _updateRecords[i]
|
|
31
|
+
const plantationSetting = await plantationSettingRepo.findOne({ domain, id: newRecord.id})
|
|
32
|
+
|
|
33
|
+
const result = await plantationSettingRepo.save({
|
|
34
|
+
...plantationSetting,
|
|
35
|
+
...newRecord,
|
|
36
|
+
updater: user
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
results.push({ ...result, cuFlag: 'M' })
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return results
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getRepository } from 'typeorm'
|
|
2
|
+
import { PlantationSetting } from '../../../entities'
|
|
3
|
+
|
|
4
|
+
export const updatePlantationSetting = {
|
|
5
|
+
async updatePlantationSetting(_: any, { name, patch }, context: any) {
|
|
6
|
+
const { domain, user } = context.state
|
|
7
|
+
|
|
8
|
+
const repository = getRepository(PlantationSetting)
|
|
9
|
+
const plantationSetting = await repository.findOne({
|
|
10
|
+
where: { domain, name }
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
return await repository.save({
|
|
14
|
+
...plantationSetting,
|
|
15
|
+
...patch,
|
|
16
|
+
updater: user
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { ListParam } from '@things-factory/shell'
|
|
2
1
|
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { ListParam } from '@things-factory/shell'
|
|
4
|
+
|
|
3
5
|
import { Block } from '../../../entities'
|
|
4
6
|
|
|
5
7
|
export const dailyProductionReports = {
|
|
@@ -31,25 +33,42 @@ export const dailyProductionReports = {
|
|
|
31
33
|
.findOneOrFail({ where: { id: params.filters.filter(x => x.name == 'block')[0].value } })
|
|
32
34
|
|
|
33
35
|
await tx.query(`
|
|
34
|
-
CREATE TEMP TABLE
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
CREATE TEMP TABLE temp_blocks on commit drop AS (
|
|
37
|
+
WITH RECURSIVE b AS (
|
|
38
|
+
SELECT $1::uuid as block_id, * FROM blocks b
|
|
39
|
+
WHERE id = $1::uuid
|
|
40
|
+
AND b.deleted_at IS null
|
|
41
|
+
UNION ALL
|
|
42
|
+
SELECT $1::uuid as block_id, cb.* FROM blocks cb
|
|
43
|
+
INNER JOIN b ON b.id = cb.parent_block_id
|
|
44
|
+
WHERE cb.deleted_at IS null
|
|
45
|
+
)
|
|
46
|
+
SELECT * FROM b
|
|
47
|
+
);
|
|
48
|
+
`, [block.id]
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
await tx.query(`
|
|
52
|
+
CREATE TEMP TABLE temp_records on commit drop AS (
|
|
53
|
+
select blk.block_id, coalesce(sum(field_bunches),0) AS today_field_bunches,
|
|
54
|
+
round(coalesce(sum(ramp_weight),0)::numeric,4) AS today_ramp_weight,
|
|
37
55
|
sum(case when transaction_type = 'HARVEST' then field_bunches else 0 end) as today_bunch_harvest,
|
|
38
56
|
sum(case when transaction_type = 'LOADING' then -field_bunches else 0 end) as today_bunch_collected,
|
|
39
|
-
sum(case when transaction_type = 'LOADING' then ramp_weight else 0 end) as today_ramp_weight_collected,
|
|
40
|
-
sum(case when transaction_type = 'DISPATCHMENT' then -ramp_weight else 0 end) as today_weight_dispatch,
|
|
57
|
+
round(sum(case when transaction_type = 'LOADING' then ramp_weight else 0 end)::numeric,4) as today_ramp_weight_collected,
|
|
58
|
+
round(sum(case when transaction_type = 'DISPATCHMENT' then -ramp_weight else 0 end)::numeric,4) as today_weight_dispatch,
|
|
41
59
|
transaction_date
|
|
42
|
-
from record_transactions t2
|
|
60
|
+
from record_transactions t2
|
|
61
|
+
inner join temp_blocks blk on blk.id = t2.block_id
|
|
43
62
|
where transaction_date <= $1
|
|
44
|
-
|
|
45
|
-
group by block_id, transaction_date
|
|
63
|
+
group by blk.block_id, transaction_date
|
|
46
64
|
)
|
|
47
|
-
`,
|
|
48
|
-
|
|
65
|
+
`,
|
|
66
|
+
[toDateString]
|
|
67
|
+
)
|
|
49
68
|
|
|
50
69
|
await tx.query(
|
|
51
70
|
`
|
|
52
|
-
create temp table temp_daily_production_data as (
|
|
71
|
+
create temp table temp_daily_production_data on commit drop as (
|
|
53
72
|
select *,
|
|
54
73
|
prev_bunch_bal_in_field + today_bunch_harvest as today_bunch_in_field,
|
|
55
74
|
prev_bunch_bal_in_field + today_bunch_harvest - today_bunch_collected as today_bunch_bal_in_field,
|
|
@@ -88,60 +107,52 @@ export const dailyProductionReports = {
|
|
|
88
107
|
order by transaction_date
|
|
89
108
|
) as dt on dt.transaction_date::date = md.dateDay
|
|
90
109
|
LEFT JOIN (
|
|
91
|
-
select sum(harvesting_round) AS today_harvesting_round, sum(coverage) AS today_hectare_cover, harvest_date
|
|
110
|
+
select sum(harvesting_round) AS today_harvesting_round, sum(coverage) AS today_hectare_cover, harvest_date
|
|
111
|
+
from daily_harvests dh
|
|
112
|
+
inner join temp_blocks blk on blk.id = dh.block_id
|
|
92
113
|
where harvest_date between $1 and $2
|
|
93
|
-
|
|
94
|
-
group by block_id, harvest_date
|
|
114
|
+
group by blk.block_id, harvest_date
|
|
95
115
|
) as thr ON thr.harvest_date::date = md.dateDay
|
|
96
116
|
LEFT JOIN (
|
|
97
|
-
select count(*) AS today_out_turn, dh.harvest_date
|
|
117
|
+
select count(*) AS today_out_turn, dh.harvest_date
|
|
118
|
+
from daily_harvest_details dhd
|
|
98
119
|
inner join daily_harvests dh on dh.id = dhd.daily_harvest_id
|
|
120
|
+
inner join temp_blocks blk on blk.id = dh.block_id
|
|
99
121
|
where dh.harvest_date between $1 and $2
|
|
100
|
-
|
|
101
|
-
GROUP BY dh.block_id, dh.harvest_date
|
|
122
|
+
GROUP BY blk.block_id, dh.harvest_date
|
|
102
123
|
) as tot ON tot.harvest_date::date = md.dateDay
|
|
103
124
|
) dt
|
|
104
125
|
)`,
|
|
105
126
|
[fromDateString, toDateString, block.id]
|
|
106
127
|
)
|
|
107
128
|
|
|
108
|
-
const result: any = await tx.query(
|
|
109
|
-
`
|
|
129
|
+
const result: any = await tx.query(`
|
|
110
130
|
select * from temp_daily_production_data dt
|
|
111
|
-
|
|
112
|
-
)
|
|
131
|
+
`)
|
|
113
132
|
|
|
114
|
-
const total: any = await tx.query(
|
|
115
|
-
`
|
|
133
|
+
const total: any = await tx.query(`
|
|
116
134
|
select count(*) from temp_daily_production_data
|
|
117
|
-
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
await tx.query(
|
|
121
|
-
`
|
|
122
|
-
drop table temp_daily_production_data, temp_records
|
|
123
|
-
`
|
|
124
|
-
)
|
|
135
|
+
`)
|
|
125
136
|
|
|
126
137
|
let items = result.map(itm => {
|
|
127
138
|
return {
|
|
128
139
|
block: itm.block,
|
|
129
140
|
dateDay: itm.date_day,
|
|
130
|
-
diffInBunches: itm.diff_in_bunches,
|
|
131
|
-
prevBunchBalInField: itm.prev_bunch_bal_in_field,
|
|
132
|
-
prevWeightBalInRamp: itm.prev_weight_bal_in_ramp,
|
|
133
|
-
toDateBunchHarvest: itm.to_date_bunch_harvest,
|
|
141
|
+
diffInBunches: parseFloat(itm.diff_in_bunches).toFixed(1),
|
|
142
|
+
prevBunchBalInField: parseFloat(itm.prev_bunch_bal_in_field).toFixed(1),
|
|
143
|
+
prevWeightBalInRamp: parseFloat(itm.prev_weight_bal_in_ramp).toFixed(4),
|
|
144
|
+
toDateBunchHarvest: parseFloat(itm.to_date_bunch_harvest).toFixed(1),
|
|
134
145
|
toDateOutTurn: itm.to_date_out_turn,
|
|
135
|
-
toDateWeightDispatch: itm.to_date_weight_dispatch,
|
|
136
|
-
todayBunchBalInField: itm.today_bunch_bal_in_field,
|
|
137
|
-
todayBunchCollected: itm.today_bunch_collected,
|
|
138
|
-
todayBunchHarvest: itm.today_bunch_harvest,
|
|
139
|
-
todayBunchInField: itm.today_bunch_in_field,
|
|
146
|
+
toDateWeightDispatch: parseFloat(itm.to_date_weight_dispatch).toFixed(4),
|
|
147
|
+
todayBunchBalInField: parseFloat(itm.today_bunch_bal_in_field).toFixed(1),
|
|
148
|
+
todayBunchCollected: parseFloat(itm.today_bunch_collected).toFixed(1),
|
|
149
|
+
todayBunchHarvest: parseFloat(itm.today_bunch_harvest).toFixed(1),
|
|
150
|
+
todayBunchInField: parseFloat(itm.today_bunch_in_field).toFixed(1),
|
|
140
151
|
todayHarvestingRound: itm.today_harvesting_round,
|
|
141
|
-
todayHectareCover: itm.today_hectare_cover,
|
|
152
|
+
todayHectareCover: parseFloat(itm.today_hectare_cover).toFixed(4),
|
|
142
153
|
todayOutTurn: itm.today_out_turn,
|
|
143
|
-
todayWeightBalInRamp: itm.today_weight_bal_in_ramp,
|
|
144
|
-
todayWeightDispatch: itm.today_weight_dispatch
|
|
154
|
+
todayWeightBalInRamp: parseFloat(itm.today_weight_bal_in_ramp).toFixed(4),
|
|
155
|
+
todayWeightDispatch: parseFloat(itm.today_weight_dispatch).toFixed(4)
|
|
145
156
|
}
|
|
146
157
|
})
|
|
147
158
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { ListParam } from '@things-factory/shell'
|
|
2
1
|
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { ListParam } from '@things-factory/shell'
|
|
4
|
+
|
|
3
5
|
import { Block } from '../../../entities'
|
|
4
6
|
|
|
5
7
|
export const dailyStaffHarvestReports = {
|
|
@@ -30,43 +32,49 @@ export const dailyStaffHarvestReports = {
|
|
|
30
32
|
.getRepository(Block)
|
|
31
33
|
.findOneOrFail({ where: { id: params.filters.filter(x => x.name == 'block')[0].value } })
|
|
32
34
|
|
|
35
|
+
await tx.query(`
|
|
36
|
+
CREATE TEMP TABLE temp_blocks on commit drop AS (
|
|
37
|
+
WITH RECURSIVE b AS (
|
|
38
|
+
SELECT $1::uuid as block_id, * FROM blocks b
|
|
39
|
+
WHERE id = $1::uuid
|
|
40
|
+
AND b.deleted_at IS null
|
|
41
|
+
UNION ALL
|
|
42
|
+
SELECT $1::uuid as block_id, cb.* FROM blocks cb
|
|
43
|
+
INNER JOIN b ON b.id = cb.parent_block_id
|
|
44
|
+
WHERE cb.deleted_at IS null
|
|
45
|
+
)
|
|
46
|
+
SELECT * FROM b
|
|
47
|
+
);
|
|
48
|
+
`, [block.id]
|
|
49
|
+
)
|
|
50
|
+
|
|
33
51
|
await tx.query(
|
|
34
52
|
`
|
|
35
|
-
create temp table temp_daily_staff_harvest_data as (
|
|
53
|
+
create temp table temp_daily_staff_harvest_data on commit drop as (
|
|
36
54
|
select "harvestDate"::varchar as "harvestDate", "blockName"::varchar, "staffName"::varchar, sum("totalBunchHarvested")::varchar as "totalBunchHarvested" from (
|
|
37
55
|
select dh.harvest_date::date as "harvestDate", b2."name" as "blockName", os."name" as "staffName",
|
|
38
56
|
dhd.total_bunch_harvested as "totalBunchHarvested"
|
|
39
57
|
from daily_harvest_details dhd
|
|
40
58
|
inner join daily_harvests dh on dh.id = dhd.daily_harvest_id
|
|
59
|
+
inner join temp_blocks blk on blk.id = dh.block_id
|
|
41
60
|
inner join organization_staffs os on os.id = dhd.organization_staff_id
|
|
42
|
-
inner join blocks b2 on b2.id =
|
|
43
|
-
where dh.
|
|
44
|
-
and dh.harvest_date::date between $2 and $3
|
|
61
|
+
inner join blocks b2 on b2.id = blk.block_id
|
|
62
|
+
where dh.harvest_date::date between $1 and $2
|
|
45
63
|
) as dt
|
|
46
64
|
group by "harvestDate", "blockName", "staffName"
|
|
47
65
|
order by "staffName", "harvestDate"
|
|
48
66
|
)
|
|
49
67
|
`,
|
|
50
|
-
[
|
|
68
|
+
[fromDateString, toDateString]
|
|
51
69
|
)
|
|
52
70
|
|
|
53
|
-
const result: any = await tx.query(
|
|
54
|
-
`
|
|
71
|
+
const result: any = await tx.query(`
|
|
55
72
|
select * from temp_daily_staff_harvest_data dt
|
|
56
|
-
|
|
57
|
-
)
|
|
73
|
+
`)
|
|
58
74
|
|
|
59
|
-
const total: any = await tx.query(
|
|
60
|
-
`
|
|
75
|
+
const total: any = await tx.query(`
|
|
61
76
|
select count(*) from temp_daily_staff_harvest_data
|
|
62
|
-
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
await tx.query(
|
|
66
|
-
`
|
|
67
|
-
drop table temp_daily_staff_harvest_data
|
|
68
|
-
`
|
|
69
|
-
)
|
|
77
|
+
`)
|
|
70
78
|
|
|
71
79
|
return { items: result, total: total[0].count }
|
|
72
80
|
} catch (error) {
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import { dailyProductionReports } from './daily-production-reports'
|
|
2
2
|
import { monthlyProductionReports } from './monthly-production-reports'
|
|
3
|
+
import { monthlyDispatchSummaryReports } from './monthly-dispatch-summary-reports'
|
|
3
4
|
import { yearlyProductionReports } from './yearly-production-reports'
|
|
4
5
|
import { dailyStaffHarvestReports } from './daily-staff-harvest-reports'
|
|
6
|
+
import { monthlyBlockDispatchReports } from './monthly-block-dispatch-reports'
|
|
7
|
+
import { monthlyFfbSaleReports } from './monthly-ffb-sale-reports'
|
|
5
8
|
|
|
6
9
|
export const ReportResolver = {
|
|
7
10
|
Query: {
|
|
8
11
|
...dailyProductionReports,
|
|
9
12
|
...monthlyProductionReports,
|
|
13
|
+
...monthlyDispatchSummaryReports,
|
|
10
14
|
...yearlyProductionReports,
|
|
11
|
-
...dailyStaffHarvestReports
|
|
15
|
+
...dailyStaffHarvestReports,
|
|
16
|
+
...monthlyBlockDispatchReports,
|
|
17
|
+
...monthlyFfbSaleReports
|
|
12
18
|
},
|
|
13
19
|
Mutation: {}
|
|
14
20
|
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { EntityManager, getRepository, Not, IsNull } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { ListParam, Domain } from '@things-factory/shell'
|
|
4
|
+
import { Ramp } from '../../../entities'
|
|
5
|
+
|
|
6
|
+
export const monthlyBlockDispatchReports = {
|
|
7
|
+
async monthlyBlockDispatchReports(_: any, params: ListParam, context: any) {
|
|
8
|
+
try {
|
|
9
|
+
const { domain, tx }: { domain: Domain, tx: EntityManager } = context.state
|
|
10
|
+
|
|
11
|
+
let year = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[0])
|
|
12
|
+
let month = parseInt(params.filters.filter(x => x.name == 'month')[0].value.split('-')[1])
|
|
13
|
+
|
|
14
|
+
let fromDate = new Date(year, month - 1, 1)
|
|
15
|
+
let toDate = new Date(year, month, 1)
|
|
16
|
+
toDate.setDate(toDate.getDate() - 1)
|
|
17
|
+
|
|
18
|
+
let fromDateString = [
|
|
19
|
+
fromDate.getFullYear().toString(),
|
|
20
|
+
String(fromDate.getMonth() + 1).padStart(2, '0'),
|
|
21
|
+
'01'
|
|
22
|
+
].join('-')
|
|
23
|
+
|
|
24
|
+
let toDateString = [
|
|
25
|
+
toDate.getFullYear().toString(),
|
|
26
|
+
String(toDate.getMonth() + 1).padStart(2, '0'),
|
|
27
|
+
String(toDate.getDate()).padStart(2, '0')
|
|
28
|
+
].join('-')
|
|
29
|
+
|
|
30
|
+
let ramps = await getRepository(Ramp).find({
|
|
31
|
+
where: { domain: domain.id, deletedAt: IsNull() },
|
|
32
|
+
relations: ['block']
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
// -- WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
|
|
37
|
+
// [fromDateString, toDateString]
|
|
38
|
+
await tx.query(`create extension if not exists tablefunc`)
|
|
39
|
+
|
|
40
|
+
await tx.query(
|
|
41
|
+
`
|
|
42
|
+
CREATE TEMP TABLE raw_block_dispatch ON COMMIT DROP AS (
|
|
43
|
+
SELECT dd.id, b.name AS block_name,
|
|
44
|
+
COALESCE(ddd.adjusted_weight, ddd.collected_ramp_weight, 0) AS weight
|
|
45
|
+
FROM daily_dispatches dd
|
|
46
|
+
INNER JOIN daily_dispatch_details ddd ON ddd.daily_dispatch_id = dd.id
|
|
47
|
+
INNER JOIN ramps r ON r.id = ddd.ramp_id
|
|
48
|
+
INNER JOIN blocks b ON b.id = r.block_id
|
|
49
|
+
WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
|
|
50
|
+
)
|
|
51
|
+
`, [fromDateString, toDateString]
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
await tx.query(
|
|
55
|
+
`
|
|
56
|
+
CREATE TEMP TABLE pivot_block_dispatch ON COMMIT DROP AS (
|
|
57
|
+
SELECT * FROM crosstab(
|
|
58
|
+
$$SELECT rbd.id, rbd.block_name, round(rbd.weight, 2 )::varchar FROM raw_block_dispatch rbd$$,
|
|
59
|
+
$$SELECT b.name FROM ramps r INNER JOIN blocks b ON b.id = r.block_id WHERE r.deleted_at IS NULL$$
|
|
60
|
+
) AS ("id" uuid, ${ramps.map(ramp => `"${ramp.block.name}" varchar`).join(',')})
|
|
61
|
+
);
|
|
62
|
+
`)
|
|
63
|
+
|
|
64
|
+
await tx.query(
|
|
65
|
+
`
|
|
66
|
+
CREATE TEMP TABLE temp_monthly_production_data ON COMMIT DROP AS (
|
|
67
|
+
SELECT
|
|
68
|
+
ROW_NUMBER() OVER(
|
|
69
|
+
PARTITION BY dd.dispatch_at::date
|
|
70
|
+
ORDER BY dd.dispatch_at
|
|
71
|
+
) as rn
|
|
72
|
+
, dd.id, COALESCE(c.name, 'UNKNOWN') AS "dispatchTo"
|
|
73
|
+
, dd.transport_no as "lorryNo"
|
|
74
|
+
, dd.driver_identification as "driverIdentification"
|
|
75
|
+
, TO_CHAR(dd.dispatch_at:: DATE, 'dd/mm/yyyy') as "date"
|
|
76
|
+
, row_to_json((SELECT d FROM (SELECT ${ramps.map(ramp => `pbd."${ramp.block.name}"`).join(',')}) d))::varchar as "blockData"
|
|
77
|
+
, (SELECT sum(weight) FROM raw_block_dispatch rbd WHERE rbd.id = dd.id) AS "today"
|
|
78
|
+
FROM daily_dispatches dd
|
|
79
|
+
INNER JOIN pivot_block_dispatch pbd ON pbd.id = dd.id
|
|
80
|
+
LEFT JOIN organizations c ON c.id = dd.dispatch_to_id
|
|
81
|
+
);
|
|
82
|
+
`
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
const result: any = await tx.query(
|
|
86
|
+
`
|
|
87
|
+
select "id", "dispatchTo", "lorryNo", "driverIdentification",
|
|
88
|
+
CASE WHEN "rn" = 1 THEN "date" ELSE '' END AS "date", "blockData", "today",
|
|
89
|
+
coalesce(sum(today) over (order by date asc rows between unbounded preceding and current row), 0) as "todate"
|
|
90
|
+
from temp_monthly_production_data dt
|
|
91
|
+
`
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
const total: any = await tx.query(
|
|
95
|
+
`
|
|
96
|
+
select count(*) from temp_monthly_production_data
|
|
97
|
+
`
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
items: result.map(itm => {
|
|
103
|
+
return {
|
|
104
|
+
...itm
|
|
105
|
+
}
|
|
106
|
+
}), total: total[0].count
|
|
107
|
+
}
|
|
108
|
+
} catch (error) {
|
|
109
|
+
throw error
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|