· 5 years ago · Feb 26, 2021, 05:00 PM
1import { ENTITY_WINDOW_MODULES } from '../../constants';
2import { TABLE_NAMES } from '../../constants/globalConsts';
3import { ENTITY_WINDOW_CUSTOM_CONTROL_TYPES } from '../../constants/entityWindowConsts'
4import { CONTROL_FIELD_TYPES, CONTROL_FIELD_DISPLAY_TYPES, BOOKING_RESOURCE_GUIDS, BOOKING_PROFITPERHOUR_FIELDNAME, CHARGERATE_CURRENT_VALUE_FIELDNAME, ROLE_REQUEST_PROFITPERHOUR_FIELDNAME } from '../../constants/fieldConsts';
5import { resourceUserStatus } from '../../constants/tablesConsts';
6import { BOOKING_RESOURCES_FIELD_VALUE_EXPLANATION_KEY } from '../../constants/fieldValueExplanationsConsts';
7
8const bookingTableName = TABLE_NAMES.BOOKING;
9const resourceTableName = TABLE_NAMES.RESOURCE;
10const jobTableName = TABLE_NAMES.JOB;
11const clientTableName = TABLE_NAMES.CLIENT;
12const rolerequestTableName = TABLE_NAMES.ROLEREQUEST;
13
14const lookupFilterLines = [
15 {
16 "field": resourceUserStatus.fieldName,
17 "operator": "Equals",
18 "value": true
19 }
20];
21
22//BOOKING FIELDS
23export const bookingStartSectionField = {
24 editable: true,
25 table: bookingTableName,
26 name: `${bookingTableName}_start`
27};
28
29export const bookingEndSectionField = {
30 editable: true,
31 showValueExplanation: true,
32 table: bookingTableName,
33 name: `${bookingTableName}_end`
34};
35
36export const bookingResourceSectionField = {
37 editable: true,
38 table: bookingTableName,
39 name: `${bookingTableName}_resource_guid`,
40 lookupFilterLines,
41 excludeModules: {
42 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create']
43 }
44};
45
46export const bookingResourcesSectionField = {
47 editable: true,
48 table: bookingTableName,
49 actualFieldName: `${bookingTableName}_resource_guid`,
50 showValueExplanation: true,
51 explanationValueKey: BOOKING_RESOURCES_FIELD_VALUE_EXPLANATION_KEY,
52 name:BOOKING_RESOURCE_GUIDS,
53 label: 'Resource',
54 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTI_VALUE_LINKED_FIELD_CONTROL,
55 lookupFilterLines,
56 excludeModules: {
57 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['edit', 'read'],
58 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_MODAL]: ['edit', 'read'],
59 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_DETAILS_PANE]: ['contextual edit', 'read', 'edit'],
60 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_DETAILS_PANE]: ['contextual edit', 'read', 'edit'],
61 [ENTITY_WINDOW_MODULES.JOBS_PAGE_DETAILS_PANE]: ['contextual edit', 'read', 'edit'],
62 [ENTITY_WINDOW_MODULES.JOBS_PAGE_ROLE_GROUP_DETAILS_PANE]: ['contextual edit', 'read', 'edit'],
63 [ENTITY_WINDOW_MODULES.JOBS_PAGE_MODAL]: ['create', 'edit'],
64 [ENTITY_WINDOW_MODULES.JOBS_PAGE_BATCHED_DETAILS_PANE]: ['contextual edit', 'read', 'edit']
65 }
66};
67
68export const bookingJobSectionField = {
69 editable: true,
70 table: bookingTableName,
71 name: `${bookingTableName}_job_guid`
72};
73
74export const bookingStatusSectionField = {
75 editable: true,
76 showValueExplanation: true,
77 FIELD_VALUE_CONSTS: {
78 UNCONFIRMED: 'Unconfirmed'
79 },
80 table: bookingTableName,
81 name: `${bookingTableName}_bookingtype_guid`
82};
83
84export const bookingFixedHoursSectionField = {
85 editable: true,
86 table: bookingTableName,
87 name: `${bookingTableName}_fixedtime`
88};
89
90export const bookingNotesSectionField = {
91 editable: true,
92 table: bookingTableName,
93 name: `${bookingTableName}_notes`
94};
95
96export const bookingTrueLoadingSectionField = {
97 editable: true,
98 table: bookingTableName,
99 name: `${bookingTableName}_true_loading`
100};
101
102export const bookingLoadingSectionField = {
103 editable: true,
104 table: bookingTableName,
105 name: `${bookingTableName}_loading`
106};
107
108export const bookingTimeSectionField = {
109 editable: true,
110 table: bookingTableName,
111 name: `${bookingTableName}_time`
112};
113
114export const bookingFixedTimeSectionField = {
115 editable: true,
116 table: bookingTableName,
117 name: `${bookingTableName}_fixedtime`
118};
119
120export const bookingHoursPerDaySectionField = {
121 editable: true,
122 table: bookingTableName,
123 name: `${bookingTableName}_hours_per_day`
124};
125
126export const bookingNonWorkSectionField = {
127 editable: true,
128 showValueExplanation: true,
129 table: bookingTableName,
130 name: `${bookingTableName}_nonwork`
131};
132
133export const bookingWorkActivitySectionField = {
134 editable: true,
135 showValueExplanation: true,
136 table: bookingTableName,
137 name: `${bookingTableName}_workactivity_guid`
138};
139
140export const timeAllocationSectionField = {
141 editable: true,
142 table: bookingTableName,
143 name: `${bookingTableName}_time_allocation`,
144 readOnlyExplanation: true,
145 label: '##key##timeAllocationTitle###Time allocation',
146 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_RADIO_CONTROL,
147 mandatory: true,
148 leadingFieldName: bookingFixedTimeSectionField.name,
149 valueKey: { defaultValue: 0, name: bookingFixedTimeSectionField.name, table: bookingTableName, editable: true, suffix: '##key##fixedTimeSectionSuffix###hrs', display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type: CONTROL_FIELD_TYPES.RADIO_VALUE },
150 fields: [
151 { name: bookingLoadingSectionField.name, table: bookingTableName, editable: true, suffix: '##key##loadingSectionSuffix###% of resource capacity', display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type: CONTROL_FIELD_TYPES.RADIO_OPTION, key: 0 },
152 { name: bookingTimeSectionField.name, table: bookingTableName, editable: true, suffix: '##key##timeSectionSuffix###hours booked in total', display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type: CONTROL_FIELD_TYPES.RADIO_OPTION, key: 1 },
153 { name: bookingHoursPerDaySectionField.name, table: bookingTableName, editable: true, suffix: '##key##hoursPerDaySuffix###hours per day', display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type: CONTROL_FIELD_TYPES.RADIO_OPTION, key: 2 }
154 ],
155 multifield: true,
156 dataFields: [bookingLoadingSectionField.name, bookingTimeSectionField.name, bookingHoursPerDaySectionField.name]
157};
158
159export const dateRangeSectionField = {
160 editable: true,
161 table: bookingTableName,
162 name: `${bookingTableName}_date_range`,
163 label: '##key##dateRangeLabel###Date range',
164 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.DATE_RANGE_CONTROL,
165 mandatory: true,
166 leadingFieldName: bookingStartSectionField.name,
167 showValueExplanation: true,
168 startDateField: { name: bookingStartSectionField.name, table: bookingTableName, editable: true, display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type:CONTROL_FIELD_TYPES.DATE_RANGE },
169 endDateField: { name: bookingEndSectionField.name, table: bookingTableName, editable: true, display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type:CONTROL_FIELD_TYPES.DATE_RANGE },
170 fields: [
171 {
172 name: bookingNonWorkSectionField.name,
173 table: bookingTableName,
174 editable: true,
175 display: CONTROL_FIELD_DISPLAY_TYPES.NESTED,
176 fieldText: '##key##nonWorkSectionFieldText###Include non-working days',
177 type: CONTROL_FIELD_TYPES.ADDITIONAL_FIELD,
178 showLabel: false,
179 showValueExplanation: true
180 }
181 ],
182 multifield: true,
183 dataFields: [bookingStartSectionField.name, bookingEndSectionField.name]
184};
185
186export const bookingChargeModeField = {
187 editable: false,
188 table: bookingTableName,
189 name: `${bookingTableName}_chargemode`,
190 mappedDisplayValues: [
191 { value: 0, displayValue: '##key##bookingOwnResourceChargeModeLabel###Resource charge rate' },
192 { value: 1, displayValue: '##key##bookingDifferentResourceChargeModeLabel###Different charge rate' },
193 { value: 2, displayValue: '##key##bookingCustomChargeModeLabel###Custom rate' }
194 ],
195 excludeModules: {
196 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['edit', 'create']
197 }
198};
199
200export const bookingResourceChargeRateCurrentValueField = {
201 editable: false,
202 table: resourceTableName,
203 name: CHARGERATE_CURRENT_VALUE_FIELDNAME,
204 requestFieldName: `${bookingTableName}_resource_guid.chargerate_current_value`
205};
206
207export const bookingOverriddenChargeRateField = {
208 editable: true,
209 table: bookingTableName,
210 name: `${bookingTableName}_overridden_chargerate_guid`
211};
212
213//dummy field with no control
214export const bookingCustomChargeRateField = {
215 editable: false,
216 table: bookingTableName,
217 name: 'booking_custom_charge_rate_dummy_field'
218};
219
220export const bookingRevenuePerHourField = {
221 editable: false,
222 table: bookingTableName,
223 editableWhen: {fieldName: bookingChargeModeField.name, value: 2},
224 name: `${bookingTableName}_revenueperhour`,
225 excludeModules: {
226 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_DETAILS_PANE]: ['read', 'edit', 'contextual edit']
227 }
228};
229
230export const bookingCostPerHourField = {
231 editable: false,
232 table: bookingTableName,
233 editableWhen: {fieldName: bookingChargeModeField.name, value: 2},
234 name: `${bookingTableName}_costperhour`,
235 excludeModules: {
236 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_DETAILS_PANE]: ['read', 'edit', 'contextual edit']
237 }
238};
239
240// Get value from booking_revenueperhour - booking_costperhour
241export const bookingProfitPerHourField = { // App field - driven epics to subtract and get value
242 editable: false,
243 table: bookingTableName,
244 name: BOOKING_PROFITPERHOUR_FIELDNAME,
245 excludeModules: {
246 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_DETAILS_PANE]: ['read', 'edit', 'contextual edit']
247 }
248};
249
250export const bookingTotalRevenueField = {
251 editable: false,
252 table: bookingTableName,
253 name: `${bookingTableName}_totalrevenue`,
254 excludeModules: {
255 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create', 'edit']
256 },
257 showOnReadOnlyMode: true
258};
259
260export const bookingTotalCostField = {
261 editable: false,
262 table: bookingTableName,
263 name: `${bookingTableName}_totalcost`,
264 excludeModules: {
265 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create', 'edit']
266 },
267 showOnReadOnlyMode: true
268};
269
270export const bookingTotalProfitField = {
271 editable: false,
272 table: bookingTableName,
273 name: `${bookingTableName}_totalprofit`,
274 excludeModules: {
275 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create', 'edit']
276 },
277 showOnReadOnlyMode: true
278};
279
280export const bookingChargeModeSectionField = {
281 editable: true,
282 table: bookingTableName,
283 name: `${bookingTableName}_chargemode_section_field`,
284 label: '##key##chargeRateFieldsControlTitle###Charge rate',
285 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_RADIO_CONTROL,
286 mandatory: false,
287 leadingFieldName: bookingChargeModeField.name,
288 valueKey: {
289 defaultValue: 0,
290 name: bookingChargeModeField.name,
291 table: bookingTableName,
292 editable: true,
293 type: CONTROL_FIELD_TYPES.RADIO_VALUE
294 },
295 fields: [
296 {
297 ...bookingResourceChargeRateCurrentValueField,
298 display: CONTROL_FIELD_DISPLAY_TYPES.NESTED,
299 type: CONTROL_FIELD_TYPES.RADIO_OPTION,
300 mandatory: false,
301 alwaysShowControl: true,
302 label: '##key##bookingResourceChargeRateLabel###Resource charge rate',
303 key: 0
304 },
305 {
306 ...bookingOverriddenChargeRateField,
307 display: CONTROL_FIELD_DISPLAY_TYPES.NESTED,
308 type: CONTROL_FIELD_TYPES.RADIO_OPTION,
309 mandatory: true,
310 hideWhenNotSelected: true,
311 label: '##key##bookingOverriddenChargeRateLabel###Use different charge rate',
312 key: 1
313 },
314 {
315 ...bookingCustomChargeRateField,
316 display: CONTROL_FIELD_DISPLAY_TYPES.NESTED,
317 type: CONTROL_FIELD_TYPES.RADIO_OPTION,
318 mandatory: false,
319 withoutControl: true,
320 label: '##key##bookingCustomChargeRateLabel###Use custom rate',
321 key: 2
322 }
323 ],
324 multifield: true,
325 dependantFields: [
326 bookingRevenuePerHourField,
327 bookingTotalRevenueField,
328 bookingCostPerHourField,
329 bookingTotalCostField,
330 bookingProfitPerHourField,
331 bookingTotalProfitField
332 ],
333 excludeModules: {
334 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['read'],
335 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_DETAILS_PANE]: ['contextual edit', 'edit', 'read'],
336 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_DETAILS_PANE]: ['contextual edit', 'edit', 'read'],
337 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_MODAL]: ['read']
338 }
339};
340
341export const bookingRevenueRatesRowField = {
342 editable: false,
343 table: bookingTableName,
344 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_SINGLE_ROW_CONTROL,
345 name: 'Booking revenue rates fields row',
346 label: '##key##bookingRevenueRatesRowTitle###Revenue',
347 fields: [
348 bookingRevenuePerHourField,
349 bookingTotalRevenueField
350 ],
351 multifield: true,
352 excludeModules: {
353 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['read'],
354 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_DETAILS_PANE]: ['contextual edit', 'edit', 'read'],
355 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_DETAILS_PANE]: ['contextual edit', 'edit', 'read'],
356 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_MODAL]: ['read']
357 }
358};
359
360export const bookingCostRatesRowField = {
361 editable: false,
362 table: bookingTableName,
363 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_SINGLE_ROW_CONTROL,
364 name: 'Booking cost rates fields row',
365 label: '##key##bookingCostRatesRowTitle###Cost',
366 fields: [
367 bookingCostPerHourField,
368 bookingTotalCostField
369 ],
370 multifield: true,
371 excludeModules: {
372 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['read'],
373 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_DETAILS_PANE]: ['contextual edit', 'edit', 'read'],
374 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_DETAILS_PANE]: ['contextual edit', 'edit', 'read'],
375 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_MODAL]: ['read']
376 }
377};
378
379export const bookingProfitRatesRowField = {
380 editable: false,
381 table: bookingTableName,
382 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_SINGLE_ROW_CONTROL,
383 name: 'Booking profit rates fields row',
384 label: '##key##bookingProfitRatesRowTitle###Profit',
385 fields: [
386 bookingProfitPerHourField,
387 bookingTotalProfitField
388 ],
389 multifield: true,
390 excludeModules: {
391 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['read'],
392 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_DETAILS_PANE]: ['contextual edit', 'edit', 'read'],
393 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_DETAILS_PANE]: ['contextual edit', 'edit', 'read'],
394 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_MODAL]: ['read']
395 }
396};
397
398export const bookingReadonlyChargeRatesRowField = {
399 editable: false,
400 table: bookingTableName,
401 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_SINGLE_ROW_CONTROL,
402 name: 'Booking charge rates view mode fields row',
403 label: '##key##bookingViewModeChargeRatesTitle###Rates',
404 fields: [
405 bookingChargeModeField,
406 {
407 ...bookingResourceChargeRateCurrentValueField,
408 showWhen: { fieldName: bookingChargeModeField.name, value: 0 }
409 },
410 {
411 ...bookingOverriddenChargeRateField,
412 showWhen: { fieldName: bookingChargeModeField.name, value: 1 },
413 editable: false
414 }
415 ],
416 multifield: true,
417 excludeModules: {
418 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create', 'edit']
419 },
420 showOnReadOnlyMode: true
421};
422
423export const bookingDiaryDaysField = {
424 editable: false,
425 table: bookingTableName,
426 name: `${bookingTableName}_diary_days`
427};
428
429//JOB FIELDS
430export const jobDescriptionField = {
431 editable: true,
432 table: jobTableName,
433 name: `${jobTableName}_description`
434};
435
436export const jobCodeField = {
437 editable: true,
438 table: jobTableName,
439 name: `${jobTableName}_code`
440};
441
442export const jobClientField = {
443 editable: true,
444 table: jobTableName,
445 name: `${jobTableName}_client_guid`
446};
447
448export const jobEngagementleadField = {
449 editable: true,
450 table: jobTableName,
451 name: `${jobTableName}_engagementlead_resource_guid`
452};
453
454export const jobStatusField = {
455 editable: true,
456 table: jobTableName,
457 name: `${jobTableName}_jobstatus_guid`
458};
459
460export const jobStartDateField = {
461 editable: true,
462 table: jobTableName,
463 name: `${jobTableName}_start`
464};
465
466export const jobEndDateField = {
467 editable: true,
468 table: jobTableName,
469 name: `${jobTableName}_end`
470};
471
472export const jobLocationField = {
473 editable: true,
474 table: jobTableName,
475 name: `${jobTableName}_location_guid`
476};
477
478export const jobUtilisationType = {
479 editable: true,
480 table: jobTableName,
481 name: `${jobTableName}_isExcludeFromUtilisation`,
482 excludeModules: {
483 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_DETAILS_PANE]: ['contextual edit', 'read'],
484 [ENTITY_WINDOW_MODULES.JOBS_PAGE_DETAILS_PANE]: ['contextual edit', 'read'],
485 [ENTITY_WINDOW_MODULES.JOBS_PAGE_ROLE_GROUP_DETAILS_PANE]: ['contextual edit', 'read']
486 }
487};
488
489export const jobChargeTypeField = {
490 editable: true,
491 table: jobTableName,
492 name: `${jobTableName}_chargetype_guid`
493};
494
495export const jobBudgetField = {
496 editable: true,
497 table: jobTableName,
498 name: `${jobTableName}_budget`,
499 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.CURRENCY_CONTROL
500};
501
502export const jobTotalRevenueField = {
503 editable: false,
504 table: jobTableName,
505 name: `${jobTableName}_totalrevenue`,
506 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.READONLY_CURRENCY_CONTROL,
507 excludeModules: {
508 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create', 'edit'],
509 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_MODAL]: ['edit'],
510 [ENTITY_WINDOW_MODULES.JOBS_PAGE_MODAL]: ['create', 'edit'],
511 [ENTITY_WINDOW_MODULES.JOBS_PAGE_BATCH_MODAL]: ['edit']
512 }
513};
514
515export const jobTotalCostField = {
516 editable: false,
517 table: jobTableName,
518 name: `${jobTableName}_totalcost`,
519 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.READONLY_CURRENCY_CONTROL,
520 excludeModules: {
521 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create', 'edit'],
522 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_MODAL]: ['edit'],
523 [ENTITY_WINDOW_MODULES.JOBS_PAGE_MODAL]: ['create', 'edit'],
524 [ENTITY_WINDOW_MODULES.JOBS_PAGE_BATCH_MODAL]: ['edit']
525 }
526};
527
528export const jobTotalProfitField = {
529 editable: false,
530 table: jobTableName,
531 name: `${jobTableName}_totalprofit`,
532 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.READONLY_CURRENCY_CONTROL,
533 excludeModules: {
534 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create', 'edit'],
535 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_MODAL]: ['edit'],
536 [ENTITY_WINDOW_MODULES.JOBS_PAGE_MODAL]: ['create', 'edit'],
537 [ENTITY_WINDOW_MODULES.JOBS_PAGE_BATCH_MODAL]: ['edit']
538 }
539};
540
541export const jobBudgetConsumedField = {
542 editable: false,
543 table: jobTableName,
544 name: `${jobTableName}_budgetconsumed`,
545 excludeModules: {
546 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create', 'edit'],
547 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_BATCH_MODAL]: ['edit'],
548 [ENTITY_WINDOW_MODULES.JOBS_PAGE_MODAL]: ['create', 'edit'],
549 [ENTITY_WINDOW_MODULES.JOBS_PAGE_BATCH_MODAL]: ['edit']
550 }
551};
552
553//RESOURCE FIELDS
554export const resourceDescriptionField = {
555 editable: false,
556 table: resourceTableName,
557 name: `${resourceTableName}_description`,
558 excludeModules: Object.values(ENTITY_WINDOW_MODULES).reduce((acc, val)=> {
559 acc[val] = ['contextual edit', 'edit', 'read', 'create'];
560 return acc;
561 }, {})
562};
563
564export const resourceFirstNameField = {
565 editable: true,
566 table: resourceTableName,
567 name: `${resourceTableName}_firstname`
568};
569
570export const resourceLastNameField = {
571 editable: true,
572 table: resourceTableName,
573 name: `${resourceTableName}_lastname`
574};
575
576export const resourceJobTitleField = {
577 editable: true,
578 table: resourceTableName,
579 name: `${resourceTableName}_rolename`
580};
581
582export const resourceLocalGradeField = {
583 editable: true,
584 table: resourceTableName,
585 name: `${resourceTableName}_localgrade_guid`
586};
587
588export const resourceCurrDeparmentField = {
589 editable: true,
590 table: resourceTableName,
591 name: `${resourceTableName}_current_department_guid`
592};
593
594export const resourceEmailField = {
595 editable: true,
596 table: resourceTableName,
597 name: `${resourceTableName}_email`
598};
599
600export const resourceManagerField = {
601 editable: true,
602 table: resourceTableName,
603 name: `${resourceTableName}_manager_resource_guid`
604};
605
606export const resourceLocationField = {
607 editable: true,
608 table: resourceTableName,
609 name: `${resourceTableName}_location_guid`
610};
611
612export const resourceCellphoneField = {
613 editable: true,
614 table: resourceTableName,
615 name: `${resourceTableName}_cellphone`
616};
617
618export const resourceDiaryGroupField = {
619 editable: true,
620 table: resourceTableName,
621 name: 'Diary Group',
622 fna: 'diaries'
623};
624
625export const resourceChargeRateField = {
626 editable: true,
627 table: resourceTableName,
628 name: 'Charge Rate'
629};
630
631export const resourceDiaryDaysField = {
632 editable: true,
633 table: resourceTableName,
634 name: `${resourceTableName}_diary_days`
635};
636
637export const resourceIDField = {
638 editable: false,
639 table: resourceTableName,
640 name: `${resourceTableName}_guid`
641};
642
643//CLIENT FIELDS
644
645export const clientDescriptionField = {
646 editable: true,
647 table: clientTableName,
648 name: `${clientTableName}_description`
649};
650
651export const clientCodeField = {
652 editable: true,
653 table: clientTableName,
654 name: `${clientTableName}_code`
655};
656
657//RESORCE ROLE FORM FIELDS
658export const roleRequestResourceField = {
659 editable: true,
660 table: rolerequestTableName,
661 name: `${rolerequestTableName}_resource_guid`,
662};
663
664export const roleRequestStatusField = {
665 editable: false,
666 table: rolerequestTableName,
667 name: `${rolerequestTableName}_rolerequeststatus_guid`,
668};
669
670export const roleRequestWorkActivitySectionField = {
671 editable: true,
672 showValueExplanation: true,
673 table: rolerequestTableName,
674 name: `${rolerequestTableName}_workactivity_guid`
675};
676
677export const roleRequestNotesSectionField = {
678 editable: true,
679 table: rolerequestTableName,
680 name: `${rolerequestTableName}_notes`
681};
682
683export const roleRequestStartSectionField = {
684 editable: true,
685 table: rolerequestTableName,
686 name: `${rolerequestTableName}_start`
687};
688
689export const roleRequestEndSectionField = {
690 editable: true,
691 showValueExplanation: true,
692 table: rolerequestTableName,
693 name: `${rolerequestTableName}_end`
694};
695
696export const roleRequestNonWorkSectionField = {
697 editable: true,
698 showValueExplanation: true,
699 table: rolerequestTableName,
700 name: `${rolerequestTableName}_nonwork`
701};
702
703export const roleRequestDateRangeSectionField = {
704 editable: true,
705 table: rolerequestTableName,
706 name: `${rolerequestTableName}_date_range`,
707 label: '##key##datesRequiredLabel###Dates required',
708 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.DATE_RANGE_CONTROL,
709 mandatory: true,
710 leadingFieldName: roleRequestStartSectionField.name,
711 showValueExplanation: true,
712 startDateField: { name: roleRequestStartSectionField.name, table: rolerequestTableName, editable: true, display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type:CONTROL_FIELD_TYPES.DATE_RANGE },
713 endDateField: { name: roleRequestEndSectionField.name, table: rolerequestTableName, editable: true, display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type:CONTROL_FIELD_TYPES.DATE_RANGE },
714 fields: [
715 {
716 name: roleRequestNonWorkSectionField.name,
717 table: rolerequestTableName,
718 editable: true,
719 display: CONTROL_FIELD_DISPLAY_TYPES.NESTED,
720 fieldText: '##key##nonWorkSectionFieldText###Include non-working days',
721 type: CONTROL_FIELD_TYPES.ADDITIONAL_FIELD,
722 showLabel: false,
723 showValueExplanation: true
724 }
725 ],
726 multifield: true,
727 dataFields: [roleRequestStartSectionField.name, roleRequestEndSectionField.name]
728};
729
730/////////
731export const roleRequestChargeModeField = {
732 editable: false,
733 table: rolerequestTableName,
734 name: `${rolerequestTableName}_chargemode`,
735 mappedDisplayValues: [
736 { value: 0, displayValue: '##key##bookingOwnResourceChargeModeLabel###Resource charge rate' },
737 { value: 1, displayValue: '##key##bookingDifferentResourceChargeModeLabel###Different charge rate' },
738 { value: 2, displayValue: '##key##bookingCustomChargeModeLabel###Custom rate' }
739 ]
740};
741
742export const roleRequestResourceChargeRateCurrentValueField = {
743 editable: false,
744 table: rolerequestTableName,
745 name: CHARGERATE_CURRENT_VALUE_FIELDNAME,
746 requestFieldName: `${rolerequestTableName}_resource_guid.chargerate_current_value`
747};
748
749export const roleRequestOverriddenChargeRateField = {
750 editable: true,
751 table: rolerequestTableName,
752 name: `${rolerequestTableName}_overridden_chargerate_guid`
753};
754
755//dummy field with no control
756export const roleRequestCustomChargeRateField = {
757 editable: false,
758 table: rolerequestTableName,
759 name: 'rolerequest_custom_charge_rate_dummy_field'
760};
761
762export const roleRequestRevenuePerHourField = {
763 editable: false,
764 table: rolerequestTableName,
765 editableWhen: { fieldName: roleRequestChargeModeField.name, value: 2 },
766 name: `${rolerequestTableName}_revenueperhour`
767};
768
769export const roleRequestCostPerHourField = {
770 editable: false,
771 table: rolerequestTableName,
772 editableWhen: { fieldName: roleRequestChargeModeField.name, value: 2 },
773 name: `${rolerequestTableName}_costperhour`
774};
775
776// Get value from roleRequest_revenueperhour - booking_costperhour
777export const roleRequestProfitPerHourField = { // App field - driven epics to subtract and get value
778 editable: false,
779 table: rolerequestTableName,
780 name: ROLE_REQUEST_PROFITPERHOUR_FIELDNAME
781};
782
783export const roleRequestTotalRevenueField = {
784 editable: false,
785 table: rolerequestTableName,
786 name: `${rolerequestTableName}_totalrevenue`,
787 showOnReadOnlyMode: true
788};
789
790export const roleRequestTotalCostField = {
791 editable: false,
792 table: rolerequestTableName,
793 name: `${rolerequestTableName}_totalcost`,
794 showOnReadOnlyMode: true
795};
796
797export const roleRequestTotalProfitField = {
798 editable: false,
799 table: rolerequestTableName,
800 name: `${rolerequestTableName}_totalprofit`,
801 showOnReadOnlyMode: true
802};
803
804export const roleRequestChargeModeSectionField = {
805 editable: true,
806 table: rolerequestTableName,
807 name: `${rolerequestTableName}_chargemode_section_field`,
808 label: '##key##chargeRateFieldsControlTitle###Charge rate',
809 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_RADIO_CONTROL,
810 mandatory: false,
811 leadingFieldName: roleRequestChargeModeField.name,
812 valueKey: {
813 defaultValue: 0,
814 name: roleRequestChargeModeField.name,
815 table: rolerequestTableName,
816 editable: true,
817 type: CONTROL_FIELD_TYPES.RADIO_VALUE
818 },
819 fields: [
820 {
821 ...roleRequestResourceChargeRateCurrentValueField,
822 display: CONTROL_FIELD_DISPLAY_TYPES.NESTED,
823 type: CONTROL_FIELD_TYPES.RADIO_OPTION,
824 mandatory: false,
825 alwaysShowControl: true,
826 label: '##key##bookingResourceChargeRateLabel###Resource charge rate',
827 key: 0
828 },
829 {
830 ...roleRequestOverriddenChargeRateField,
831 display: CONTROL_FIELD_DISPLAY_TYPES.NESTED,
832 type: CONTROL_FIELD_TYPES.RADIO_OPTION,
833 mandatory: true,
834 hideWhenNotSelected: true,
835 label: '##key##bookingOverriddenChargeRateLabel###Use different charge rate',
836 key: 1
837 },
838 {
839 ...roleRequestCustomChargeRateField,
840 display: CONTROL_FIELD_DISPLAY_TYPES.NESTED,
841 type: CONTROL_FIELD_TYPES.RADIO_OPTION,
842 mandatory: false,
843 withoutControl: true,
844 label: '##key##bookingCustomChargeRateLabel###Use custom rate',
845 key: 2
846 }
847 ],
848 multifield: true,
849 dependantFields: [
850 roleRequestRevenuePerHourField,
851 roleRequestTotalRevenueField,
852 roleRequestCostPerHourField,
853 roleRequestTotalCostField,
854 roleRequestProfitPerHourField,
855 roleRequestTotalProfitField
856 ]
857};
858
859export const roleRequestRevenueRatesRowField = {
860 editable: false,
861 table: rolerequestTableName,
862 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_SINGLE_ROW_CONTROL,
863 name: 'Role revenue rates fields row',
864 label: '##key##bookingRevenueRatesRowTitle###Revenue',
865 fields: [
866 roleRequestRevenuePerHourField,
867 roleRequestTotalRevenueField
868 ],
869 multifield: true
870};
871
872export const roleRequestCostRatesRowField = {
873 editable: false,
874 table: rolerequestTableName,
875 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_SINGLE_ROW_CONTROL,
876 name: 'Role cost rates fields row',
877 label: '##key##bookingCostRatesRowTitle###Cost',
878 fields: [
879 roleRequestCostPerHourField,
880 roleRequestTotalCostField
881 ],
882 multifield: true
883};
884
885export const roleRequestProfitRatesRowField = {
886 editable: false,
887 table: rolerequestTableName,
888 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_SINGLE_ROW_CONTROL,
889 name: 'Booking profit rates fields row',
890 label: '##key##bookingProfitRatesRowTitle###Profit',
891 fields: [
892 roleRequestProfitPerHourField,
893 roleRequestTotalProfitField
894 ],
895 multifield: true
896};
897
898export const roleRequestReadonlyChargeRatesRowField = {
899 editable: false,
900 table: rolerequestTableName,
901 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_SINGLE_ROW_CONTROL,
902 name: 'Booking charge rates view mode fields row',
903 label: '##key##bookingViewModeChargeRatesTitle###Rates',
904 fields: [
905 roleRequestChargeModeField,
906 {
907 ...roleRequestResourceChargeRateCurrentValueField,
908 showWhen: { fieldName: roleRequestChargeModeField.name, value: 0 }
909 },
910 {
911 ...roleRequestOverriddenChargeRateField,
912 showWhen: { fieldName: roleRequestChargeModeField.name, value: 1 },
913 editable: false
914 }
915 ],
916 multifield: true,
917 showOnReadOnlyMode: true
918};
919/////
920
921export const roleRequestFixedTimeSectionField = {
922 editable: true,
923 table: rolerequestTableName,
924 name: `${rolerequestTableName}_fixedtime`
925};
926
927export const roleRequestLoadingSectionField = {
928 editable: true,
929 table: rolerequestTableName,
930 name: `${rolerequestTableName}_loading`
931};
932
933export const roleRequestTimeSectionField = {
934 editable: true,
935 table: rolerequestTableName,
936 name: `${rolerequestTableName}_time`
937};
938
939export const roleRequestHoursPerDaySectionField = {
940 editable: true,
941 table: rolerequestTableName,
942 name: `${rolerequestTableName}_hours_per_day`
943};
944
945export const roleRequestTimeAllocationSectionField = {
946 editable: true,
947 table: rolerequestTableName,
948 name: `${rolerequestTableName}_time_allocation`,
949 readOnlyExplanation: true,
950 label: '##key##timeAllocationTitle###Time allocation',
951 type: ENTITY_WINDOW_CUSTOM_CONTROL_TYPES.MULTIFIELD_RADIO_CONTROL,
952 mandatory: true,
953 leadingFieldName: roleRequestFixedTimeSectionField.name,
954 valueKey: { defaultValue: 0, name: roleRequestFixedTimeSectionField.name, table: rolerequestTableName, editable: true, suffix: '##key##fixedTimeSectionSuffix###hrs', display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type: CONTROL_FIELD_TYPES.RADIO_VALUE },
955 fields: [
956 { name: roleRequestLoadingSectionField.name, table: rolerequestTableName, editable: true, suffix: '##key##loadingSectionSuffix###% of resource capacity', display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type: CONTROL_FIELD_TYPES.RADIO_OPTION, key: 0 },
957 { name: roleRequestTimeSectionField.name, table: rolerequestTableName, editable: true, suffix: '##key##hoursInTotalSuffix###hours in total', display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type: CONTROL_FIELD_TYPES.RADIO_OPTION, key: 1 },
958 { name: roleRequestHoursPerDaySectionField.name, table: rolerequestTableName, editable: true, suffix: '##key##hoursPerDaySuffix###hours per day', display: CONTROL_FIELD_DISPLAY_TYPES.NESTED, type: CONTROL_FIELD_TYPES.RADIO_OPTION, key: 2 }
959 ],
960 multifield: true
961};
962
963export const fieldConfigMap = {
964 [bookingTableName]: {
965 [bookingStartSectionField.name]: bookingStartSectionField,
966 [bookingEndSectionField.name]: bookingEndSectionField,
967 [bookingResourceSectionField.name]: bookingResourceSectionField,
968 [bookingResourcesSectionField.name]: bookingResourcesSectionField,
969 [bookingJobSectionField.name]: bookingJobSectionField,
970 [bookingStatusSectionField.name]: bookingStatusSectionField,
971 [bookingLoadingSectionField.name]: bookingLoadingSectionField,
972 [bookingFixedHoursSectionField.name]: bookingFixedHoursSectionField,
973 [bookingNotesSectionField.name]: bookingNotesSectionField,
974 [bookingWorkActivitySectionField.name]: bookingWorkActivitySectionField,
975 [bookingChargeModeSectionField.name]: bookingChargeModeSectionField,
976 [bookingRevenuePerHourField.name]: bookingRevenuePerHourField,
977 [bookingCostPerHourField.name]: bookingCostPerHourField,
978 [bookingProfitPerHourField.name]: bookingProfitPerHourField,
979 [bookingTotalCostField.name]: bookingTotalCostField,
980 [bookingTotalRevenueField.name]: bookingTotalRevenueField,
981 [bookingTotalProfitField.name]: bookingTotalProfitField,
982 [bookingChargeModeField.name]: bookingChargeModeField,
983 [bookingDiaryDaysField.name]: bookingDiaryDaysField
984 },
985 [jobTableName]: {
986 [jobDescriptionField.name]: jobDescriptionField,
987 [jobCodeField.name]: jobCodeField,
988 [jobClientField.name]: jobClientField,
989 [jobEngagementleadField.name]: jobEngagementleadField,
990 [jobStatusField.name]: jobStatusField,
991 [jobStartDateField.name]: jobStartDateField,
992 [jobEndDateField.name]: jobEndDateField,
993 [jobLocationField.name]: jobLocationField,
994 [jobUtilisationType.name]: jobUtilisationType,
995 [jobBudgetField.name]: jobBudgetField,
996 [jobTotalRevenueField.name]: jobTotalRevenueField,
997 [jobTotalCostField.name]: jobTotalCostField,
998 [jobTotalProfitField.name]: jobTotalProfitField,
999 [jobBudgetConsumedField.name]: jobBudgetConsumedField
1000 },
1001 [resourceTableName]: {
1002 [resourceDescriptionField.name]: resourceDescriptionField,
1003 [resourceFirstNameField.name]: resourceFirstNameField,
1004 [resourceLastNameField.name]: resourceLastNameField,
1005 [resourceCellphoneField.name]: resourceCellphoneField,
1006 [resourceLocalGradeField.name]: resourceLocalGradeField,
1007 [resourceCurrDeparmentField.name]: resourceCurrDeparmentField,
1008 [resourceDiaryGroupField.name]: resourceDiaryGroupField,
1009 [resourceEmailField.name]: resourceEmailField,
1010 [resourceJobTitleField.name]: resourceJobTitleField,
1011 [resourceManagerField.name]: resourceManagerField,
1012 [resourceLocationField.name]: resourceLocationField,
1013 [resourceChargeRateField.name]: resourceChargeRateField
1014 }
1015};
1016
1017export const ENTITY_WINDOW_FIELDS_BLANK_VALUES_MAP = {
1018 [bookingLoadingSectionField.name]: '...',
1019 [bookingTimeSectionField.name]: '...',
1020 [bookingHoursPerDaySectionField.name]: '...',
1021 [bookingRevenuePerHourField.name]: '-',
1022 [bookingCostPerHourField.name]: '-',
1023 [bookingProfitPerHourField.name]: '-',
1024 [bookingTotalRevenueField.name]: '-',
1025 [bookingTotalCostField.name]: '-',
1026 [bookingTotalProfitField.name]: '-',
1027 [bookingResourceChargeRateCurrentValueField.name]: 'No rate set',
1028 [jobBudgetField]: '0.00'
1029};
1030
1031const getAllowedSystemInfoSectionFields = (tableName) => {
1032 return [
1033 `${tableName}_updatedon`,
1034 `${tableName}_updatedby_resource_guid`,
1035 `${tableName}_createdon`,
1036 `${tableName}_createdby_resource_guid`
1037 ];
1038};
1039
1040export const getSystemInfoSectionFields = (tableName, systemFieldInfos = {}) => {
1041 const allowedSystemInfoSectionFields = getAllowedSystemInfoSectionFields(tableName);
1042
1043 return allowedSystemInfoSectionFields
1044 .reduce((obj, key) => {
1045 obj = {
1046 ...obj,
1047 [key]: {
1048 ...systemFieldInfos[key],
1049 readOnly: true, //to be removed when fieldStructure API endpoint returns SystemMaintained fields with readOnly: true (currently returns false)
1050 excludeModules: {
1051 [ENTITY_WINDOW_MODULES.PLANNER_PAGE_MODAL]: ['create'],
1052 [ENTITY_WINDOW_MODULES.JOBS_PAGE_MODAL]: ['create']
1053 }
1054 }
1055 };
1056
1057 return obj;
1058 }, {});
1059};