@things-factory/operato-pms 3.8.13 → 3.8.26

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.
Files changed (60) hide show
  1. package/client/pages/dispatchment/daily-dispatch-detail.js +1 -1
  2. package/client/pages/dispatchment/dispatchment-create-record.js +20 -44
  3. package/client/pages/harvesting/daily-harvesting-detail.js +2 -2
  4. package/client/pages/harvesting/edit-harvesting-record.js +2 -2
  5. package/client/pages/harvesting/harvesting-create-record.js +2 -2
  6. package/client/pages/inventory/inventory-ramp-tonnage.js +23 -31
  7. package/client/pages/report/report-daily-ffb-dispatch-and-production.js +167 -124
  8. package/client/pages/report/report-ffb-tonnage-between-individual-block.js +12 -7
  9. package/dist-server/constants/transaction.js +2 -1
  10. package/dist-server/constants/transaction.js.map +1 -1
  11. package/dist-server/entities/daily-dispatch.js +1 -2
  12. package/dist-server/entities/daily-dispatch.js.map +1 -1
  13. package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js +1 -1
  14. package/dist-server/graphql/resolvers/daily-dispatch/update-daily-dispatch.js.map +1 -1
  15. package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js +2 -2
  16. package/dist-server/graphql/resolvers/daily-harvest/generate-daily-harvest.js.map +1 -1
  17. package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js +19 -6
  18. package/dist-server/graphql/resolvers/daily-loading/update-daily-loading.js.map +1 -1
  19. package/dist-server/graphql/resolvers/dashboard/dashboard-query.js +165 -43
  20. package/dist-server/graphql/resolvers/dashboard/dashboard-query.js.map +1 -1
  21. package/dist-server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.js +111 -0
  22. package/dist-server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.js.map +1 -0
  23. package/dist-server/graphql/resolvers/report/daily-production-reports.js +6 -6
  24. package/dist-server/graphql/resolvers/report/index.js +2 -1
  25. package/dist-server/graphql/resolvers/report/index.js.map +1 -1
  26. package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js +10 -8
  27. package/dist-server/graphql/resolvers/report/monthly-block-dispatch-reports.js.map +1 -1
  28. package/dist-server/graphql/resolvers/report/monthly-ffb-sale-reports.js +1 -1
  29. package/dist-server/graphql/resolvers/report/monthly-production-reports.js +1 -1
  30. package/dist-server/graphql/types/report/daily-ffb-dispatch-production-report-list.js +14 -0
  31. package/dist-server/graphql/types/report/daily-ffb-dispatch-production-report-list.js.map +1 -0
  32. package/dist-server/graphql/types/report/daily-ffb-dispatch-production-report.js +15 -0
  33. package/dist-server/graphql/types/report/daily-ffb-dispatch-production-report.js.map +1 -0
  34. package/dist-server/graphql/types/report/index.js +13 -0
  35. package/dist-server/graphql/types/report/index.js.map +1 -1
  36. package/dist-server/utils/core-values.js +2 -2
  37. package/dist-server/utils/transaction-util.js +2 -1
  38. package/dist-server/utils/transaction-util.js.map +1 -1
  39. package/package.json +4 -4
  40. package/server/constants/transaction.ts +2 -1
  41. package/server/entities/daily-dispatch.ts +1 -4
  42. package/server/graphql/resolvers/daily-dispatch/update-daily-dispatch.ts +2 -2
  43. package/server/graphql/resolvers/daily-harvest/generate-daily-harvest.ts +2 -2
  44. package/server/graphql/resolvers/daily-loading/update-daily-loading.ts +39 -11
  45. package/server/graphql/resolvers/dashboard/dashboard-query.ts +208 -52
  46. package/server/graphql/resolvers/report/daily-ffb-dispatch-production-reports.ts +138 -0
  47. package/server/graphql/resolvers/report/daily-production-reports.ts +6 -6
  48. package/server/graphql/resolvers/report/index.ts +3 -1
  49. package/server/graphql/resolvers/report/monthly-block-dispatch-reports.ts +11 -9
  50. package/server/graphql/resolvers/report/monthly-ffb-sale-reports.ts +1 -1
  51. package/server/graphql/resolvers/report/monthly-production-reports.ts +1 -1
  52. package/server/graphql/types/report/daily-ffb-dispatch-production-report-list.ts +8 -0
  53. package/server/graphql/types/report/daily-ffb-dispatch-production-report.ts +9 -0
  54. package/server/graphql/types/report/index.ts +13 -0
  55. package/server/utils/core-values.ts +2 -2
  56. package/server/utils/transaction-util.ts +2 -1
  57. package/translations/en.json +7 -6
  58. package/translations/ko.json +7 -6
  59. package/translations/ms.json +10 -9
  60. package/translations/zh.json +7 -6
