@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apptimate/core-lib",
3
- "version": "4.6.0",
3
+ "version": "4.8.0",
4
4
  "main": "src/index.ts",
5
5
  "types": "src/index.ts",
6
6
  "publishConfig": {
@@ -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 queryParams = type ? `?type=${type}` : "";
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> {
@@ -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
- { key: 'construction__projects', label: 'Projects', path: '/construction/projects', module: 'Construction', defaultGroup: 'Core', permission: null },
231
- { key: 'construction__mtrs', label: 'Transfer Requests', path: '/construction/procurement/mtrs', module: 'Construction', defaultGroup: 'Procurement', permission: null },
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: 'crm__payments', label: 'Expected Payments', path: '/crm/payments', module: 'CRM', defaultGroup: 'Operations', permission: 'crm_expected_payment.view' },
284
- { key: 'crm__settings_custom_fields', label: 'Custom Fields', path: '/crm/settings/custom-fields', module: 'CRM', defaultGroup: 'Settings', permission: 'crm_custom_field.view' },
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', 'sales__reports',
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
- 'crm__dashboard',
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
- id: pm.id,
571
- label: pm.label,
572
- iconName: pm.iconName,
573
- groups: resolveRegistryKeys(pm.secondaryItems),
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[] {