@bisondesk/core-sdk 1.0.431 → 1.0.433

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 (41) hide show
  1. package/lib/types/internal-events.d.ts +13 -3
  2. package/lib/types/internal-events.d.ts.map +1 -1
  3. package/lib/types/internal-events.js +9 -0
  4. package/lib/types/internal-events.js.map +1 -1
  5. package/lib/types/leasing.d.ts +16 -1
  6. package/lib/types/leasing.d.ts.map +1 -1
  7. package/lib/types/leasing.js +2 -0
  8. package/lib/types/leasing.js.map +1 -1
  9. package/lib/types/offers.d.ts +3 -7
  10. package/lib/types/offers.d.ts.map +1 -1
  11. package/lib/types/offers.js.map +1 -1
  12. package/lib/types/opportunities.d.ts +23 -9
  13. package/lib/types/opportunities.d.ts.map +1 -1
  14. package/lib/types/opportunities.js +7 -0
  15. package/lib/types/opportunities.js.map +1 -1
  16. package/lib/types/payments.d.ts +2 -1
  17. package/lib/types/payments.d.ts.map +1 -1
  18. package/lib/types/payments.js.map +1 -1
  19. package/lib/types/quotes.d.ts +10 -1
  20. package/lib/types/quotes.d.ts.map +1 -1
  21. package/lib/types/quotes.js.map +1 -1
  22. package/lib/types/vehicle-sales.d.ts +1 -1
  23. package/lib/types/vehicle-sales.d.ts.map +1 -1
  24. package/lib/types/vehicle-sales.js.map +1 -1
  25. package/lib/types/vehicles.d.ts +5 -3
  26. package/lib/types/vehicles.d.ts.map +1 -1
  27. package/lib/types/vehicles.js +1 -0
  28. package/lib/types/vehicles.js.map +1 -1
  29. package/lib/utils/vehicles.js +6 -6
  30. package/lib/utils/vehicles.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/types/internal-events.ts +13 -2
  33. package/src/types/leasing.ts +18 -2
  34. package/src/types/offers.ts +3 -8
  35. package/src/types/opportunities.ts +27 -13
  36. package/src/types/payments.ts +4 -1
  37. package/src/types/quotes.ts +4 -1
  38. package/src/types/vehicle-sales.ts +1 -1
  39. package/src/types/vehicles.ts +4 -2
  40. package/src/utils/vehicles.ts +6 -6
  41. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"vehicles.js","sourceRoot":"/","sources":["utils/vehicles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAA4B,EAAY,EAAE;IAC9E,MAAM,QAAQ,GAGR;QACJ;YACE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO;YAC7D,eAAe,EAAE,OAAO;SACzB;QACD;YACE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO;YAChE,eAAe,EAAE,UAAU;SAC5B;QACD,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE;QAC1E;YACE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB;YAC3D,eAAe,EAAE,kBAAkB;SACpC;QACD;YACE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,kBAAkB;YAC7D,eAAe,EAAE,oBAAoB;SACtC;QACD;YACE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO;YAClD,eAAe,EAAE,SAAS;SAC3B;KACF,CAAC;IAEF,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAChD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,aAAa,GAOd,EAAU,EAAE;IACX,IAAI,QAAQ,KAAK,UAAU,CAAC,OAAO,IAAI,QAAQ,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3E,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC;SACpC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,IAAI,CAAC,GAAG,CAAC;SACT,IAAI,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAG9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAW,EAAU,EAAE;IAC5D,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEtC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,SAAS,GAAG,GAAG,GAAG,aAAa,CAAC;IACpC,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC;IAG/C,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,SAAS,GAAG,aAAa,CAAC;QAC1B,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,sBAAsB,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAC3E,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAU,EAAE;IAChE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE7B,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,WAAmB,EAAU,EAAE;IACvE,MAAM,cAAc,GAAG,iCAAiC,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,MAAM,CAAC,oCAAoC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,iBAAiB,GAAG,aAAa,GAAG,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;IAC9D,OAAO,GAAG,UAAU,GAAG,WAAW,EAAE,CAAC;AACvC,CAAC,CAAC","sourcesContent":["import { XError } from '@bisondesk/commons-sdk/errors';\nimport { Categories } from '../constants.js';\nimport { VehicleExternalInfo } from '../types/vehicles.js';\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 category: string;\n make?: 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\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n// example: 1 -> A, 2 -> B, 26 -> Z, 27 -> AA, 28 -> AB, 52 -> AZ, 53 -> BA, 54 -> BB, 702 -> ZZ\nexport const convertNumberToLetters = (num: number): string => {\n const lettersLength = ALPHABET.length;\n\n if (num < 1) {\n return '';\n }\n\n let remainder = num % lettersLength;\n let quotient = Math.floor(num / lettersLength);\n\n // If remainder is 0, it means we should map it to 'Z' and reduce the quotient by 1\n if (remainder === 0) {\n remainder = lettersLength;\n quotient -= 1;\n }\n\n return convertNumberToLetters(quotient) + ALPHABET.charAt(remainder - 1);\n};\n\n// example: A -> 1, B -> 2, Z -> 26, AA -> 27, AB -> 28, AZ -> 52, BA -> 53, BB -> 54, ZZ -> 702\nexport const convertLettersToNumber = (letters: string): number => {\n const base = ALPHABET.length;\n\n let result = 0;\n\n for (let i = 0; i < letters.length; i++) {\n const charValue = ALPHABET.indexOf(letters[i]) + 1;\n result = result * base + charValue;\n }\n\n return result;\n};\n\nexport const getNextRelatedStockNumber = (stockNumber: string): string => {\n const counterPattern = /^([A-Z]{2,4}\\d{5})([A-Z]{0,2})$/;\n const match = stockNumber.match(counterPattern);\n if (match == null) {\n throw new XError('core-sdk.vehicles.bad-stock-number', { stockNumber });\n }\n\n const baseNumber = match[1];\n const counter = match[2];\n const counterNumber = convertLettersToNumber(counter);\n const nextCounterNumber = counterNumber + 1;\n const nextCounter = convertNumberToLetters(nextCounterNumber);\n return `${baseNumber}${nextCounter}`;\n};\n"]}
