@bisondesk/core-sdk 1.0.263 → 1.0.265

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 (146) hide show
  1. package/lib/apis/crm.js +198 -0
  2. package/lib/apis/crm.js.map +1 -0
  3. package/lib/apis/documents.js +54 -0
  4. package/lib/apis/documents.js.map +1 -0
  5. package/lib/apis/internet-vehicles.js +24 -0
  6. package/lib/apis/internet-vehicles.js.map +1 -0
  7. package/lib/apis/leasing-administration.js +46 -0
  8. package/lib/apis/leasing-administration.js.map +1 -0
  9. package/lib/apis/leasing.js +181 -0
  10. package/lib/apis/leasing.js.map +1 -0
  11. package/lib/apis/opportunities.js +66 -0
  12. package/lib/apis/opportunities.js.map +1 -0
  13. package/lib/apis/picklists.js +41 -0
  14. package/lib/apis/picklists.js.map +1 -0
  15. package/lib/apis/tenants.js +77 -0
  16. package/lib/apis/tenants.js.map +1 -0
  17. package/lib/apis/users.js +23 -0
  18. package/lib/apis/users.js.map +1 -0
  19. package/lib/apis/utils.js +23 -0
  20. package/lib/apis/utils.js.map +1 -0
  21. package/lib/apis/vehicles.js +183 -0
  22. package/lib/apis/vehicles.js.map +1 -0
  23. package/lib/cjs/apis/vehicles.js +12 -1
  24. package/lib/cjs/apis/vehicles.js.map +1 -1
  25. package/lib/cjs/types/leasing-debtors.js.map +1 -1
  26. package/lib/cjs/types/leasing.js.map +1 -1
  27. package/lib/cjs/types/opportunities.js.map +1 -1
  28. package/lib/cjs/types/quotes.js.map +1 -1
  29. package/lib/cjs/types/roi-ratings.js +8 -0
  30. package/lib/cjs/types/roi-ratings.js.map +1 -0
  31. package/lib/cjs/types/tenants.js +1 -0
  32. package/lib/cjs/types/tenants.js.map +1 -1
  33. package/lib/constants.js +932 -0
  34. package/lib/constants.js.map +1 -0
  35. package/lib/ddb-entities.js +5 -0
  36. package/lib/ddb-entities.js.map +1 -0
  37. package/lib/esm/apis/vehicles.js +10 -0
  38. package/lib/esm/apis/vehicles.js.map +1 -1
  39. package/lib/esm/types/leasing-debtors.js.map +1 -1
  40. package/lib/esm/types/leasing.js.map +1 -1
  41. package/lib/esm/types/opportunities.js.map +1 -1
  42. package/lib/esm/types/quotes.js.map +1 -1
  43. package/lib/esm/types/roi-ratings.js +5 -0
  44. package/lib/esm/types/roi-ratings.js.map +1 -0
  45. package/lib/esm/types/tenants.js +1 -0
  46. package/lib/esm/types/tenants.js.map +1 -1
  47. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  48. package/lib/tsconfig.esm.tsbuildinfo +1 -1
  49. package/lib/types/activities.js +16 -0
  50. package/lib/types/activities.js.map +1 -0
  51. package/lib/types/apis/vehicles.d.ts +1 -0
  52. package/lib/types/apis/vehicles.d.ts.map +1 -1
  53. package/lib/types/crm.js +19 -0
  54. package/lib/types/crm.js.map +1 -0
  55. package/lib/types/definitions.js +3 -0
  56. package/lib/types/definitions.js.map +1 -0
  57. package/lib/types/delivery-settings.js +9 -0
  58. package/lib/types/delivery-settings.js.map +1 -0
  59. package/lib/types/documents.js +3 -0
  60. package/lib/types/documents.js.map +1 -0
  61. package/lib/types/events.js +10 -0
  62. package/lib/types/events.js.map +1 -0
  63. package/lib/types/fields.js +29 -0
  64. package/lib/types/fields.js.map +1 -0
  65. package/lib/types/internet-vehicles.js +3 -0
  66. package/lib/types/internet-vehicles.js.map +1 -0
  67. package/lib/types/leads.js +3 -0
  68. package/lib/types/leads.js.map +1 -0
  69. package/lib/types/leasing-administration.js +3 -0
  70. package/lib/types/leasing-administration.js.map +1 -0
  71. package/lib/types/leasing-debtors.js +3 -0
  72. package/lib/types/leasing-debtors.js.map +1 -0
  73. package/lib/types/leasing-search.js +3 -0
  74. package/lib/types/leasing-search.js.map +1 -0
  75. package/lib/types/leasing-settings.js +10 -0
  76. package/lib/types/leasing-settings.js.map +1 -0
  77. package/lib/types/leasing.js +24 -0
  78. package/lib/types/leasing.js.map +1 -0
  79. package/lib/types/machines.js +3 -0
  80. package/lib/types/machines.js.map +1 -0
  81. package/lib/types/opportunities.js +84 -0
  82. package/lib/types/opportunities.js.map +1 -0
  83. package/lib/types/payments.js +9 -0
  84. package/lib/types/payments.js.map +1 -0
  85. package/lib/types/picklists.js +3 -0
  86. package/lib/types/picklists.js.map +1 -0
  87. package/lib/types/quotes.js +46 -0
  88. package/lib/types/quotes.js.map +1 -0
  89. package/lib/types/recently-viewed.js +3 -0
  90. package/lib/types/recently-viewed.js.map +1 -0
  91. package/lib/types/roi-ratings.js +8 -0
  92. package/lib/types/roi-ratings.js.map +1 -0
  93. package/lib/types/saved-filters.js +12 -0
  94. package/lib/types/saved-filters.js.map +1 -0
  95. package/lib/types/search.js +36 -0
  96. package/lib/types/search.js.map +1 -0
  97. package/lib/types/settings.js +3 -0
  98. package/lib/types/settings.js.map +1 -0
  99. package/lib/types/storage.js +4 -0
  100. package/lib/types/storage.js.map +1 -0
  101. package/lib/types/templates.js +3 -0
  102. package/lib/types/templates.js.map +1 -0
  103. package/lib/types/tenants.js +17 -0
  104. package/lib/types/tenants.js.map +1 -0
  105. package/lib/types/types/leasing-debtors.d.ts +2 -0
  106. package/lib/types/types/leasing-debtors.d.ts.map +1 -1
  107. package/lib/types/types/leasing.d.ts +2 -0
  108. package/lib/types/types/leasing.d.ts.map +1 -1
  109. package/lib/types/types/opportunities.d.ts +1 -1
  110. package/lib/types/types/opportunities.d.ts.map +1 -1
  111. package/lib/types/types/quotes.d.ts +7 -2
  112. package/lib/types/types/quotes.d.ts.map +1 -1
  113. package/lib/types/types/roi-ratings.d.ts +42 -0
  114. package/lib/types/types/roi-ratings.d.ts.map +1 -0
  115. package/lib/types/types/tenants.d.ts +2 -1
  116. package/lib/types/types/tenants.d.ts.map +1 -1
  117. package/lib/types/users.js +3 -0
  118. package/lib/types/users.js.map +1 -0
  119. package/lib/types/utils.js +9 -0
  120. package/lib/types/utils.js.map +1 -0
  121. package/lib/types/vehicles.js +68 -0
  122. package/lib/types/vehicles.js.map +1 -0
  123. package/lib/types/website.js +3 -0
  124. package/lib/types/website.js.map +1 -0
  125. package/lib/utils/forms.js +30 -0
  126. package/lib/utils/forms.js.map +1 -0
  127. package/lib/utils/leasing.js +8 -0
  128. package/lib/utils/leasing.js.map +1 -0
  129. package/lib/utils/opportunities.js +60 -0
  130. package/lib/utils/opportunities.js.map +1 -0
  131. package/lib/utils/slug.js +20 -0
  132. package/lib/utils/slug.js.map +1 -0
  133. package/lib/utils/tenants.js +21 -0
  134. package/lib/utils/tenants.js.map +1 -0
  135. package/lib/utils/vehicles.js +72 -0
  136. package/lib/utils/vehicles.js.map +1 -0
  137. package/package.json +1 -1
  138. package/src/apis/vehicles.ts +14 -0
  139. package/src/types/leasing-debtors.ts +2 -0
  140. package/src/types/leasing.ts +2 -0
  141. package/src/types/opportunities.ts +1 -1
  142. package/src/types/quotes.ts +11 -3
  143. package/src/types/roi-ratings.ts +46 -0
  144. package/src/types/tenants.ts +1 -0
  145. package/tsconfig.json +1 -0
  146. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isOpportunityReserved = exports.getOpportunityReservedStatus = exports.isOpportunityLost = exports.isBeforeReferenceOpportunityStatus = exports.isSameOrBeforeReferenceOpportunityStatus = exports.isAfterReferenceOpportunityStatus = exports.isSameOrAfterReferenceOpportunityStatus = exports.getNextStatus = exports.getPreviousStatus = void 0;
