@apptimate/core-lib 4.6.0 → 4.8.0
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/package.json
CHANGED
|
@@ -56,10 +56,15 @@ export async function togglePartyStatus(id: number, status: string): Promise<IAp
|
|
|
56
56
|
return response.responseData as IApiResponse;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
export async function lookupParties(type?: string): Promise<IApiResponse> {
|
|
60
|
-
const
|
|
59
|
+
export async function lookupParties(params?: { type?: string; search?: string; limit?: number }): Promise<IApiResponse> {
|
|
60
|
+
const query = new URLSearchParams();
|
|
61
|
+
if (params?.type) query.append('type', params.type);
|
|
62
|
+
if (params?.search) query.append('search', params.search);
|
|
63
|
+
if (params?.limit) query.append('limit', params.limit.toString());
|
|
64
|
+
|
|
65
|
+
const queryParams = query.toString();
|
|
61
66
|
const response = await sendRequest({
|
|
62
|
-
url: `${BASE}/lookup${queryParams}`,
|
|
67
|
+
url: `${BASE}/lookup${queryParams ? `?${queryParams}` : ""}`,
|
|
63
68
|
method: "GET",
|
|
64
69
|
});
|
|
65
70
|
return response.responseData as IApiResponse;
|
|
@@ -35,6 +35,12 @@ export async function getBankAccountsLookup(): Promise<IApiResponse> {
|
|
|
35
35
|
return response.responseData as IApiResponse;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
export async function searchAvailableChequeLeaves(query: string): Promise<IApiResponse> {
|
|
39
|
+
const qs = new URLSearchParams({ q: query }).toString();
|
|
40
|
+
const response = await sendRequest({ url: `${FIN_BASE}/cheque-leaves/search-available?${qs}`, method: "GET" });
|
|
41
|
+
return response.responseData as IApiResponse;
|
|
42
|
+
}
|
|
43
|
+
|
|
38
44
|
// ── Finance: Warehouses Lookup ──
|
|
39
45
|
|
|
40
46
|
export async function getWarehousesLookup(allOrgs: boolean = false): Promise<IApiResponse> {
|
package/src/constants/menus.ts
CHANGED
|
@@ -61,12 +61,23 @@ export interface RegistryItem {
|
|
|
61
61
|
permission?: string | null;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
export const CRM_SECONDARY_ITEM_KEYS = [
|
|
65
|
+
'crm__spaces',
|
|
66
|
+
'crm__tasks',
|
|
67
|
+
'crm__activity_log',
|
|
68
|
+
'crm__expected_payments',
|
|
69
|
+
'crm__clarifications',
|
|
70
|
+
'crm__summary',
|
|
71
|
+
'crm__target_summary',
|
|
72
|
+
] as const;
|
|
73
|
+
|
|
64
74
|
export const MENU_ITEM_REGISTRY: RegistryItem[] = [
|
|
65
75
|
// ── Core Module ──
|
|
66
76
|
{ key: 'core__users', label: 'Users', path: '/users', module: 'Core', defaultGroup: 'User Management', permission: 'user.view' },
|
|
67
77
|
{ key: 'core__roles', label: 'Roles', path: '/roles', module: 'Core', defaultGroup: 'User Management', permission: 'role.view' },
|
|
68
78
|
{ key: 'core__organizations', label: 'Organizations', path: '/organizations', module: 'Core', defaultGroup: 'User Management', permission: 'organization.view' },
|
|
69
79
|
{ key: 'core__parties', label: 'Parties', path: '/parties', module: 'Core', defaultGroup: 'User Management', permission: 'party.view' },
|
|
80
|
+
{ key: 'core__party_groups', label: 'Party Groups', path: '/party-groups', module: 'Core', defaultGroup: 'User Management', permission: 'party_group.view' },
|
|
70
81
|
{ key: 'core__activity_logs', label: 'Activity Logs', path: '/activity-logs', module: 'Core', defaultGroup: 'System Auditing', permission: 'activity_log.view' },
|
|
71
82
|
{ key: 'core__api_requests', label: 'API Requests', path: '/system/api-requests', module: 'Core', defaultGroup: 'System Auditing', permission: 'api_request_log.view' },
|
|
72
83
|
{ key: 'core__feature_access_logs', label: 'Feature Access Logs', path: '/system/feature-access-logs', module: 'Core', defaultGroup: 'System Auditing', permission: 'feature_access_log.view' },
|
|
@@ -227,18 +238,25 @@ export const MENU_ITEM_REGISTRY: RegistryItem[] = [
|
|
|
227
238
|
|
|
228
239
|
// ── Construction Module ──
|
|
229
240
|
{ key: 'construction__dashboard', label: 'Overview', path: '/construction', module: 'Construction', defaultGroup: 'Overview', permission: null },
|
|
230
|
-
|
|
231
|
-
{ key: '
|
|
241
|
+
|
|
242
|
+
{ key: 'construction__projects', label: 'Projects', path: '/construction/projects', module: 'Construction', defaultGroup: 'Core Setup & Planning', permission: null },
|
|
243
|
+
{ key: 'construction__rate_cards', label: 'Rate Cards', path: '/construction/rate-cards', module: 'Construction', defaultGroup: 'Core Setup & Planning', permission: null },
|
|
244
|
+
{ key: 'construction__schedule_calendar', label: 'Resource Calendar', path: '/construction/scheduling/calendar', module: 'Construction', defaultGroup: 'Core Setup & Planning', permission: null },
|
|
245
|
+
|
|
246
|
+
{ key: 'construction__main_contract', label: 'Main Contract', path: '/construction/contracts/main-contract', module: 'Construction', defaultGroup: 'Contracts & Billing', permission: null },
|
|
247
|
+
{ key: 'construction__subcontractors', label: 'Subcontractors', path: '/construction/contracts/subcontractors', module: 'Construction', defaultGroup: 'Contracts & Billing', permission: null },
|
|
248
|
+
{ key: 'construction__ipcs', label: 'Progress Billing', path: '/construction/contracts/ipcs', module: 'Construction', defaultGroup: 'Contracts & Billing', permission: null },
|
|
249
|
+
{ key: 'construction__variations', label: 'Subcontractor Variations', path: '/construction/variations', module: 'Construction', defaultGroup: 'Contracts & Billing', permission: null },
|
|
250
|
+
|
|
232
251
|
{ key: 'construction__prs', label: 'Purchase Requisitions', path: '/construction/procurement/prs', module: 'Construction', defaultGroup: 'Procurement', permission: null },
|
|
233
252
|
{ key: 'construction__pos', label: 'Purchase Orders', path: '/construction/procurement/pos', module: 'Construction', defaultGroup: 'Procurement', permission: null },
|
|
234
253
|
{ key: 'construction__grns', label: 'Goods Receipt', path: '/construction/procurement/grns', module: 'Construction', defaultGroup: 'Procurement', permission: null },
|
|
235
|
-
|
|
254
|
+
{ key: 'construction__mtrs', label: 'Transfer Requests', path: '/construction/procurement/mtrs', module: 'Construction', defaultGroup: 'Procurement', permission: null },
|
|
255
|
+
|
|
236
256
|
{ key: 'construction__site_ledger', label: 'Project Ledger', path: '/construction/site-inventory/ledger', module: 'Construction', defaultGroup: 'Project Inventory', permission: null },
|
|
237
257
|
{ key: 'construction__site_issues', label: 'Project Issues', path: '/construction/site-inventory/issues', module: 'Construction', defaultGroup: 'Project Inventory', permission: null },
|
|
238
258
|
{ key: 'construction__wastage_returns', label: 'Wastage & Returns', path: '/construction/site-inventory/wastage-returns', module: 'Construction', defaultGroup: 'Project Inventory', permission: null },
|
|
239
259
|
|
|
240
|
-
{ key: 'construction__variations', label: 'Subcontractor Variations', path: '/construction/variations', module: 'Construction', defaultGroup: 'Subcontractor Variations', permission: null },
|
|
241
|
-
|
|
242
260
|
{ key: 'construction__workforce', label: 'Workforce Master', path: '/construction/workforce', module: 'Construction', defaultGroup: 'Workforce', permission: null },
|
|
243
261
|
{ key: 'construction__shifts', label: 'Shift Master', path: '/construction/shifts', module: 'Construction', defaultGroup: 'Workforce', permission: null },
|
|
244
262
|
{ key: 'construction__attendance', label: 'Attendance & Timesheets', path: '/construction/attendance', module: 'Construction', defaultGroup: 'Workforce', permission: null },
|
|
@@ -249,39 +267,32 @@ export const MENU_ITEM_REGISTRY: RegistryItem[] = [
|
|
|
249
267
|
{ key: 'construction__fuel_logs', label: 'Fuel Logs', path: '/construction/equipment/fuel-logs', module: 'Construction', defaultGroup: 'Equipment & Plant', permission: null },
|
|
250
268
|
{ key: 'construction__maintenance', label: 'Maintenance', path: '/construction/equipment/maintenance', module: 'Construction', defaultGroup: 'Equipment & Plant', permission: null },
|
|
251
269
|
|
|
252
|
-
{ key: 'construction__schedule_calendar', label: 'Resource Calendar', path: '/construction/scheduling/calendar', module: 'Construction', defaultGroup: 'Scheduling', permission: null },
|
|
253
|
-
|
|
254
|
-
{ key: 'construction__main_contract', label: 'Main Contract', path: '/construction/contracts/main-contract', module: 'Construction', defaultGroup: 'Contracts', permission: null },
|
|
255
|
-
{ key: 'construction__subcontractors', label: 'Subcontractors', path: '/construction/contracts/subcontractors', module: 'Construction', defaultGroup: 'Contracts', permission: null },
|
|
256
|
-
{ key: 'construction__ipcs', label: 'Progress Billing', path: '/construction/contracts/ipcs', module: 'Construction', defaultGroup: 'Contracts', permission: null },
|
|
257
|
-
|
|
258
270
|
{ key: 'construction__dsr', label: 'Daily Site Reports', path: '/construction/site-execution/dsr', module: 'Construction', defaultGroup: 'Site Execution', permission: null },
|
|
259
271
|
{ key: 'construction__progress', label: 'Progress Measurement', path: '/construction/site-execution/progress', module: 'Construction', defaultGroup: 'Site Execution', permission: null },
|
|
260
272
|
{ key: 'construction__subcontractor_progress', label: 'Subcontractor Progress', path: '/construction/site-execution/subcontractor-progress', module: 'Construction', defaultGroup: 'Site Execution', permission: null },
|
|
261
273
|
|
|
274
|
+
{ key: 'construction__quality_ir', label: 'Inspection Requests', path: '/construction/quality/ir', module: 'Construction', defaultGroup: 'Quality & Safety', permission: null },
|
|
275
|
+
{ key: 'construction__quality_ncr', label: 'Non-Conformance Reports', path: '/construction/quality/ncr', module: 'Construction', defaultGroup: 'Quality & Safety', permission: null },
|
|
276
|
+
{ key: 'construction__punch_list', label: 'Snag List', path: '/construction/quality/punch-list', module: 'Construction', defaultGroup: 'Quality & Safety', permission: null },
|
|
277
|
+
{ key: 'construction__material_testing', label: 'Material Testing', path: '/construction/quality/material-testing', module: 'Construction', defaultGroup: 'Quality & Safety', permission: null },
|
|
278
|
+
{ key: 'construction__safety_incidents', label: 'Incident Log', path: '/construction/safety/incidents', module: 'Construction', defaultGroup: 'Quality & Safety', permission: null },
|
|
279
|
+
{ key: 'construction__ptw', label: 'Permit to Work', path: '/construction/safety/ptw', module: 'Construction', defaultGroup: 'Quality & Safety', permission: null },
|
|
280
|
+
|
|
262
281
|
{ key: 'construction__drawings', label: 'Drawing Register', path: '/construction/document-control/drawings', module: 'Construction', defaultGroup: 'Document Control', permission: null },
|
|
263
282
|
{ key: 'construction__rfis', label: 'RFIs', path: '/construction/document-control/rfis', module: 'Construction', defaultGroup: 'Document Control', permission: null },
|
|
264
|
-
|
|
265
|
-
{ key: 'construction__quality_ir', label: 'Inspection Requests', path: '/construction/quality/ir', module: 'Construction', defaultGroup: 'Quality', permission: null },
|
|
266
|
-
{ key: 'construction__quality_ncr', label: 'Non-Conformance Reports', path: '/construction/quality/ncr', module: 'Construction', defaultGroup: 'Quality', permission: null },
|
|
267
|
-
{ key: 'construction__punch_list', label: 'Snag List', path: '/construction/quality/punch-list', module: 'Construction', defaultGroup: 'Quality', permission: null },
|
|
268
|
-
{ key: 'construction__material_testing', label: 'Material Testing', path: '/construction/quality/material-testing', module: 'Construction', defaultGroup: 'Quality', permission: null },
|
|
269
|
-
|
|
270
|
-
{ key: 'construction__safety_incidents', label: 'Incident Log', path: '/construction/safety/incidents', module: 'Construction', defaultGroup: 'Safety', permission: null },
|
|
271
|
-
{ key: 'construction__ptw', label: 'Permit to Work', path: '/construction/safety/ptw', module: 'Construction', defaultGroup: 'Safety', permission: null },
|
|
272
283
|
|
|
273
284
|
{ key: 'construction__approval_workflows', label: 'Approval Workflows', path: '/construction/settings/approvals', module: 'Construction', defaultGroup: 'Configuration', permission: null },
|
|
274
285
|
{ key: 'construction__test_types', label: 'Test Types', path: '/construction/settings/test-types', module: 'Construction', defaultGroup: 'Configuration', permission: null },
|
|
275
286
|
{ key: 'construction__settings', label: 'Settings', path: '/construction/settings', module: 'Construction', defaultGroup: 'Configuration', permission: null },
|
|
276
287
|
|
|
277
288
|
// ── CRM Module ──
|
|
278
|
-
{ key: 'crm__dashboard', label: 'Overview', path: '/crm', module: 'CRM', defaultGroup: 'Overview', permission: null },
|
|
279
289
|
{ key: 'crm__spaces', label: 'Spaces', path: '/crm/spaces', module: 'CRM', defaultGroup: 'Sales', permission: 'crm_space.view' },
|
|
280
|
-
{ key: 'crm__leads', label: 'Leads', path: '/crm/leads', module: 'CRM', defaultGroup: 'Sales', permission: 'crm_lead.view' },
|
|
281
|
-
{ key: 'crm__sales', label: 'Confirmed Sales', path: '/crm/sales', module: 'CRM', defaultGroup: 'Sales', permission: 'crm_sale.view' },
|
|
282
290
|
{ key: 'crm__tasks', label: 'Tasks', path: '/crm/tasks', module: 'CRM', defaultGroup: 'Operations', permission: 'crm_task.view' },
|
|
283
|
-
{ key: '
|
|
284
|
-
{ key: '
|
|
291
|
+
{ key: 'crm__activity_log', label: 'Activity Log', path: '/crm/activity-log', module: 'CRM', defaultGroup: 'Operations', permission: 'crm_activity_log.view' },
|
|
292
|
+
{ key: 'crm__expected_payments', label: 'Payment Schedule', path: '/crm/expected-payments', module: 'CRM', defaultGroup: 'Finance', permission: 'crm_expected_payment.view' },
|
|
293
|
+
{ key: 'crm__clarifications', label: 'Clarifications', path: '/crm/clarifications', module: 'CRM', defaultGroup: 'Insights', permission: 'crm_clarification.view' },
|
|
294
|
+
{ key: 'crm__summary', label: 'Summary', path: '/crm/summary', module: 'CRM', defaultGroup: 'Insights', permission: 'crm_summary.view' },
|
|
295
|
+
{ key: 'crm__target_summary', label: 'Target Summary', path: '/crm/target-summary', module: 'CRM', defaultGroup: 'Insights', permission: 'crm_target_summary.view' },
|
|
285
296
|
];
|
|
286
297
|
|
|
287
298
|
/**
|
|
@@ -362,7 +373,7 @@ export const MENU_PRESETS: MenuPreset[] = [
|
|
|
362
373
|
label: 'Core',
|
|
363
374
|
iconName: 'Settings',
|
|
364
375
|
secondaryItems: [
|
|
365
|
-
'core__users', 'core__roles', 'core__organizations', 'core__parties',
|
|
376
|
+
'core__users', 'core__roles', 'core__organizations', 'core__parties', 'core__party_groups',
|
|
366
377
|
'core__warehouses', 'core__terminals',
|
|
367
378
|
'core__activity_logs', 'core__api_requests', 'core__feature_access_logs',
|
|
368
379
|
'core__issue_logs', 'core__feature_registry', 'core__menu_config',
|
|
@@ -387,7 +398,7 @@ export const MENU_PRESETS: MenuPreset[] = [
|
|
|
387
398
|
'sales__price_lists',
|
|
388
399
|
'sales__quotations', 'sales__orders', 'sales__goods_issue_notes',
|
|
389
400
|
'sales__returns', 'sales__credit_notes',
|
|
390
|
-
'sales__pos', 'sales__pos_sessions',
|
|
401
|
+
'sales__pos', 'sales__pos_sessions',
|
|
391
402
|
],
|
|
392
403
|
},
|
|
393
404
|
{
|
|
@@ -496,6 +507,7 @@ export const MENU_PRESETS: MenuPreset[] = [
|
|
|
496
507
|
secondaryItems: [
|
|
497
508
|
'construction__dashboard',
|
|
498
509
|
'construction__projects',
|
|
510
|
+
'construction__rate_cards',
|
|
499
511
|
'construction__mtrs',
|
|
500
512
|
'construction__prs',
|
|
501
513
|
'construction__pos',
|
|
@@ -538,14 +550,7 @@ export const MENU_PRESETS: MenuPreset[] = [
|
|
|
538
550
|
label: 'CRM',
|
|
539
551
|
iconName: 'UsersRound',
|
|
540
552
|
secondaryItems: [
|
|
541
|
-
|
|
542
|
-
'crm__customers',
|
|
543
|
-
'crm__spaces',
|
|
544
|
-
'crm__leads',
|
|
545
|
-
'crm__sales',
|
|
546
|
-
'crm__tasks',
|
|
547
|
-
'crm__payments',
|
|
548
|
-
'crm__settings_custom_fields',
|
|
553
|
+
...CRM_SECONDARY_ITEM_KEYS,
|
|
549
554
|
],
|
|
550
555
|
}
|
|
551
556
|
],
|
|
@@ -566,12 +571,18 @@ export const APP_MENUS: MainMenuItem[] = buildMenusFromConfig({
|
|
|
566
571
|
export function buildMenusFromConfig(config: {
|
|
567
572
|
primaryMenus: { id: string; label: string; iconName: string; secondaryItems: SecondaryItemConfig[] }[];
|
|
568
573
|
}): MainMenuItem[] {
|
|
569
|
-
return config.primaryMenus.map(pm =>
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
574
|
+
return config.primaryMenus.map(pm => {
|
|
575
|
+
const secondaryItems = pm.id === 'crm'
|
|
576
|
+
? [...CRM_SECONDARY_ITEM_KEYS]
|
|
577
|
+
: pm.secondaryItems;
|
|
578
|
+
|
|
579
|
+
return {
|
|
580
|
+
id: pm.id,
|
|
581
|
+
label: pm.label,
|
|
582
|
+
iconName: pm.iconName,
|
|
583
|
+
groups: resolveRegistryKeys(secondaryItems),
|
|
584
|
+
};
|
|
585
|
+
});
|
|
575
586
|
}
|
|
576
587
|
|
|
577
588
|
export function filterMenusByPermission(menus: MainMenuItem[], can: (code: string) => boolean): MainMenuItem[] {
|