1
+ {"version":3,"file":"vehicles.js","sourceRoot":"/","sources":["utils/vehicles.ts"],"names":[],"mappings":"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","sourcesContent":["import { XError } from '@bisondesk/commons-sdk/errors';\nimport { Categories } from '../constants.js';\nimport { VehicleExternalInfo } from '../types/vehicles.js';\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 category: string;\n make?: 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\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n// example: 1 -> A, 2 -> B, 26 -> Z, 27 -> AA, 28 -> AB, 52 -> AZ, 53 -> BA, 54 -> BB, 702 -> ZZ\nexport const convertNumberToLetters = (num: number): string => {\n const lettersLength = ALPHABET.length;\n\n if (num < 1) {\n return '';\n }\n\n let remainder = num % lettersLength;\n let quotient = Math.floor(num / lettersLength);\n\n // If remainder is 0, it means we should map it to 'Z' and reduce the quotient by 1\n if (remainder === 0) {\n remainder = lettersLength;\n quotient -= 1;\n }\n\n return convertNumberToLetters(quotient) + ALPHABET.charAt(remainder - 1);\n};\n\n// example: A -> 1, B -> 2, Z -> 26, AA -> 27, AB -> 28, AZ -> 52, BA -> 53, BB -> 54, ZZ -> 702\nexport const convertLettersToNumber = (letters: string): number => {\n const base = ALPHABET.length;\n\n let result = 0;\n\n for (let i = 0; i < letters.length; i++) {\n const charValue = ALPHABET.indexOf(letters[i]) + 1;\n result = result * base + charValue;\n }\n\n return result;\n};\n\nexport const getNextRelatedStockNumber = (stockNumber: string): string => {\n const counterPattern = /^([A-Z]+\\d{5})([A-Z]{0,2})$/;\n const match = stockNumber.match(counterPattern);\n if (match == null) {\n throw new XError('core-sdk.vehicles.bad-stock-number', { stockNumber });\n }\n\n const baseStockNumber = match[1];\n const counterLetters = match[2];\n const counterNumber = convertLettersToNumber(counterLetters);\n const nextCounterNumber = counterNumber + 1;\n const nextCounterLetters = convertNumberToLetters(nextCounterNumber);\n return `${baseStockNumber}${nextCounterLetters}`;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bisondesk/core-sdk",
3
- "version": "1.0.431",
3
+ "version": "1.0.433",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -3,7 +3,7 @@ export interface NotificationHandler {
3
3
  }
4
4
 
5
5
  export interface NotificationSubHandler {
6
- accepts(evt: BaseEvent): boolean;
6
+ accepts(evt: BaseEvent): Promise<boolean>;
7
7
  handle(evt: BaseEvent): Promise<void>;
8
8
  }
9
9
 
@@ -11,6 +11,15 @@ export enum InternalEventTypes {
11
11
  VEHICLE_PURCHASE = 'vehicle-purchases',
12
12
  ORGANIZATION = 'organizations',
13
13
  CONTACT = 'contacts',
14
+ OPPORTUNITY = 'opportunities',
15
+ VEHICLE = 'vehicles',
16
+ PAYMENT = 'payments',
17
+ OFFER = 'offers',
18
+ }
19
+
20
+ export enum InternalNotificationChannels {
21
+ APP = 'app',
22
+ EMAIL = 'email',
14
23
  }
15
24
 
16
25
  export type BaseEvent = {
@@ -21,14 +30,16 @@ export type InternalNotificationDestination =
21
30
  | {
22
31
  email: string;
23
32
  userId?: undefined;
33
+ channels: [InternalNotificationChannels.EMAIL];
24
34
  }
25
35
  | {
26
36
  userId: string;
37
+ channels: InternalNotificationChannels[];
27
38
  email?: undefined;
28
39
  };
29
40
 
30
41
  export type InternalNotificationEmailBaseData = {
31
- mainPicture: string;
42
+ mainPicture?: string;
32
43
  body: string;
33
44
  url: string;
34
45
  emailHeader: string;
@@ -5,6 +5,8 @@ import { ReferenceData } from './utils.js';
5
5
 
6
6
  export enum LeasingContractActions {
7
7
  CREATE_FINANCE_DOCUMENT = 'create_finance_document',
8
+ RETAKE_VEHICLE = 'retake_vehicle',
9
+ START_CONTRACT_END = 'start_contract_end',
8
10
  END_CONTRACT = 'end_contract',
9
11
  }
10
12
 
@@ -77,7 +79,7 @@ export enum LeasingContractStatus {
77
79
  DRAFT = 'draft',
78
80
  DISCARDED = 'discarded',
79
81
  PAUSED = 'paused',
80
- ACTIVE = 'active',
82
+ ACTIVE = 'active', // getDbLeasingContractByStockNumber uses ordering by status if this changes update there
81
83
  LEASING_RETURN = 'leasing_return',
82
84
  ENDING = 'ending',
83
85
  ENDED = 'ended',
@@ -106,17 +108,26 @@ type BaseLeasingContract<T = LeasingContractHyperportal | LeasingContractBisonde
106
108
  startDate: string;
107
109
  deliveryDate?: string;
108
110
  endDate?: string;
109
- slbPartner?: string;
110
111
  links?: LinkValue[];
111
112
  accountManager?: string;
112
113
  clients: LeasingContractClient[];
113
114
  hasSlbPartnerAmortisationTable?: boolean;
115
+ slbPartner?: string;
116
+ slbBankAccountOrganizationId?: string;
114
117
  slbContractNumber?: string;
118
+ slbContractAmount?: string;
115
119
  externalTracking?: boolean;
116
120
  vehicle: {
117
121
  id: string;
118
122
  stockNumber: string;
119
123
  administrativeNumber?: string;
124
+ retake?: {
125
+ date: string;
126
+ actionBy: string;
127
+ actionAt: string;
128
+ clonedVehicleId?: string;
129
+ totalLoss?: boolean;
130
+ };
120
131
  };
121
132
  status: LeasingContractStatus;
122
133
  documents: Document[];
@@ -413,6 +424,11 @@ export enum LEASING_EXPORT_TYPES {
413
424
  DEFAULT = 'default',
414
425
  }
415
426
 
427
+ export type VehicleRetakeRequest = {
428
+ retrievalDate: string;
429
+ totalLoss?: boolean;
430
+ };
431
+
416
432
  export type LeasingContractEndRequest = {
417
433
  contractId: string;
418
434
  endDate?: string;
@@ -2,6 +2,7 @@ import { DistributiveOmit, Document, LocationValue, NextList } from '@bisondesk/
2
2
  import { BusinessEntityIds, WarningHints } from '../constants.js';
3
3
  import { Contact, Organization, PartnerLevel } from './crm.js';
4
4
  import { Insights, InsightsComparableSpecs } from './insights.js';
5
+ import { BaseEvent } from './internal-events.js';
5
6
  import { BaseSearchRequest } from './search.js';
6
7
  import { DataRecord, ReferenceData } from './utils.js';
7
8
  import {
@@ -322,7 +323,7 @@ export type OfferPurchase = {
322
323
  };
323
324
  };
324
325
 
325
- type BaseOfferEvent = {
326
+ type BaseOfferEvent = BaseEvent & {
326
327
  id: string;
327
328
  actionAt: string;
328
329
  tenantId: string;
@@ -341,10 +342,4 @@ export type OfferUpdatedEvent = BaseOfferEvent & {
341
342
  previousOffer: Offer;
342
343
  };
343
344
 
344
- export type OfferDeletedEvent = BaseOfferEvent & {
345
- action: 'delete';
346
- offer?: undefined;
347
- previousOffer: Offer;
348
- };
349
-
350
- export type OfferEvent = OfferCreatedEvent | OfferUpdatedEvent | OfferDeletedEvent;
345
+ export type OfferEvent = OfferCreatedEvent | OfferUpdatedEvent;
@@ -2,6 +2,7 @@ import { Document, NextList } from '@bisondesk/commons-sdk/types';
2
2
  import { BusinessEntityIds, OpportunityType, WarningHints } from '../constants.js';
3
3
  import { Contact, Organization } from './crm.js';
4
4
  import type { InterestBffMeta, OpportunityInterest } from './interests.js';
5
+ import { BaseEvent } from './internal-events.js';
5
6
  import { Payment } from './payments.js';
6
7
  import { Quote, QuoteStatus } from './quotes.js';
7
8
  import { OpportunityReservation } from './reservations.js';
@@ -251,7 +252,7 @@ export type OpportunityBFF = {
251
252
  };
252
253
  };
253
254
 
254
- type BaseOpportunityEvent = {
255
+ type BaseOpportunityEvent = BaseEvent & {
255
256
  actionAt: string;
256
257
  userId: string;
257
258
  tenantId: string;
@@ -269,21 +270,12 @@ export type OpportunityUpdateEvent = BaseOpportunityEvent & {
269
270
  action: 'update';
270
271
  };
271
272
 
272
- export type OpportunityDeleteEvent = BaseOpportunityEvent & {
273
- opportunity?: undefined;
274
- previousOpportunity: Opportunity;
275
- action: 'delete';
276
- };
277
-
278
- export type OpportunityEvent =
279
- | OpportunityCreateEvent
280
- | OpportunityUpdateEvent
281
- | OpportunityDeleteEvent;
273
+ export type OpportunityEvent = OpportunityCreateEvent | OpportunityUpdateEvent;
282
274
 
283
275
  export type QuoteEvent = {
284
276
  quote: Quote;
285
277
  opportunity: Opportunity;
286
- action: 'create' | 'update' | 'delete';
278
+ action: 'create' | 'update';
287
279
  actionAt: string;
288
280
  userId: string;
289
281
  tenantId: string;
@@ -315,6 +307,7 @@ export type SearchOpportunity = {
315
307
  export const QUOTE_NEEDS_VALIDATION_NOTIFICATION_ORIGIN = 'quote-validation';
316
308
  export const QUOTE_NOT_CREATED_BY_ACCOUNT_MANAGER = 'quote-not-created-by-account-manager';
317
309
  export const QUOTE_VALIDATOR_FEEDBACK_NOTIFICATION_ORIGIN = 'quote-validation-feedback';
310
+
318
311
  export const OPPORTUNITY_VEHICLE_AVAILABLE_NOTIFICATION_ORIGIN = 'opportunity-vehicle-available';
319
312
  export const OPPORTUNITY_VEHICLE_DELIVERY_NOTIFICATION_ORIGIN = 'opportunity-vehicle-delivery';
320
313
  export const OPPORTUNITY_VEHICLE_RESERVATION_ABOUT_TO_EXPIRE_NOTIFICATION_ORIGIN =
@@ -322,6 +315,15 @@ export const OPPORTUNITY_VEHICLE_RESERVATION_ABOUT_TO_EXPIRE_NOTIFICATION_ORIGIN
322
315
  export const OPPORTUNITY_VEHICLE_RESERVATION_EXPIRED_NOTIFICATION_ORIGIN =
323
316
  'opportunity-vehicle-reservation-expired';
324
317
 
318
+ export const OFFER_SET_FINAL_VALUATION_ORIGIN = 'offer-set-final-valuation';
319
+
320
+ export const VEHICLE_PRICE_DECREASES_NOTIFICATION_ORIGIN = 'vehicle-price-decreased';
321
+ export const VEHICLE_ARRIVED_NOTIFICATION_ORIGIN = 'vehicle-arrived';
322
+ export const VEHICLE_CHECKEDIN_NOTIFICATION_ORIGIN = 'vehicle-checkedin';
323
+ export const VEHICLE_PURCHASED_NOTIFICATION_ORIGIN = 'vehicle-purchased';
324
+ export const VEHICLE_PRICE_CHANGED_NOTIFICATION_ORIGIN = 'vehicle-price-changed';
325
+ export const VEHICLE_SOLD_NOTIFICATION_ORIGIN = 'vehicle-sold';
326
+
325
327
  export type OpportunityNotificationData = {
326
328
  quoteVersion?: number;
327
329
  snippet?: string;
@@ -662,6 +664,18 @@ export type HpLeasingContractResponse = {
662
664
  contractNumber: string;
663
665
  };
664
666
 
667
+ export type HpLeasingDealReturnRequest = {
668
+ tenantId: string;
669
+ initiatedBy: 'bisondesk';
670
+ processMetaId: string;
671
+ processRunData: {
672
+ entityOwner: string;
673
+ leasingContractNumber2: string;
674
+ company: string;
675
+ vehicle: string;
676
+ };
677
+ };
678
+
665
679
  export type HpLeasingDealEndRequest = {
666
680
  tenantId: string;
667
681
  initiatedBy: 'bisondesk';
@@ -763,7 +777,7 @@ export type HpIsaProcessResponse = {
763
777
  };
764
778
 
765
779
  export type SwitchOpportunityVehicleRequest = {
766
- opportunityId: string;
780
+ opportunity: Opportunity;
767
781
  newVehicleId: string;
768
782
  };
769
783
 
@@ -1,3 +1,5 @@
1
+ import { BaseEvent } from './internal-events.js';
2
+
1
3
  export enum PaymentActions {
2
4
  DELETE = 'delete',
3
5
  EDIT = 'edit',
@@ -71,4 +73,5 @@ export type PaymentDeleteEvent = {
71
73
  branchId: string;
72
74
  };
73
75
 
74
- export type PaymentEvent = PaymentCreateEvent | PaymentUpdateEvent | PaymentDeleteEvent;
76
+ export type PaymentEvent = BaseEvent &
77
+ (PaymentCreateEvent | PaymentUpdateEvent | PaymentDeleteEvent);
@@ -104,7 +104,10 @@ export type LeasingCalculatorInput = BaseQuoteCalculatorInput & {
104
104
  residualPercentage: string;
105
105
  duration: number;
106
106
  salesPrice: string;
107
- };
107
+ } & (
108
+ | { selfFinancing: true; financing?: undefined }
109
+ | { selfFinancing: false; financing?: { bankAccountOrganizationId: string; amount: string } }
110
+ );
108
111
  taxes: {
109
112
  yearlyRoadTax: boolean;
110
113
  oneTimeRoadTax: boolean;
@@ -46,7 +46,7 @@ type BaseExternalVehicleSale = {
46
46
  deletedDate?: string;
47
47
  deletedReporter?: string;
48
48
  };
49
- source: 'HDMS' | 'Hexon';
49
+ source: 'HDMS' | 'Hexon' | 'Bisondesk';
50
50
  deleted?: boolean;
51
51
  status: VehicleSaleDealStatus;
52
52
  vehicleId: string;
@@ -18,6 +18,7 @@ export enum VehicleRoles {
18
18
  RENTAL = 'RENTAL',
19
19
  BUILD = 'BUILD',
20
20
  UNKNOWN = 'UNKNOWN',
21
+ BANK_FINANCE = 'BANK_FINANCE',
21
22
  }
22
23
 
23
24
  export enum VehicleFuelType {
@@ -49,7 +50,7 @@ export enum VehicleTachoTypes {
49
50
  SmartTacho2 = 'SMART_TACHO_2',
50
51
  }
51
52
 
52
- type BaseVehicleEvent = {
53
+ type BaseVehicleEvent = BaseEvent & {
53
54
  id: string;
54
55
  actionAt: string;
55
56
  userId: string;
@@ -248,6 +249,8 @@ export type SearchVehicle = {
248
249
  readyToDeliver: boolean;
249
250
  dealStatus?: VehiclePurchaseDealStatus;
250
251
  logisticsStatus?: VehiclePurchaseLogisticsStatus;
252
+ purchasedBy?: string;
253
+ parkingName?: string;
251
254
  };
252
255
  reservation?: Pick<OpportunityReservation, 'expiresAt' | 'opportunityId' | 'createdBy'>;
253
256
  vehicle: Vehicle;
@@ -460,7 +463,6 @@ export type VehicleExternalInfo = {
460
463
  };
461
464
  salesConditions: {
462
465
  leasing?: boolean;
463
- expected?: boolean;
464
466
  price?: string | undefined;
465
467
  currency?: string | undefined;
466
468
  marginScheme?: boolean;
@@ -100,16 +100,16 @@ export const convertLettersToNumber = (letters: string): number => {
100
100
  };
101
101
 
102
102
  export const getNextRelatedStockNumber = (stockNumber: string): string => {
103
- const counterPattern = /^([A-Z]{2,4}\d{5})([A-Z]{0,2})$/;
103
+ const counterPattern = /^([A-Z]+\d{5})([A-Z]{0,2})$/;
104
104
  const match = stockNumber.match(counterPattern);
105
105
  if (match == null) {
106
106
  throw new XError('core-sdk.vehicles.bad-stock-number', { stockNumber });
107
107
  }
108
108
 
109
- const baseNumber = match[1];
110
- const counter = match[2];
111
- const counterNumber = convertLettersToNumber(counter);
109
+ const baseStockNumber = match[1];
110
+ const counterLetters = match[2];
111
+ const counterNumber = convertLettersToNumber(counterLetters);
112
112
  const nextCounterNumber = counterNumber + 1;
113
- const nextCounter = convertNumberToLetters(nextCounterNumber);
114
- return `${baseNumber}${nextCounter}`;
113
+ const nextCounterLetters = convertNumberToLetters(nextCounterNumber);
114
+ return `${baseStockNumber}${nextCounterLetters}`;
115
115
  };