4
+ const opportunities_1 = require("../types/opportunities");
5
+ const compareOpportunityStatus = (input) => {
6
+ const { currentStatus, referenceStatus } = input;
7
+ const currentStatusIdx = opportunities_1.OpportunityStatusOrder.indexOf(currentStatus);
8
+ const referenceStatusIdx = opportunities_1.OpportunityStatusOrder.indexOf(referenceStatus);
9
+ return {
10
+ currentStatusIdx,
11
+ referenceStatusIdx,
12
+ };
13
+ };
14
+ const getPreviousStatus = (currentStatus) => {
15
+ const currentIndex = opportunities_1.OpportunityStatusOrder.indexOf(currentStatus);
16
+ if (currentIndex === 0) {
17
+ return;
18
+ }
19
+ return opportunities_1.OpportunityStatusOrder[currentIndex - 1];
20
+ };
21
+ exports.getPreviousStatus = getPreviousStatus;
22
+ const getNextStatus = (currentStatus) => {
23
+ const statusIndex = opportunities_1.OpportunityStatusOrder.indexOf(currentStatus);
24
+ if (statusIndex >= opportunities_1.OpportunityStatusOrder.length - 1) {
25
+ return;
26
+ }
27
+ return opportunities_1.OpportunityStatusOrder[statusIndex + 1];
28
+ };
29
+ exports.getNextStatus = getNextStatus;
30
+ const isSameOrAfterReferenceOpportunityStatus = (input) => {
31
+ const { currentStatusIdx, referenceStatusIdx } = compareOpportunityStatus(input);
32
+ return currentStatusIdx >= referenceStatusIdx;
33
+ };
34
+ exports.isSameOrAfterReferenceOpportunityStatus = isSameOrAfterReferenceOpportunityStatus;
35
+ const isAfterReferenceOpportunityStatus = (input) => {
36
+ const { currentStatusIdx, referenceStatusIdx } = compareOpportunityStatus(input);
37
+ return currentStatusIdx > referenceStatusIdx;
38
+ };
39
+ exports.isAfterReferenceOpportunityStatus = isAfterReferenceOpportunityStatus;
40
+ const isSameOrBeforeReferenceOpportunityStatus = (input) => {
41
+ const { currentStatusIdx, referenceStatusIdx } = compareOpportunityStatus(input);
42
+ return currentStatusIdx <= referenceStatusIdx;
43
+ };
44
+ exports.isSameOrBeforeReferenceOpportunityStatus = isSameOrBeforeReferenceOpportunityStatus;
45
+ const isBeforeReferenceOpportunityStatus = (input) => {
46
+ const { currentStatusIdx, referenceStatusIdx } = compareOpportunityStatus(input);
47
+ return currentStatusIdx < referenceStatusIdx;
48
+ };
49
+ exports.isBeforeReferenceOpportunityStatus = isBeforeReferenceOpportunityStatus;
50
+ const isOpportunityLost = (input) => input.lostAt != null;
51
+ exports.isOpportunityLost = isOpportunityLost;
52
+ const getOpportunityReservedStatus = () => [
53
+ opportunities_1.OpportunityStatus.REVIEW,
54
+ opportunities_1.OpportunityStatus.PREPARATION,
55
+ opportunities_1.OpportunityStatus.DELIVERY,
56
+ ];
57
+ exports.getOpportunityReservedStatus = getOpportunityReservedStatus;
58
+ const isOpportunityReserved = (input) => (0, exports.getOpportunityReservedStatus)().includes(input.status);
59
+ exports.isOpportunityReserved = isOpportunityReserved;
60
+ //# sourceMappingURL=opportunities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opportunities.js","sourceRoot":"/","sources":["utils/opportunities.ts"],"names":[],"mappings":";;;AAAA,0DAAgG;AAOhG,MAAM,wBAAwB,GAAG,CAAC,KAAmB,EAAE,EAAE;IACvD,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAEjD,MAAM,gBAAgB,GAAG,sCAAsB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACvE,MAAM,kBAAkB,GAAG,sCAAsB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAE3E,OAAO;QACL,gBAAgB;QAChB,kBAAkB;KACnB,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAC/B,aAAgC,EACD,EAAE;IACjC,MAAM,YAAY,GAAG,sCAAsB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnE,IAAI,YAAY,KAAK,CAAC,EAAE;QACtB,OAAO;KACR;IACD,OAAO,sCAAsB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B;AAEK,MAAM,aAAa,GAAG,CAAC,aAAgC,EAAiC,EAAE;IAC/F,MAAM,WAAW,GAAG,sCAAsB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,IAAI,WAAW,IAAI,sCAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;QACpD,OAAO;KACR;IACD,OAAO,sCAAsB,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB;AAEK,MAAM,uCAAuC,GAAG,CAAC,KAAmB,EAAW,EAAE;IACtF,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAEjF,OAAO,gBAAgB,IAAI,kBAAkB,CAAC;AAChD,CAAC,CAAC;AAJW,QAAA,uCAAuC,2CAIlD;AAEK,MAAM,iCAAiC,GAAG,CAAC,KAAmB,EAAW,EAAE;IAChF,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAEjF,OAAO,gBAAgB,GAAG,kBAAkB,CAAC;AAC/C,CAAC,CAAC;AAJW,QAAA,iCAAiC,qCAI5C;AAEK,MAAM,wCAAwC,GAAG,CAAC,KAAmB,EAAW,EAAE;IACvF,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAEjF,OAAO,gBAAgB,IAAI,kBAAkB,CAAC;AAChD,CAAC,CAAC;AAJW,QAAA,wCAAwC,4CAInD;AAEK,MAAM,kCAAkC,GAAG,CAAC,KAAmB,EAAW,EAAE;IACjF,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAEjF,OAAO,gBAAgB,GAAG,kBAAkB,CAAC;AAC/C,CAAC,CAAC;AAJW,QAAA,kCAAkC,sCAI7C;AAEK,MAAM,iBAAiB,GAAG,CAAC,KAAkB,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;AAA1E,QAAA,iBAAiB,qBAAyD;AAEhF,MAAM,4BAA4B,GAAG,GAAwB,EAAE,CAAC;IACrE,iCAAiB,CAAC,MAAM;IACxB,iCAAiB,CAAC,WAAW;IAC7B,iCAAiB,CAAC,QAAQ;CAC3B,CAAC;AAJW,QAAA,4BAA4B,gCAIvC;AAEK,MAAM,qBAAqB,GAAG,CAAC,KAAkB,EAAW,EAAE,CACnE,IAAA,oCAA4B,GAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAD3C,QAAA,qBAAqB,yBACsB","sourcesContent":["import { Opportunity, OpportunityStatus, OpportunityStatusOrder } from '../types/opportunities';\n\ntype CompareInput = {\n currentStatus: OpportunityStatus;\n referenceStatus: OpportunityStatus;\n};\n\nconst compareOpportunityStatus = (input: CompareInput) => {\n const { currentStatus, referenceStatus } = input;\n\n const currentStatusIdx = OpportunityStatusOrder.indexOf(currentStatus);\n const referenceStatusIdx = OpportunityStatusOrder.indexOf(referenceStatus);\n\n return {\n currentStatusIdx,\n referenceStatusIdx,\n };\n};\n\nexport const getPreviousStatus = (\n currentStatus: OpportunityStatus\n): OpportunityStatus | undefined => {\n const currentIndex = OpportunityStatusOrder.indexOf(currentStatus);\n if (currentIndex === 0) {\n return;\n }\n return OpportunityStatusOrder[currentIndex - 1];\n};\n\nexport const getNextStatus = (currentStatus: OpportunityStatus): OpportunityStatus | undefined => {\n const statusIndex = OpportunityStatusOrder.indexOf(currentStatus);\n if (statusIndex >= OpportunityStatusOrder.length - 1) {\n return;\n }\n return OpportunityStatusOrder[statusIndex + 1];\n};\n\nexport const isSameOrAfterReferenceOpportunityStatus = (input: CompareInput): boolean => {\n const { currentStatusIdx, referenceStatusIdx } = compareOpportunityStatus(input);\n\n return currentStatusIdx >= referenceStatusIdx;\n};\n\nexport const isAfterReferenceOpportunityStatus = (input: CompareInput): boolean => {\n const { currentStatusIdx, referenceStatusIdx } = compareOpportunityStatus(input);\n\n return currentStatusIdx > referenceStatusIdx;\n};\n\nexport const isSameOrBeforeReferenceOpportunityStatus = (input: CompareInput): boolean => {\n const { currentStatusIdx, referenceStatusIdx } = compareOpportunityStatus(input);\n\n return currentStatusIdx <= referenceStatusIdx;\n};\n\nexport const isBeforeReferenceOpportunityStatus = (input: CompareInput): boolean => {\n const { currentStatusIdx, referenceStatusIdx } = compareOpportunityStatus(input);\n\n return currentStatusIdx < referenceStatusIdx;\n};\n\nexport const isOpportunityLost = (input: Opportunity): boolean => input.lostAt != null;\n\nexport const getOpportunityReservedStatus = (): OpportunityStatus[] => [\n OpportunityStatus.REVIEW,\n OpportunityStatus.PREPARATION,\n OpportunityStatus.DELIVERY,\n];\n\nexport const isOpportunityReserved = (input: Opportunity): boolean =>\n getOpportunityReservedStatus().includes(input.status);\n"]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getVehicleSlug = void 0;
4
+ const slugify_1 = __importDefault(require("slugify"));
5
+ const getVehicleSlug = (vehicle) => {
6
+ return (0, slugify_1.default)([
7
+ vehicle.external.identification.stockNumber ?? vehicle.internal.identification.stockNumber,
8
+ vehicle.external.general.make,
9
+ vehicle.external.general.modelName,
10
+ vehicle.external.general.typeName,
11
+ `${vehicle.external.history?.advertisingYear}`,
12
+ vehicle.external.general.category,
13
+ vehicle.external.general.bodystyle,
14
+ vehicle.external.powertrain?.axles?.configuration,
15
+ ]
16
+ .filter((f) => !!f)
17
+ .join(' '));
18
+ };
19
+ exports.getVehicleSlug = getVehicleSlug;
20
+ //# sourceMappingURL=slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.js","sourceRoot":"/","sources":["utils/slug.ts"],"names":[],"mappings":";;;AAAA,sDAA8B;AAGvB,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAU,EAAE;IACzD,OAAO,IAAA,iBAAO,EACZ;QACE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW;QAC1F,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;QAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;QAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ;QACjC,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE;QAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ;QACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;QAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa;KAClD;SACE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAClB,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,cAAc,kBAezB","sourcesContent":["import slugify from 'slugify';\nimport { Vehicle } from '../types/vehicles';\n\nexport const getVehicleSlug = (vehicle: Vehicle): string => {\n return slugify(\n [\n vehicle.external.identification.stockNumber ?? vehicle.internal.identification.stockNumber,\n vehicle.external.general.make,\n vehicle.external.general.modelName,\n vehicle.external.general.typeName,\n `${vehicle.external.history?.advertisingYear}`,\n vehicle.external.general.category,\n vehicle.external.general.bodystyle,\n vehicle.external.powertrain?.axles?.configuration,\n ]\n .filter((f) => !!f)\n .join(' ')\n );\n};\n"]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBranchStandardVatRate = exports.getDefaultBranch = exports.getBranch = void 0;
4
+ const errors_1 = require("@bisondesk/commons-sdk/errors");
5
+ const lodash_1 = require("lodash");
6
+ const getBranch = (tenant, branchId) => {
7
+ const branch = tenant.branches.find((branch) => branch.id === branchId);
8
+ if (branch == null) {
9
+ throw new errors_1.XError('tenants.branch-not-found', { tenantId: tenant.id, branchId });
10
+ }
11
+ return branch;
12
+ };
13
+ exports.getBranch = getBranch;
14
+ const getDefaultBranch = (tenant) => (0, lodash_1.first)(tenant.branches);
15
+ exports.getDefaultBranch = getDefaultBranch;
16
+ const getBranchStandardVatRate = (tenant, branchId) => {
17
+ const branch = (0, exports.getBranch)(tenant, branchId);
18
+ return branch.vatRates.standard;
19
+ };
20
+ exports.getBranchStandardVatRate = getBranchStandardVatRate;
21
+ //# sourceMappingURL=tenants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenants.js","sourceRoot":"/","sources":["utils/tenants.ts"],"names":[],"mappings":";;;AAAA,0DAAuD;AACvD,mCAA+B;AAGxB,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAU,EAAE;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IAChF,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,IAAI,eAAM,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;KACjF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAPW,QAAA,SAAS,aAOpB;AAEK,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,IAAA,cAAK,EAAC,MAAM,CAAC,QAAQ,CAAE,CAAC;AAAvE,QAAA,gBAAgB,oBAAuD;AAE7E,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAU,EAAE;IACnF,MAAM,MAAM,GAAW,IAAA,iBAAS,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAClC,CAAC,CAAC;AAHW,QAAA,wBAAwB,4BAGnC","sourcesContent":["import { XError } from '@bisondesk/commons-sdk/errors';\nimport { first } from 'lodash';\nimport { Branch, Tenant } from '../types/tenants';\n\nexport const getBranch = (tenant: Tenant, branchId: string): Branch => {\n const branch = tenant.branches.find((branch: Branch) => branch.id === branchId);\n if (branch == null) {\n throw new XError('tenants.branch-not-found', { tenantId: tenant.id, branchId });\n }\n\n return branch;\n};\n\nexport const getDefaultBranch = (tenant: Tenant): Branch => first(tenant.branches)!;\n\nexport const getBranchStandardVatRate = (tenant: Tenant, branchId: string): string => {\n const branch: Branch = getBranch(tenant, branchId);\n return branch.vatRates.standard;\n};\n"]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertNumberToLetters = exports.getInternalTitle = exports.extractCustomFeatures = exports.extractCustomState = void 0;
4
+ const constants_1 = require("../constants");
5
+ const vehicles_1 = require("../types/vehicles");
6
+ const extractCustomState = (vehicle) => {
7
+ const state = [];
8
+ if (vehicle.internal.status.option != null) {
9
+ state.push(vehicles_1.CustomSearchState.Reserved);
10
+ }
11
+ if (vehicle.internal.role === 'SALE' && vehicle.internal.status.sale.dealStatus === 'NOT_SOLD') {
12
+ state.push(vehicles_1.CustomSearchState.Available);
13
+ }
14
+ return state;
15
+ };
16
+ exports.extractCustomState = extractCustomState;
17
+ const extractCustomFeatures = (vehicle) => {
18
+ const features = [
19
+ {
20
+ getValue: (vehicle) => vehicle.superstructure?.crane?.present,
21
+ picklistValueId: 'crane',
22
+ },
23
+ {
24
+ getValue: (vehicle) => vehicle.superstructure?.tailgate?.present,
25
+ picklistValueId: 'tailgate',
26
+ },
27
+ { getValue: (vehicle) => vehicle.accessories.adr, picklistValueId: 'adr' },
28
+ {
29
+ getValue: (vehicle) => vehicle.accessories.retarderIntarder,
30
+ picklistValueId: 'retarderIntarder',
31
+ },
32
+ {
33
+ getValue: (vehicle) => vehicle.accessories.hydraulicTipperKit,
34
+ picklistValueId: 'hydraulicTipperKit',
35
+ },
36
+ {
37
+ getValue: (vehicle) => vehicle.accessories.lowDeck,
38
+ picklistValueId: 'lowDeck',
39
+ },
40
+ ];
41
+ return features
42
+ .filter((feature) => !!feature.getValue(vehicle))
43
+ .map((feature) => feature.picklistValueId);
44
+ };
45
+ exports.extractCustomFeatures = extractCustomFeatures;
46
+ const getInternalTitle = ({ make, category, modelName, bodywork, modelTypeName, }) => {
47
+ if (category === constants_1.Categories.Trailer || category === constants_1.Categories.SemiTrailer) {
48
+ return [make, modelName, bodywork]
49
+ .filter((v) => !!v)
50
+ .map((v) => v.trim())
51
+ .join(' ')
52
+ .trim();
53
+ }
54
+ return [make, modelName, modelTypeName]
55
+ .filter((v) => !!v)
56
+ .map((v) => v.trim())
57
+ .join(' ')
58
+ .trim();
59
+ };
60
+ exports.getInternalTitle = getInternalTitle;
61
+ const convertNumberToLetters = (num) => {
62
+ const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
63
+ const lettersLength = letters.length;
64
+ if (num < 1) {
65
+ return '';
66
+ }
67
+ const remainder = num % lettersLength;
68
+ const quotient = Math.floor(num / lettersLength);
69
+ return (0, exports.convertNumberToLetters)(quotient) + letters.charAt(remainder - 1);
70
+ };
71
+ exports.convertNumberToLetters = convertNumberToLetters;
72
+ //# sourceMappingURL=vehicles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vehicles.js","sourceRoot":"/","sources":["utils/vehicles.ts"],"names":[],"mappings":"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","sourcesContent":["import { Categories } from '../constants';\nimport { CustomSearchState, Vehicle, VehicleExternalInfo } from '../types/vehicles';\n\nexport const extractCustomState = (vehicle: Vehicle): CustomSearchState[] => {\n const state: CustomSearchState[] = [];\n\n if (vehicle.internal.status.option != null) {\n state.push(CustomSearchState.Reserved);\n }\n\n if (vehicle.internal.role === 'SALE' && vehicle.internal.status.sale.dealStatus === 'NOT_SOLD') {\n state.push(CustomSearchState.Available);\n }\n\n return state;\n};\n\nexport const extractCustomFeatures = (vehicle: VehicleExternalInfo): string[] => {\n const features: {\n getValue: (vehicle: VehicleExternalInfo) => any;\n picklistValueId: string;\n }[] = [\n {\n getValue: (vehicle) => vehicle.superstructure?.crane?.present,\n picklistValueId: 'crane',\n },\n {\n getValue: (vehicle) => vehicle.superstructure?.tailgate?.present,\n picklistValueId: 'tailgate',\n },\n { getValue: (vehicle) => vehicle.accessories.adr, picklistValueId: 'adr' },\n {\n getValue: (vehicle) => vehicle.accessories.retarderIntarder,\n picklistValueId: 'retarderIntarder',\n },\n {\n getValue: (vehicle) => vehicle.accessories.hydraulicTipperKit,\n picklistValueId: 'hydraulicTipperKit',\n },\n {\n getValue: (vehicle) => vehicle.accessories.lowDeck,\n picklistValueId: 'lowDeck',\n },\n ];\n\n return features\n .filter((feature) => !!feature.getValue(vehicle))\n .map((feature) => feature.picklistValueId);\n};\n\nexport const getInternalTitle = ({\n make,\n category,\n modelName,\n bodywork,\n modelTypeName,\n}: {\n make: string;\n category: string;\n modelName?: string;\n modelTypeName?: string;\n bodywork?: string;\n}): string => {\n if (category === Categories.Trailer || category === Categories.SemiTrailer) {\n return [make, modelName, bodywork]\n .filter((v): v is string => !!v)\n .map((v) => v.trim())\n .join(' ')\n .trim();\n }\n\n return [make, modelName, modelTypeName]\n .filter((v): v is string => !!v)\n .map((v) => v.trim())\n .join(' ')\n .trim();\n};\n\n// example: 1 -> A, 2 -> B, 26 -> Z, 27 -> AA, 28 -> AB, 52 -> AZ, 53 -> BA, 54 -> BB, 702 -> ZZ, 703 -> AAA\nexport const convertNumberToLetters = (num: number): string => {\n const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const lettersLength = letters.length;\n\n if (num < 1) {\n return '';\n }\n\n const remainder = num % lettersLength;\n const quotient = Math.floor(num / lettersLength);\n\n return convertNumberToLetters(quotient) + letters.charAt(remainder - 1);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bisondesk/core-sdk",
3
- "version": "1.0.263",
3
+ "version": "1.0.265",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rm -rf build dist lib *.tsbuildinfo",
@@ -1,5 +1,6 @@
1
1
  import { SERVICE_ID_ADMIN_HEADER, TENANT_ID_ADMIN_HEADER } from '@bisondesk/commons-sdk/constants';
