@bisondesk/documents-sdk 1.0.538 → 1.0.540
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/lib/types/search.d.ts +2 -1
- package/lib/types/search.d.ts.map +1 -1
- package/lib/types/search.js.map +1 -1
- package/lib/utils/finance.d.ts.map +1 -1
- package/lib/utils/finance.js +6 -3
- package/lib/utils/finance.js.map +1 -1
- package/package.json +1 -1
- package/src/types/search.ts +2 -0
- package/src/utils/finance.ts +7 -5
- package/tsconfig.tsbuildinfo +1 -1
package/lib/types/search.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { PaginatedRequest, SearchPermissions } from '@bisondesk/commons-sdk/type
|
|
|
4
4
|
import { Organization } from '@bisondesk/core-sdk/types/crm';
|
|
5
5
|
import { PublicSearchDefinition } from '@bisondesk/core-sdk/types/definitions';
|
|
6
6
|
import { FinanceBooking } from './booking.js';
|
|
7
|
-
import { AdministrativeDocument, DocumentDraft, DocumentType, DraftProcessStage, FinanceDocument } from './documents.js';
|
|
7
|
+
import { AdministrativeDocument, DocumentDraft, DocumentType, DraftProcessStage, FinanceDocType, FinanceDocument } from './documents.js';
|
|
8
8
|
export type SearchDocumentVehicleRef = {
|
|
9
9
|
id: string;
|
|
10
10
|
stockNumber: string;
|
|
@@ -53,6 +53,7 @@ export type RelatedDocumentsRequest = {
|
|
|
53
53
|
businessEntityId: BusinessEntityIds;
|
|
54
54
|
recordId: string;
|
|
55
55
|
docTypes?: DocumentType[];
|
|
56
|
+
financeDocType?: FinanceDocType;
|
|
56
57
|
subtype?: 'generic' | 'deal';
|
|
57
58
|
} & PaginatedRequest;
|
|
58
59
|
export type SearchDocumentDraftDefinitions = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"/","sources":["types/search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"/","sources":["types/search.ts"],"names":[],"mappings":"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"}
|
package/lib/types/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"/","sources":["types/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"/","sources":["types/search.ts"],"names":[],"mappings":"AAmCA,MAAM,CAAN,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,8CAAqB,CAAA;IACrB,gDAAuB,CAAA;AACzB,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,QAGhC;AAED,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,0CAAqB,CAAA;IACrB,8CAAyB,CAAA;IACzB,kCAAa,CAAA;IACb,gCAAW,CAAA;AACb,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B","sourcesContent":["import { BusinessEntityIds } from '@bisondesk/commons-sdk/constants';\nimport { SearchRequest } from '@bisondesk/commons-sdk/search';\nimport { PaginatedRequest, SearchPermissions } from '@bisondesk/commons-sdk/types';\nimport { Organization } from '@bisondesk/core-sdk/types/crm';\nimport { PublicSearchDefinition } from '@bisondesk/core-sdk/types/definitions';\nimport { FinanceBooking } from './booking.js';\nimport {\n AdministrativeDocument,\n DocumentDraft,\n DocumentType,\n DraftProcessStage,\n FinanceDocType,\n FinanceDocument,\n} from './documents.js';\n\nexport type SearchDocumentVehicleRef = {\n id: string;\n stockNumber: string;\n administrativeNumber?: string;\n};\n\nexport type InputSearchFinanceDocument = SearchFinanceDocument & {\n permissions: SearchPermissions;\n};\n\nexport type InputSearchAdministrativeDocument = SearchAdministrativeDocument;\n\nexport type DocsSearchDefinitions = {\n searchFinanceDoc: PublicSearchDefinition;\n};\n\nexport type AdministrativeDocsSearchDefinitions = {\n searchAdministrativeDoc: PublicSearchDefinition;\n};\n\nexport enum FinanceDocumentSource {\n HyperDMS = 'HyperDMS',\n Bisondesk = 'Bisondesk',\n}\n\nexport enum AutoValidatedInfo {\n Business = 'business',\n Accounting = 'accounting',\n None = 'none',\n All = 'all',\n}\n\nexport type SearchFinanceDocument = {\n permissions: SearchPermissions;\n org?: Organization;\n doc: FinanceDocument;\n booking?: FinanceBooking;\n vehicle?: SearchDocumentVehicleRef[];\n custom: {\n autoValidated?: AutoValidatedInfo[];\n isBooked: boolean;\n inStorecove?: boolean;\n source: FinanceDocumentSource;\n };\n};\n\nexport type SearchAdministrativeDocument = {\n doc: AdministrativeDocument;\n custom: {\n categorySubtype: 'generic' | 'deal';\n };\n};\n\nexport type RelatedDocumentsRequest = {\n businessEntityId: BusinessEntityIds;\n recordId: string;\n docTypes?: DocumentType[];\n financeDocType?: FinanceDocType;\n subtype?: 'generic' | 'deal';\n} & PaginatedRequest;\n\nexport type SearchDocumentDraftDefinitions = {\n document: PublicSearchDefinition;\n};\n\nexport type SearchDocumentDraft = {\n doc: DocumentDraft;\n permissions: SearchPermissions;\n custom: {\n stage: DraftProcessStage;\n rejected?: boolean;\n validators?: string[];\n restrictedDraftUsers?: string[];\n validationRulesStatus?: ('passed' | 'failed' | 'skipped')[];\n };\n};\n\nexport type CheckDraftDuplicatesRequest = {\n draftId: string;\n reference: string;\n};\n\nexport type ReindexDraftEvent = {\n id: string;\n tenantId: string;\n};\n\nexport type NextAvailableDraftsRequest = {\n draftId: string;\n createdAt: string;\n searchRequest: SearchRequest;\n};\n\nexport type NextAvailableDraftsResponse = {\n prev: string | undefined;\n next: string | undefined;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finance.d.ts","sourceRoot":"/","sources":["utils/finance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,EAEL,aAAa,EACb,eAAe,EACf,8BAA8B,EAG9B,iBAAiB,EAIjB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAiB,MAAM,oBAAoB,CAAC;AAEtE,eAAO,MAAM,wBAAwB,GACnC,KACI,iBAAiB,GACjB,aAAa,CAAC,iBAAiB,CAAC,GAChC,8BAA8B,GAC9B,iBAAiB,KACpB,OAOF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,KACI,iBAAiB,GACjB,aAAa,CAAC,iBAAiB,CAAC,GAChC,8BAA8B,GAC9B,iBAAiB,KACpB,OAQF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,KAAK,iBAAiB,KAAG,MAoCjE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,eAAe,CAAC,OAAO,CAAC,EAC7D,OAAO,CAAC,EACR,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,YAK9C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACtE,UAAU,MAAM,EAChB,OAAO,CAAC,EACR,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,EACzC,gBAAgB,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,YAY/C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,KACI,eAAe,GACf,aAAa,CAAC,iBAAiB,CAAC,GAChC,gBAAgB,CAAC,iBAAiB,CAAC,GACnC,8BAA8B;;;;CA6BnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,KACI,eAAe,GACf,aAAa,CAAC,iBAAiB,CAAC,GAChC,gBAAgB,CAAC,iBAAiB,CAAC,GACnC,8BAA8B;;;;;;;;;;;;CAgCnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,MAAM,EAChB,OAAO;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAAE,EAC3E,aAAU;;;;CAkBX,CAAC;AAKF,eAAO,MAAM,cAAc,GAAI,eAAe,MAAM,EAAE,UAAU,MAAM,EAAE,SAAS,MAAM;;;;;CAYtF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,KAAK,eAAe,YACC,CAAC;AAK7D,eAAO,MAAM,4BAA4B,GACvC,KAAK,eAAe,EACpB,UAAU,MAAM,KACf,
|
|
1
|
+
{"version":3,"file":"finance.d.ts","sourceRoot":"/","sources":["utils/finance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,EAEL,aAAa,EACb,eAAe,EACf,8BAA8B,EAG9B,iBAAiB,EAIjB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAiB,MAAM,oBAAoB,CAAC;AAEtE,eAAO,MAAM,wBAAwB,GACnC,KACI,iBAAiB,GACjB,aAAa,CAAC,iBAAiB,CAAC,GAChC,8BAA8B,GAC9B,iBAAiB,KACpB,OAOF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,KACI,iBAAiB,GACjB,aAAa,CAAC,iBAAiB,CAAC,GAChC,8BAA8B,GAC9B,iBAAiB,KACpB,OAQF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,KAAK,iBAAiB,KAAG,MAoCjE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,eAAe,CAAC,OAAO,CAAC,EAC7D,OAAO,CAAC,EACR,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,YAK9C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACtE,UAAU,MAAM,EAChB,OAAO,CAAC,EACR,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,EACzC,gBAAgB,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,YAY/C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,KACI,eAAe,GACf,aAAa,CAAC,iBAAiB,CAAC,GAChC,gBAAgB,CAAC,iBAAiB,CAAC,GACnC,8BAA8B;;;;CA6BnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,KACI,eAAe,GACf,aAAa,CAAC,iBAAiB,CAAC,GAChC,gBAAgB,CAAC,iBAAiB,CAAC,GACnC,8BAA8B;;;;;;;;;;;;CAgCnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,MAAM,EAChB,OAAO;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAAE,EAC3E,aAAU;;;;CAkBX,CAAC;AAKF,eAAO,MAAM,cAAc,GAAI,eAAe,MAAM,EAAE,UAAU,MAAM,EAAE,SAAS,MAAM;;;;;CAYtF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,KAAK,eAAe,YACC,CAAC;AAK7D,eAAO,MAAM,4BAA4B,GACvC,KAAK,eAAe,EACpB,UAAU,MAAM,KACf,eAoCF,CAAC"}
|
package/lib/utils/finance.js
CHANGED
|
@@ -145,9 +145,12 @@ export const filterDocumentLinesForRecord = (doc, recordId) => {
|
|
|
145
145
|
unitPriceExcl: calculateDistributedPrice(line.unitPriceExcl, line.associations?.length || 1),
|
|
146
146
|
}))
|
|
147
147
|
: doc.lines
|
|
148
|
-
.filter((line) => getAllV1Associations(line.associations).some((assoc) =>
|
|
149
|
-
|
|
150
|
-
assoc.
|
|
148
|
+
.filter((line) => getAllV1Associations(line.associations).some((assoc) => {
|
|
149
|
+
const v1Ass = assoc;
|
|
150
|
+
return (assoc.vehicleId === recordId ||
|
|
151
|
+
v1Ass.opportunityId === recordId ||
|
|
152
|
+
v1Ass.id === recordId);
|
|
153
|
+
}))
|
|
151
154
|
.map((line) => ({
|
|
152
155
|
...line,
|
|
153
156
|
unitPriceExclusive: calculateDistributedPrice(line.unitPriceExclusive, getAllV1Associations(line.associations).length || 1),
|
package/lib/utils/finance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finance.js","sourceRoot":"/","sources":["utils/finance.ts"],"names":[],"mappings":"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","sourcesContent":["import { BusinessEntityIds } from '@bisondesk/commons-sdk/constants';\nimport { roundMoney } from '@bisondesk/commons-sdk/money';\nimport { Decimal } from 'decimal.js';\nimport { uniqBy } from 'lodash-es';\nimport { GENERATING_PLACEHOLDER_ATTACHMENT } from '../constants/index.js';\nimport {\n Association,\n DocumentDraft,\n FinanceDocument,\n FinanceDocumentGenerateRequest,\n FinanceDocumentLine,\n FinanceDocumentSubtype,\n FinanceDocumentV2,\n isFinanceDocumentDraft,\n isFinanceDocumentV1,\n isFinanceDocumentV2,\n NewDocumentDraft,\n} from '../types/documents.js';\nimport { FinanceDocumentV1, FinanceLineV1 } from '../types/legacy.js';\n\nexport const documentGoesToAccounting = (\n doc:\n | FinanceDocumentV2\n | DocumentDraft<FinanceDocumentV2>\n | FinanceDocumentGenerateRequest\n | FinanceDocumentV1\n): boolean => {\n return (\n !!doc.subtype &&\n [FinanceDocumentSubtype.Invoice, FinanceDocumentSubtype.CreditNote].includes(\n doc.subtype as FinanceDocumentSubtype\n )\n );\n};\n\nexport const documentGoesToStorecove = (\n doc:\n | FinanceDocumentV2\n | DocumentDraft<FinanceDocumentV2>\n | FinanceDocumentGenerateRequest\n | FinanceDocumentV1\n): boolean => {\n if (!doc.organizationSummary) {\n return false;\n }\n const vatNumber = doc.organizationSummary.vatNumber;\n const isBeCountry = doc.organizationSummary.country === 'be';\n const isBEVAT = (isBeCountry && vatNumber?.startsWith('BE')) || false;\n return isBEVAT && documentGoesToAccounting(doc);\n};\n\nexport const getAccountingDescription = (doc: FinanceDocumentV2): string => {\n if (!!doc.accountingDescription) {\n return doc.accountingDescription;\n }\n\n const associations = doc.lines\n ?.flatMap((line) => line.associations ?? [])\n .filter(Boolean) as Association[];\n\n // In the UI the user can only select one vehicle associations\n const equivalentEntityIds = {\n [BusinessEntityIds.ExternalVehicleSale]: BusinessEntityIds.Vehicles,\n };\n\n const uniqueAssociations = uniqBy(\n associations,\n (a) => `${equivalentEntityIds[a.businessEntityId] ?? a.businessEntityId}_${a.recordId}`\n );\n\n if (uniqueAssociations.length !== 1) {\n return doc.reference;\n }\n\n const firstAssociation = associations[0];\n if (\n [\n BusinessEntityIds.Vehicles,\n BusinessEntityIds.Opportunities,\n BusinessEntityIds.ExternalVehicleSale,\n ].includes(firstAssociation.businessEntityId) &&\n firstAssociation.tags != null\n ) {\n return `${firstAssociation.tags?.slice(0, 3).join(' ')} ${doc.reference}`.trim();\n }\n\n return doc.reference;\n};\n\nexport const getTotalExcl = <T extends FinanceDocument['lines']>(\n lines: T,\n unitPrice: (line: T[0], index: number) => any\n) => {\n return lines.length === 0\n ? new Decimal(0)\n : Decimal.sum(...lines.map((line, i) => Decimal.mul(line.quantity, unitPrice(line, i))));\n};\n\nexport const getTotalVat = <T extends FinanceDocument['lines'], L = T[0]>(\n currency: string,\n lines: T,\n unitPrice: (doc: L, index: number) => any,\n vatCoefficient: (doc: L, index: number) => any\n) => {\n return lines.length === 0\n ? new Decimal(0)\n : roundMoney(\n currency,\n Decimal.sum(\n ...lines.map((line, i) =>\n Decimal.mul(line.quantity, unitPrice(line, i)).mul(vatCoefficient(line, i))\n )\n )\n );\n};\n\nexport const getDocumentTotals = (\n doc:\n | FinanceDocument\n | DocumentDraft<FinanceDocumentV2>\n | NewDocumentDraft<FinanceDocumentV2>\n | FinanceDocumentGenerateRequest\n) => {\n let totalVat: Decimal;\n let totalExcl: Decimal;\n\n if (isFinanceDocumentV1(doc as FinanceDocumentV1)) {\n const v1Currency = 'EUR';\n const lines = (doc as FinanceDocumentV1).lines;\n const getUnitPriceExclusive = (line: FinanceLineV1) => line.unitPriceExclusive;\n\n totalVat = getTotalVat(v1Currency, lines, getUnitPriceExclusive, (line) => line.vatCoefficient);\n totalExcl = getTotalExcl(lines, getUnitPriceExclusive);\n } else {\n const docCurrency = (doc as FinanceDocumentV2)?.total?.currencyCode; // careful with this cast, misleading\n const currency = docCurrency ?? 'EUR';\n const lines = (doc as FinanceDocumentV2).lines ?? [];\n const getUnitPriceExcl = (line: FinanceDocumentLine) => line.unitPriceExcl;\n\n totalVat = getTotalVat(currency, lines, getUnitPriceExcl, (line) =>\n new Decimal(line.vatPercentage).div(100)\n );\n totalExcl = getTotalExcl(lines, getUnitPriceExcl);\n }\n\n return {\n totalExcl,\n totalVat,\n subTotal: totalExcl.add(totalVat),\n };\n};\n\nexport const getRoundedDocumentTotal = (\n doc:\n | FinanceDocument\n | DocumentDraft<FinanceDocumentV2>\n | NewDocumentDraft<FinanceDocumentV2>\n | FinanceDocumentGenerateRequest\n) => {\n let total: FinanceDocumentV2['total'] | undefined;\n\n if (isFinanceDocumentV2(doc as FinanceDocument) || isFinanceDocumentDraft(doc as DocumentDraft)) {\n total = (doc as FinanceDocumentV2 | DocumentDraft<FinanceDocumentV2>).total;\n }\n\n const currencyCode = total?.currencyCode ?? 'EUR';\n const foreignCurrency = total?.foreign;\n\n const { subTotal, totalExcl, totalVat } = getDocumentTotals(doc);\n const rate = foreignCurrency?.exchangeRate ?? '1';\n const subTotalForeign = subTotal.div(rate).toString();\n const totalExclForeign = totalExcl.div(rate).toString();\n const totalVatForeign = totalVat.div(rate).toString();\n\n return {\n amount: roundMoney(currencyCode, subTotal).toString(),\n amountExcl: roundMoney(currencyCode, totalExcl).toString(),\n vatAmount: roundMoney(currencyCode, totalVat).toString(),\n currencyCode: currencyCode,\n foreign: foreignCurrency\n ? {\n amount: roundMoney(foreignCurrency.currencyCode, subTotalForeign).toString(),\n amountExcl: roundMoney(foreignCurrency.currencyCode, totalExclForeign).toString(),\n vatAmount: roundMoney(foreignCurrency.currencyCode, totalVatForeign).toString(),\n currencyCode: foreignCurrency.currencyCode,\n exchangeRate: foreignCurrency.exchangeRate,\n }\n : undefined,\n };\n};\n\nexport const getRoundedLinesTotals = (\n currency: string,\n lines: { quantity: string; unitPriceExcl: string; vatPercentage: string }[],\n rate = '1'\n) => {\n let totalWithoutVat = new Decimal('0');\n let vatTotal = new Decimal('0');\n for (const line of lines) {\n const lineTotal = new Decimal(line.unitPriceExcl).times(new Decimal(line.quantity));\n totalWithoutVat = totalWithoutVat.add(lineTotal);\n vatTotal = vatTotal.add(lineTotal.mul(line.vatPercentage).div(100));\n }\n\n totalWithoutVat = totalWithoutVat.div(rate);\n vatTotal = vatTotal.div(rate);\n\n return {\n totalWithoutVat: roundMoney(currency, totalWithoutVat),\n vatTotal: roundMoney(currency, vatTotal),\n total: roundMoney(currency, vatTotal.add(totalWithoutVat)),\n };\n};\n\nconst getAmountExcl = (unitPriceExcl: string, quantity: string) =>\n new Decimal(unitPriceExcl).times(new Decimal(quantity));\n\nexport const getLineAmounts = (unitPriceExcl: string, quantity: string, vatRate: string) => {\n const amountExcl = getAmountExcl(unitPriceExcl, quantity);\n const vatAmount = new Decimal(quantity)\n .times(new Decimal(unitPriceExcl))\n .times(new Decimal(vatRate).div(100));\n\n return {\n amount: amountExcl.add(vatAmount).toString(),\n amountExcl: amountExcl.toString(),\n unitPriceExcl,\n vatAmount: vatAmount.toString(),\n };\n};\n\nexport const isGeneratingAttachment = (doc: FinanceDocument) =>\n doc.attachment.id === GENERATING_PLACEHOLDER_ATTACHMENT.id;\n\n// returns a new finance document where\n// - all lines are filtered by the recordId\n// - the unit price is divided by the number of associations\nexport const filterDocumentLinesForRecord = (\n doc: FinanceDocument,\n recordId: string // vehicleId, opportunityId, or externalVehicleSaleId\n): FinanceDocument => {\n const filteredLines = isFinanceDocumentV2(doc)\n ? doc.lines\n .filter((line) => line.associations?.some((assoc) => assoc.recordId === recordId))\n .map((line) => ({\n ...line,\n amount: calculateDistributedPrice(line.amount, line.associations?.length || 1),\n amountExcl: calculateDistributedPrice(line.amountExcl, line.associations?.length || 1),\n unitPriceExcl: calculateDistributedPrice(\n line.unitPriceExcl,\n line.associations?.length || 1\n ),\n }))\n : doc.lines\n .filter((line) =>\n getAllV1Associations(line.associations).some(\n (assoc) =>\n assoc.vehicleId === recordId ||\n (assoc as FinanceLineV1['associations']['sales'][0]).opportunityId === recordId ||\n (assoc as FinanceLineV1['associations']['sales'][0]).id === recordId\n )\n )\n .map((line) => ({\n ...line,\n unitPriceExclusive: calculateDistributedPrice(\n line.unitPriceExclusive,\n getAllV1Associations(line.associations).length || 1\n ),\n }));\n\n return {\n ...doc,\n lines: filteredLines,\n } as FinanceDocument;\n};\n\nconst calculateDistributedPrice = (price: string, count: number): string => {\n return new Decimal(price).div(Math.max(1, count)).toString();\n};\n\nconst getAllV1Associations = (ass: FinanceLineV1['associations']) => {\n const allAss = uniqBy(\n [...(ass?.sales ?? []), ...(ass?.purchases ?? []), ...(ass.others ?? [])],\n (ass) => ass.vehicleId\n );\n return allAss;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"finance.js","sourceRoot":"/","sources":["utils/finance.ts"],"names":[],"mappings":"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","sourcesContent":["import { BusinessEntityIds } from '@bisondesk/commons-sdk/constants';\nimport { roundMoney } from '@bisondesk/commons-sdk/money';\nimport { Decimal } from 'decimal.js';\nimport { uniqBy } from 'lodash-es';\nimport { GENERATING_PLACEHOLDER_ATTACHMENT } from '../constants/index.js';\nimport {\n Association,\n DocumentDraft,\n FinanceDocument,\n FinanceDocumentGenerateRequest,\n FinanceDocumentLine,\n FinanceDocumentSubtype,\n FinanceDocumentV2,\n isFinanceDocumentDraft,\n isFinanceDocumentV1,\n isFinanceDocumentV2,\n NewDocumentDraft,\n} from '../types/documents.js';\nimport { FinanceDocumentV1, FinanceLineV1 } from '../types/legacy.js';\n\nexport const documentGoesToAccounting = (\n doc:\n | FinanceDocumentV2\n | DocumentDraft<FinanceDocumentV2>\n | FinanceDocumentGenerateRequest\n | FinanceDocumentV1\n): boolean => {\n return (\n !!doc.subtype &&\n [FinanceDocumentSubtype.Invoice, FinanceDocumentSubtype.CreditNote].includes(\n doc.subtype as FinanceDocumentSubtype\n )\n );\n};\n\nexport const documentGoesToStorecove = (\n doc:\n | FinanceDocumentV2\n | DocumentDraft<FinanceDocumentV2>\n | FinanceDocumentGenerateRequest\n | FinanceDocumentV1\n): boolean => {\n if (!doc.organizationSummary) {\n return false;\n }\n const vatNumber = doc.organizationSummary.vatNumber;\n const isBeCountry = doc.organizationSummary.country === 'be';\n const isBEVAT = (isBeCountry && vatNumber?.startsWith('BE')) || false;\n return isBEVAT && documentGoesToAccounting(doc);\n};\n\nexport const getAccountingDescription = (doc: FinanceDocumentV2): string => {\n if (!!doc.accountingDescription) {\n return doc.accountingDescription;\n }\n\n const associations = doc.lines\n ?.flatMap((line) => line.associations ?? [])\n .filter(Boolean) as Association[];\n\n // In the UI the user can only select one vehicle associations\n const equivalentEntityIds = {\n [BusinessEntityIds.ExternalVehicleSale]: BusinessEntityIds.Vehicles,\n };\n\n const uniqueAssociations = uniqBy(\n associations,\n (a) => `${equivalentEntityIds[a.businessEntityId] ?? a.businessEntityId}_${a.recordId}`\n );\n\n if (uniqueAssociations.length !== 1) {\n return doc.reference;\n }\n\n const firstAssociation = associations[0];\n if (\n [\n BusinessEntityIds.Vehicles,\n BusinessEntityIds.Opportunities,\n BusinessEntityIds.ExternalVehicleSale,\n ].includes(firstAssociation.businessEntityId) &&\n firstAssociation.tags != null\n ) {\n return `${firstAssociation.tags?.slice(0, 3).join(' ')} ${doc.reference}`.trim();\n }\n\n return doc.reference;\n};\n\nexport const getTotalExcl = <T extends FinanceDocument['lines']>(\n lines: T,\n unitPrice: (line: T[0], index: number) => any\n) => {\n return lines.length === 0\n ? new Decimal(0)\n : Decimal.sum(...lines.map((line, i) => Decimal.mul(line.quantity, unitPrice(line, i))));\n};\n\nexport const getTotalVat = <T extends FinanceDocument['lines'], L = T[0]>(\n currency: string,\n lines: T,\n unitPrice: (doc: L, index: number) => any,\n vatCoefficient: (doc: L, index: number) => any\n) => {\n return lines.length === 0\n ? new Decimal(0)\n : roundMoney(\n currency,\n Decimal.sum(\n ...lines.map((line, i) =>\n Decimal.mul(line.quantity, unitPrice(line, i)).mul(vatCoefficient(line, i))\n )\n )\n );\n};\n\nexport const getDocumentTotals = (\n doc:\n | FinanceDocument\n | DocumentDraft<FinanceDocumentV2>\n | NewDocumentDraft<FinanceDocumentV2>\n | FinanceDocumentGenerateRequest\n) => {\n let totalVat: Decimal;\n let totalExcl: Decimal;\n\n if (isFinanceDocumentV1(doc as FinanceDocumentV1)) {\n const v1Currency = 'EUR';\n const lines = (doc as FinanceDocumentV1).lines;\n const getUnitPriceExclusive = (line: FinanceLineV1) => line.unitPriceExclusive;\n\n totalVat = getTotalVat(v1Currency, lines, getUnitPriceExclusive, (line) => line.vatCoefficient);\n totalExcl = getTotalExcl(lines, getUnitPriceExclusive);\n } else {\n const docCurrency = (doc as FinanceDocumentV2)?.total?.currencyCode; // careful with this cast, misleading\n const currency = docCurrency ?? 'EUR';\n const lines = (doc as FinanceDocumentV2).lines ?? [];\n const getUnitPriceExcl = (line: FinanceDocumentLine) => line.unitPriceExcl;\n\n totalVat = getTotalVat(currency, lines, getUnitPriceExcl, (line) =>\n new Decimal(line.vatPercentage).div(100)\n );\n totalExcl = getTotalExcl(lines, getUnitPriceExcl);\n }\n\n return {\n totalExcl,\n totalVat,\n subTotal: totalExcl.add(totalVat),\n };\n};\n\nexport const getRoundedDocumentTotal = (\n doc:\n | FinanceDocument\n | DocumentDraft<FinanceDocumentV2>\n | NewDocumentDraft<FinanceDocumentV2>\n | FinanceDocumentGenerateRequest\n) => {\n let total: FinanceDocumentV2['total'] | undefined;\n\n if (isFinanceDocumentV2(doc as FinanceDocument) || isFinanceDocumentDraft(doc as DocumentDraft)) {\n total = (doc as FinanceDocumentV2 | DocumentDraft<FinanceDocumentV2>).total;\n }\n\n const currencyCode = total?.currencyCode ?? 'EUR';\n const foreignCurrency = total?.foreign;\n\n const { subTotal, totalExcl, totalVat } = getDocumentTotals(doc);\n const rate = foreignCurrency?.exchangeRate ?? '1';\n const subTotalForeign = subTotal.div(rate).toString();\n const totalExclForeign = totalExcl.div(rate).toString();\n const totalVatForeign = totalVat.div(rate).toString();\n\n return {\n amount: roundMoney(currencyCode, subTotal).toString(),\n amountExcl: roundMoney(currencyCode, totalExcl).toString(),\n vatAmount: roundMoney(currencyCode, totalVat).toString(),\n currencyCode: currencyCode,\n foreign: foreignCurrency\n ? {\n amount: roundMoney(foreignCurrency.currencyCode, subTotalForeign).toString(),\n amountExcl: roundMoney(foreignCurrency.currencyCode, totalExclForeign).toString(),\n vatAmount: roundMoney(foreignCurrency.currencyCode, totalVatForeign).toString(),\n currencyCode: foreignCurrency.currencyCode,\n exchangeRate: foreignCurrency.exchangeRate,\n }\n : undefined,\n };\n};\n\nexport const getRoundedLinesTotals = (\n currency: string,\n lines: { quantity: string; unitPriceExcl: string; vatPercentage: string }[],\n rate = '1'\n) => {\n let totalWithoutVat = new Decimal('0');\n let vatTotal = new Decimal('0');\n for (const line of lines) {\n const lineTotal = new Decimal(line.unitPriceExcl).times(new Decimal(line.quantity));\n totalWithoutVat = totalWithoutVat.add(lineTotal);\n vatTotal = vatTotal.add(lineTotal.mul(line.vatPercentage).div(100));\n }\n\n totalWithoutVat = totalWithoutVat.div(rate);\n vatTotal = vatTotal.div(rate);\n\n return {\n totalWithoutVat: roundMoney(currency, totalWithoutVat),\n vatTotal: roundMoney(currency, vatTotal),\n total: roundMoney(currency, vatTotal.add(totalWithoutVat)),\n };\n};\n\nconst getAmountExcl = (unitPriceExcl: string, quantity: string) =>\n new Decimal(unitPriceExcl).times(new Decimal(quantity));\n\nexport const getLineAmounts = (unitPriceExcl: string, quantity: string, vatRate: string) => {\n const amountExcl = getAmountExcl(unitPriceExcl, quantity);\n const vatAmount = new Decimal(quantity)\n .times(new Decimal(unitPriceExcl))\n .times(new Decimal(vatRate).div(100));\n\n return {\n amount: amountExcl.add(vatAmount).toString(),\n amountExcl: amountExcl.toString(),\n unitPriceExcl,\n vatAmount: vatAmount.toString(),\n };\n};\n\nexport const isGeneratingAttachment = (doc: FinanceDocument) =>\n doc.attachment.id === GENERATING_PLACEHOLDER_ATTACHMENT.id;\n\n// returns a new finance document where\n// - all lines are filtered by the recordId\n// - the unit price is divided by the number of associations\nexport const filterDocumentLinesForRecord = (\n doc: FinanceDocument,\n recordId: string // vehicleId, opportunityId, or externalVehicleSaleId\n): FinanceDocument => {\n const filteredLines = isFinanceDocumentV2(doc)\n ? doc.lines\n .filter((line) => line.associations?.some((assoc) => assoc.recordId === recordId))\n .map((line) => ({\n ...line,\n amount: calculateDistributedPrice(line.amount, line.associations?.length || 1),\n amountExcl: calculateDistributedPrice(line.amountExcl, line.associations?.length || 1),\n unitPriceExcl: calculateDistributedPrice(\n line.unitPriceExcl,\n line.associations?.length || 1\n ),\n }))\n : doc.lines\n .filter((line) =>\n getAllV1Associations(line.associations).some((assoc) => {\n const v1Ass = assoc as FinanceLineV1['associations']['sales'][0];\n return (\n assoc.vehicleId === recordId ||\n v1Ass.opportunityId === recordId ||\n v1Ass.id === recordId\n );\n })\n )\n .map((line) => ({\n ...line,\n unitPriceExclusive: calculateDistributedPrice(\n line.unitPriceExclusive,\n getAllV1Associations(line.associations).length || 1\n ),\n }));\n\n return {\n ...doc,\n lines: filteredLines,\n } as FinanceDocument;\n};\n\nconst calculateDistributedPrice = (price: string, count: number): string => {\n return new Decimal(price).div(Math.max(1, count)).toString();\n};\n\nconst getAllV1Associations = (ass: FinanceLineV1['associations']) => {\n const allAss = uniqBy(\n [...(ass?.sales ?? []), ...(ass?.purchases ?? []), ...(ass.others ?? [])],\n (ass) => ass.vehicleId\n );\n return allAss;\n};\n"]}
|
package/package.json
CHANGED
package/src/types/search.ts
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
DocumentDraft,
|
|
10
10
|
DocumentType,
|
|
11
11
|
DraftProcessStage,
|
|
12
|
+
FinanceDocType,
|
|
12
13
|
FinanceDocument,
|
|
13
14
|
} from './documents.js';
|
|
14
15
|
|
|
@@ -69,6 +70,7 @@ export type RelatedDocumentsRequest = {
|
|
|
69
70
|
businessEntityId: BusinessEntityIds;
|
|
70
71
|
recordId: string;
|
|
71
72
|
docTypes?: DocumentType[];
|
|
73
|
+
financeDocType?: FinanceDocType;
|
|
72
74
|
subtype?: 'generic' | 'deal';
|
|
73
75
|
} & PaginatedRequest;
|
|
74
76
|
|
package/src/utils/finance.ts
CHANGED
|
@@ -253,12 +253,14 @@ export const filterDocumentLinesForRecord = (
|
|
|
253
253
|
}))
|
|
254
254
|
: doc.lines
|
|
255
255
|
.filter((line) =>
|
|
256
|
-
getAllV1Associations(line.associations).some(
|
|
257
|
-
|
|
256
|
+
getAllV1Associations(line.associations).some((assoc) => {
|
|
257
|
+
const v1Ass = assoc as FinanceLineV1['associations']['sales'][0];
|
|
258
|
+
return (
|
|
258
259
|
assoc.vehicleId === recordId ||
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
260
|
+
v1Ass.opportunityId === recordId ||
|
|
261
|
+
v1Ass.id === recordId
|
|
262
|
+
);
|
|
263
|
+
})
|
|
262
264
|
)
|
|
263
265
|
.map((line) => ({
|
|
264
266
|
...line,
|