@@ -52,10 +52,10 @@ export const dailyProductionReports = {
52
52
  CREATE TEMP TABLE temp_records on commit drop AS (
53
53
  select blk.block_id, coalesce(sum(field_bunches),0) AS today_field_bunches,
54
54
  round(coalesce(sum(ramp_weight),0)::numeric,4) AS today_ramp_weight,
55
- sum(case when transaction_type = 'HARVEST' then field_bunches else 0 end) as today_bunch_harvest,
56
- sum(case when transaction_type = 'LOADING' then -field_bunches else 0 end) as today_bunch_collected,
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,
55
+ sum(case when transaction_type = 'HARVEST' OR transaction_type = 'BUNCHES_ADJUSTMENT' then field_bunches else 0 end) as today_bunch_harvest,
56
+ sum(case when transaction_type = 'LOADING' OR transaction_type = 'LOADING_ADJUSTMENT' then -field_bunches else 0 end) as today_bunch_collected,
57
+ round(sum(case when transaction_type = 'LOADING' OR transaction_type = 'LOADING_ADJUSTMENT' then ramp_weight else 0 end)::numeric,4) as today_ramp_weight_collected,
58
+ round(sum(case when transaction_type = 'DISPATCHMENT' OR transaction_type = 'DISPATCHMENT_ADJUSTMENT' then -ramp_weight else 0 end)::numeric,4) as today_weight_dispatch,
59
59
  transaction_date
60
60
  from record_transactions t2
61
61
  inner join temp_blocks blk on blk.id = t2.block_id
@@ -127,11 +127,11 @@ export const dailyProductionReports = {
127
127
  )
128
128
 
129
129
  const result: any = await tx.query(`
130
- select * from temp_daily_production_data dt
130
+ select * from temp_daily_production_data dt
131
131
  `)
132
132
 
133
133
  const total: any = await tx.query(`
134
- select count(*) from temp_daily_production_data
134
+ select count(*) from temp_daily_production_data
135
135
  `)
136
136
 
137
137
  let items = result.map(itm => {
@@ -5,6 +5,7 @@ import { yearlyProductionReports } from './yearly-production-reports'
5
5
  import { dailyStaffHarvestReports } from './daily-staff-harvest-reports'
6
6
  import { monthlyBlockDispatchReports } from './monthly-block-dispatch-reports'
7
7
  import { monthlyFfbSaleReports } from './monthly-ffb-sale-reports'
8
+ import { dailyFfbDispatchProductionReports } from './daily-ffb-dispatch-production-reports'
8
9
 
9
10
  export const ReportResolver = {
10
11
  Query: {
@@ -14,7 +15,8 @@ export const ReportResolver = {
14
15
  ...yearlyProductionReports,
15
16
  ...dailyStaffHarvestReports,
16
17
  ...monthlyBlockDispatchReports,
17
- ...monthlyFfbSaleReports
18
+ ...monthlyFfbSaleReports,
19
+ ...dailyFfbDispatchProductionReports
18
20
  },
19
21
  Mutation: {}
20
22
  }
@@ -1,7 +1,7 @@
1
1
  import { EntityManager, getRepository, Not, IsNull } from 'typeorm'
2
2
 
3
3
  import { ListParam, Domain } from '@things-factory/shell'
4
- import { Ramp } from '../../../entities'
4
+ import { Block, Ramp } from '../../../entities'
5
5
 
6
6
  export const monthlyBlockDispatchReports = {
7
7
  async monthlyBlockDispatchReports(_: any, params: ListParam, context: any) {
@@ -27,11 +27,13 @@ export const monthlyBlockDispatchReports = {
27
27
  String(toDate.getDate()).padStart(2, '0')
28
28
  ].join('-')
29
29
 
30
- let ramps = await getRepository(Ramp).find({
31
- where: { domain: domain.id, deletedAt: IsNull() },
32
- relations: ['block']
33
- })
34
-
30
+ let blocks = await tx.getRepository(Block).query(`
31
+ SELECT b.id, b.name FROM ramps r
32
+ INNER JOIN blocks b ON b.id = r.block_id
33
+ WHERE b.deleted_at IS NULL
34
+ AND r.domain_id = $1
35
+ GROUP BY b.id, b.name
36
+ `, [domain.id])
35
37
 
36
38
  // -- WHERE dd.dispatch_at::timestamp between $1::timestamp and $2::timestamp
37
39
  // [fromDateString, toDateString]
@@ -56,8 +58,8 @@ export const monthlyBlockDispatchReports = {
56
58
  CREATE TEMP TABLE pivot_block_dispatch ON COMMIT DROP AS (
57
59
  SELECT * FROM crosstab(
58
60
  $$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
+ $$SELECT b.name FROM ramps r INNER JOIN blocks b ON b.id = r.block_id WHERE r.deleted_at IS NULL AND r.domain_id = '${domain.id}' GROUP BY b.id, b.name$$
62
+ ) AS ("id" uuid, ${blocks.map(block => `"${block.name}" varchar`).join(',')})
61
63
  );
62
64
  `)
63
65
 
@@ -73,7 +75,7 @@ export const monthlyBlockDispatchReports = {
73
75
  , dd.transport_no as "lorryNo"
74
76
  , dd.driver_identification as "driverIdentification"
75
77
  , 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"
78
+ , row_to_json((SELECT d FROM (SELECT ${blocks.map(block => `pbd."${block.name}"`).join(',')}) d))::varchar as "blockData"
77
79
  , (SELECT sum(weight) FROM raw_block_dispatch rbd WHERE rbd.id = dd.id) AS "today"
78
80
  FROM daily_dispatches dd
79
81
  INNER JOIN pivot_block_dispatch pbd ON pbd.id = dd.id
@@ -46,7 +46,7 @@ export const monthlyFfbSaleReports = {
46
46
  SELECT "id", dispatch_at, transport_no AS "lorryNo",
47
47
  driver_identification AS "driverIdentification", chit_no AS "chitNo", round(COALESCE(percentage,0)::numeric, 2)::varchar AS "percentage",
48
48
  COALESCE(diapatch_to_name, 'UNKNOWN') AS "dispatchTo", round(COALESCE(tonnage,0), 2)::varchar AS "tonnage",
49
- CASE WHEN forward_rn = 1 THEN dispatch_at::date::varchar ELSE '' END AS "dispatchAt",
49
+ CASE WHEN forward_rn = 1 THEN TO_CHAR(dispatch_at:: DATE, 'dd/mm/yyyy') ELSE '' END AS "dispatchAt",
50
50
  CASE WHEN reverse_rn = 1 THEN round((coalesce(sum(percentage) over (PARTITION BY dispatch_to_id, dispatch_at::date ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0)/forward_rn)::numeric,2)::varchar ELSE '' END AS "todayAvg",
51
51
  CASE WHEN reverse_rn = 1 THEN round((coalesce(sum(percentage) over (PARTITION BY dispatch_to_id ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0)/forward_rn)::numeric,2)::varchar ELSE '' END AS "todateAvg",
52
52
  CASE WHEN reverse_rn = 1 THEN round(coalesce(sum(tonnage) over (PARTITION BY dispatch_to_id, dispatch_at::date ORDER BY dispatch_at asc rows between unbounded preceding and current row), 0),2)::varchar ELSE '' END AS "today",
@@ -78,8 +78,8 @@ export const monthlyProductionReports = {
78
78
  left join(
79
79
  select blk.block_id, sum(total_weight) as total_weight_loaded, sum(total_bunch) as total_bunch_loaded
80
80
  from daily_loadings dl
81
- inner join temp_blocks blk on blk.id = dl.block_id
82
81
  inner join daily_loading_details dld on dld.daily_loading_id = dl.id
82
+ inner join temp_blocks blk on blk.id = dld.block_id
83
83
  where dl.loading_date::timestamp between $1::timestamp and $2::timestamp
84
84
  group by blk.block_id
85
85
  ) as loading on loading.block_id = b.id
@@ -0,0 +1,8 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const DailyFfbDispatchProductionReportList = gql`
4
+ type DailyFfbDispatchProductionReportList {
5
+ items: [DailyFfbDispatchProductionReport]
6
+ total: Int
7
+ }
8
+ `
@@ -0,0 +1,9 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const DailyFfbDispatchProductionReport = gql`
4
+ type DailyFfbDispatchProductionReport {
5
+ date: String
6
+ blockData: String
7
+ today: String
8
+ }
9
+ `
@@ -12,16 +12,20 @@ export * from './monthly-production-report-list'
12
12
  export * from './monthly-production-report'
13
13
  export * from './yearly-production-report-list'
14
14
  export * from './yearly-production-report'
15
+ export * from './daily-ffb-dispatch-production-report'
16
+ export * from './daily-ffb-dispatch-production-report-list'
15
17
 
16
18
  export const ReportResolver = gql`
17
19
  extend type Query {
18
20
  dailyProductionReports(filters: [Filter], pagination: Pagination, sortings: [Sorting]): DailyProductionReportList
19
21
  @transaction
22
+
20
23
  monthlyProductionReports(
21
24
  filters: [Filter]
22
25
  pagination: Pagination
23
26
  sortings: [Sorting]
24
27
  ): MonthlyProductionReportList @transaction
28
+
25
29
  yearlyProductionReports(filters: [Filter], pagination: Pagination, sortings: [Sorting]): YearlyProductionReportList
26
30
  @transaction
27
31
  dailyStaffHarvestReports(
@@ -29,21 +33,30 @@ export const ReportResolver = gql`
29
33
  pagination: Pagination
30
34
  sortings: [Sorting]
31
35
  ): DailyStaffHarvestReportList @transaction
36
+
32
37
  monthlyDispatchSummaryReports(
33
38
  filters: [Filter],
34
39
  pagination: Pagination,
35
40
  sortings: [Sorting]
36
41
  ): MonthlyDispatchSummaryReportList @transaction
42
+
37
43
  monthlyBlockDispatchReports(
38
44
  filters: [Filter],
39
45
  pagination: Pagination,
40
46
  sortings: [Sorting]
41
47
  ): MonthlyBlockDispatchReportList @transaction
48
+
42
49
  monthlyFfbSaleReports(
43
50
  filters: [Filter],
44
51
  pagination: Pagination,
45
52
  sortings: [Sorting]
46
53
  ): MonthlyDispatchSummaryReportList @transaction
54
+
55
+ dailyFfbDispatchProductionReports(
56
+ filters: [Filter],
57
+ pagination: Pagination,
58
+ sortings: [Sorting]
59
+ ): DailyFfbDispatchProductionReportList @transaction
47
60
  }
48
61
 
49
62
  `
@@ -43,8 +43,8 @@ export async function getDailyBlockCalculatedValues(
43
43
  select block_id, transaction_date,
44
44
  (select opening_field_bunches from transactions dt where dt.block_id = trx.block_id and dt.seq = min(trx.seq)) as prev_bunch_bal_in_field,
45
45
  0 as prev_weight_bal_in_ramp,
46
- sum(case when transaction_type = 'HARVEST' then field_bunches else 0 end) as today_bunch_harvest,
47
- sum(case when transaction_type = 'LOADING' then -field_bunches else 0 end) as today_bunch_collected,
46
+ sum(case when transaction_type = 'HARVEST' OR transaction_type = 'BUNCHES_ADJUSTMENT' then field_bunches else 0 end) as today_bunch_harvest,
47
+ sum(case when transaction_type = 'LOADING' OR transaction_type = 'LOADING_ADJUSTMENT' then -field_bunches else 0 end) as today_bunch_collected,
48
48
  0 as today_weight_dispatch,
49
49
  0 as today_weight_bal_in_ramp,
50
50
  (
@@ -47,7 +47,8 @@ export async function generateTransactionHistory(
47
47
  if (
48
48
  transactionType === TRANSACTION_TYPE.LOADING ||
49
49
  transactionType === TRANSACTION_TYPE.DISPATCHMENT ||
50
- transactionType === TRANSACTION_TYPE.TONNAGE_ADJUSTMENT
50
+ transactionType === TRANSACTION_TYPE.LOADING_ADJUSTMENT ||
51
+ transactionType === TRANSACTION_TYPE.DISPATCHMENT_ADJUSTMENT
51
52
  ) {
52
53
  await switchRampStatus(domain, ramp, user, trxMgr)
53
54
  }
@@ -8,8 +8,8 @@
8
8
  "field.available_tonnage": "available tonnage",
9
9
  "field.avg_out_turn": "avg out turn",
10
10
  "field.avg": "avg",
11
- "field.balance_bunch": "balance bunch",
12
11
  "field.balance_bunch_in_field": "balance bunch in field",
12
+ "field.balance_bunch": "balance bunch",
13
13
  "field.block": "block",
14
14
  "field.bunches_per_hectar": "bunches per hectar",
15
15
  "field.bunches_per_palm": "bunches per palm",
@@ -97,7 +97,7 @@
97
97
  "field.total_out_turn": "total out turn",
98
98
  "field.total_stand": "total stand",
99
99
  "field.total_task_covered": "total task covered",
100
- "field.total_tonnage_harvested": "total tonnage harvested",
100
+ "field.total_tonnage_estimated": "total tonnage (estimated)",
101
101
  "field.total_tonnage_release": "total tonnage release",
102
102
  "field.total_tonnage": "total tonnage",
103
103
  "field.total_weight_loaded": "total weight loaded",
@@ -138,17 +138,17 @@
138
138
  "label.lorry_no": "lorry no",
139
139
  "label.mill": "mill",
140
140
  "label.owner": "owner",
141
- "label.percentage": "percentage",
141
+ "label.oer_percentage": "OER percentage",
142
142
  "label.please_select_a_block": "please select a block",
143
143
  "label.rainfall": "rainfall",
144
- "label.total_bunch": "total bunch",
145
144
  "label.total_bunch_harvested": "total bunch harvested",
146
145
  "label.total_bunch_in_field": "total bunch in field",
147
146
  "label.total_bunch_loaded": "total bunch loaded",
147
+ "label.total_bunch": "total bunch",
148
148
  "label.total_number_of_bunches": "total no. of bunches",
149
149
  "label.total_task_covered": "total task covered",
150
- "label.total_tonnage": "total tonnage",
151
150
  "label.total_tonnage_loaded": "total tonnage loaded",
151
+ "label.total_tonnage": "total tonnage",
152
152
  "label.truck_driver": "truck driver",
153
153
  "label.truck_no": "truck no",
154
154
  "label.yesterday_balance_bunch": "yesterday balance bunch",
@@ -163,6 +163,7 @@
163
163
  "text.delete_dispatchment_record": "delete dispatchment record",
164
164
  "text.delete_harvesting_record": "delete harvesting record",
165
165
  "text.delete_loading_record": "delete loading record",
166
+ "text.destination_is_not_selected": "destination is not selected",
166
167
  "text.dispatch_record_created": "dispatch record created",
167
168
  "text.dispatch_record_invalid": "dispatch record invalid",
168
169
  "text.dispatchment_record_has_been_deleted": "dispatchment record has been deleted",
@@ -186,7 +187,6 @@
186
187
  "text.loading_record_has_been_deleted": "loading record has been deleted",
187
188
  "text.loading_record_invalid": "loading record invalid",
188
189
  "text.loading_record_updated": "loading record updated",
189
- "text.destination_is_not_selected": "destination is not selected",
190
190
  "text.no_adjustment_can_be_submitted": "no adjustment can be submitted",
191
191
  "text.no_records_in_dispatchment_list": "no records in dispatchment list",
192
192
  "text.no_records_in_loading_list": "no records in loading list",
@@ -218,6 +218,7 @@
218
218
  "title.create_dispatchment_record": "create dispatchment record",
219
219
  "title.create_harvesting_record": "create harvesting record",
220
220
  "title.create_loading_record": "create loading record",
221
+ "title.daily_ffb_dispatch_and_production": "daily FFB dispatch and production",
221
222
  "title.daily_loading_record": "daily loading record",
222
223
  "title.daily_production_report": "daily production report",
223
224
  "title.daily_staff_harvest": "daily staff harvest",
@@ -25,12 +25,12 @@
25
25
  "field.status": "status",
26
26
  "field.task_no": "task no",
27
27
  "field.total_bunch": "total bunch",
28
- "field.total_tonnage": "total tonnage",
29
28
  "field.total_harvested": "total harvested",
30
29
  "field.total_hectarage": "total hectarage",
31
30
  "field.total_no_of_bunches": "total no of bunches",
32
31
  "field.total_stand": "total stand",
33
- "field.total_tonnage_harvested": "total tonnage harvested",
32
+ "field.total_tonnage": "total tonnage",
33
+ "field.total_tonnage_estimated": "total tonnage (estimated)",
34
34
  "field.total_weight_loaded": "total weight loaded",
35
35
  "field.total_weight": "total weight",
36
36
  "field.trip": "trip",
@@ -47,7 +47,7 @@
47
47
  "label.harvesting_round": "harvesting round",
48
48
  "label.loading_date": "loading date",
49
49
  "label.owner": "owner",
50
- "label.percentage": "percentage",
50
+ "label.oer_percentage": "OER percentage",
51
51
  "label.please_select_a_block": "please select a block",
52
52
  "label.rainfall": "rainfall",
53
53
  "label.total_bunch_harvested": "total bunch harvested",
@@ -58,12 +58,12 @@
58
58
  "text.code-management": "[ko] code management",
59
59
  "text.create_harvesting_record": "create harvesting record",
60
60
  "text.create_loading_record": "create loading record",
61
+ "text.destination_is_not_selected": "destination is not selected",
61
62
  "text.empty_value_in_list": "empty value in record list",
62
63
  "text.harvesting_record_created": "harvesting record created",
63
64
  "text.harvesting_record_invalid": "harvesting record invalid",
64
65
  "text.loading_record_created": "loading record created",
65
66
  "text.loading_record_invalid": "loading record invalid",
66
- "text.destination_is_not_selected": "destination is not selected",
67
67
  "text.invalid_percentage_value": "invalid percentage value",
68
68
  "text.no_records": "no records",
69
69
  "text.there_is_duplicated_staff_in_record": "there is duplicated staff in this record",
@@ -81,6 +81,7 @@
81
81
  "title.company": "company",
82
82
  "title.create_harvesting_record": "create harvesting record",
83
83
  "title.create_loading_record": "create loading record",
84
+ "title.daily_ffb_dispatch_and_production": "daily FFB dispatch and production",
84
85
  "title.daily_loading_record": "daily loading record",
85
86
  "title.daily_production_report": "daily production report",
86
87
  "title.global_plantation_setting": "[ko] global plantation setting",
@@ -99,6 +100,6 @@
99
100
  "title.overall_record": "overall record",
100
101
  "title.plantation_setting": "plantation setting",
101
102
  "title.ramp": "ramp",
102
- "title.staff": "staff",
103
- "title.select_destination": "select destination"
103
+ "title.select_destination": "select destination",
104
+ "title.staff": "staff"
104
105
  }
@@ -25,15 +25,15 @@
25
25
  "field.status": "status",
26
26
  "field.task_no": "task no",
27
27
  "field.total_bunch": "total bunch",
28
- "field.total_tonnage": "total tonnage",
29
- "field.total_weight": "total weight",
30
- "field.total_weight_loaded": "total weight loaded",
31
- "field.trip": "trip",
32
28
  "field.total_harvested": "total harvested",
33
29
  "field.total_hectarage": "total hectarage",
34
30
  "field.total_no_of_bunches": "total no of bunches",
35
31
  "field.total_stand": "total stand",
36
- "field.total_tonnage_harvested": "total tonnage harvested",
32
+ "field.total_tonnage": "total tonnage",
33
+ "field.total_weight_loaded": "total weight loaded",
34
+ "field.total_weight": "total weight",
35
+ "field.trip": "trip",
36
+ "field.total_tonnage_estimated": "total tonnage (estimated)",
37
37
  "field.type": "type",
38
38
  "field.valid_from": "valid from",
39
39
  "field.year_planted": "year planted",
@@ -47,7 +47,7 @@
47
47
  "label.harvesting_round": "harvesting round",
48
48
  "label.loading_date": "loading date",
49
49
  "label.owner": "owner",
50
- "label.percentage": "percentage",
50
+ "label.oer_percentage": "OER percentage",
51
51
  "label.please_select_a_block": "please select a block",
52
52
  "label.rainfall": "rainfall",
53
53
  "label.total_bunch_harvested": "total bunch harvested",
@@ -58,12 +58,12 @@
58
58
  "text.code-management": "[ms] code management",
59
59
  "text.create_harvesting_record": "create harvesting record",
60
60
  "text.create_loading_record": "create loading record",
61
+ "text.destination_is_not_selected": "destination is not selected",
61
62
  "text.empty_value_in_list": "empty value in record list",
62
63
  "text.harvesting_record_created": "harvesting record created",
63
64
  "text.harvesting_record_invalid": "harvesting record invalid",
64
65
  "text.loading_record_created": "loading record created",
65
66
  "text.loading_record_invalid": "loading record invalid",
66
- "text.destination_is_not_selected": "destination is not selected",
67
67
  "text.no_records": "no records",
68
68
  "text.invalid_percentage_value": "invalid percentage value",
69
69
  "text.there_is_duplicated_staff_in_record": "there is duplicated staff in this record",
@@ -81,6 +81,7 @@
81
81
  "title.company": "syarikat",
82
82
  "title.create_harvesting_record": "create harvesting record",
83
83
  "title.create_loading_record": "create loading record",
84
+ "title.daily_ffb_dispatch_and_production": "daily FFB dispatch and production",
84
85
  "title.daily_loading_record": "daily loading record",
85
86
  "title.daily_production_report": "daily production report",
86
87
  "title.global_plantation_setting": "[ms] global plantation setting",
@@ -99,6 +100,6 @@
99
100
  "title.overall_record": "overall record",
100
101
  "title.plantation_setting": "plantation setting",
101
102
  "title.ramp": "ramp",
102
- "title.staff": "staff",
103
- "title.select_destination": "select destination"
103
+ "title.select_destination": "select destination",
104
+ "title.staff": "staff"
104
105
  }
@@ -25,12 +25,12 @@
25
25
  "field.status": "status",
26
26
  "field.task_no": "task no",
27
27
  "field.total_bunch": "total bunch",
28
- "field.total_tonnage": "total tonnage",
29
28
  "field.total_harvested": "total harvested",
30
29
  "field.total_hectarage": "total hectarage",
31
30
  "field.total_no_of_bunches": "total no of bunches",
32
31
  "field.total_stand": "total stand",
33
- "field.total_tonnage_harvested": "total tonnage harvested",
32
+ "field.total_tonnage": "total tonnage",
33
+ "field.total_tonnage_estimated": "total tonnage (estimated)",
34
34
  "field.total_weight_loaded": "total weight loaded",
35
35
  "field.total_weight": "total weight",
36
36
  "field.trip": "trip",
@@ -47,7 +47,7 @@
47
47
  "label.harvesting_round": "harvesting round",
48
48
  "label.loading_date": "loading date",
49
49
  "label.owner": "owner",
50
- "label.percentage": "percentage",
50
+ "label.oer_percentage": "OER percentage",
51
51
  "label.please_select_a_block": "please select a block",
52
52
  "label.rainfall": "rainfall",
53
53
  "label.total_bunch_harvested": "total bunch harvested",
@@ -58,12 +58,12 @@
58
58
  "text.code-management": "[zh] code management",
59
59
  "text.create_harvesting_record": "create harvesting record",
60
60
  "text.create_loading_record": "create loading record",
61
+ "text.destination_is_not_selected": "destination is not selected",
61
62
  "text.empty_value_in_list": "empty value in record list",
62
63
  "text.harvesting_record_created": "harvesting record created",
63
64
  "text.harvesting_record_invalid": "harvesting record invalid",
64
65
  "text.loading_record_created": "loading record created",
65
66
  "text.loading_record_invalid": "loading record invalid",
66
- "text.destination_is_not_selected": "destination is not selected",
67
67
  "text.no_records": "no records",
68
68
  "text.there_is_duplicated_staff_in_record": "there is duplicated staff in this record",
69
69
  "text.total_bunch_weight_should_be_positive": "total bunch weight should be positive",
@@ -81,6 +81,7 @@
81
81
  "title.company": "company",
82
82
  "title.create_harvesting_record": "create harvesting record",
83
83
  "title.create_loading_record": "create loading record",
84
+ "title.daily_ffb_dispatch_and_production": "daily FFB dispatch and production",
84
85
  "title.daily_loading_record": "daily loading record",
85
86
  "title.daily_production_report": "daily production report",
86
87
  "title.global_plantation_setting": "[zh] global plantation setting",
@@ -99,6 +100,6 @@
99
100
  "title.overall_record": "overall record",
100
101
  "title.plantation_setting": "plantation setting",
101
102
  "title.ramp": "ramp",
102
- "title.staff": "staff",
103
- "title.select_destination": "select destination"
103
+ "title.select_destination": "select destination",
104
+ "title.staff": "staff"
104
105
  }