2
2
  import { XError } from '@bisondesk/commons-sdk/errors';
3
+ import { fetchJson } from '@bisondesk/commons-sdk/fetch';
3
4
  import fetch, { Response } from 'node-fetch';
4
5
  import { DataRecord } from '../types/utils';
5
6
  import { NewVehicle, Vehicle, VehicleMarketing, VehiclePurchase } from '../types/vehicles';
@@ -28,6 +29,19 @@ export const getVehicle = async (
28
29
  throw new XError(response.statusText, { body });
29
30
  };
30
31
 
32
+ export const getVehicleByChassisNumber = async (
33
+ tenantId: string,
34
+ vin: string
35
+ ): Promise<DataRecord<Vehicle> | undefined> => {
36
+ const auth = await getAdminAuth();
37
+ return fetchJson(`${process.env.CORE_API_ORIGIN}/api/vehicles/vin/${vin}`, {
38
+ headers: {
39
+ Authorization: auth,
40
+ [TENANT_ID_ADMIN_HEADER]: tenantId,
41
+ },
42
+ });
43
+ };
44
+
31
45
  export const getVehiclePurchase = async (
32
46
  tenantId: string,
33
47
  vehicleId: string
@@ -8,6 +8,7 @@ export type MonthData = {
8
8
  overdueContractIds: string[];
9
9
  overdueInvoiceIds: string[];
10
10
  riskLevel: number;
11
+ monthlyInvoicedAmount: string;
11
12
  };
12
13
 
13
14
  export type DebtorInfo = {
@@ -20,6 +21,7 @@ export type DebtorInfo = {
20
21
  unpaidAmount: string;
21
22
  overdueContracts: number;
22
23
  riskLevel: number;
24
+ monthlyInvoicedAmount: string;
23
25
  };
24
26
 
25
27
  export type SearchDebtorInfo = {
@@ -94,6 +94,8 @@ export type LeasingContract<T = LeasingContractHyperportal | LeasingContractBiso
94
94
  links?: LinkValue[];
95
95
  accountManager?: string;
96
96
  clients: LeasingContractClient[];
97
+ hasSlbPartnerAmortisationTable?: boolean;
98
+ slbContractNumber?: string;
97
99
  vehicle: {
98
100
  id: string;
99
101
  stockNumber: string;
@@ -201,7 +201,6 @@ export type OpportunityWarning = {
201
201
  level: WarningHints;
202
202
  businessEntityId?: BusinessEntityIds;
203
203
  recordId?: string;
204
- actionTitle?: string;
205
204
  };
206
205
 
207
206
  export type OpportunityBffMeta = ReferenceData & {
@@ -287,6 +286,7 @@ export const OPPORTUNITY_VEHICLE_AVAILABLE_NOTIFICATION_ORIGIN = 'opportunity-ve
287
286
 
288
287
  export type OpportunityNotificationData = {
289
288
  quoteVersion?: number;
289
+ snippet?: string;
290
290
  };
291
291
 
292
292
  export type LeasingQuoteTemplateData = {
@@ -9,6 +9,7 @@ import {
9
9
  LeasingQuoteParams,
10
10
  SalesQuoteExtraInput,
11
11
  } from './leasing-settings';
12
+ import { MatchingRuleValue } from './roi-ratings';
12
13
  import { PricePercentageMode } from './utils';
13
14
 
14
15
  export enum QuoteActions {
@@ -186,7 +187,7 @@ export type LeasingCalculatorOutput = {
186
187
  target: string;
187
188
  perYear: string;
188
189
  difference: string;
189
- score: QuoteMetricsScore;
190
+ score?: QuoteMetricsScore;
190
191
  };
191
192
  cashflow: {
192
193
  deficit: string;
@@ -229,7 +230,7 @@ export type SalesCalculatorOutput = {
229
230
  delivery: string;
230
231
  extras: string;
231
232
  };
232
- roi: { value: string; score: QuoteMetricsScore };
233
+ roi: { value: string; score?: QuoteMetricsScore };
233
234
  profit: { value: string; score: QuoteMetricsScore };
234
235
  delivery: {
235
236
  retailPrice?: string;
@@ -255,11 +256,13 @@ type BaseQuote = {
255
256
  type: OpportunityType.LEASING;
256
257
  calculatorInput: LeasingCalculatorInput;
257
258
  calculatorOutput: LeasingCalculatorOutput;
259
+ rating?: MatchingRuleValue;
258
260
  }
259
261
  | {
260
262
  type: OpportunityType.SALES;
261
263
  calculatorInput: SalesCalculatorInput;
262
264
  calculatorOutput: SalesCalculatorOutput;
265
+ rating?: MatchingRuleValue;
263
266
  }
264
267
  );
265
268
 
@@ -305,8 +308,13 @@ export type QuoteUpdate = {
305
308
  export type CalculatorLeasingIO = {
306
309
  output: LeasingCalculatorOutput;
307
310
  input: LeasingCalculatorInput;
311
+ rating?: MatchingRuleValue;
312
+ };
313
+ export type CalculatorSalesIO = {
314
+ output: SalesCalculatorOutput;
315
+ input: SalesCalculatorInput;
316
+ rating?: MatchingRuleValue;
308
317
  };
309
- export type CalculatorSalesIO = { output: SalesCalculatorOutput; input: SalesCalculatorInput };
310
318
  export type CalculatorQuoteIO = CalculatorLeasingIO | CalculatorSalesIO;
311
319
 
312
320
  export type UsedVehiclesSalesParams = {
@@ -0,0 +1,46 @@
1
+ import { AdditionalOperation, RulesLogic } from 'json-logic-js';
2
+ import { OpportunityType } from '../constants';
3
+ import { FieldTypeInfo } from './fields';
4
+
5
+ export enum DisplayType {
6
+ StarsRating = 'stars-rating',
7
+ }
8
+
9
+ export type ROIRule = {
10
+ conditions: RulesLogic<AdditionalOperation>;
11
+ value: number;
12
+ };
13
+
14
+ export type MatchingRuleValue = {
15
+ value: number;
16
+ createdAt: string;
17
+ type: DisplayType;
18
+ ruleIdx: number;
19
+ opportunityType: OpportunityType;
20
+ };
21
+
22
+ type BaseROIRatings = {
23
+ type: DisplayType;
24
+ opportunityType: OpportunityType;
25
+ rules: ROIRule[];
26
+ };
27
+
28
+ export type ROIRatings = BaseROIRatings & {
29
+ readonly createdAt: string;
30
+ readonly createdBy: string;
31
+ readonly fields: DataFields;
32
+ };
33
+
34
+ export type NewROIRatings = BaseROIRatings & {
35
+ readonly createdAt?: undefined;
36
+ readonly createdBy?: undefined;
37
+ readonly fields?: DataFields;
38
+ };
39
+
40
+ export type Field = {
41
+ titles: { [lang: string]: string };
42
+ } & FieldTypeInfo;
43
+
44
+ export type DataFields = {
45
+ [key: string]: Field;
46
+ };
@@ -24,6 +24,7 @@ export enum TenantModule {
24
24
  Opportunities = 'opportunities',
25
25
  VehiclesMasterData = 'vehicles_master_data',
26
26
  Vehicles = 'vehicles',
27
+ TrackAndTrace = 'track_and_trace',
27
28
  }
28
29
 
29
30
  export type Tenant = PublicTenant & {
package/tsconfig.json CHANGED
@@ -8,6 +8,7 @@
8
8
  "sourceRoot": "/",
9
9
  "composite": true,
10
10
  "rootDir": "src",
11
+ "outDir": "lib",
11
12
  "declarationDir": "lib/types"
12
13
  },
13
14
  "include": ["src"],