@pmcretail/mapper-library 0.0.21 → 0.0.22
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/bundles/pmcretail-mapper-library.umd.js +2 -2
- package/bundles/pmcretail-mapper-library.umd.js.map +1 -1
- package/bundles/pmcretail-mapper-library.umd.min.js.map +1 -1
- package/esm2015/lib/WebReturn-mapper.class.js +3 -3
- package/esm5/lib/WebReturn-mapper.class.js +3 -3
- package/fesm2015/pmcretail-mapper-library.js +2 -2
- package/fesm2015/pmcretail-mapper-library.js.map +1 -1
- package/fesm5/pmcretail-mapper-library.js +2 -2
- package/fesm5/pmcretail-mapper-library.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pmcretail-mapper-library.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://@pmcretail/mapper-library/lib/mapper-library.component.ts","ng://@pmcretail/mapper-library/lib/mapper-library.module.ts","ng://@pmcretail/mapper-library/lib/mapper-library.model.ts","ng://@pmcretail/mapper-library/lib/basket.service.ts","ng://@pmcretail/mapper-library/lib/number-util.service.ts","ng://@pmcretail/mapper-library/lib/TransactionDocumentBuilder.ts","ng://@pmcretail/mapper-library/lib/RJ-mapper.class.ts","ng://@pmcretail/mapper-library/lib/WebReturn-mapper.class.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-mapper-library',\n template: `\n <p>\n mapper-library works!\n </p>\n `,\n styles: [\n ]\n})\nexport class MapperLibraryComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { MapperLibraryComponent } from './mapper-library.component';\n\n\n\n@NgModule({\n declarations: [\n MapperLibraryComponent\n ],\n imports: [\n ],\n exports: [\n MapperLibraryComponent\n ]\n})\nexport class MapperLibraryModule { }\n","\r\n\r\nexport enum TRANSACTION_TYPE {\r\n SALE = \"SALE\",\r\n REFUND = \"REFUND\",\r\n SALE_REFUND = \"SALE_REFUND\",\r\n SALE_EXCHANGE = \"SALE_EXCHANGE\",\r\n VOID = \"VOID\"\r\n}\r\n\r\nexport interface ItemDiscount {\r\n trnDiscountsPortion: number;\r\n trnPromotionsPortion: number;\r\n refundPortion: number;\r\n currentRefundPortion?: number;\r\n}\r\n\r\nexport enum DELIVERY_METHODS {\r\n DELIVERY = 1,\r\n DROP_SHIP = 2,\r\n COLLECT_FROM_STORE = 3,\r\n}\r\n\r\nexport interface ProductChange {\r\n itemLineId?: number;\r\n SKU: string;\r\n quantity: number;\r\n selectedPrice?: number;\r\n lineDiscount?: LineDiscount;\r\n linePromotions?: LinePromotions;\r\n exchange?: Exchange;\r\n refundedQuantity?: number; // contains quantity of both full priced and promotional quantities\r\n refundPromotionalQuantity?: number; // promotional quantity\r\n refunded?: boolean;\r\n refundedTotal?: number;\r\n refundedReason?: string;\r\n refundedReasonDescription?: string;\r\n isChecked?: boolean;\r\n sealed?: boolean;\r\n isLastExchanged?: boolean;\r\n}\r\n\r\n/**\r\n * Product\r\n */\r\nexport interface Product extends ProductChange {\r\n itemLineId?: number;\r\n status: number;\r\n subGroup: number;\r\n brand: string;\r\n currency: string;\r\n category: string;\r\n countryofOrigin: string;\r\n productId: string;\r\n productType: number;\r\n name?: string;\r\n imageUrls: [string];\r\n isImageFailToLoad?: boolean;\r\n size: string;\r\n type: string;\r\n season: number;\r\n productGroup: number;\r\n styleCode: string;\r\n nodeStructure: NodeStructure[];\r\n barcode: string;\r\n price: Price[];\r\n colour: string;\r\n description: string;\r\n totalLinePrice: number;\r\n total: number;\r\n addedInBasket?: boolean;\r\n selectedVAT?: number;\r\n selectedVATCode?: string;\r\n selectedRRPPrice?: number;\r\n lineDiscount?: LineDiscount;\r\n exchange?: Exchange;\r\n // refundedQuantity?: number;\r\n // refunded?: boolean;\r\n // refundedTotal?: number;\r\n // refundedReasonDescription?:string;\r\n // isChecked?:boolean;\r\n refundPromotionalQuantity?: number; // promotional quantity\r\n exchangeReason?: string;\r\n exchangeQuantity?: number;\r\n itemDiscounts: ItemDiscount;\r\n\r\n giftCardNumberIssued?: string;\r\n giftCardAmount?: number;\r\n giftCardRecipientEmail?: string;\r\n giftCardExpiryDate?: string;\r\n giftCardRecipientName?: string;\r\n giftCard?: boolean;\r\n\r\n discountable: boolean;\r\n // sealed?:boolean;\r\n excludePromotion: boolean;\r\n categories: Categories[];\r\n descriptions: Descriptions[];\r\n barcodes: string[];\r\n\r\n //New Feilds\r\n externalId: string;\r\n createdDate: string;\r\n updatedDate: string;\r\n createdBy: string;\r\n updatedBy: string;\r\n attributes: CoreAttribute[];\r\n id: string;\r\n long_description: string;\r\n\r\n // Mixed Sales fields\r\n isWebOrder?: boolean,\r\n fullfilmentId: string,\r\n fullfilmentLocationName?: string,\r\n deliveryMethod?: string,\r\n deliveryGroup?: string,\r\n selectedInventory?: InventoryInfo;\r\n leadTime?: leadTime\r\n}\r\nexport interface leadTime {\r\n type: string,\r\n value: string\r\n}\r\n\r\nexport interface Exchange {\r\n exchangeId: number,\r\n lineItemId: number,\r\n reason: string,\r\n quantity: number,\r\n newItems: Product[];\r\n}\r\n\r\nexport interface Categories {\r\n id: string;\r\n parentId: string;\r\n name: string;\r\n categoryId: string;\r\n status: boolean;\r\n}\r\n\r\nexport interface Descriptions {\r\n name: string;\r\n countryCode: string;\r\n value: string;\r\n}\r\n\r\nexport interface CoreAttribute {\r\n name: string;\r\n value: string;\r\n searchable: boolean;\r\n countryCode: string;\r\n}\r\n\r\n/**\r\n * Basket\r\n */\r\n\r\nexport interface Basket {\r\n subsidiaryId?: string;\r\n products: Product[];\r\n transactionDiscount: any[];\r\n quantity: number;\r\n total: number;\r\n saleTotal: number;\r\n discountTotal?: number;\r\n transactionId?: string;\r\n offlineTransactionId?: string;\r\n baseCurrency: string;\r\n basketTotal?: number;\r\n refundTotal?: number;\r\n transactionPromotion?: TransactionPromotion[];\r\n customer?: any;\r\n exchange?: Exchange[];\r\n inStoreFlag?: boolean\r\n}\r\n\r\n\r\n\r\n/**\r\n * Price\r\n */\r\nexport interface Price {\r\n VAT: number;\r\n VATCode: string;\r\n salesPrice: number;\r\n currencyCode: string;\r\n RRPPrice: number;\r\n}\r\n\r\n/**\r\n * Node structure\r\n */\r\ninterface NodeStructure {\r\n status: boolean;\r\n name: string;\r\n nodeType: string;\r\n isOverride: boolean;\r\n nodeId: string;\r\n parentId: string;\r\n}\r\n\r\n/**\r\n * Line Discount\r\n */\r\nexport interface LineDiscount {\r\n itemLineId: string,\r\n discountAmount: number,\r\n discountType: string,\r\n // reasonCode: string,\r\n name?: string,\r\n unitPrice: number,\r\n discountedLinePrice?: number,\r\n priceManagerOverride?: UserOverride,\r\n priceOverrideReasonCode?: string,\r\n priceOverrideReasonName?: string,\r\n priceOverrideAmount?: number,\r\n percentageDiscountManagerOverride?: UserOverride,\r\n percentageDiscountReasonCode?: string,\r\n percentageDiscountReasonName?: string,\r\n percentageDiscountValue?: number\r\n}\r\n\r\n/**\r\n * User Override\r\n */\r\nexport interface UserOverride {\r\n userId: string,\r\n automaticApprove: string,\r\n originalUserId: string\r\n}\r\n\r\n/**\r\n* line Promotions\r\n*/\r\nexport interface LinePromotions {\r\n\r\n trigger: Trigger[],\r\n itemLineId: number,\r\n promotionId: string,\r\n displayText: string,\r\n promotionType: string,\r\n promotionAmount: number,\r\n name: string,\r\n promotionInfo: string,\r\n promotionLinePrice: number\r\n refunded?: boolean;\r\n}\r\n\r\n/**\r\n* trigger\r\n*/\r\nexport interface Trigger {\r\n itemLineId: string;\r\n quantity?: number;\r\n totalQuantity?: number;\r\n}\r\n\r\n/**\r\n* Transaction Promotion\r\n*/\r\nexport interface TransactionPromotion {\r\n displayText: string;\r\n name: string;\r\n promotionAmount: number;\r\n promotionId: string;\r\n promotionInfo: string;\r\n promotionType: string;\r\n itemLineIds: number[];\r\n\r\n}\r\n\r\nexport interface RefundProductChange {\r\n itemLineId?: number;\r\n refundedQuantity?: number;\r\n refundedPromotionalQuantity?: number;\r\n refundTotal?: number;\r\n refundedReason?: string;\r\n refundedReasonDescription?: string;\r\n refundWithPromotion: boolean;\r\n isLastExchanged?: boolean;\r\n}\r\n\r\nexport interface InventoryInfo {\r\n storeName: string,\r\n storeId: string,\r\n quantityAvailable: number,\r\n quantityRequired: number\r\n}\r\n\r\nexport interface InventoryRequestInfo extends InventoryInfo {\r\n requestedQuantity: number,\r\n requestedAction: DELIVERY_METHODS\r\n}\r\n\r\nexport interface DeliveryInfo {\r\n groups: DeliveryGroupInfo[]\r\n}\r\n\r\nexport interface DeliveryGroupInfo {\r\n groupNumber: number;\r\n items: Product[];\r\n estimate?: Estimate;\r\n}\r\n\r\nexport interface Estimate {\r\n type: string,\r\n value: string\r\n}\r\n\r\nexport interface TransactionDocument {\r\n transactionId?: string;\r\n subsidiaryId?: string;\r\n offlineTransactionId?:string;\r\n transactionRef?: string;\r\n dateTime?: string;\r\n orgCode: string;\r\n storeId: string;\r\n storeNodeId:string;\r\n storeNodeStructure:string;\r\n deviceId: string;\r\n terminalId:string;\r\n initiatingModule :string;\r\n export:boolean;\r\n userId?: string;\r\n userName?:string;\r\n customer?: Customer;\r\n basket: any;\r\n basketSummary: any;\r\n // lineDiscount: LineDiscount[];\r\n baseCurrency: string;\r\n splitPayment?:boolean;\r\n isPaymentCompleted?:boolean;\r\n paymentDetails?: any;\r\n type?: string;\r\n operationStatus?: string;\r\n createdAt?: string;\r\n updatedAt?: string;\r\n transCompletedAt?: string;\r\n id?: string;\r\n saleTotal?: number;\r\n reasonCode?: string;\r\n reasonDescription?: string;\r\n override?: UserOverride;\r\n originalTransId?:string;\r\n originalExternalId?: string;\r\n apiResponse?: APIResponse; // TODO add handler as per export provider\r\n unreferencedRefund?:boolean;\r\n giftedReceipt?:boolean;\r\n currentTransactionDetails?:any;\r\n isChecked?:boolean;\r\n}\r\n\r\nexport interface APIResponse\r\n{\r\n internalId?:number;\r\n tranid?:string\r\n}\r\n\r\nexport interface CurrentTransactionDetails{\r\n products: Product[];\r\n lineDiscount?:LineDiscount[];\r\n linePromotion?:LinePromotions[];\r\n transactionPromotion?:TransactionPromotion[];\r\n transactionDiscount?:TransactionDiscount[];\r\n basketSummary?:BasketSummary; \r\n taxBreakdown?:TaxBreakdown; \r\n totalTaxSummary?:TotalTaxSummary[];\r\n}\r\nexport interface BasketSummary {\r\n totalItems: number;\r\n saleTotal: number;\r\n VATTotal: number;\r\n discountTotal: number;\r\n basketTotal: number;\r\n refundTotal?:number;\r\n}\r\n\r\nexport interface TransactionDiscount{\r\n discountAmount:number;\r\n discountType:String;\r\n reasonCode:string;\r\n override?: UserOverride;\r\n itemLineIds?:number[];\r\n}\r\n\r\nexport interface TBasket {\r\n products: TProduct[];\r\n lineDiscount:LineDiscount[];\r\n exchange:Exchange[];\r\n linePromotion:LinePromotions[];\r\n transactionPromotion?:TransactionPromotion[];\r\n transactionDiscount?:TransactionDiscount[];\r\n taxBreakdown?:TaxBreakdown;\r\n totalTaxSummary?:TotalTaxSummary[];\r\n\r\n \r\n}\r\n\r\nexport interface TExchange{\r\n exchangeId?:number,\r\n lineItemId?: number,\r\n reason?: string,\r\n quantity?: number,\r\n newItems?:TNewItems[];\r\n }\r\n \r\n export interface TNewItems{\r\n lineItemId:number,\r\n Quantity:number\r\n }\r\n\r\nexport interface TProduct {\r\n itemLineId: string;\r\n SKU: string;\r\n description: string;\r\n imageUrls: [string];\r\n price: number;\r\n taxCode?: string;\r\n taxPercent?: string;\r\n quantity: number;\r\n refundedQuantity?: number;\r\n refundedPromotionalQuantity?:number;\r\n refunded?: boolean;\r\n refundedTotal?: number;\r\n refundedReason?:string;\r\n refundedReasonDescription?:string;\r\n selectedRRPPrice?: number;\r\n totalLinePrice: number;\r\n barCode?: string;\r\n barcodes?: string[];\r\n flagged?: boolean;\r\n exchange?:Exchange;\r\n excludePromotion:boolean;\r\n discountable?:boolean;\r\n\r\n itemDiscounts?:ItemDiscounts;\r\n isLastExchanged?: boolean;\r\n\r\n // Mixed Sales fields\r\n fullfilmentId:string,\r\n fullfilmentLocationName:string,\r\n deliveryMethod?:string,\r\n deliveryGroup?:string,\r\n giftCardNumberIssued?: string,\r\n giftCardAmount?: number,\r\n giftCardRecipientEmail?: string,\r\n giftCardExpiryDate?: string ,\r\n giftCardRecipientName?: string,\r\n giftCard?:boolean,\r\n currency?:string,\r\n isWebOrder?:boolean,\r\n leadTime?: leadTime\r\n \r\n // currenttransaction doc changes\r\n lineDiscount?:any\r\n\r\n attributes?:CoreAttribute[];\r\n}\r\n\r\nexport interface ItemDiscounts{\r\n trnDiscountsPortion:number;\r\n trnPromotionsPortion:number;\r\n refundPortion:number;\r\n}\r\n\r\n\r\n\r\nexport interface Customer {\r\n id: string;\r\n title?: string;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n postCode: string;\r\n telephone?: string;\r\n billingAddress?: Address;\r\n shippingAddress?: Address;\r\n addressDetail?: string;\r\n noCustomerSelected?: boolean;\r\n externalId?: string; \r\n \r\n}\r\n\r\nexport interface Address \r\n{\r\n address1?: string;\r\n address2?: string;\r\n address3?: string;\r\n city?: string;\r\n county?: string;\r\n postCode?: string;\r\n country?: string;\r\n }\r\n\r\nexport interface PaymentDetails {\r\n cardNumber?: any;\r\n sqNo?:number;\r\n result?: string;\r\n currency: string;\r\n amount: string;\r\n authcode?: string;\r\n pan?: string;\r\n cardType?: string;\r\n transactionDate?: string;\r\n mid?: string;\r\n tid?: string;\r\n cvm?: string;\r\n hostReferenceId?: string;\r\n aid?: string;\r\n receiptNo?: string;\r\n expirydate?: string;\r\n transactionReference: string;\r\n applicationVersion?: string;\r\n entryMethod?:string;\r\n transactionType:string;\r\n totalamount:string;\r\n paymentType?:string;\r\n}\r\n\r\nexport interface TaxBreakdown\r\n{\r\n taxLines : TaxLine[],\r\n totalTaxableAmount: number;\r\n}\r\n\r\nexport interface TotalTaxSummary{\r\n VATCode:string,\r\n VAT : number;\r\n PreTaxSum: number\r\n TaxSum: number\r\n TXrateSum: number\r\n}\r\n\r\nexport interface TaxLine\r\n{\r\n itemLineId: number,\r\n taxableAmount: number,\r\n taxLineTotal: number,\r\n VAT: number,\r\n VATCode : string,\r\n PreTax: number\r\n}\r\n\r\nexport enum DISCOUNTTYPE {\r\n PERCENT = 'Percent',\r\n AMOUNT = 'AMOUNT'\r\n}","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DELIVERY_METHODS } from './mapper-library.model';\r\nimport { Basket, DeliveryGroupInfo, DeliveryInfo, Product, TransactionPromotion } from './mapper-library.model';\r\nimport { TransactionDiscount } from './mapper-library.model';\r\nimport { NumberUtilService } from './number-util.service';\r\n\r\nexport class BasketService {\r\n currentBasket: Basket = {\r\n products: [],\r\n transactionDiscount: [],\r\n quantity: 0,\r\n total: 0,\r\n saleTotal: 0,\r\n baseCurrency: ''\r\n };\r\n\r\n private basketSource = new BehaviorSubject<any>(null);\r\n basket = this.basketSource.asObservable();\r\n\r\n private productSource = new BehaviorSubject<any>(null);\r\n product = this.productSource.asObservable();\r\n\r\n private peerSource = new BehaviorSubject<boolean>(false);\r\n peerSync = this.peerSource.asObservable();\r\n\r\n private scanSource = new BehaviorSubject<boolean>(false);\r\n scanner = this.scanSource.asObservable();\r\n\r\n private _isMixedBasketSales: boolean | undefined;\r\n public get isMixedBasketSales(): any {\r\n return this._isMixedBasketSales;\r\n }\r\n public set isMixedBasketSales(v: any) {\r\n this._isMixedBasketSales = v;\r\n }\r\n\r\n\r\n constructor(private numberUtilService: NumberUtilService) { }\r\n\r\n updateBasket(basket: Basket) {\r\n this.currentBasket = basket;\r\n this.isMixedBasketSales = this.filterProductListWithWebOrder(true).length > 0;\r\n this.basketSource.next(basket);\r\n }\r\n\r\n /**\r\n * calculates the total basket value and quantity\r\n * @param null\r\n * @returns void\r\n */\r\n updateBasketTotal(basketDetails: { quantity: number; total: number; products: any; transactionId: any; basketTotal: any; }, basketState: { updateBasket: (arg0: any) => void; }) {\r\n basketDetails.quantity = 0;\r\n basketDetails.total = 0;\r\n for (const p of basketDetails.products) {\r\n basketDetails.quantity = basketDetails.quantity + p.quantity;\r\n basketDetails.total =\r\n this.numberUtilService.trimTo2Decimal(basketDetails.total) +\r\n this.numberUtilService.trimTo2Decimal(p.total);\r\n }\r\n console.log(\r\n \"e:basket :basket service : basketDetails updated values for transaction id\",\r\n basketDetails.transactionId,\r\n JSON.stringify(basketDetails)\r\n );\r\n basketDetails.basketTotal = basketDetails.total;\r\n basketState.updateBasket(basketDetails);\r\n }\r\n\r\n /**\r\n * add Line promotion\r\n * @param null\r\n * @returns basketDetails\r\n */\r\n addlinePromotion(promotionList: { result: { linePromotions: string | any[]; }; }, basketDetails: { products: any; }) {\r\n console.log(\r\n \"e:basket :basket Service : promotionList and basketDetails for linePromotions\",\r\n JSON.stringify(promotionList),\r\n JSON.stringify(basketDetails)\r\n );\r\n if (\r\n promotionList &&\r\n promotionList.result &&\r\n promotionList.result.linePromotions &&\r\n promotionList.result.linePromotions.length > 0\r\n ) {\r\n for (var element of basketDetails.products) {\r\n for (var promotionelement of promotionList.result.linePromotions) {\r\n if (\r\n element.itemLineId.toString() ===\r\n promotionelement.itemLineId.toString()\r\n ) {\r\n element.linePromotions = promotionelement;\r\n }\r\n }\r\n }\r\n }\r\n return basketDetails;\r\n }\r\n\r\n /**\r\n * add Transaction promotion\r\n * @param null\r\n * @returns basketDetails\r\n */\r\n\r\n addTransactionPromotion(promotionList: { result: { transactionPromotion: any }; }, basketdetails: Basket) {\r\n console.log(\r\n \"e:basket :basket Service : promotionList and basketDetails for transactionPromotion\",\r\n JSON.stringify(promotionList),\r\n JSON.stringify(basketdetails),\r\n JSON.stringify(basketdetails.transactionPromotion)\r\n );\r\n if (\r\n promotionList &&\r\n promotionList.result &&\r\n promotionList.result.transactionPromotion &&\r\n promotionList.result.transactionPromotion.length > 0\r\n ) {\r\n promotionList.result.transactionPromotion.forEach((tPromotion: any) => {\r\n let transactionPromotionEntryUpdated: any = Object.assign(\r\n {},\r\n tPromotion\r\n );\r\n\r\n transactionPromotionEntryUpdated.itemLineIds = basketdetails.products.map(\r\n (product) => {\r\n return product.itemLineId;\r\n }\r\n );\r\n\r\n if (!basketdetails.transactionPromotion) {\r\n basketdetails.transactionPromotion = [];\r\n }\r\n basketdetails.transactionPromotion.push(\r\n transactionPromotionEntryUpdated\r\n );\r\n\r\n basketdetails = this.transactionPromotionProductPortionCalc(\r\n basketdetails,\r\n transactionPromotionEntryUpdated\r\n );\r\n });\r\n }\r\n console.log(\r\n \"basket details in refund calculation file\",\r\n JSON.stringify(basketdetails)\r\n );\r\n return basketdetails;\r\n }\r\n\r\n updateProductTotalForSummary(basketDetails: { total: string | number; quantity: string | number; products: any; }) {\r\n /*sale- product refundedQuantity = undefined\r\n partial refund - product refundedQuantity is > 0\r\n total refund - proudct refundedQuantity is > 0\r\n exchange - exchange product refundedQuantity is > 0 \r\n new product refundedQuantity = undefined \r\n old product without exchange refundedQuantity = 0\r\n unreference refund-product refundedQuantity is > 0 */\r\n\r\n basketDetails.total = 0;\r\n basketDetails.quantity = 0;\r\n for (var product of basketDetails.products) {\r\n if (product.linePromotions) {\r\n product.total = product.linePromotions.promotionLinePrice;\r\n } else if (product.lineDiscount && !product.linePromotions) {\r\n product.total = product.lineDiscount.discountedLinePrice;\r\n } else {\r\n product.total = product.totalLinePrice;\r\n }\r\n product.total =\r\n product.total -\r\n Math.abs(product.refundedTotal ? product.refundedTotal : 0);\r\n\r\n basketDetails.total += product.total;\r\n basketDetails.quantity =\r\n basketDetails.quantity +\r\n (product.quantity -\r\n (product.refundedQuantity ? product.refundedQuantity : 0));\r\n console.log(\r\n \"e-basket:ExchangeSummaryScreen:update basketdetails total :\" +\r\n basketDetails.total +\r\n \" Product line ID : \" +\r\n product.itemLineId +\r\n \" product total : \" +\r\n product.total,\r\n \"quantity : \" + basketDetails.quantity\r\n );\r\n }\r\n return this.updateBasketTotalForSummary(basketDetails);\r\n }\r\n\r\n updateBasketTotalForSummary(basketDetails: any) {\r\n basketDetails.basketTotal = basketDetails.total;\r\n console.info(\r\n \"ebasket : basket Service : update Basket Total for transaction transactionDiscount \",\r\n JSON.stringify(basketDetails.transactionDiscount)\r\n );\r\n\r\n console.info(\r\n \"ebasket : basket Service : update Basket Total for transaction transactionPromotion \",\r\n JSON.stringify(basketDetails.transactionPromotion)\r\n );\r\n\r\n basketDetails = this.updateTransactionPromotion(basketDetails);\r\n basketDetails = this.updateTransactionDiscount(basketDetails);\r\n basketDetails.basketTotal = Number(basketDetails.basketTotal.toFixed(2));\r\n\r\n console.info(\r\n \"ebasket : basket Service : update Basket Total: basketTotal after promotion applied for basketTotal\",\r\n basketDetails.basketTotal\r\n );\r\n return basketDetails;\r\n }\r\n\r\n updateTransactionDiscount(basketDetails: { transactionDiscount: any[]; basketTotal: number; }) {\r\n if (\r\n basketDetails.transactionDiscount &&\r\n basketDetails.transactionDiscount.length > 0\r\n ) {\r\n const discountTotal = basketDetails.transactionDiscount.reduce(\r\n (n: any, { discountAmount }: any) => n + discountAmount,\r\n 0\r\n );\r\n console.log(\"ebasket : basket Service : discountTotal \", discountTotal);\r\n basketDetails.basketTotal =\r\n basketDetails.basketTotal - Math.abs(discountTotal);\r\n }\r\n return basketDetails;\r\n }\r\n\r\n updateTransactionPromotion(basketDetails: { transactionPromotion: any[]; basketTotal: number; }) {\r\n if (\r\n basketDetails.transactionPromotion &&\r\n basketDetails.transactionPromotion.length > 0\r\n ) {\r\n const discountTotal = basketDetails.transactionPromotion.reduce(\r\n (n: any, { promotionAmount }: any) => n + promotionAmount,\r\n 0\r\n );\r\n basketDetails.basketTotal =\r\n basketDetails.basketTotal - Math.abs(discountTotal);\r\n }\r\n return basketDetails;\r\n }\r\n\r\n updateBasketTotalWithoutDiscount(basket: Basket): Basket {\r\n basket.total = 0;\r\n basket.quantity = 0;\r\n\r\n for (var product of basket.products) {\r\n if (product.linePromotions) {\r\n product.total = product.linePromotions.promotionLinePrice;\r\n } else if (product.lineDiscount && !product.linePromotions) {\r\n product.total = product.lineDiscount.discountedLinePrice || 0;\r\n } else {\r\n product.total = product.totalLinePrice;\r\n }\r\n\r\n product.total =\r\n product.total -\r\n Math.abs(product.refundedTotal ? product.refundedTotal : 0);\r\n basket.total += product.total;\r\n basket.quantity =\r\n basket.quantity +\r\n (product.quantity -\r\n (product.refundedQuantity ? product.refundedQuantity : 0));\r\n\r\n console.log(\r\n \"e-basket:basket service:update basketdetails total :\" +\r\n JSON.stringify(basket) +\r\n basket.total +\r\n \" Product line ID : \" +\r\n product.itemLineId +\r\n \" product total : \" +\r\n product.total\r\n );\r\n }\r\n\r\n basket.basketTotal = basket.total;\r\n return basket;\r\n }\r\n\r\n updateBasketTotalWithDiscounts(basket: any): Basket {\r\n console.log(\r\n \"e:basket :RefundBasketScreen : this.basketDetails new values\",\r\n basket,\r\n JSON.stringify(basket.basketTotal)\r\n );\r\n if (basket.transactionPromotion && basket.transactionPromotion.length > 0) {\r\n const discountTotal = basket.transactionPromotion.reduce(\r\n (n: any, { promotionAmount }: any) => n + promotionAmount,\r\n 0\r\n );\r\n basket.basketTotal = basket.basketTotal - discountTotal;\r\n }\r\n if (basket.transactionDiscount && basket.transactionDiscount.length > 0) {\r\n const discountTotal = basket.transactionDiscount.reduce(\r\n (n: any, { discountAmount }: any) => n + discountAmount,\r\n 0\r\n );\r\n\r\n basket.basketTotal = basket.basketTotal - discountTotal;\r\n }\r\n console.log(\r\n \"e:basket :RefundBasketScreen : basket new values\",\r\n JSON.stringify(basket)\r\n );\r\n\r\n return basket;\r\n }\r\n\r\n transactionDiscountAndPromotionProductortionCalculation(basket: Basket) {\r\n if (basket.transactionDiscount && basket.transactionDiscount.length > 0) {\r\n basket.transactionDiscount.forEach(\r\n (discount) =>\r\n (basket = this.transactionDiscountProductPortionCalc(\r\n basket,\r\n discount\r\n ))\r\n );\r\n }\r\n\r\n if (basket.transactionPromotion && basket.transactionPromotion.length > 0) {\r\n basket.transactionPromotion.forEach((promotion) => {\r\n basket = this.transactionPromotionProductPortionCalc(basket, promotion);\r\n });\r\n }\r\n console.log(\r\n \"ebasket: basket item discount protion calculation\",\r\n basket,\r\n basket.products\r\n );\r\n return basket;\r\n }\r\n\r\n transactionPromotionProductPortionCalc(\r\n basket: any,\r\n promotion: any\r\n ) {\r\n let total = 0;\r\n let percentage = 0;\r\n {\r\n basket.products.forEach((p:any) => {\r\n if (promotion.itemLineIds.includes(p.itemLineId)) {\r\n p = this.validateProductItemDiscount(p);\r\n const productContributionInTotal =\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.trnDiscountsPortion) +\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.trnPromotionsPortion) -\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.refundPortion);\r\n total += (p.total - this.numberUtilService.trimTo2Decimal2(productContributionInTotal));\r\n }\r\n });\r\n console.log(\r\n `ebasket: trnsactionPromotion: ${JSON.stringify(\r\n promotion\r\n )}, selected products total: ${total}`\r\n );\r\n basket.products.forEach((product: any) => {\r\n product = this.validateProductItemDiscount(product);\r\n\r\n const productContributionInTotal =\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnDiscountsPortion) +\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnPromotionsPortion) -\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.refundPortion);\r\n\r\n if (promotion.itemLineIds.includes(product.itemLineId)) {\r\n percentage = ((product.total - this.numberUtilService.trimTo2Decimal2(productContributionInTotal)) / total) * 100;\r\n product.itemDiscounts.trnPromotionsPortion +=\r\n (promotion.promotionAmount * percentage) / 100;\r\n product.itemDiscounts.trnPromotionsPortion = this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnPromotionsPortion);\r\n }\r\n });\r\n }\r\n return basket;\r\n }\r\n\r\n transactionDiscountProductPortionCalc(\r\n basket: any,\r\n discount: any\r\n ) {\r\n let total = 0;\r\n let percentage = 0;\r\n\r\n basket.products.forEach((p: any) => {\r\n if (discount.itemLineIds.includes(p.itemLineId)) {\r\n p = this.validateProductItemDiscount(p);\r\n const productContributionInTotal =\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.trnDiscountsPortion) +\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.trnPromotionsPortion) -\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.refundPortion);\r\n\r\n\r\n total += (p.total - this.numberUtilService.trimTo2Decimal2(productContributionInTotal));\r\n }\r\n });\r\n\r\n console.log(\r\n `ebasket: trnsactionDiscount: ${JSON.stringify(\r\n discount\r\n )}, selected products total: ${total}`\r\n );\r\n\r\n basket.products.forEach((product:any) => {\r\n product = this.validateProductItemDiscount(product);\r\n console.log(product.discountable, \"ebasket : basket service : discountable in basket service\");\r\n\r\n const productContributionInTotal =\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnDiscountsPortion) +\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnPromotionsPortion) -\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.refundPortion);\r\n\r\n if (discount.itemLineIds.includes(product.itemLineId) && product.discountable == true) {\r\n percentage = ((product.total - this.numberUtilService.trimTo2Decimal2(productContributionInTotal)) / total) * 100;\r\n product.itemDiscounts.trnDiscountsPortion +=\r\n (discount.discountAmount * percentage) / 100;\r\n product.itemDiscounts.trnDiscountsPortion = this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnDiscountsPortion)\r\n }\r\n });\r\n return basket;\r\n }\r\n\r\n public validateProductItemDiscount(product: Product) {\r\n if (!product.itemDiscounts) {\r\n product.itemDiscounts = {\r\n trnDiscountsPortion: 0,\r\n trnPromotionsPortion: 0,\r\n refundPortion: 0,\r\n };\r\n }\r\n return product;\r\n }\r\n\r\n markProduct(product: Product) {\r\n this.productSource.next(product);\r\n }\r\n stopPeerSyncProcess(peerSync: boolean) {\r\n this.peerSource.next(peerSync);\r\n }\r\n\r\n scanStart(isScanning: boolean) {\r\n this.scanSource.next(isScanning);\r\n }\r\n\r\n promotionRemainingCalculation(promotion: TransactionPromotion[]) {\r\n var promotionValue = 0;\r\n promotion.forEach((element) => {\r\n promotionValue += element.promotionAmount;\r\n });\r\n return promotionValue;\r\n }\r\n\r\n discountRemainingCalculation(discount: TransactionDiscount[]) {\r\n var discountValue = 0;\r\n discount.forEach((element) => {\r\n discountValue += element.discountAmount;\r\n });\r\n return discountValue;\r\n }\r\n\r\n discountRefundedCalculation(discount: TransactionDiscount[]) {\r\n var discountValue = 0;\r\n discount.forEach((element) => {\r\n if (element.discountAmount < 0) {\r\n discountValue += element.discountAmount;\r\n }\r\n });\r\n return discountValue;\r\n }\r\n\r\n generateNewItemLineId(products: Product[]) {\r\n let largestNumber: any = 0;\r\n\r\n if (products.length > 0) {\r\n let itemLineIdArray = products.map((product) => {\r\n return product.itemLineId;\r\n });\r\n\r\n largestNumber = itemLineIdArray.reduce((a :any, b:any) => Math.max(a, b));\r\n }\r\n\r\n return largestNumber + 1;\r\n }\r\n\r\n updateBasketProductDataAsPerQuantity(\r\n product: any,\r\n quantity: number\r\n ): Product {\r\n\r\n console.log(`ebasket: updateBasketProductDataAsPerQuantity : ${quantity} product: ${JSON.stringify(product)}`);\r\n product.quantity = quantity;\r\n if (product.hasOwnProperty(\"lineDiscount\")) {\r\n // && this.product.quantity !== this.productDetailForm.controls.quantity.value\r\n product.lineDiscount.discountedLinePrice = Number(\r\n this.numberUtilService.getFlooredFixed(\r\n product.lineDiscount.unitPrice * quantity,\r\n 2\r\n )\r\n );\r\n product.lineDiscount.discountAmount =\r\n product.totalLinePrice - product.lineDiscount.discountedLinePrice;\r\n } else {\r\n product.totalLinePrice =\r\n quantity * this.numberUtilService.trimTo2Decimal(product.selectedPrice);\r\n }\r\n if (product.lineDiscount) {\r\n product.total = product.lineDiscount.discountedLinePrice;\r\n } else {\r\n product.total = product.totalLinePrice;\r\n }\r\n console.log(`ebasket: updateBasketProductDataAsPerQuantity : ${quantity} product: ${JSON.stringify(product)}`);\r\n\r\n return product;\r\n }\r\n\r\n filterProductListWithWebOrder(isWebOrder: boolean): Product[] {\r\n console.log(\"ebasket: filterProductListWithWebOrder hit\", JSON.stringify(this.currentBasket.products));\r\n if (isWebOrder)\r\n return this.currentBasket.products.filter((x) => x.isWebOrder);\r\n else {\r\n return this.currentBasket.products.filter((x) => !x.isWebOrder);\r\n }\r\n }\r\n\r\n filterProductListWithDelivery(): Product[] {\r\n console.log(\"ebasket: filterProductListWithDelivery hit\", JSON.stringify(this.currentBasket.products));\r\n return this.currentBasket.products.filter((x) => x.deliveryMethod === DELIVERY_METHODS.DELIVERY.toString());\r\n }\r\n\r\n filterProductListWithDeliveryGroup(group: string, products: Product[]): Product[] {\r\n console.log(\"ebasket: filterProductListWithDeliveryGroup hit\", JSON.stringify(products));\r\n return products.filter((x) => x.deliveryGroup === group);\r\n }\r\n\r\n generateNewDeliveryGroupNumber(products: Product[]) {\r\n let largestNumber = 0;\r\n\r\n if (products.length > 0) {\r\n let deliveryGroupArr = products.map((product) => {\r\n if (product.deliveryGroup) {\r\n return parseInt(product.deliveryGroup);\r\n }\r\n return 0;\r\n });\r\n\r\n largestNumber = deliveryGroupArr.reduce((a, b) => Math.max(a, b));\r\n }\r\n\r\n return (largestNumber + 1).toString();\r\n }\r\n\r\n getDeliveryGroupNumbers(products: Product[]) {\r\n console.log(\"getDeliveryGroupNumbers initiating : \", JSON.stringify(products));\r\n\r\n let uniqueAndsortedResult: number[] = [];\r\n\r\n if (products.length > 0) {\r\n let deliveryGroupArr = products.map((product) => {\r\n if (product.deliveryGroup) {\r\n return parseInt(product.deliveryGroup);\r\n }\r\n else if (product.deliveryMethod === \"1\") {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n\r\n uniqueAndsortedResult = Array.from(new Set(deliveryGroupArr)).sort((a, b) => a - b);\r\n console.log(\"getDeliveryGroupNumbers : \", JSON.stringify(uniqueAndsortedResult));\r\n }\r\n return uniqueAndsortedResult;\r\n }\r\n\r\n updateProductsWithNewDeliveryGroupNumber(products: Product[]) {\r\n console.log(\"updateProductsWithNewDeliveryGroupNumber initiating : \", JSON.stringify(products));\r\n\r\n let newGroupNumber = this.generateNewDeliveryGroupNumber(this.currentBasket.products);\r\n if (products.length > 0) {\r\n this.currentBasket.products.forEach(cBProducts => {\r\n products.forEach(element => {\r\n if (cBProducts.itemLineId === element.itemLineId) {\r\n cBProducts.deliveryGroup = newGroupNumber;\r\n }\r\n\r\n });\r\n });\r\n\r\n }\r\n\r\n this.updateBasket(this.currentBasket);\r\n return;\r\n }\r\n\r\n calculateEstimatedTime(products: any[]) {\r\n try {\r\n let time;\r\n let estmatedTime: number = 0;\r\n let estimatedDays: string = \"Hours\";\r\n products.forEach((element: { leadTime: { type: string; value: any; }; }) => {\r\n\r\n if (element.leadTime.type.toLocaleLowerCase() === \"weeks\") {\r\n time = Number(element.leadTime.value) * 24 * 7;\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays\r\n console.log(\"week\", estmatedTime, estimatedDays);\r\n\r\n } else if (element.leadTime.type.toLocaleLowerCase() === \"days\") {\r\n time = Number(element.leadTime.value) * 24;\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays\r\n\r\n console.log(\"days\", estmatedTime, estimatedDays);\r\n\r\n }\r\n else if (element.leadTime.type.toLocaleLowerCase() === \"months\") {\r\n time = Number(element.leadTime.value) * 24 * 30;\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays\r\n\r\n console.log(\"months\", estmatedTime, estimatedDays);\r\n\r\n }\r\n else if (element.leadTime.type.toLocaleLowerCase() === \"years\") {\r\n time = Number(element.leadTime.value) * 24 * 365;\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays\r\n\r\n console.log(\"years\", estmatedTime, estimatedDays);\r\n\r\n } else {\r\n time = Number(element.leadTime.value);\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays;\r\n console.log(\"hours\", estmatedTime, estimatedDays);\r\n\r\n }\r\n });\r\n\r\n if (estimatedDays.toLocaleLowerCase() === \"days\") {\r\n estmatedTime = estmatedTime / 24;\r\n } else if (estimatedDays.toLocaleLowerCase() === \"weeks\") {\r\n estmatedTime = estmatedTime / (24 * 7);\r\n } else if (estimatedDays.toLocaleLowerCase() === \"months\") {\r\n estmatedTime = estmatedTime / (24 * 30);\r\n } else if (estimatedDays.toLocaleLowerCase() === \"years\") {\r\n estmatedTime = estmatedTime / (24 * 365);\r\n }\r\n\r\n let estimate = {\r\n value: estmatedTime.toString(),\r\n type: estimatedDays\r\n }\r\n return estimate;\r\n } catch (error) {\r\n console.log(\"error in calculateEstimatedTime\", error);\r\n }\r\n return 0;\r\n }\r\n\r\n updateProductsWithDeliveryGroupNumber(oldGroup: string, newGroup: string) {\r\n console.log(\"updateProductsWithDeliveryGroupNumber initiating\");\r\n\r\n this.currentBasket.products.forEach(cBProducts => {\r\n if (cBProducts.deliveryGroup === oldGroup) {\r\n cBProducts.deliveryGroup = newGroup;\r\n }\r\n\r\n });\r\n\r\n this.updateBasket(this.currentBasket);\r\n return;\r\n }\r\n\r\n getDeliveryInfo(): any {\r\n console.log(\"getDeliveryGroupInfor initiating\");\r\n try {\r\n let groupInfo: DeliveryInfo = {\r\n groups: []\r\n }\r\n\r\n this.getDeliveryGroupNumbers(this.currentBasket.products).forEach((groupNumber) => {\r\n let group: any = {\r\n groupNumber: groupNumber,\r\n items: [],\r\n estimate: {\r\n type: \"Hours\",\r\n value: \"0\"\r\n }\r\n }\r\n this.currentBasket.products.forEach(cBProducts => {\r\n if (cBProducts.deliveryGroup === groupNumber.toString()) {\r\n group.items.push(cBProducts);\r\n }\r\n });\r\n\r\n group.estimate = this.calculateEstimatedTime(group.items);\r\n\r\n groupInfo.groups.push(group);\r\n\r\n });\r\n\r\n return groupInfo;\r\n }\r\n catch (error) {\r\n console.log(\"error\", error);\r\n }\r\n }\r\n}\r\n","import { CurrencyPipe } from \"@angular/common\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NumberUtilService {\r\n constructor( private cp: CurrencyPipe) {}\r\n\r\n trimTo2Decimal(no: any) {\r\n //return Math.floor(no * 100) / 100;\r\n return no;\r\n }\r\n\r\n trimTo2Decimal2(no: number) {\r\n return Number(this.getFlooredFixed(no,2));\r\n }\r\n\r\n getFlooredFixed(v:any, d:any) {\r\n return (Math.floor(v * Math.pow(10, d)) / Math.pow(10, d)).toFixed(d);\r\n }\r\n\r\n AppendWithCurrencySymbol(numValue: any, currencyCode: string): string {\r\n let returnValue: any = \"\";\r\n if (numValue) {\r\n const numb: number = parseFloat(numValue.toString().replace(',',''));\r\n returnValue = this.cp.transform(\r\n Number(numValue).toFixed(2),\r\n currencyCode.toLocaleUpperCase(),\r\n \"symbol\"\r\n );\r\n console.log(\"AppendWithCurrencySymbol :\" + returnValue);\r\n } else {\r\n returnValue = this.cp.transform(\r\n \"0.00\",\r\n currencyCode.toLocaleUpperCase(),\r\n \"symbol\"\r\n );\r\n }\r\n return returnValue;\r\n }\r\n}\r\n","import { CurrencyPipe } from \"@angular/common\";\r\nimport { BasketSummary, CurrentTransactionDetails, Customer, DELIVERY_METHODS, ItemDiscounts, TaxBreakdown, TaxLine, TBasket, TotalTaxSummary, TProduct, TransactionDocument } from \"./mapper-library.model\";\r\nimport { TRANSACTION_TYPE, Basket, LineDiscount, LinePromotions, Product, UserOverride } from \"./mapper-library.model\";\r\nimport { BasketService } from \"./basket.service\";\r\nimport { NumberUtilService } from \"./number-util.service\";\r\n\r\n/**\r\n * Transaction document builder\r\n */\r\nexport class TransactionDocumentBuilder {\r\n private transactionDocument: TransactionDocument;\r\n private numberUtilService: NumberUtilService;\r\n private storeInfo : any;\r\n \r\n constructor(\r\n transactionDoc?: TransactionDocument,\r\n private currencyPipe?: CurrencyPipe,\r\n private basketService?: BasketService | any,\r\n ) {\r\n this.numberUtilService = new NumberUtilService(currencyPipe);\r\n this.basketService = new BasketService(this.numberUtilService);\r\n this.storeInfo = JSON.parse(localStorage.getItem('storeInfo') || '{}');\r\n if (transactionDoc) {\r\n this.transactionDocument = transactionDoc;\r\n } else {\r\n this.transactionDocument = {\r\n transactionId: \"\",\r\n offlineTransactionId: \"\",\r\n transactionRef: \"\",\r\n dateTime: \"\",\r\n orgCode: \"\",\r\n storeId: \"\",\r\n storeNodeId: \"\",\r\n storeNodeStructure: \"\",\r\n deviceId: \"\",\r\n terminalId: \"\",\r\n userId: \"\",\r\n initiatingModule : \"eBasket\",\r\n export: false,\r\n basket: {} as TBasket,\r\n basketSummary: {} as BasketSummary,\r\n baseCurrency: \"\",\r\n type: \"\",\r\n operationStatus: \"\",\r\n createdAt: \"\",\r\n updatedAt: \"\",\r\n id: \"\",\r\n currentTransactionDetails: {} as CurrentTransactionDetails,\r\n saleTotal: 0,\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Transactions ref\r\n * @returns ref\r\n */\r\n transactionRef(): TransactionDocumentBuilder {\r\n const storeDetails = JSON.parse(localStorage.getItem('storeInfo') || '{}');\r\n const date = new Date();\r\n const random = (((1 + Math.random()) * 0x10000) | 0)\r\n .toString(16)\r\n .substring(1);\r\n this.transactionDocument.transactionRef =\r\n storeDetails.orgCode + storeDetails.storeId + date.toISOString() + random;\r\n console.log(\"ebasket: transaction ref created\", this.transactionDocument.transactionRef)\r\n return this;\r\n }\r\n\r\n /**\r\n * Transactions id\r\n * @param transactionID\r\n * @returns id\r\n */\r\n transactionId(transactionID: string, isOnline: boolean = true): TransactionDocumentBuilder {\r\n if (isOnline) {\r\n this.transactionDocument.transactionId = transactionID;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Transactions id\r\n * @param transactionID\r\n * @returns id\r\n */\r\n offlineTransactionId(transactionID: string, isOnline: any): TransactionDocumentBuilder {\r\n if (!isOnline) {\r\n this.transactionDocument.offlineTransactionId = transactionID;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * storeNode Id\r\n * @param storeNodeId\r\n * @returns id\r\n */\r\n storeNodeId(storeNodeId: string): TransactionDocumentBuilder {\r\n this.transactionDocument.storeNodeId = storeNodeId;\r\n return this;\r\n }\r\n\r\n /**\r\n* storeNode structure\r\n* @param storeNodeStructure\r\n* @returns id\r\n*/\r\n storeNodeStructure(storeNodeStructure: string): TransactionDocumentBuilder {\r\n this.transactionDocument.storeNodeStructure = storeNodeStructure;\r\n return this;\r\n }\r\n\r\n /**\r\n * Orgs code\r\n * @param orgCode\r\n * @returns code\r\n */\r\n orgCode(orgCode: any): TransactionDocumentBuilder {\r\n this.transactionDocument.orgCode = orgCode;\r\n return this;\r\n }\r\n /**\r\n * Stores id\r\n * @param storeId\r\n * @returns id\r\n */\r\n storeId(storeId: any): TransactionDocumentBuilder {\r\n this.transactionDocument.storeId = storeId;\r\n return this;\r\n }\r\n /**\r\n * Dates time\r\n * @returns time\r\n */\r\n dateTime(): TransactionDocumentBuilder {\r\n const date = new Date();\r\n this.transactionDocument.dateTime = date.toISOString();\r\n return this;\r\n }\r\n /**\r\n * Devices id\r\n * @param deviceId\r\n * @returns id\r\n */\r\n deviceId(deviceId: any): TransactionDocumentBuilder {\r\n this.transactionDocument.deviceId = deviceId;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * terminal id\r\n * @param terminalId\r\n * @returns id\r\n */\r\n terminalId(terminalId: any): TransactionDocumentBuilder {\r\n this.transactionDocument.terminalId = terminalId;\r\n return this;\r\n }\r\n\r\n\r\n\r\n\r\n\r\n /**\r\n * saleExport\r\n * @param saleExport\r\n * @returns id\r\n */\r\n export(saleExport: any): TransactionDocumentBuilder {\r\n this.transactionDocument.export = saleExport;\r\n return this;\r\n }\r\n\r\n\r\n\r\n /* customer(): TransactionDocumentBuilder {\r\n const user = JSON.parse(localStorage.getItem('userDetails'));\r\n this.transactionDocument.customer = user;\r\n return this;\r\n } */\r\n /**\r\n * Baskets transaction document builder\r\n * @param basketDetails\r\n * @returns basket\r\n */\r\n basket(basketDetails: Basket): TransactionDocumentBuilder {\r\n console.log(\"ebasket: basket details update in transaction document\", JSON.stringify(basketDetails));\r\n\r\n this.transactionDocument.subsidiaryId = basketDetails.subsidiaryId || (localStorage.getItem('subsidiaryId') || '');\r\n this.transactionDocument.basket.products = [] as TProduct[];\r\n this.transactionDocument.basket.lineDiscount = [];\r\n this.transactionDocument.basket.linePromotion = [];\r\n this.transactionDocument.basket.transactionPromotion = [];\r\n basketDetails.products.forEach((product: any, index) => {\r\n const p = {} as TProduct;\r\n p.itemDiscounts = {} as ItemDiscounts;\r\n p.SKU = product.SKU;\r\n p.excludePromotion = product.excludePromotion;\r\n p.barCode = product.barcode;\r\n p.barcodes = product.barcodes;\r\n p.description = product.description;\r\n p.itemLineId = product.itemLineId ? product.itemLineId.toString() : \"\" + (index + 1);\r\n p.price = product.selectedPrice;\r\n p.quantity = product.quantity;\r\n p.totalLinePrice = product.quantity * product.selectedPrice;\r\n p.imageUrls = product.imageUrls;\r\n p.selectedRRPPrice = product.selectedRRPPrice;\r\n\r\n //inventory fields\r\n \r\n p.fullfilmentId = product.fullfilmentId? product.fullfilmentId: this.storeInfo.storeId;\r\n\r\n p.fullfilmentLocationName = product.fullfilmentLocationName;\r\n p.deliveryGroup = product.deliveryGroup;\r\n p.leadTime = product.leadTime;\r\n p.deliveryMethod = product.deliveryMethod;\r\n\r\n p.giftCard = product.giftCard;\r\n p.giftCardExpiryDate = product.giftCardExpiryDate;\r\n p.giftCardNumberIssued = product.giftCardNumberIssued;\r\n p.giftCardRecipientEmail = product.giftCardRecipientEmail;\r\n p.giftCardRecipientName = product.giftCardRecipientName;\r\n\r\n if (product.refundedQuantity > 0) {\r\n p.refundedQuantity = product.refundedQuantity;\r\n p.refundedPromotionalQuantity = product.refundPromotionalQuantity;\r\n p.refunded = product.refunded;\r\n p.refundedReasonDescription = product.refundedReasonDescription;\r\n p.refundedReason = product.refundedReason;\r\n if (!p.refundedReasonDescription) {\r\n p.refundedReasonDescription = p.refundedReason;\r\n }\r\n p.refundedTotal = product.refundedTotal;\r\n p.isLastExchanged = product.isLastExchanged;\r\n }\r\n\r\n if (product.exchange) {\r\n p.exchange = product.exchange;\r\n }\r\n if (product.lineDiscount) {\r\n p.lineDiscount = product.lineDiscount;\r\n }\r\n p.itemDiscounts = product.itemDiscounts as ItemDiscounts;\r\n this.transactionDocument.basket.products.push(p);\r\n this.lineDiscount(basketDetails);\r\n });\r\n console.info(\"ebasket: transactiondocument basket details updated\", JSON.stringify(this.transactionDocument.basket));\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * current transaction Details Total(New Products)\r\n * @returns currentTransactionDetails\r\n */\r\n\r\n currentTransactionDetails(basket: Basket): TransactionDocumentBuilder {\r\n console.log(\"ebasket: current transaction details for exchanges\", basket);\r\n this.transactionDocument.currentTransactionDetails.products = [] as Product[];\r\n this.transactionDocument.currentTransactionDetails.linePromotion = [] as LinePromotions[];\r\n this.transactionDocument.currentTransactionDetails.lineDiscount = [] as LineDiscount[];\r\n this.transactionDocument.currentTransactionDetails.transactionDiscount = [];\r\n this.transactionDocument.currentTransactionDetails.products = basket.products;\r\n this.transactionDocument.currentTransactionDetails.products = this.transactionDocument.currentTransactionDetails.products.filter(\r\n ( proj: { refundedQuantity: number; }) => proj.refundedQuantity != 0\r\n );\r\n\r\n this.transactionDocument.currentTransactionDetails.products.forEach((product: { refundedQuantity: any; quantity: any; totalLinePrice: number; refundedTotal: number; total: any; refunded: boolean; linePromotions: any; lineDiscount: any; }) => {\r\n if (product.refundedQuantity) {\r\n product.quantity = product.refundedQuantity;\r\n // updating total line price with actual price to be refunded including the refunding qty\r\n product.totalLinePrice = Math.abs(product.refundedTotal);\r\n product.total = product.totalLinePrice;\r\n if (product.quantity === product.refundedQuantity) {\r\n product.refunded = true;\r\n }\r\n }\r\n //Updating line promotions and line discounts \r\n if (product.linePromotions && !product.refundedQuantity) {\r\n this.transactionDocument.currentTransactionDetails.linePromotion.push(product.linePromotions)\r\n }\r\n if (product.lineDiscount && !product.refundedQuantity) {\r\n this.transactionDocument.currentTransactionDetails.lineDiscount.push(product.lineDiscount)\r\n }\r\n });\r\n\r\n console.log(\"ebasket: current transaction details after removing old products\", this.transactionDocument.currentTransactionDetails.products);\r\n\r\n if (basket.transactionDiscount && basket.transactionDiscount.length > 0) {\r\n this.transactionDocument.currentTransactionDetails.transactionDiscount.push(...basket.transactionDiscount);\r\n }\r\n this.transactionDocument.currentTransactionDetails.basketSummary = {} as BasketSummary;\r\n\r\n this.transactionDocument.currentTransactionDetails.basketSummary.saleTotal = this.numberUtilService.trimTo2Decimal2(this.updateSaleTotal(this.transactionDocument.currentTransactionDetails));\r\n this.transactionDocument.currentTransactionDetails.basketSummary.totalItems = basket.quantity;\r\n\r\n\r\n this.transactionDocument.currentTransactionDetails.basketSummary.basketTotal = basket.basketTotal;\r\n this.transactionDocument.currentTransactionDetails.basketSummary.refundTotal = this.updateCurrentTransactionDetailsRefundTotal();\r\n // For partial refund discount is updatied in total line price so discountTotal will always be zero & in case of exchange discount total is calculated\r\n\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.SALE_EXCHANGE) {\r\n this.transactionDocument.currentTransactionDetails.basketSummary.discountTotal = this.numberUtilService.trimTo2Decimal2(this.updateCurrentTransactionDetailsDiscountTotal());\r\n } else {\r\n if (this.transactionDocument.currentTransactionDetails.transactionDiscount && this.transactionDocument.currentTransactionDetails.transactionDiscount.length > 0) {\r\n let discountTotal = 0;\r\n this.transactionDocument.currentTransactionDetails.transactionDiscount.forEach((discount: { discountAmount: number; }) => {\r\n discountTotal += discount.discountAmount;\r\n });\r\n this.transactionDocument.currentTransactionDetails.basketSummary.discountTotal = Math.abs(discountTotal);\r\n } else {\r\n this.transactionDocument.currentTransactionDetails.basketSummary.discountTotal = 0;\r\n }\r\n }\r\n\r\n console.log(\"ebasket:this.transactionDocument.currentTransactionDetails\", JSON.stringify(this.transactionDocument.currentTransactionDetails));\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * current transaction Tax Total\r\n * @returns Tax Total\r\n */\r\n\r\n updateCurrentTransactionDetailsTaxBreakdown(basketDetails: Basket): TransactionDocumentBuilder {\r\n let transactionDiscountTotal = 0;\r\n let taxBreakdown: TaxBreakdown = {\r\n taxLines: [],\r\n totalTaxableAmount: 0,\r\n };\r\n\r\n if (this.transactionDocument.currentTransactionDetails.transactionDiscount && this.transactionDocument.currentTransactionDetails.transactionDiscount.length > 0) {\r\n this.transactionDocument.currentTransactionDetails.transactionDiscount.forEach((discount: { discountAmount: number; }) => {\r\n transactionDiscountTotal += discount.discountAmount;\r\n });\r\n }\r\n\r\n if (this.transactionDocument.currentTransactionDetails.products && this.transactionDocument.currentTransactionDetails.products.length > 0) {\r\n this.transactionDocument.currentTransactionDetails.products.forEach((product: { itemLineId: any; selectedVAT: any; selectedVATCode: any; total: any; refundedQuantity: number; itemDiscounts: { currentRefundPortion: number; trnDiscountsPortion: number; trnPromotionsPortion: number; }; }) => {\r\n let taxLine: TaxLine = {\r\n itemLineId: product.itemLineId,\r\n VAT: product.selectedVAT ? product.selectedVAT : 0,\r\n VATCode: product.selectedVATCode,\r\n taxLineTotal: 0,\r\n taxableAmount: product.total,\r\n PreTax: 0\r\n\r\n };\r\n console.info(\"Product contribution : item line ID :current transaction Details\",\r\n product.itemLineId, \"tax line :\", JSON.stringify(taxLine), JSON.stringify(basketDetails.basketTotal));\r\n\r\n //step 1\r\n // if Transaction Discount and/or promotion applied, find net selling price of each product as taxableamount\r\n\r\n //If transaction discount/promotion is applied taxable amount should be deducting transaction promotion and transaction disacount portion\r\n if (product.refundedQuantity && product.refundedQuantity > 0) {\r\n\r\n taxLine.taxableAmount = -Math.abs(taxLine.taxableAmount - product.itemDiscounts.currentRefundPortion);\r\n } else {\r\n taxLine.taxableAmount = taxLine.taxableAmount - product.itemDiscounts.trnDiscountsPortion - product.itemDiscounts.trnPromotionsPortion;\r\n }\r\n\r\n //step 2 - find pre tax\r\n taxLine.PreTax = this.numberUtilService.trimTo2Decimal2((taxLine.taxableAmount * 100) / (100 + taxLine.VAT));\r\n\r\n //step 3 - Update taxbreakdown\r\n taxBreakdown.totalTaxableAmount += taxLine.taxableAmount;\r\n taxLine.taxableAmount = this.numberUtilService.trimTo2Decimal2(taxLine.taxableAmount);\r\n \r\n // step 4 - update tax Line total\r\n taxLine.taxLineTotal = this.numberUtilService.trimTo2Decimal2(taxLine.taxableAmount - taxLine.PreTax);\r\n taxBreakdown.taxLines.push(taxLine);\r\n });\r\n }\r\n\r\n taxBreakdown.totalTaxableAmount = this.numberUtilService.trimTo2Decimal2(taxBreakdown.totalTaxableAmount);\r\n this.transactionDocument.currentTransactionDetails.taxBreakdown = taxBreakdown;\r\n if (this.transactionDocument.currentTransactionDetails.taxBreakdown && this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines && this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines.length > 0) {\r\n this.transactionDocument.currentTransactionDetails.basketSummary.VATTotal = this.numberUtilService.trimTo2Decimal2(this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines.reduce(\r\n (n: any, { taxLineTotal }: any) => n + taxLineTotal,\r\n 0\r\n ));\r\n }\r\n else {\r\n this.transactionDocument.currentTransactionDetails.basketSummary.VATTotal = 0.00;\r\n }\r\n\r\n console.log(\"eBasket:after calculating tax currenttransactionDetails\", this.transactionDocument.currentTransactionDetails)\r\n return this;\r\n }\r\n\r\n updateCurrentTransactionDetailsTotalTaxSummary(): TransactionDocumentBuilder {\r\n \r\n console.log(\"Total Tax Summery Request :\", JSON.stringify(this.transactionDocument.currentTransactionDetails.taxBreakdown));\r\n\r\n let totalTaxSummaryArray: TotalTaxSummary[] = []\r\n let totalTaxSummaryGroup = []\r\n\r\n console.log(\"Tax Lines for Total Tax Summery :\", JSON.stringify(this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines));\r\n\r\n this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines.forEach((element: { VATCode: any; VAT: any; PreTax: any; taxLineTotal: any; }) => {\r\n let TaxSummary: TotalTaxSummary = {\r\n VATCode:\"\",\r\n VAT: -12345,\r\n PreTaxSum: 0,\r\n TaxSum: 0,\r\n TXrateSum: 0\r\n };\r\n TaxSummary.VATCode=element.VATCode;\r\n TaxSummary.VAT = element.VAT; \r\n \r\n TaxSummary.PreTaxSum = this.numberUtilService.trimTo2Decimal2(element.PreTax); \r\n TaxSummary.TaxSum = this.numberUtilService.trimTo2Decimal2(element.taxLineTotal);\r\n TaxSummary.TXrateSum = this.numberUtilService.trimTo2Decimal2(TaxSummary.PreTaxSum + TaxSummary.TaxSum); \r\n totalTaxSummaryArray.push(TaxSummary);\r\n })\r\n\r\n console.log(\"Total Tax Summery Without Grouped : \", JSON.stringify(totalTaxSummaryArray));\r\n \r\n totalTaxSummaryGroup = totalTaxSummaryArray.reduce((preparedArray:any,currentObj:any) => {\r\n let ind = preparedArray.findIndex((x: { VAT: any; }) => x.VAT === currentObj.VAT);\r\n if(ind === -1){\r\n preparedArray.push(currentObj)\r\n }else {\r\n preparedArray[ind].VATCode = currentObj.VATCode;\r\n preparedArray[ind].VAT = currentObj.VAT;\r\n preparedArray[ind].PreTaxSum += currentObj.PreTaxSum;\r\n preparedArray[ind].TaxSum += currentObj.TaxSum;\r\n preparedArray[ind].TXrateSum += currentObj.TXrateSum;\r\n }\r\n return preparedArray;\r\n },[])\r\n // listOfTags.map(x => unique.filter(a => a.label == x.label && a.color == x.color).length > 0 ? null : unique.push(x));\r\n\r\n console.log(\"Total Tax Summer Group :\", JSON.stringify(totalTaxSummaryGroup));\r\n\r\n this.transactionDocument.currentTransactionDetails.totalTaxSummary = totalTaxSummaryGroup;\r\n return this;\r\n\r\n }\r\n\r\n /**\r\n * current transaction Disocunt Total\r\n * @returns Discount Total\r\n */\r\n updateCurrentTransactionDetailsDiscountTotal() {\r\n let refundTotal = this.transactionDocument.currentTransactionDetails.basketSummary.refundTotal ? this.transactionDocument.currentTransactionDetails.basketSummary.refundTotal : 0;\r\n\r\n console.log(\"e-basket: transaction builder updateCurrentTransactionDetailsDiscountTotal: discountTotal\", refundTotal, this.transactionDocument.currentTransactionDetails.basketSummary.basketTotal, this.transactionDocument.currentTransactionDetails.basketSummary.saleTotal);\r\n const discountTotal =\r\n Math.abs(\r\n Math.abs(this.transactionDocument.currentTransactionDetails.basketSummary.saleTotal) -\r\n (Math.abs(this.transactionDocument.currentTransactionDetails.basketSummary.basketTotal) + Math.abs(refundTotal))\r\n );\r\n console.log(\"e-basket: transaction builder updateCurrentTransactionDetailsDiscountTotal: discountTotal\", discountTotal)\r\n return Number(discountTotal.toFixed(2));\r\n }\r\n\r\n /**\r\n * current transaction Refund Total\r\n * @returns Refund Total\r\n */\r\n updateCurrentTransactionDetailsRefundTotal() {\r\n let totalRefund = 0;\r\n for (let index = 0; index < this.transactionDocument.currentTransactionDetails.products.length; index++) {\r\n const product: Product = this.transactionDocument.currentTransactionDetails.products[index];\r\n if (product.refundedTotal) {\r\n totalRefund = totalRefund + product.refundedTotal;\r\n }\r\n console.log(\"ebasket : transaction Service: totalRefund for Current TransactionDetails\" + totalRefund)\r\n }\r\n return totalRefund;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Baskets summary\r\n * @param basketDetails\r\n * @returns summary\r\n */\r\n basketSummary(basketDetails: Basket): TransactionDocumentBuilder {\r\n this.transactionDocument.basketSummary.basketTotal = this.numberUtilService.trimTo2Decimal(basketDetails.basketTotal);\r\n\r\n this.transactionDocument.basketSummary.saleTotal = this.numberUtilService.trimTo2Decimal2(this.updateSaleTotal(\r\n basketDetails\r\n ));\r\n this.transactionDocument.basketSummary.refundTotal = this.getRefundTotal();\r\n if (\r\n this.transactionDocument.basket.lineDiscount ||\r\n this.transactionDocument.basket.linePromotion\r\n ) {\r\n this.transactionDocument.basketSummary.discountTotal = this.numberUtilService.trimTo2Decimal2(this.updateDiscountTotal());\r\n }\r\n this.transactionDocument.basketSummary.totalItems = basketDetails.quantity;\r\n\r\n\r\n if (this.transactionDocument.basket.taxBreakdown) {\r\n this.transactionDocument.basketSummary.VATTotal = this.numberUtilService.trimTo2Decimal2(this.transactionDocument.basket.taxBreakdown.taxLines.reduce(\r\n (n: any, { taxLineTotal }: any) => n + taxLineTotal,\r\n 0\r\n ));\r\n }\r\n else {\r\n this.transactionDocument.basketSummary.VATTotal = 0.00;\r\n }\r\n\r\n console.info(\"ebasket: basketsummary updated in transaction document: \", JSON.stringify(this.transactionDocument.basketSummary));\r\n return this;\r\n }\r\n\r\n /**\r\n * Line Discount\r\n * @param basketDetails\r\n * @returns line Discount\r\n */\r\n lineDiscount(basketDetails: Basket): TransactionDocumentBuilder {\r\n this.transactionDocument.basket.lineDiscount = [];\r\n for (let index = 0; index < basketDetails.products.length; index++) {\r\n const element = basketDetails.products[index];\r\n if (element.lineDiscount) {\r\n this.transactionDocument.basket.lineDiscount.push(element.lineDiscount);\r\n this.transactionDocument.basket.lineDiscount = this.transactionDocument.basket.lineDiscount.reduce(\r\n (acc: any[], val: { itemLineId: any; }) => {\r\n if (!acc.find((el: { itemLineId: any; }) => el.itemLineId === val.itemLineId)) {\r\n acc.push(val);\r\n }\r\n return acc;\r\n },\r\n []\r\n );\r\n }\r\n\r\n // console.info(\r\n // \"e-basket :line discount updated in transaction document\",\r\n // this.transactionDocument.basket.lineDiscount\r\n // );\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * exchange\r\n * @param basketDetails\r\n * @returns exchange \r\n */\r\n exchange(basketDetails: Basket): TransactionDocumentBuilder {\r\n this.transactionDocument.basket.exchange = basketDetails.exchange && basketDetails.exchange.length > 0 ? [...basketDetails.exchange] : [];\r\n for (let index = 0; index < basketDetails.products.length; index++) {\r\n\r\n const element: any = basketDetails.products[index];\r\n if (element.exchange != undefined) {\r\n const isPresent = this.transactionDocument.basket.exchange.some((el: { exchangeId: any; }) => el.exchangeId === element.exchange.exchangeId);\r\n if (!isPresent) {\r\n let exchangeItems = [];\r\n for (let j = 0; j < element.exchange.newItems.length; j++) {\r\n const item = element.exchange.newItems[j];\r\n let newItems: any = { lineItemId: item.itemLineId, Quantity: item.quantity }\r\n exchangeItems.push(newItems);\r\n }\r\n element.exchange.newItems = [...exchangeItems];\r\n this.transactionDocument.basket.exchange.push(element.exchange);\r\n }\r\n }\r\n console.log(\r\n \"e-basket :TransactionDocumentBuilder: this.transactionDocument.basket exchange\",\r\n JSON.stringify(this.transactionDocument.basket.exchange)\r\n );\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * add previous exchange data\r\n * @param originalTransactionDocument\r\n * @returns line Promotions\r\n */\r\n addExchangeData(originalTransactionDocument: TransactionDocument): TransactionDocumentBuilder {\r\n this.transactionDocument.basket.exchange = originalTransactionDocument.basket.exchange ? [...originalTransactionDocument.basket.exchange] : null;\r\n return this;\r\n }\r\n\r\n /**\r\n * line Promotions\r\n * @param basketDetails\r\n * @returns line Promotions\r\n */\r\n linePromotion(basketDetails: Basket): TransactionDocumentBuilder {\r\n this.transactionDocument.basket.linePromotion = [];\r\n for (let index = 0; index < basketDetails.products.length; index++) {\r\n const element = basketDetails.products[index];\r\n if (element.linePromotions) {\r\n this.transactionDocument.basket.linePromotion.push(\r\n element.linePromotions\r\n );\r\n this.transactionDocument.basket.linePromotion = this.transactionDocument.basket.linePromotion.reduce(\r\n (acc: any[], val: { itemLineId: any; }) => {\r\n if (!acc.find((el: { itemLineId: any; }) => el.itemLineId === val.itemLineId)) {\r\n acc.push(val);\r\n }\r\n return acc;\r\n },\r\n []\r\n );\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * transaction Promotion\r\n * @param basketDetails\r\n * @returns transaction Promotion\r\n */\r\n transactionPromotion(basketDetails: Basket): TransactionDocumentBuilder {\r\n if (basketDetails.transactionPromotion) {\r\n this.transactionDocument.basket.transactionPromotion =\r\n basketDetails.transactionPromotion;\r\n // for (let index = 0; index < basketDetails.TransactionDiscount.length; index++) {\r\n // this.transactionDocument.basket.transactionPromotion.push(element.linePromotions)\r\n // this.transactionDocument.basket.transactionPromotion = this.transactionDocument.basket.linePromotions.reduce((acc, val) => {\r\n // if (!acc.find(el => el.itemLineId === val.itemLineId)) {\r\n // acc.push(val);\r\n // }\r\n // return acc;\r\n // }, []);\r\n // }\r\n console.log(\r\n \"e-basket :TransactionDocumentBuilder: this.transactionDocument.basket.transactionPromotion\",\r\n JSON.stringify(this.transactionDocument.basket.transactionPromotion)\r\n );\r\n }\r\n return this;\r\n }\r\n\r\n transactionDiscount(basketDetails: Basket): TransactionDocumentBuilder {\r\n if (basketDetails.transactionDiscount) {\r\n this.transactionDocument.basket.transactionDiscount =\r\n basketDetails.transactionDiscount;\r\n\r\n console.log(\r\n \"e-basket :TransactionDocumentBuilder: transaction Discount\",\r\n JSON.stringify(this.transactionDocument.basket.transactionDiscount)\r\n );\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Payments details\r\n * @param paymentDetails\r\n * @returns\r\n */\r\n paymentDetails(paymentDetails: any) {\r\n console.info(\"ebasket : payment details after transaction completed\",JSON.stringify(paymentDetails));\r\n \r\n this.transactionDocument.paymentDetails = paymentDetails;\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Payments details\r\n * @param paymentDetails\r\n * @returns\r\n */\r\n splitPayment(splitPayment: boolean) { \r\n this.transactionDocument.splitPayment = splitPayment;\r\n return this;\r\n } \r\n\r\n /**\r\n * Payments details\r\n * @param paymentDetails\r\n * @returns\r\n */\r\n isPaymentCompleted(isPaymentCompleted: boolean) {\r\n this.transactionDocument.isPaymentCompleted = isPaymentCompleted;\r\n return this;\r\n } \r\n \r\n\r\n\r\n\r\n /**\r\n * Bases currency\r\n * @param currency\r\n * @returns currency\r\n */\r\n baseCurrency(currency: any): TransactionDocumentBuilder {\r\n this.transactionDocument.baseCurrency = currency;\r\n return this;\r\n }\r\n\r\n /**\r\n * gift option at\r\n * @returns at\r\n */\r\n giftOption(gift: any): TransactionDocumentBuilder {\r\n console.log(\r\n \"e-basket :TransactionDocumentBuilder: this.transactionDocument.giftoption\",\r\n gift\r\n );\r\n if (gift) {\r\n this.transactionDocument.giftedReceipt = gift;\r\n }\r\n return this;\r\n }\r\n /**\r\n\r\n/**\r\n * manual Discount\r\n * @param discountData\r\n * @returns\r\n */\r\n\r\n // manualDiscount(discountData : basketDiscount):TransactionDocumentBuilder {\r\n // let saleTotal = this.transactionDocument.basketSummary.basketTotal;\r\n // if(discountData.discountType =='Percent'){\r\n // this.transactionDocument.basketSummary.basketTotal = saleTotal-(saleTotal*(discountData.discountAmount/100));\r\n // discountData.discountAmount = -1*(saleTotal-this.transactionDocument.basketSummary.basketTotal);\r\n // }else {\r\n // this.transactionDocument.basketSummary.basketTotal =saleTotal-discountData.discountAmount;\r\n // discountData.discountAmount = -1*discountData.discountAmount;\r\n // }\r\n // this.transactionDocument.transactionDiscount.push(discountData);\r\n // return this;\r\n\r\n // }\r\n\r\n /**\r\n * Types transaction document builder\r\n * @param t\r\n * @returns type\r\n */\r\n type(t: any): TransactionDocumentBuilder {\r\n this.transactionDocument.type = t;\r\n return this;\r\n }\r\n /**\r\n * Operations status\r\n * @param o\r\n * @returns status\r\n */\r\n operationStatus(o: any): TransactionDocumentBuilder {\r\n this.transactionDocument.operationStatus = o;\r\n return this;\r\n }\r\n /**\r\n * Created at\r\n * @returns at\r\n */\r\n createdAt(): TransactionDocumentBuilder {\r\n const date = new Date();\r\n this.transactionDocument.createdAt = date.toISOString();\r\n this.transactionDocument.updatedAt = date.toISOString();\r\n return this;\r\n }\r\n /**\r\n * Updated at\r\n * @returns at\r\n */\r\n updatedAt(): TransactionDocumentBuilder {\r\n const date = new Date();\r\n this.transactionDocument.updatedAt = date.toISOString();\r\n return this;\r\n }\r\n /**\r\n * transsaction completion at\r\n * @returns transaction completion date\r\n */\r\n transactionCompletedAt(): TransactionDocumentBuilder {\r\n const date = new Date();\r\n this.transactionDocument.transCompletedAt = date.toISOString();\r\n return this;\r\n }\r\n /**\r\n * Builds transaction document builder\r\n * @returns build\r\n */\r\n build(): TransactionDocument {\r\n return this.transactionDocument;\r\n }\r\n\r\n /**\r\n * Sales total in refund\r\n * @param saleTotal\r\n * @returns total in refund\r\n */\r\n saleTotalInRefund(saleTotal: number): TransactionDocumentBuilder {\r\n this.transactionDocument.saleTotal = saleTotal;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets basket details\r\n * @returns basket details\r\n */\r\n getBasketDetails(): Basket {\r\n console.info(\"ebasket: Getting Basket for transactionDocument\", JSON.stringify(this.transactionDocument));\r\n\r\n let basket: Basket = {\r\n subsidiaryId : this.transactionDocument.subsidiaryId,\r\n transactionDiscount: this.transactionDocument.basket.transactionDiscount,\r\n transactionPromotion: this.transactionDocument.basket.transactionPromotion,\r\n transactionId: this.transactionDocument.transactionId,\r\n offlineTransactionId: this.transactionDocument.offlineTransactionId,\r\n total: this.transactionDocument.basketSummary.basketTotal,\r\n basketTotal: this.transactionDocument.basketSummary.basketTotal,\r\n discountTotal: this.transactionDocument.basketSummary.discountTotal,\r\n saleTotal: this.transactionDocument.basketSummary.saleTotal,\r\n refundTotal: this.transactionDocument.basketSummary.refundTotal,\r\n quantity: this.transactionDocument.basketSummary.totalItems,\r\n products: [],\r\n baseCurrency: this.transactionDocument.baseCurrency,\r\n customer: this.transactionDocument.customer,\r\n };\r\n\r\n basket.products = [] as Product[];\r\n this.transactionDocument.basket.products.forEach((product: { SKU: any; barCode: any; barcodes: any; description: any; imageUrls: any; totalLinePrice: any; itemLineId: any; excludePromotion: any; price: any; quantity: any; selectedRRPPrice: any; fullfilmentId: any; fullfilmentLocationName: any; deliveryGroup: string; leadTime: any; deliveryMethod: any; giftCard: any; giftCardExpiryDate: any; giftCardNumberIssued: any; giftCardRecipientEmail: any; giftCardRecipientName: any; refundedTotal: any; refundedQuantity: number; refundedReasonDescription: any; refundedReason: any; refundedPromotionalQuantity: any; isLastExchanged: any; }, index: any) => {\r\n console.log(JSON.stringify(product), \"ebasket: basket detail update in basket\");\r\n const p = {} as any;\r\n p.SKU = product.SKU;\r\n p.barcode = product.barCode;\r\n p.barcodes = product.barcodes;\r\n\r\n p.description = product.description;\r\n p.imageUrls = product.imageUrls;\r\n p.currency = this.transactionDocument.baseCurrency;\r\n p.totalLinePrice = product.totalLinePrice;\r\n p.itemLineId = Number(product.itemLineId);\r\n p.excludePromotion = product.excludePromotion;\r\n\r\n p.selectedPrice = product.price;\r\n p.quantity = product.quantity;\r\n p.total = product.totalLinePrice;\r\n p.selectedRRPPrice = product.selectedRRPPrice;\r\n\r\n p.fullfilmentId = product.fullfilmentId;\r\n p.fullfilmentLocationName = product.fullfilmentLocationName;\r\n p.deliveryGroup = product.deliveryGroup || \"1\";\r\n p.leadTime = product.leadTime;\r\n p.deliveryMethod = product.deliveryMethod || DELIVERY_METHODS.COLLECT_FROM_STORE.toString();\r\n\r\n if(p.fullfilmentId != this.transactionDocument.storeId)\r\n {\r\n p.isWebOrder = true;\r\n }\r\n \r\n p.giftCard = product.giftCard;\r\n p.giftCardExpiryDate = product.giftCardExpiryDate;\r\n p.giftCardNumberIssued = product.giftCardNumberIssued;\r\n p.giftCardRecipientEmail = product.giftCardRecipientEmail;\r\n p.giftCardRecipientName = product.giftCardRecipientName;\r\n \r\n if (\r\n this.transactionDocument.basket.lineDiscount &&\r\n this.transactionDocument.basket.lineDiscount.length > 0\r\n ) {\r\n this.transactionDocument.basket.lineDiscount.forEach((lineDiscount: { itemLineId: { toString: () => any; }; discountedLinePrice: any; }) => {\r\n if (product.itemLineId === lineDiscount.itemLineId.toString()) {\r\n p.lineDiscount = lineDiscount;\r\n p.total = lineDiscount.discountedLinePrice;\r\n }\r\n });\r\n }\r\n\r\n if (\r\n this.transactionDocument.basket.linePromotion &&\r\n this.transactionDocument.basket.linePromotion.length > 0\r\n ) {\r\n this.transactionDocument.basket.linePromotion.forEach((linePromotion: { itemLineId: { toString: () => any; }; promotionLinePrice: any; }) => {\r\n if (product.itemLineId === linePromotion.itemLineId.toString()) {\r\n p.linePromotions = linePromotion;\r\n p.total = linePromotion.promotionLinePrice;\r\n }\r\n });\r\n }\r\n\r\n if (\r\n this.transactionDocument.basket.taxBreakdown &&\r\n this.transactionDocument.basket.taxBreakdown.taxLines.length > 0\r\n ) {\r\n this.transactionDocument.basket.taxBreakdown.taxLines.forEach((taxLine: { itemLineId: { toString: () => any; }; VAT: any; VATCode: any; }) => {\r\n if (product.itemLineId && product.itemLineId === taxLine.itemLineId.toString()) {\r\n p.selectedVAT = taxLine.VAT;\r\n p.selectedVATCode = taxLine.VATCode;\r\n }\r\n });\r\n }\r\n\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.REFUND) {\r\n p.total = product.refundedTotal;\r\n } else if ((this.transactionDocument.type === TRANSACTION_TYPE.SALE_REFUND || TRANSACTION_TYPE.SALE_EXCHANGE) && product.refundedQuantity > 0) {\r\n p.refundedReasonDescription = product.refundedReasonDescription;\r\n p.refundedReason = product.refundedReason;\r\n if (!p.refundedReasonDescription) {\r\n p.refundedReasonDescription = p.refundedReason;\r\n }\r\n p.refundedQuantity = product.refundedQuantity;\r\n p.refundPromotionalQuantity = product.refundedPromotionalQuantity;\r\n p.refundedTotal = product.refundedTotal;\r\n p.total -= Math.abs(p.refundedTotal);\r\n p.isLastExchanged = product.isLastExchanged;\r\n }\r\n\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.REFUND) {\r\n if (p.total > 0) {\r\n p.total *= -1;\r\n }\r\n }\r\n\r\n basket.products.push(p);\r\n\r\n });\r\n\r\n basket = this.getTransactionDiscountAndTransactionPromotionPortion(basket);\r\n basket.total = (basket.basketTotal || 0) + this.getTotalDiscountWithTransactionDiscountsAndPromotions(basket);\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.SALE_REFUND) {\r\n basket.quantity = this.getRefundedTotalWithQuantity(basket);\r\n }\r\n console.info(\"ebasket: Basket created successfully\", JSON.stringify(basket))\r\n return basket;\r\n }\r\n\r\n /**\r\n * Gets basket details\r\n * @returns refund basket details\r\n */\r\n // getRefundBasketDetails(): Basket {\r\n // let basket: Basket = {\r\n // subsidiaryId : this.transactionDocument.subsidiaryId,\r\n // transactionDiscount: this.transactionDocument.basket.transactionDiscount,\r\n // transactionPromotion: this.transactionDocument.basket.transactionPromotion,\r\n // transactionId: this.transactionDocument.transactionId,\r\n // total: this.transactionDocument.basketSummary.basketTotal,\r\n // basketTotal: this.transactionDocument.basketSummary.basketTotal,\r\n // discountTotal: this.transactionDocument.basketSummary.discountTotal,\r\n // saleTotal: this.transactionDocument.basketSummary.saleTotal,\r\n // quantity: this.transactionDocument.basketSummary.totalItems,\r\n // products: [],\r\n // baseCurrency: this.transactionDocument.baseCurrency,\r\n // customer: this.transactionDocument.customer,\r\n // };\r\n\r\n // basket.products = [] as Product[];\r\n // this.transactionDocument.basket.products.forEach((product: { SKU: any; barCode: any; barcodes: any; description: any; imageUrls: any; totalLinePrice: any; itemLineId: any; excludePromotion: any; price: number; quantity: any; selectedRRPPrice: any; fullfilmentId: any; fullfilmentLocationName: any; deliveryGroup: string; leadTime: any; deliveryMethod: any; giftCard: any; giftCardExpiryDate: any; giftCardNumberIssued: any; giftCardRecipientEmail: any; giftCardRecipientName: any; itemDiscounts: any; refundedPromotionalQuantity: any; refundedQuantity: number; refunded: any; isLastExchanged: any; exchange: any; refundedTotal: number; }, index: any) => {\r\n // const p = {} as Product;\r\n // p.SKU = product.SKU;\r\n // p.barcode = product.barCode;\r\n // p.barcodes = product.barcodes;\r\n\r\n // p.description = product.description;\r\n // p.imageUrls = product.imageUrls;\r\n // p.currency = this.transactionDocument.baseCurrency;\r\n // p.totalLinePrice = product.totalLinePrice;\r\n // p.itemLineId = Number(product.itemLineId);\r\n // p.excludePromotion = product.excludePromotion;\r\n\r\n // p.selectedPrice = product.price;\r\n // p.quantity = product.quantity;\r\n // p.total = product.totalLinePrice;\r\n // p.selectedRRPPrice = product.selectedRRPPrice;\r\n\r\n // p.fullfilmentId = product.fullfilmentId;\r\n // p.fullfilmentLocationName = product.fullfilmentLocationName;\r\n // p.deliveryGroup = product.deliveryGroup || \"1\";\r\n // p.leadTime = product.leadTime;\r\n // p.deliveryMethod = product.deliveryMethod || DELIVERY_METHODS.COLLECT_FROM_STORE.toString();\r\n\r\n // p.giftCard = product.giftCard;\r\n // p.giftCardExpiryDate = product.giftCardExpiryDate;\r\n // p.giftCardNumberIssued = product.giftCardNumberIssued;\r\n // p.giftCardRecipientEmail = product.giftCardRecipientEmail;\r\n // p.giftCardRecipientName = product.giftCardRecipientName;\r\n \r\n \r\n // if(p.fullfilmentId != this.transactionDocument.storeId)\r\n // {\r\n // p.isWebOrder = true;\r\n // }\r\n \r\n // if (product.itemDiscounts) {\r\n // p.itemDiscounts = product.itemDiscounts as ItemDiscount;\r\n // }\r\n\r\n // // if(!p.itemDiscounts){\r\n // // console.log(p.itemDiscounts);\r\n\r\n // // this.basketService.transactionDiscountAndPromotionProductortionCalculation(basket);\r\n // // }\r\n // p.refundPromotionalQuantity = product.refundedPromotionalQuantity ? product.refundedPromotionalQuantity : 0;\r\n\r\n // if (product.refundedQuantity) {\r\n // p.quantity = p.quantity - product.refundedQuantity;\r\n // p.totalLinePrice = (p.quantity * product.price);\r\n // p.total = p.totalLinePrice;\r\n // // p.refundPromotionalQuantity = product.refundedPromotionalQuantity;\r\n // p.refunded = product.refunded;\r\n // p.isLastExchanged = product.isLastExchanged;\r\n // }\r\n // if (product.exchange) {\r\n // p.exchange = product.exchange;\r\n // }\r\n\r\n // if (\r\n // this.transactionDocument.basket.lineDiscount &&\r\n // this.transactionDocument.basket.lineDiscount.length > 0\r\n // ) {\r\n\r\n // this.transactionDocument.basket.lineDiscount.forEach((lineDiscount: { itemLineId: { toString: () => any; }; discountedLinePrice: any; }) => {\r\n\r\n // if (product.itemLineId === lineDiscount.itemLineId.toString() && product.refundedQuantity > 0) {\r\n // p.lineDiscount = Object.assign({}, lineDiscount);\r\n // p.lineDiscount.discountedLinePrice = p.lineDiscount.unitPrice * p.quantity\r\n // p.lineDiscount.discountAmount = p.total - p.lineDiscount.discountedLinePrice\r\n // p.total = p.lineDiscount.discountedLinePrice;\r\n // } else if (product.itemLineId === lineDiscount.itemLineId.toString()) {\r\n // p.lineDiscount = lineDiscount;\r\n // p.total = lineDiscount.discountedLinePrice\r\n // }\r\n // });\r\n // }\r\n\r\n // if (\r\n // this.transactionDocument.basket.linePromotion &&\r\n // this.transactionDocument.basket.linePromotion.length > 0\r\n // ) {\r\n // this.transactionDocument.basket.linePromotion.forEach((linePromotion: { itemLineId: { toString: () => any; }; refunded: any; }) => {\r\n // if (product.itemLineId === linePromotion.itemLineId.toString() && !linePromotion.refunded) {\r\n // p.linePromotions = linePromotion;\r\n // p.total = p.linePromotions.promotionLinePrice;\r\n // p.total = p.total - (product.refundedTotal ? Math.abs(product.refundedTotal) : 0);\r\n // }\r\n // });\r\n // }\r\n\r\n // p.refundedQuantity = 0;\r\n // p.refundedTotal = 0;\r\n\r\n // if (\r\n // this.transactionDocument.basket.taxBreakdown &&\r\n // this.transactionDocument.basket.taxBreakdown.taxLines.length > 0\r\n // ) {\r\n // this.transactionDocument.basket.taxBreakdown.taxLines.forEach((taxLine: { itemLineId: { toString: () => any; }; VAT: any; VATCode: any; }) => {\r\n // if (product.itemLineId === taxLine.itemLineId.toString()) {\r\n // p.selectedVAT = taxLine.VAT;\r\n // p.selectedVATCode = taxLine.VATCode;\r\n // }\r\n // });\r\n // }\r\n\r\n // if (p.quantity > 0) {\r\n // basket.products.push(p);\r\n // }\r\n // });\r\n // // product.itemDiscounts\r\n // if (!basket.products[0].hasOwnProperty('itemDiscounts')) {\r\n // basket = this.getTransactionDiscountAndTransactionPromotionPortion(basket);\r\n\r\n // }\r\n\r\n // console.log(\"ebasket : TransactionDocumentBuilder :new created refunded basket\", JSON.stringify(basket))\r\n // basket.quantity = basket.products.reduce(\r\n // (n: any, { quantity }: any) => n + quantity,\r\n // 0\r\n // );\r\n // basket.total = this.getTotalWithLineDiscountAndLinePromotionApplied(basket);\r\n // basket.basketTotal = basket.total;\r\n // basket.basketTotal = basket.basketTotal - this.getTotalDiscountWithTransactionDiscountsAndPromotions(basket);\r\n // console.log(\r\n // \"ebasket : TransactionDocumentBuilder : update Basket Total: after promotion :basketTotal\",\r\n // basket.basketTotal\r\n // );\r\n\r\n // console.log(\r\n // \"e:basket :TransactionDocumentBuilder : basketDetails updated values\",\r\n // JSON.stringify(basket)\r\n // );\r\n // return basket;\r\n // }\r\n\r\n\r\n getTransactionDiscountAndTransactionPromotionPortion(basket:any) {\r\n if (\r\n basket.transactionDiscount &&\r\n basket.transactionDiscount.length > 0\r\n ) {\r\n basket.transactionDiscount.forEach((discount: { itemLineIds: any; }) => {\r\n if (!discount.itemLineIds) {\r\n discount.itemLineIds = basket.products.map((product: { itemLineId: any; }) => {\r\n return product.itemLineId\r\n });\r\n }\r\n basket = this.basketService.transactionDiscountProductPortionCalc(basket, discount);\r\n });\r\n }\r\n if (\r\n basket.transactionPromotion &&\r\n basket.transactionPromotion.length > 0\r\n ) {\r\n basket.transactionPromotion.forEach((tPromotion: { itemLineIds: any; }) => {\r\n if (!tPromotion.itemLineIds) {\r\n const filteredData = basket.products.filter(\r\n (item: { excludePromotion: boolean; }) => {\r\n return item.excludePromotion === false;\r\n });\r\n\r\n tPromotion.itemLineIds =\r\n filteredData.map((product: { itemLineId: any; }) => {\r\n return product.itemLineId\r\n });\r\n }\r\n basket = this.basketService.transactionPromotionProductPortionCalc(basket, tPromotion);\r\n });\r\n }\r\n\r\n return basket;\r\n }\r\n\r\n\r\n getTotalDiscountWithTransactionDiscountsAndPromotions(basketDetails: any) {\r\n\r\n let discountTotal = 0;\r\n if (\r\n basketDetails.transactionPromotion &&\r\n basketDetails.transactionPromotion.length > 0\r\n ) {\r\n discountTotal += basketDetails.transactionPromotion.reduce(\r\n (n: any, { promotionAmount }: any) => n + promotionAmount,\r\n 0\r\n );\r\n }\r\n if (\r\n basketDetails.transactionDiscount &&\r\n basketDetails.transactionDiscount.length > 0\r\n ) {\r\n\r\n discountTotal += basketDetails.transactionDiscount.reduce(\r\n (n: any, { discountAmount }: any) => n + discountAmount,\r\n 0\r\n );\r\n\r\n\r\n }\r\n console.log(\"ebasket : TransactionDocumentBuilder : Transaction discount Total:\", discountTotal);\r\n\r\n return discountTotal;\r\n }\r\n\r\n\r\n appendCurrencySymbol(currency: number, value: number) {\r\n // value=this.decimalpipe.transform(value,'1.2');\r\n if (value >= 0) {\r\n const returnval = currency + value;\r\n console.log(returnval, \"ebasket: add currency with value\");\r\n return returnval;\r\n } else {\r\n const returnval = \"-\" + (currency + value * -1);\r\n console.log(returnval, \"-(currency+(value*-1))\");\r\n return returnval;\r\n }\r\n }\r\n\r\n // /**\r\n // * Updates total refund\r\n // * @returns total refund\r\n // */\r\n // updateTotalRefund(): TransactionDocumentBuilder {\r\n // this.transactionDocument.basket.products.forEach((product) => {\r\n // product.refundedQuantity = product.quantity;\r\n // product.refundedTotal = product.totalLinePrice * -1;\r\n // console.log(\r\n // \"ebasket: Transaction price override :\",\r\n // this.transactionDocument.basket.lineDiscount\r\n // );\r\n\r\n // if (\r\n // this.transactionDocument.basket.linePromotion &&\r\n // this.transactionDocument.basket.linePromotion.length > 0\r\n // ) {\r\n // this.transactionDocument.basket.linePromotion.forEach((linePromotion) => {\r\n // console.log(\r\n // \"Promotion: basket linePromotion : \",\r\n // this.transactionDocument.basket.linePromotion\r\n // );\r\n // console.log(\r\n // \"linePromotion.itemLineId.toString() : \",\r\n // linePromotion.itemLineId.toString()\r\n // );\r\n // console.log(\r\n // \"condition : \" +\r\n // (product.itemLineId === linePromotion.itemLineId.toString())\r\n // );\r\n\r\n // if (product.itemLineId === linePromotion.itemLineId.toString()) {\r\n // product.refundedTotal =\r\n // linePromotion.promotionLinePrice * -1;\r\n // }\r\n // });\r\n // } else\r\n // if (\r\n // this.transactionDocument.basket.lineDiscount &&\r\n // this.transactionDocument.basket.lineDiscount.length > 0\r\n // ) {\r\n // this.transactionDocument.basket.lineDiscount.forEach((lineDiscount) => {\r\n // console.log(\r\n // \"product.itemLineId : \" +\r\n // this.transactionDocument.basket.lineDiscount\r\n // );\r\n // console.log(\r\n // \"lineDiscount.itemLineId.toString() : \" +\r\n // lineDiscount.itemLineId.toString()\r\n // );\r\n // console.log(\r\n // \"condition : \" +\r\n // (product.itemLineId === lineDiscount.itemLineId.toString())\r\n // );\r\n\r\n // if (product.itemLineId === lineDiscount.itemLineId.toString()) {\r\n // product.refundedTotal = lineDiscount.unitPrice * product.refundedQuantity * -1;\r\n // }\r\n // });\r\n // }\r\n\r\n // console.log(\"Product description :\" + product.description);\r\n // console.log(\"Product total :\" + product.refundedTotal);\r\n // // product.displayrefundedamount=this.appendCurrencySymbol(CURRENCY[this.transactionDocument.baseCurrency],product.refundedTotal);\r\n // // console.log(product.displayrefundedamount,\"displayrefundedamount\");\r\n // product.refunded = true;\r\n // });\r\n // const baskettotal = (this.transactionDocument.basketSummary.basketTotal *= -1);\r\n // // this.transactionDocument.basketSummary.displaybaskettotal=this.appendCurrencySymbol(CURRENCY[this.transactionDocument.baseCurrency], baskettotal);\r\n // const saletotal = (this.transactionDocument.basketSummary.saleTotal *= -1);\r\n // // this.transactionDocument.basketSummary.displaysaletotal = this.appendCurrencySymbol(CURRENCY[this.transactionDocument.baseCurrency], saletotal);\r\n // (this.transactionDocument.basketSummary.VATTotal *= -1);\r\n // return this;\r\n // }\r\n\r\n /**\r\n * Sale Total\r\n * @param basketDetails\r\n * @returns Sale Total\r\n */\r\n updateSaleTotal(basketDetails: { products: any[]; }) {\r\n const saleTotal = basketDetails.products.reduce(\r\n (n: any, { totalLinePrice }: any) => n + totalLinePrice,\r\n 0\r\n );\r\n return saleTotal\r\n }\r\n\r\n getTotalWithLineDiscountAndLinePromotionApplied(basketDetails: { products: any; }): number {\r\n let saletotal: number = 0.0;\r\n for (let product of basketDetails.products) {\r\n // if (product.linePromotions) {\r\n // saletotal += product.linePromotions.promotionLinePrice;\r\n // } else if (\r\n // product.lineDiscount &&\r\n // !product.linePromotions\r\n // ) {\r\n // saletotal +=\r\n // product.quantity * Number(product.lineDiscount.unitPrice.toFixed(2));\r\n // } else {\r\n // saletotal +=\r\n // product.quantity * Number(product.selectedPrice.toFixed(2));\r\n // }\r\n saletotal += product.total;\r\n console.log(\r\n \"e-basket:update product Total:\" + saletotal,\r\n JSON.stringify(product)\r\n );\r\n }\r\n return saletotal;\r\n }\r\n\r\n getRefundedTotalWithQuantity(basketDetails: { products: string | any[]; }): number {\r\n let quantity = 0;\r\n for (let index = 0; index < basketDetails.products.length; index++) {\r\n const product: any = basketDetails.products[index];\r\n\r\n if (!product.refundedReasonDescription) {\r\n\r\n quantity = quantity + product.quantity;\r\n\r\n } else {\r\n quantity = quantity + (product.quantity - product.refundedQuantity);\r\n\r\n // basketDetails.total = basketDetails.total + product.refundedTotal;\r\n\r\n }\r\n }\r\n return quantity;\r\n\r\n }\r\n\r\n /**\r\n * Discount Total\r\n * @returns Discount Total\r\n */\r\n updateDiscountTotal() {\r\n let refundTotal = this.transactionDocument.basketSummary.refundTotal ? this.transactionDocument.basketSummary.refundTotal : 0;\r\n console.info(\"e-basket: transaction builder: refundTotal\", JSON.stringify(refundTotal),\r\n JSON.stringify(this.transactionDocument.basketSummary));\r\n const discountTotal =\r\n Math.abs(\r\n Math.abs(this.transactionDocument.basketSummary.saleTotal) -\r\n (\r\n Math.abs(this.transactionDocument.basketSummary.basketTotal) + Math.abs(refundTotal)\r\n )\r\n );\r\n console.log(\"e-basket: transaction builder: discountTotal\", JSON.stringify(discountTotal))\r\n return Number(discountTotal.toFixed(2));\r\n }\r\n\r\n updateReasonCode(reasonCode: {\r\n code: string;\r\n name: string;\r\n }): TransactionDocumentBuilder {\r\n this.transactionDocument.reasonCode = reasonCode.code;\r\n this.transactionDocument.reasonDescription = reasonCode.name;\r\n return this;\r\n }\r\n\r\n updateManagerOverride(\r\n useroverride: UserOverride\r\n ): TransactionDocumentBuilder {\r\n this.transactionDocument.override = useroverride;\r\n return this;\r\n }\r\n\r\n updateUserID(\r\n userID: string\r\n ): TransactionDocumentBuilder {\r\n this.transactionDocument.userId = userID;\r\n return this;\r\n }\r\n\r\n updateUserName(name: any) : TransactionDocumentBuilder {\r\n this.transactionDocument.userName = name;\r\n return this;\r\n\r\n }\r\n \r\n addCustomerDetails(customerDetail: Customer): TransactionDocumentBuilder {\r\n this.transactionDocument.customer = customerDetail;\r\n return this;\r\n }\r\n\r\n updateTaxBreakdown(basketDetails: Basket): TransactionDocumentBuilder {\r\n // let transactionDiscountTotal = 0;\r\n let taxBreakdown: TaxBreakdown = {\r\n taxLines: [],\r\n totalTaxableAmount: 0,\r\n };\r\n\r\n\r\n\r\n // if (this.transactionDocument.basket.transactionDiscount && this.transactionDocument.basket.transactionDiscount.length > 0) {\r\n // this.transactionDocument.basket.transactionDiscount.forEach((discount) => {\r\n // transactionDiscountTotal += discount.discountAmount;\r\n // });\r\n // }\r\n\r\n // if (this.transactionDocument.basket.transactionPromotion && this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n // this.transactionDocument.basket.transactionPromotion.forEach(\r\n // (promotion) => {\r\n // transactionDiscountTotal += promotion.promotionAmount;\r\n // }\r\n // );\r\n // }\r\n\r\n basketDetails.products.forEach((product: any) => {\r\n let taxLine: TaxLine = {\r\n itemLineId: product.itemLineId,\r\n VAT: product.selectedVAT ? product.selectedVAT : 0,\r\n VATCode: product.selectedVATCode,\r\n taxLineTotal: 0,\r\n taxableAmount: product.total,\r\n PreTax: 0\r\n };\r\n console.info(\"Product contribution : item line ID :\", product.itemLineId,\r\n \"tax line :\", JSON.stringify(taxLine));\r\n\r\n // step 1\r\n // if Transaction Discount and/or promotion applied, find net selling price of each product as taxableamount\r\n // if (transactionDiscountTotal > 0) {\r\n product = this.basketService.validateProductItemDiscount(product);\r\n\r\n const productContributionInTotal =\r\n product.itemDiscounts.trnDiscountsPortion +\r\n product.itemDiscounts.trnPromotionsPortion -\r\n product.itemDiscounts.refundPortion;\r\n // tp+td-rp;\r\n\r\n console.info(\"Product contribution : item line ID :\", product.itemLineId,\r\n \"contribution :\", JSON.stringify(productContributionInTotal));\r\n // calculate net selling price after applying transaction discount as per product contribution\r\n taxLine.taxableAmount -= productContributionInTotal;\r\n // }\r\n\r\n //step 2 - find pre tax\r\n taxLine.PreTax = this.numberUtilService.trimTo2Decimal2((taxLine.taxableAmount * 100) / (100 + taxLine.VAT));\r\n\r\n //step 3 - Update taxbreakdown\r\n taxBreakdown.totalTaxableAmount += taxLine.taxableAmount;\r\n taxLine.taxableAmount = this.numberUtilService.trimTo2Decimal2(taxLine.taxableAmount);\r\n \r\n // step 4 - update tax Line total\r\n taxLine.taxLineTotal = this.numberUtilService.trimTo2Decimal2(taxLine.taxableAmount - taxLine.PreTax);\r\n taxBreakdown.taxLines.push(taxLine);\r\n });\r\n\r\n taxBreakdown.totalTaxableAmount = this.numberUtilService.trimTo2Decimal2(taxBreakdown.totalTaxableAmount);\r\n this.transactionDocument.basket.taxBreakdown = taxBreakdown;\r\n return this;\r\n }\r\n\r\n updateTotalTaxSummary(): TransactionDocumentBuilder {\r\n\r\n console.log(\"Total Tax Summery Request :\", JSON.stringify(this.transactionDocument.basket.taxBreakdown));\r\n\r\n\r\n let totalTaxSummaryArray: TotalTaxSummary[] = []\r\n let totalTaxSummaryGroup = []\r\n\r\n console.log(\"Tax Lines for Total Tax Summery :\", JSON.stringify(this.transactionDocument.basket.taxBreakdown.taxLines));\r\n\r\n\r\n this.transactionDocument.basket.taxBreakdown.taxLines.forEach((element: { VATCode: any; VAT: any; PreTax: any; taxLineTotal: any; }) => {\r\n let TaxSummary: TotalTaxSummary = {\r\n VATCode: \"\",\r\n VAT: -12345,\r\n PreTaxSum: 0,\r\n TaxSum: 0,\r\n TXrateSum: 0\r\n \r\n };\r\n TaxSummary.VATCode = element.VATCode;\r\n TaxSummary.VAT = element.VAT; \r\n TaxSummary.PreTaxSum = this.numberUtilService.trimTo2Decimal2(element.PreTax);\r\n TaxSummary.TaxSum = this.numberUtilService.trimTo2Decimal2(element.taxLineTotal);\r\n TaxSummary.TXrateSum = this.numberUtilService.trimTo2Decimal2(TaxSummary.PreTaxSum + TaxSummary.TaxSum); \r\n totalTaxSummaryArray.push(TaxSummary);\r\n })\r\n\r\n console.log(\"Total Tax Summery Without Grouped : \", JSON.stringify(totalTaxSummaryArray));\r\n \r\n totalTaxSummaryGroup = totalTaxSummaryArray.reduce((preparedArray:any,currentObj) => {\r\n\r\n let ind = preparedArray.findIndex((x: { VAT: any; }) => x.VAT === currentObj.VAT);\r\n if(ind === -1){\r\n preparedArray.push(currentObj)\r\n }else {\r\n preparedArray[ind].VATCode = currentObj.VATCode;\r\n preparedArray[ind].VAT = currentObj.VAT;\r\n preparedArray[ind].PreTaxSum += currentObj.PreTaxSum;\r\n preparedArray[ind].TaxSum += currentObj.TaxSum;\r\n preparedArray[ind].TXrateSum += currentObj.TXrateSum;\r\n }\r\n return preparedArray;\r\n },[])\r\n \r\n console.log(\"Total Tax Summer Group :\",totalTaxSummaryGroup);\r\n\r\n\r\n this.transactionDocument.basket.totalTaxSummary = totalTaxSummaryGroup;\r\n\r\n return this;\r\n\r\n }\r\n\r\n\r\n /**\r\n * TransactionId\r\n * @returns OriginalTransactionId\r\n */\r\n addOriginalTransId(tranDoc:TransactionDocument): TransactionDocumentBuilder {\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.REFUND || this.transactionDocument.type === TRANSACTION_TYPE.SALE_REFUND || this.transactionDocument.type === TRANSACTION_TYPE.SALE_EXCHANGE) {\r\n this.transactionDocument.originalTransId = tranDoc.transactionId;\r\n if(tranDoc.apiResponse && tranDoc.apiResponse.internalId)\r\n {\r\n this.transactionDocument.originalExternalId = tranDoc.apiResponse.internalId.toString();\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * unreferenced Refund\r\n * @returns boolean value\r\n */\r\n addUnreferencedRefund(): TransactionDocumentBuilder {\r\n this.transactionDocument.unreferencedRefund = true;\r\n return this;\r\n }\r\n\r\n getRefundTotal() {\r\n let totalRefund = 0;\r\n for (let index = 0; index < this.transactionDocument.basket.products.length; index++) {\r\n const product: TProduct = this.transactionDocument.basket.products[index];\r\n if (product.refundedTotal) {\r\n totalRefund = totalRefund + product.refundedTotal;\r\n }\r\n console.log(\"ebasket : transaction Service: totalRefund\" + totalRefund)\r\n }\r\n return totalRefund;\r\n }\r\n\r\n docId(docId: any): TransactionDocumentBuilder {\r\n this.transactionDocument.id = docId;\r\n return this;\r\n }\r\n}\r\n","import { DISCOUNTTYPE, LineDiscount, TProduct, TransactionDiscount, TransactionDocument, TRANSACTION_TYPE } from \"./mapper-library.model\"\r\nimport { TransactionDocumentBuilder } from \"./TransactionDocumentBuilder\";\r\nexport class RJMapperBuilderClass {\r\n\r\n private transactionDocument: TransactionDocument;\r\n private deviceId: any;\r\n private transactionNumber: any;\r\n private manifestVersion: any;\r\n private databaseSchemaVersion: any;\r\n private basketType: any;\r\n private xmlSchemaVersion: any;\r\n private majorVersion: any;\r\n private minorVersion: any;\r\n private externalState: any;\r\n private cashierId: any;\r\n private companyId: any;\r\n private terminalNumber: any;\r\n private taxMethodId: any;\r\n private tradingRegionId: any;\r\n private basketCurrencyId: any;\r\n private basketCountryId: any;\r\n private basketLanguageId: any;\r\n private itemCount = 0;\r\n private largestNumber = 0;\r\n private branchId: any;\r\n private createdAt: any;\r\n private updatedAt :any;\r\n private salesPersonName: any;\r\n private rjObject: any = {}\r\n\r\n constructor(transactionDoc?: TransactionDocument) {\r\n if (transactionDoc) {\r\n this.transactionDocument = transactionDoc;\r\n } else {\r\n this.transactionDocument = {\r\n transactionId: \"\",\r\n offlineTransactionId: \"\",\r\n transactionRef: \"\",\r\n dateTime: \"\",\r\n orgCode: \"\",\r\n storeId: \"\",\r\n storeNodeId: \"\",\r\n storeNodeStructure: \"\",\r\n deviceId: \"\",\r\n terminalId: \"\",\r\n userId: \"\",\r\n initiatingModule: \"eBasket\",\r\n export: false,\r\n basket: {} as any,\r\n basketSummary: {} as any,\r\n baseCurrency: \"\",\r\n type: \"\",\r\n operationStatus: \"\",\r\n createdAt: \"\",\r\n updatedAt: \"\",\r\n id: \"\",\r\n currentTransactionDetails: {} as any,\r\n saleTotal: 0,\r\n };\r\n }\r\n this.initilizeItemCount();\r\n this.setLineNumberForProducts();\r\n this.createdAt = this.getDate(this.transactionDocument.createdAt);\r\n this.updatedAt = this.getDate(this.transactionDocument.updatedAt);\r\n }\r\n\r\n getPosbasketInfo() {\r\n this.rjObject['Keyword'] = this.generateKeyword();\r\n this.rjObject['ID'] = this.generateId(this.createdAt);\r\n this.rjObject['XMLSchemaVersion'] = '2';\r\n this.rjObject['LastUpdated'] = this.updatedAt;\r\n this.rjObject['MajorVersion'] = this.majorVersion;\r\n this.rjObject['MinorVersion'] = this.minorVersion;\r\n this.rjObject['ManifestVersion'] = this.manifestVersion;\r\n this.rjObject['DatabaseSchemaVersion'] = this.databaseSchemaVersion;\r\n this.rjObject['BasketType'] = this.basketType;\r\n this.rjObject['State'] = this.getState();\r\n this.rjObject['ExternalState'] = this.externalState;\r\n\r\n return this;\r\n }\r\n\r\n\r\n getheaderInfo() {\r\n this.rjObject['Header'] = {};\r\n this.rjObject['Header'].TimeZoneOffset = this.convertToString(this.generateTimezoneoffset(this.transactionDocument.createdAt));\r\n this.rjObject['Header'].DateTimeCreated = this.createdAt;\r\n this.rjObject['Header'].OriginatedBy = {};\r\n this.rjObject['Header'].OriginatedBy.DeviceID = this.deviceId;\r\n this.rjObject['Header'].OriginatedBy.CashierID = this.cashierId;\r\n this.rjObject['Header'].OriginatedBy.CompanyID = this.companyId;\r\n this.rjObject['Header'].OriginatedBy.StoreID = this.transactionDocument.storeId;\r\n this.rjObject['Header'].OriginatedBy.BranchID = this.branchId;\r\n this.rjObject['Header'].OriginatedBy.TerminalNumber = this.terminalNumber;\r\n this.rjObject['Header'].OriginatedBy.TransactionNumber = this.transactionNumber;\r\n this.rjObject['Header'].TaxMethodID = this.taxMethodId;\r\n this.rjObject['Header'].DynamicStockLookup = this.generateDynamicStockLookUp();\r\n this.rjObject['Header'].BasketLanguageID = this.basketLanguageId; //todo\r\n this.rjObject['Header'].BasketCountryID = this.basketCountryId; //todo\r\n this.rjObject['Header'].BasketCurrencyID = this.transactionDocument.baseCurrency;\r\n this.rjObject['Header'].TradingRegionID = this.tradingRegionId;\r\n this.rjObject['Header'].Eurozone = \" \";//unknown\r\n this.rjObject['Header'].EuroBaseExchangeRate = \"\"; //unknown\r\n this.rjObject['Header'].PrintableName = this.transactionDocument.userName; //unknown\r\n\r\n return this;\r\n }\r\n\r\n rjMapper() {\r\n var transactionDiscount:any = [] ;\r\n if (this.transactionDocument.basket.transactionDiscount && this.transactionDocument.basket.transactionDiscount.length > 0) {\r\n transactionDiscount = this.transactionDocument.basket.transactionDiscount\r\n }\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.SALE) {\r\n this.rjObject['ProductSale'] = [];\r\n this.rjObject['ModifierItem'] = [];\r\n\r\n this.transactionDocument.basket.products.forEach((element: any) => {\r\n let lineDiscount = [];\r\n if (this.transactionDocument.basket.lineDiscount && this.transactionDocument.basket.lineDiscount.length > 0) {\r\n lineDiscount = this.transactionDocument.basket.lineDiscount.filter((x: any) => x.itemLineId === element.itemLineId);\r\n if (lineDiscount.length > 0) {\r\n const index = this.transactionDocument.basket.lineDiscount.indexOf(lineDiscount[0]);\r\n if (index > -1) {\r\n this.transactionDocument.basket.lineDiscount.splice(index, 1);\r\n }\r\n }\r\n }\r\n let data = this.addProduct(element, (lineDiscount.length > 0 ? lineDiscount[0] : null),(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n this.rjObject['ProductSale'].push(data);\r\n this.getModifierItem(lineDiscount.length > 0 ? lineDiscount[0] : null, element.itemLineId);\r\n });\r\n let transactionPromotion = [];\r\n if (this.transactionDocument.basket.transactionPromotion && this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n transactionPromotion = this.transactionDocument.basket.transactionPromotion;\r\n this.getTransactionPromotion(transactionPromotion);\r\n }\r\n } else if (this.transactionDocument.type === TRANSACTION_TYPE.REFUND) {\r\n this.rjObject['ProductReturn'] = [];\r\n this.rjObject['ModifierItem'] = []; \r\n this.transactionDocument.basket.products.forEach((element: any) => {\r\n let data = this.returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null),(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n this.rjObject['ProductReturn'].push(data);\r\n this.getModifierItem(element.lineDiscount, element.itemLineId);\r\n });\r\n } else if (this.transactionDocument.type === TRANSACTION_TYPE.SALE_REFUND) {\r\n this.rjObject['ProductReturn'] = [];\r\n this.rjObject['ModifierItem'] = [];\r\n \r\n let transactionDoc: any = new TransactionDocumentBuilder().basket(this.transactionDocument.currentTransactionDetails).build();\r\n transactionDoc.basket.products.forEach((element: any) => {\r\n let data = this.returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null),(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n let obj = {\r\n \"OriginalReceiptSupplied\": 0,\r\n \"OriginalBranchID\": 0,\r\n \"OriginalTerminalNumber\": 0,\r\n \"OriginalTransactionNumber\": 0,\r\n \"OriginalCashierNumber\": 0\r\n };\r\n data['Return'] = {...data['Return'], ...obj};\r\n this.rjObject['ProductReturn'].push(data);\r\n this.getModifierItem(element.lineDiscount, element.itemLineId);\r\n })\r\n } else if (this.transactionDocument.type === TRANSACTION_TYPE.SALE_EXCHANGE) {\r\n this.rjObject['ProductReturn'] = [];\r\n this.rjObject['ProductSale'] = [];\r\n this.rjObject['ModifierItem'] = [];\r\n \r\n let transactionDoc: any = new TransactionDocumentBuilder().basket(this.transactionDocument.currentTransactionDetails).build();\r\n transactionDoc.basket.products.forEach((element: any) => {\r\n if (element.refundedQuantity > 0) {\r\n let returnProduct = this.returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null),(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n let obj = {\r\n \"OriginalReceiptSupplied\": 0,\r\n \"OriginalBranchID\": 0,\r\n \"OriginalTerminalNumber\": 0,\r\n \"OriginalTransactionNumber\": 0,\r\n \"OriginalCashierNumber\": 0\r\n };\r\n returnProduct['Return'] = {...returnProduct['Return'], ...obj};\r\n this.rjObject['ProductReturn'].push(returnProduct);\r\n } else {\r\n let addProduct = this.addProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null) ,(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n this.rjObject['ProductSale'].push(addProduct);\r\n }\r\n this.getModifierItem(element.lineDiscount, element.itemLineId);\r\n })\r\n\r\n }\r\n return this;\r\n }\r\n\r\n getBasketDiscount() {\r\n if (!this.transactionDocument.basket.transactionDiscount) return this;\r\n this.rjObject['BasketDiscount'] = [];\r\n this.transactionDocument.basket.transactionDiscount.forEach((element: any) => {\r\n let obj: any = {}\r\n obj['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['DeviceID']=this.deviceId;\r\n obj['DateTimeCreated']=this.updatedAt;\r\n obj['NetValue'] = this.convertToString(element.discountAmount * -1);\r\n obj['EffectiveNetValue'] =this.convertToString( element.discountAmount * -1);\r\n obj['Description'] = element.reasonDisplayText;\r\n obj['UserID'] = this.transactionDocument.userName;\r\n obj['ReasonCodeID'] = element.reasonCode;\r\n obj['DiscountType'] = this.convertToString(element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase() ? 0 : 1); \r\n obj['RoundingRule'] = this.convertToString(2);\r\n obj['ModifiedLineNumber'] = element.itemLineIds; \r\n obj['LineNumber'] = this.convertToString(this.generateLineNumber()); \r\n obj['DiscountedValue'] = this.transactionDocument.basketSummary.basketTotal + this.transactionDocument.basketSummary.discountTotal;\r\n if(element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase()){\r\n obj['DiscountPercentage'] = this.convertToString((element.discountAmount / this.transactionDocument.basketSummary.basketTotal).toFixed(1))\r\n }\r\n if(this.transactionDocument.type === 'REFUND'){\r\n obj['NetValue'] = this.convertToString(element.discountAmount < 0 ? -element.discountAmount : element.discountAmount);\r\n obj['EffectiveNetValue'] =this.convertToString( element.discountAmount < 0 ? -element.discountAmount : element.discountAmount);\r\n }\r\n\r\n this.rjObject['BasketDiscount'].push(obj);\r\n });\r\n return this;\r\n }\r\n\r\n getModifierItem(data: any, lineNo: any) {\r\n if (data && lineNo) {\r\n let obj: any = {};\r\n obj.XMLSchemaVersion = 1;\r\n obj.LineNumber = this.generateLineNumber();\r\n obj.NetValue = 0;\r\n obj.EffectiveNetValue = 0;\r\n obj.Description = data.percentageDiscountReasonName ? data.percentageDiscountReasonName : data.priceOverrideReasonName;\r\n obj.DeviceID = this.deviceId;\r\n obj.UserID = this.transactionDocument.userName;\r\n obj.DateTimeCreated = this.updatedAt;\r\n obj.AuthorisingUserID = this.transactionDocument.userName;\r\n obj.ReasonCodeID = data.percentageDiscountReasonCode ? data.percentageDiscountReasonCode : data.priceOverrideReasonCode;\r\n obj.ModifiedLineNumber = lineNo;\r\n obj.ModifiedIndex = 1;\r\n\r\n this.rjObject['ModifierItem'].push(obj);\r\n }\r\n }\r\n\r\n getTrailerInfo() {\r\n this.rjObject['Trailer'] = {};\r\n this.rjObject.Trailer.DateTimeCompleted = this.updatedAt;\r\n this.rjObject.Trailer.CompletedBy = {};\r\n this.rjObject.Trailer.CompletedBy.DeviceID = this.deviceId;\r\n this.rjObject.Trailer.CompletedBy.CashierID = this.cashierId;\r\n this.rjObject.Trailer.CompletedBy.StoreID = this.transactionDocument.storeId;\r\n this.rjObject.Trailer.CompletedBy.BranchID = this.branchId;\r\n this.rjObject.Trailer.CompletedBy.TerminalNumber = this.terminalNumber;\r\n this.rjObject.Trailer.CompletedBy.TransactionNumber = this.transactionNumber;\r\n this.rjObject.Trailer.Total = this.convertToString(this.transactionDocument.basketSummary.basketTotal * 100);\r\n this.rjObject.Trailer.ItemCount = this.itemCount; //gives total count for product\r\n this.rjObject.Trailer.ItemQuantity = this.convertToString(this.transactionDocument.basketSummary.totalItems);\r\n this.rjObject.Trailer.NetItemQuantity = this.convertToString(this.transactionDocument.basketSummary.totalItems);\r\n this.rjObject.Trailer.TaxTotal = this.convertToString(this.removeDecimal(this.transactionDocument.basketSummary.VATTotal));\r\n this.rjObject.Trailer.SequenceDeviceID = this.deviceId;\r\n this.rjObject.Trailer.SequenceNumber = 'snsn' //static for now\r\n\r\n this.rjObject['Trailer']['TaxItem'] = [];\r\n this.transactionDocument.basket.taxBreakdown.taxLines.forEach((element: any) => {\r\n let obj: any = {};\r\n\r\n obj['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['TaxRate'] = this.convertToString(element.VATCode);\r\n obj['TaxableTotal'] = this.convertToString(this.removeDecimal(element.taxableAmount));\r\n obj['TaxTotal'] = this.convertToString(this.removeDecimal(this.removeDecimal(element.taxLineTotal)));\r\n obj['TaxDescription'] = this.convertToString(element.VATCode);\r\n obj['TaxIncluded'] = '1';\r\n obj['TaxPercentage'] = this.addDecimal(element.VAT.toFixed(2)).toFixed(2);\r\n\r\n this.rjObject['Trailer']['TaxItem'].push(obj)\r\n });\r\n if (this.transactionDocument.basket.linePromotion.length > 0 || this.transactionDocument.basket.linePromotion.length > 0) {\r\n this.rjObject['Trailer']['PromotionItem'] = [];\r\n if (this.transactionDocument.basket.linePromotion.length > 0) {\r\n this.transactionDocument.basket.linePromotion.forEach((element: any) => {\r\n let obj: any = {};\r\n\r\n obj['PromotionID'] = element.promotionId;\r\n obj['PromotionSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;\r\n obj['PromotionQuantity'] = \"1\";\r\n obj['PromotionDescription'] = element.displayText;\r\n obj['PromotionHit'] = {}\r\n obj['PromotionHit']['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['PromotionHit']['HitNumber'] = \"1\";\r\n obj['PromotionHit']['HitQuantity'] = \"1\";\r\n obj['PromotionHit']['HitSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;\r\n obj['PromotionHit']['PromotionTrigger'] = {};\r\n let product = this.transactionDocument.basket.products.find((item: any) => item.itemLineId == element.itemLineId);\r\n obj['PromotionHit']['PromotionTrigger']['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['PromotionHit']['PromotionTrigger']['ProductID'] = product.SKU;\r\n obj['PromotionHit']['PromotionTrigger']['UnitValue'] = this.convertToString(element.promotionLinePrice / product.quantity);\r\n obj['PromotionHit']['PromotionTrigger']['LineNumber'] = this.getNumber(product.SKU);\r\n obj['PromotionHit']['PromotionTrigger']['Quantity'] = this.convertToString(product.quantity.toFixed(1));\r\n obj['PromotionHit']['PromotionTrigger']['TaxCode'] = this.transactionDocument.basket.taxBreakdown.taxLines.find((item: any) => item.itemLineId == element.itemLineId).VATCode;\r\n this.rjObject['Trailer']['PromotionItem'].push(obj);\r\n });\r\n }\r\n\r\n if (this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n\r\n this.transactionDocument.basket.transactionPromotion.forEach((element: any) => {\r\n let obj: any = {};\r\n obj['PromotionID'] = element.promotionId;\r\n obj['PromotionSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;\r\n obj['PromotionQuantity'] = \"1\";\r\n obj['PromotionDescription'] = element.displayText;\r\n obj['PromotionHit'] = {}\r\n obj['PromotionHit']['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['PromotionHit']['HitNumber'] = \"1\";\r\n obj['PromotionHit']['HitQuantity'] = \"1\";\r\n obj['PromotionHit']['HitSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;\r\n obj['PromotionHit']['PromotionTrigger'] = [];\r\n this.transactionDocument.basket.products.forEach((product: any) => {\r\n let promotionTrigger = {};\r\n element.itemLineIds.forEach((itemLineId: any) => {\r\n if (JSON.stringify(itemLineId) === product.itemLineId) {\r\n promotionTrigger['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n promotionTrigger['ProductID'] = product.SKU;\r\n promotionTrigger['UnitValue'] = this.convertToString(element.promotionLinePrice / product.quantity);\r\n promotionTrigger['LineNumber'] = this.getNumber(product.SKU);\r\n promotionTrigger['Quantity'] = this.convertToString(product.quantity);\r\n promotionTrigger['TaxCode'] = this.transactionDocument.basket.taxBreakdown.taxLines.find((item: any) => item.itemLineId == product.itemLineId).VATCode;\r\n obj['PromotionHit']['PromotionTrigger'].push(promotionTrigger);\r\n }\r\n });\r\n });\r\n this.rjObject['Trailer']['PromotionItem'].push(obj);\r\n });\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n getTenderInfo() {\r\n if (this.transactionDocument.paymentDetails && this.transactionDocument.paymentDetails.length > 0) {\r\n this.transactionDocument.paymentDetails.forEach((element: any) => {\r\n if(element.externalTenderKey){\r\n this.rjObject[element.externalTenderKey] = [];\r\n if (element.paymentType.toUpperCase() === 'GIFT CARD') {\r\n let obj = {\r\n XMLSchemaVersion: this.xmlSchemaVersion,\r\n LineNumber: this.generateLineNumber(),\r\n NetValue: this.convertToString(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n EffectiveNetValue: this.convertToString(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n Description: this.getDescription(element),\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.updatedAt,\r\n TenderType: element.externalTenderType ? element.externalTenderType : '',\r\n TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',\r\n TenderAmount: this.convertToString(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n CurrencyID: this.transactionDocument.baseCurrency,\r\n CurrencyDescription: this.transactionDocument.baseCurrency,\r\n GiftVoucherSalesAllowed: '',//todo\r\n AllowRechargeableVoucherSales: '',//todo\r\n GiftVoucherID: ''\r\n }\r\n this.rjObject[element.externalTenderKey].push(obj)\r\n }\r\n else {\r\n let obj1 = {\r\n XMLSchemaVersion: \"1\",\r\n LineNumber: this.generateLineNumber(),//todo\r\n NetValue: this.convertToString(-1 * this.removeDecimal(Math.round(element.amount))),\r\n EffectiveNetValue: this.convertToString(-1 * this.removeDecimal(Math.round(element.amount))),\r\n Description: this.getDescription(element),\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.updatedAt,\r\n TenderType: element.externalTenderType ? element.externalTenderType : '',\r\n TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',\r\n TenderAmount: this.convertToString(-1 * this.removeDecimal(Math.round(element.amount))),\r\n CurrencyID: this.transactionDocument.baseCurrency,\r\n CurrencyDescription: this.transactionDocument.baseCurrency,\r\n IncludeInTransactionTotalCheck: \"1\",\r\n AllowRechargeableVoucherSales: \"1\",\r\n OpenDrawerAtEnd: \"1\"\r\n }\r\n this.rjObject[element.externalTenderKey].push(obj1)\r\n }\r\n } else{\r\n this.rjObject['CashTender'] = [];\r\n if (element.paymentType.toUpperCase() === 'GIFT CARD') {\r\n let obj = {\r\n XMLSchemaVersion: this.xmlSchemaVersion,\r\n LineNumber: this.generateLineNumber(),\r\n NetValue: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n EffectiveNetValue: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n Description: this.getDescription(element),\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.updatedAt,\r\n TenderType: element.externalTenderType ? element.externalTenderType : '',\r\n TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',\r\n TenderAmount: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n CurrencyID: this.transactionDocument.baseCurrency,\r\n CurrencyDescription: this.transactionDocument.baseCurrency,\r\n GiftVoucherSalesAllowed: '',//todo\r\n AllowRechargeableVoucherSales: '',//todo\r\n GiftVoucherID: ''\r\n }\r\n this.rjObject['CashTender'].push(obj)\r\n }\r\n else {\r\n let obj1 = {\r\n XMLSchemaVersion: \"1\",\r\n LineNumber: this.generateLineNumber(),\r\n NetValue: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n EffectiveNetValue: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n Description: this.getDescription(element),\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.updatedAt,\r\n TenderType: element.externalTenderType ? element.externalTenderType : '',\r\n TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',\r\n TenderAmount: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n CurrencyID: this.transactionDocument.baseCurrency,\r\n CurrencyDescription: this.transactionDocument.baseCurrency,\r\n IncludeInTransactionTotalCheck: \"1\",\r\n AllowRechargeableVoucherSales: \"1\",\r\n OpenDrawerAtEnd: \"1\"\r\n }\r\n this.rjObject['CashTender'].push(obj1)\r\n }\r\n }\r\n });\r\n }\r\n return this;\r\n }\r\n\r\n getNumber(productId) {\r\n let lineNumber; \r\n for (let i = 0; i < this.rjObject['ProductSale'].length; i++) {\r\n const element = this.rjObject['ProductSale'][i];\r\n if(JSON.stringify(productId) === JSON.stringify(element.ProductID)){\r\n lineNumber = element.LineNumber;\r\n break;\r\n }\r\n }\r\n return lineNumber;\r\n }\r\n\r\n setLineNumberForProducts() {\r\n let itemLineIdArray = [];\r\n itemLineIdArray = this.transactionDocument.basket.products.map((product: any) => {\r\n return parseInt(product.itemLineId);\r\n })\r\n this.largestNumber = itemLineIdArray.reduce((a: any, b: any) => Math.max(a, b));\r\n }\r\n\r\n generateLineNumber() {\r\n this.largestNumber += 1;\r\n this.itemCount += 1;\r\n return this.largestNumber;\r\n }\r\n\r\n initilizeItemCount() {\r\n this.itemCount = this.transactionDocument.basket.products.length;\r\n }\r\n\r\n build() {\r\n return this.rjObject;\r\n }\r\n\r\n getDescription(element: any) {\r\n if (element.paymentType.toUpperCase() === 'CARD') {\r\n return element.cardType\r\n }\r\n else {\r\n return element.paymentType;\r\n }\r\n }\r\n\r\n getMMGROUPID(attributes) {\r\n if (attributes && attributes.length > 0) {\r\n let filterValue = attributes.filter((attribute) => attribute.name === \"MMGROUPID\");\r\n if(filterValue && filterValue.length > 0){\r\n return filterValue[0].value;\r\n }\r\n }\r\n }\r\n\r\n setDeviceInfo(id: any) {\r\n this.deviceId = id\r\n return this\r\n }\r\n\r\n removeDecimal(value: number) {\r\n return value * 100;\r\n }\r\n\r\n addDecimal(value: number) {\r\n return value /100;\r\n }\r\n\r\n setTransactionNumber(value: any) {\r\n this.transactionNumber = value;\r\n return this\r\n }\r\n\r\n setManifestVersion(value: any) {\r\n this.manifestVersion = value;\r\n return this\r\n }\r\n\r\n setDatabaseSchemaVersion(value: any) {\r\n this.databaseSchemaVersion = value;\r\n return this\r\n }\r\n\r\n setBasketType(value: any) {\r\n this.basketType = value;\r\n return this\r\n }\r\n\r\n setTradingRegionID(value: any) {\r\n this.tradingRegionId = value\r\n return this\r\n }\r\n\r\n setCompanyID(value: any) {\r\n this.companyId = value\r\n return this\r\n }\r\n\r\n setTaxMethodID(value: any) {\r\n this.taxMethodId = value\r\n return this\r\n }\r\n\r\n setMajorVersion(value: any) {\r\n this.majorVersion = value\r\n return this\r\n }\r\n\r\n setMinorVersion(value: any) {\r\n this.minorVersion = value\r\n return this\r\n }\r\n\r\n setXMLSchemaVersion(value: any) {\r\n this.xmlSchemaVersion = value\r\n return this\r\n }\r\n\r\n setExternalState(value: any) {\r\n this.externalState = value\r\n return this\r\n }\r\n\r\n setCashierID() {\r\n this.cashierId = (this.transactionDocument && this.transactionDocument.userName) ? this.transactionDocument.userName : '';\r\n return this\r\n }\r\n\r\n setTerminalNumber(value: any) {\r\n this.terminalNumber = value;\r\n return this;\r\n }\r\n\r\n setBasketLanguageID(value: any) {\r\n this.basketLanguageId = value;\r\n return this;\r\n }\r\n setBasketCountryID(value: any) {\r\n this.basketCountryId = value;\r\n return this;\r\n }\r\n\r\n setBasketCurrencyID(value: any) {\r\n this.basketCurrencyId = value;\r\n return this;\r\n }\r\n\r\n setBranchID(value: any) {\r\n this.branchId = value;\r\n return this;\r\n }\r\n\r\n setSalesPersonName(value: any) {\r\n this.salesPersonName = value;\r\n return this;\r\n }\r\n\r\n generateId(date: any) {\r\n let newDateTime = date.replace(/[^0-9]/g, '')\r\n let id = (this.deviceId + '|' + newDateTime + '|' + this.transactionNumber).toString();\r\n return id;\r\n } \r\n\r\n generateTimezoneoffset(date: any) {\r\n let x = date ? date : '';\r\n return new Date(x).getTimezoneOffset();\r\n }\r\n\r\n generateKeyword() {\r\n let x = (this.companyId + '|' + this.transactionDocument.storeId + '|' + this.terminalNumber + '|' + this.transactionNumber).toString();\r\n return x;\r\n }\r\n\r\n getState() {\r\n if (this.transactionDocument.operationStatus === 'PAY_SUCCESS') {\r\n return 'Completed';\r\n }\r\n else {\r\n return 'Cancelled';\r\n }\r\n }\r\n\r\n returnProduct(element: any, lineDiscount: LineDiscount , transactionDiscount: TransactionDiscount) {\r\n let obj: any = {};\r\n let taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((item: any) => item.itemLineId == element['itemLineId']);\r\n obj['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['LineNumber'] = element['itemLineId'];\r\n obj['NetValue'] = this.removeDecimal(element['refundedTotal']);\r\n obj['EffectiveNetValue'] = this.removeDecimal(element['refundedTotal']);\r\n obj['Description'] = element['description'];\r\n obj['DeviceID'] = this.transactionDocument['terminalId'];\r\n obj['UserID'] = this.transactionDocument.userName;\r\n obj['DateTimeCreated'] = this.createdAt;\r\n obj['ExtendedValue'] = this.removeDecimal(element['totalLinePrice']*-1);\r\n obj['UnitPrice'] = this.removeDecimal(element['price']);\r\n obj['Quantity'] = this.getQuantity(element);\r\n obj['OriginalTaxAmountSet'] = 1;\r\n obj['ProductID'] = element['SKU'];\r\n obj['HandKeyed'] = 1;\r\n obj['LongDescription'] = element['description'];\r\n obj['Return'] = {};\r\n obj['Return']['ReturnReasonID'] = element['refundedReason'];\r\n obj['Return']['ReturnDescription'] = element['refundedReasonDescription'];\r\n obj['Return']['ReturnToStock'] = this.getQuantity(element);\r\n obj['TaxCode'] = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((item: any) => item.itemLineId == element['itemLineId']).VATCode;\r\n\r\n obj['DisplayTaxCode'] = ''; // todo\r\n obj['ProductAttributes'] = ''; //todo - not required\r\n obj['Perishable'] = this.getMMGROUPID(element.attributes);\r\n //obj['MMGroupID'] = this.getCaregories(element);\r\n obj['MMGroupID'] = this.getMMGROUPID(element.attributes);\r\n obj['CustomerDetails'] = \"\"; // todo - blank\r\n obj['TotalPromotionSaving'] = element['promotionAmount'] || -1; // TODO\r\n obj['OriginalTaxAmount'] = this.convertToString((this.removeDecimal(this.getOriginalTax(element,taxTotal.VAT) * -1)).toFixed(2));\r\n obj['taxAmount'] = this.removeDecimal(taxTotal.taxLineTotal < 0 ?(taxTotal.taxLineTotal) : (-taxTotal.taxLineTotal));\r\n\r\n if (lineDiscount) {\r\n if (lineDiscount.percentageDiscountReasonName && lineDiscount.percentageDiscountReasonCode) {\r\n // line discount\r\n obj['Discount'] = {};\r\n obj['Discount'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;\r\n obj['Discount'].ModifierDateTime = obj.DateTimeCreated;\r\n obj['Discount'].ModifierReasonID = lineDiscount.percentageDiscountReasonCode;\r\n obj['Discount'].ModifierDescription = lineDiscount.percentageDiscountReasonName;\r\n obj['Discount'].AuthorisingUserID = this.transactionDocument.userName;\r\n obj['Discount'].DiscountType = lineDiscount.discountType;\r\n obj['Discount'].XMLSchemaVersion = 1;\r\n obj['Discount'].OriginalPrice = this.removeDecimal(lineDiscount.discountAmount + (lineDiscount.discountedLinePrice || 0));\r\n obj['Discount'].DiscountedValue = this.removeDecimal(lineDiscount.unitPrice);\r\n obj['Discount'].DiscountPercentage = lineDiscount.percentageDiscountValue;\r\n obj['Discount'].RoundingRule = 2;\r\n }\r\n\r\n if (lineDiscount.priceOverrideReasonCode && lineDiscount.priceOverrideReasonName) {\r\n //price override\r\n obj['PriceOverride'] = {};\r\n obj['PriceOverride'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;\r\n obj['PriceOverride'].ModifierDateTime = obj.DateTimeCreated;\r\n obj['PriceOverride'].ModifierReasonID = lineDiscount.priceOverrideReasonCode;\r\n obj['PriceOverride'].ModifierReasonDescription = lineDiscount.priceOverrideReasonName;\r\n obj['PriceOverride'].AuthorisingUserID = this.transactionDocument.userName;\r\n obj['PriceOverride'].XMLSchemaVersion = 1;\r\n obj['PriceOverride'].NewPrice = this.removeDecimal(lineDiscount.unitPrice);\r\n obj['PriceOverride'].OriginalPrice = this.removeDecimal(lineDiscount.discountedLinePrice || 0 + lineDiscount.discountAmount);\r\n }\r\n\r\n //update the product price\r\n obj.NetValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;\r\n obj.EffectiveNetValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;\r\n obj.ExtendedValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;\r\n obj.UnitPrice = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;\r\n }\r\n\r\n if(transactionDiscount) {\r\n obj['BasketDiscountModifier'] = [];\r\n this.transactionDocument.basket.transactionDiscount.forEach((e: any) => { \r\n let discountObj: any ={}\r\n e.itemLineIds.forEach((x: any) => {\r\n if (x == element.itemLineId) { \r\n var discountAmount = this.convertToString(e.discountAmount * -1); \r\n discountObj.BasketDiscountLineNumber = this.getLineNumber(e,discountAmount);\r\n discountObj.XMLSchemaVersion = this.xmlSchemaVersion;\r\n discountObj.DiscountedValue = this.getDiscountedValue(element.totalLinePrice, e.discountAmount);\r\n obj['BasketDiscountModifier'].push(discountObj);\r\n } \r\n }); \r\n });\r\n var totaltransactionDiscount = 0;\r\n obj['BasketDiscountModifier'].forEach((value:any)=>{\r\n totaltransactionDiscount = totaltransactionDiscount + value.DiscountedValue;\r\n });\r\n //update the product price\r\n obj['EffectiveNetValue'] = obj.EffectiveNetValue + totaltransactionDiscount;\r\n }\r\n\r\n if (this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n obj['PromotionSaving'] = [];\r\n this.transactionDocument.basket.transactionPromotion.forEach((transactionPromo: any) => {\r\n let promotionObj: any = {};\r\n transactionPromo.itemLineIds.forEach((itemLineId: any) => {\r\n if (itemLineId == element.itemLineId) {\r\n promotionObj.ModifierValue = transactionPromo.promotionAmount;\r\n promotionObj.ModifierDateTime = this.transactionDocument.createdAt;\r\n promotionObj.ModifierDescription = transactionPromo.displayText;\r\n promotionObj.XMLSchemaVersion = this.xmlSchemaVersion;\r\n promotionObj.PromotionID = transactionPromo.promotionId;\r\n promotionObj.PromotionDescription = transactionPromo.displayText;\r\n promotionObj.HitNumber = '1';\r\n promotionObj.PromotionHitProductQuantity = this.getQuantity(element);\r\n promotionObj.PromotionHitQuantity = this.getQuantity(element) * -1;\r\n obj['PromotionSaving'].push(promotionObj);\r\n }\r\n });\r\n });\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n addProduct(element: TProduct, lineDiscount: LineDiscount, transactionDiscount: TransactionDiscount) {\r\n let taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((item: any) => item.itemLineId == element['itemLineId']);\r\n let obj: any = {\r\n XMLSchemaVersion: this.xmlSchemaVersion,\r\n LineNumber: element.itemLineId,\r\n NetValue: this.removeDecimal(element.totalLinePrice),\r\n EffectiveNetValue: this.removeDecimal(element.totalLinePrice),\r\n Description: element.description,\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.createdAt,\r\n ExtendedValue: this.removeDecimal(element.price),\r\n UnitPrice: this.removeDecimal(element.price),\r\n //MMGroupID: this.getCaregories(element),\r\n Quantity: element.quantity,\r\n SalespersonID: this.transactionDocument.userName,\r\n SalespersonName: this.salesPersonName,\r\n TaxCode: this.transactionDocument.basket['taxBreakdown']['taxLines'].find((item: any) => item.itemLineId == element['itemLineId']).VATCode,\r\n TaxModifiable: \"1\", //todo\r\n OriginalTaxAmount : this.convertToString((this.removeDecimal(this.getOriginalTax(element,taxTotal.VAT)).toFixed(2))),\r\n TaxAmount : this.convertToString(this.removeDecimal(taxTotal.taxLineTotal)),\r\n OriginalTaxAmountSet: \"1\",//todo\r\n ProductID: element.SKU,\r\n HandKeyed: \"1\",//todo\r\n CustomerDetails: \"\",\r\n Perishable: this.getMMGROUPID(element.attributes),\r\n MMGroupID: this.getMMGROUPID(element.attributes)\r\n }\r\n if (lineDiscount) {\r\n if (lineDiscount.percentageDiscountReasonName && lineDiscount.percentageDiscountReasonCode) {\r\n // line discount\r\n obj['Discount'] = {};\r\n obj['Discount'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;\r\n obj['Discount'].ModifierDateTime = obj.DateTimeCreated;\r\n obj['Discount'].ModifierReasonID = lineDiscount.percentageDiscountReasonCode;\r\n obj['Discount'].ModifierDescription = lineDiscount.percentageDiscountReasonName;\r\n obj['Discount'].AuthorisingUserID = this.transactionDocument.userName;\r\n obj['Discount'].DiscountType = lineDiscount.discountType;\r\n obj['Discount'].XMLSchemaVersion = 1;\r\n obj['Discount'].OriginalPrice = this.removeDecimal(lineDiscount.discountAmount + (lineDiscount.discountedLinePrice || 0));\r\n obj['Discount'].DiscountedValue = this.removeDecimal(lineDiscount.unitPrice);\r\n obj['Discount'].DiscountPercentage = lineDiscount.percentageDiscountValue;\r\n obj['Discount'].RoundingRule = 2;\r\n }\r\n\r\n if (lineDiscount.priceOverrideReasonCode && lineDiscount.priceOverrideReasonName) {\r\n //price override\r\n obj['PriceOverride'] = {};\r\n obj['PriceOverride'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;\r\n obj['PriceOverride'].ModifierDateTime = obj.DateTimeCreated;\r\n obj['PriceOverride'].ModifierReasonID = lineDiscount.priceOverrideReasonCode;\r\n obj['PriceOverride'].ModifierReasonDescription = lineDiscount.priceOverrideReasonName;\r\n obj['PriceOverride'].AuthorisingUserID = this.transactionDocument.userName;\r\n obj['PriceOverride'].XMLSchemaVersion = this.xmlSchemaVersion;\r\n obj['PriceOverride'].NewPrice = this.removeDecimal(lineDiscount.unitPrice);\r\n obj['PriceOverride'].OriginalPrice = this.removeDecimal(lineDiscount.discountedLinePrice || 0 + lineDiscount.discountAmount);\r\n }\r\n\r\n //update the product price\r\n obj['NetValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);\r\n obj['EffectiveNetValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);\r\n obj['ExtendedValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);\r\n obj['UnitPrice'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);\r\n }\r\n\r\n if(transactionDiscount) {\r\n obj['BasketDiscountModifier'] = [];\r\n this.transactionDocument.basket.transactionDiscount.forEach((e:any) => { \r\n let discountObj: any ={};\r\n e.itemLineIds.forEach((itemLineId: any) => {\r\n if (itemLineId == element.itemLineId) { \r\n let discountAmount = this.convertToString(e.discountAmount * -1); \r\n discountObj.XMLSchemaVersion = this.xmlSchemaVersion;\r\n discountObj.DiscountedValue = -(this.getDiscountedValue(element.totalLinePrice, e.discountAmount));\r\n discountObj.BasketDiscountLineNumber = this.getLineNumber(e,discountAmount) ;\r\n obj['BasketDiscountModifier'].push(discountObj); \r\n } \r\n }); \r\n });\r\n let totaltransactionDiscount = 0;\r\n obj['BasketDiscountModifier'].forEach((value:any)=>{\r\n totaltransactionDiscount = totaltransactionDiscount + value.DiscountedValue;\r\n });\r\n //update the product price\r\n obj['EffectiveNetValue'] = obj.EffectiveNetValue + totaltransactionDiscount; \r\n }\r\n \r\n if (this.transactionDocument.basket.transactionPromotion.length > 0 || this.transactionDocument.basket.linePromotion.length > 0) {\r\n obj['DistributedPromotionSaving'] = [];\r\n if (this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n this.transactionDocument.basket.transactionPromotion.forEach((e: any) => {\r\n let promotionObj: any = {};\r\n e.itemLineIds.forEach((itemLineId: any) => {\r\n if (itemLineId == element.itemLineId) {\r\n promotionObj.PromotionID = e.promotionId;\r\n promotionObj.Hit = '1';\r\n promotionObj.Saving = this.getSaving(element.totalLinePrice, e.promotionAmount);\r\n promotionObj.ISaving = this.getSaving(element.totalLinePrice, e.promotionAmount);\r\n obj['DistributedPromotionSaving'].push(promotionObj);\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (this.transactionDocument.basket.linePromotion.length > 0) {\r\n this.transactionDocument.basket.linePromotion.forEach((linePromotion: any) => {\r\n let promotionObj: any = {};\r\n if (element.itemLineId == linePromotion.itemLineId) {\r\n promotionObj.PromotionID = linePromotion.promotionId;\r\n promotionObj.Hit = \"1\";\r\n promotionObj.Saving = linePromotion.promotionLinePrice;\r\n promotionObj.ISaving = linePromotion.promotionLinePrice;\r\n obj['DistributedPromotionSaving'].push(promotionObj);\r\n }\r\n });\r\n }\r\n let transactionPromotion = 0;\r\n obj['DistributedPromotionSaving'].forEach((value: any) => {\r\n transactionPromotion = transactionPromotion + value.Saving;\r\n });\r\n obj['EffectiveNetValue'] = obj.EffectiveNetValue + transactionPromotion;\r\n }\r\n return obj;\r\n }\r\n\r\n getSaving(price,promotionAmount): any {\r\n let Saving = (price*promotionAmount)/this.transactionDocument.basketSummary.saleTotal;\r\n return Saving;\r\n }\r\n\r\n getLineNumber(value: any,discountAmount:string ){\r\n let lineNumber;\r\n for (let i = 0; i < this.rjObject['BasketDiscount'].length; i++) {\r\n const element = this.rjObject['BasketDiscount'][i];\r\n if( value.reasonCode === element.ReasonCodeID && discountAmount === element.NetValue){\r\n lineNumber = element.LineNumber;\r\n break; \r\n } \r\n }\r\n return lineNumber; \r\n }\r\n\r\n\r\n getDiscountedValue(price:any ,discountAmount:any ) {\r\n let DiscountedValue =((price * discountAmount)/this.transactionDocument.basketSummary.saleTotal)*100 ;\r\n return DiscountedValue;\r\n }\r\n\r\n getOriginalTax(element: TProduct, VAT) {\r\n let pricebeforetax = (element.price * 100)/(100 + VAT )\r\n let originaltax= element.price - pricebeforetax\r\n return originaltax;\r\n }\r\n\r\n convertToString(value: any) {\r\n try {\r\n value = JSON.stringify(value);\r\n return value;\r\n }\r\n catch (e) {\r\n console.log(value, 'can not be converted in string', e);\r\n }\r\n }\r\n\r\n generateDynamicStockLookUp() {\r\n let x = '0';\r\n this.transactionDocument.basket.products.forEach((element: any) => {\r\n if (element.deliveryMethod === '1' || element.deliveryMethod === '2') {\r\n x = '1';\r\n }\r\n });\r\n return x;\r\n }\r\n\r\n // getAttributes(){\r\n // let name: string | any[] = []\r\n // this.transactionDocument.basket.products.forEach((element: any) => {\r\n // if (element && element.attributes && element.attributes.length > 0) {\r\n // name = element.attributes.filter((x: any) => x.name.toUpperCase() === element.name.toUpperCase());\r\n // }\r\n // });\r\n // if (name.length > 0) {\r\n // return name[0].value\r\n // }\r\n // else{\r\n // return \"\"\r\n // }\r\n // }\r\n\r\n // getCaregories(element) {\r\n // let MMGroupId = \" \";\r\n // if (element.categories && element.categories.length > 0) {\r\n // let categories = element.categories.filter((x) => x.parentId != '');\r\n // let value = categories.filter((x) => x.id != x.parentId);\r\n // MMGroupId = value[0].name;\r\n // }\r\n // return MMGroupId;\r\n // }\r\n\r\n getDate(date:string){\r\n let offset = this.generateTimezoneoffset(date) * -1;\r\n let offsetHours = Math.abs(Math.floor(offset / 60)); \r\n\t let offsetMinutes = Math.abs(offset) - offsetHours * 60;\r\n\r\n let offsetSign = '+';\r\n if (offset < 0) {\r\n offsetSign = '-';\r\n }\r\n\r\n let newdate = date.substring(0,19);\r\n const x = (newdate+ offsetSign +String(offsetHours).padStart(2, '0')+':'+String(offsetMinutes).padStart(2, '0')).toString();\r\n return x; \r\n }\r\n \r\n getTransactionPromotion(transactionPromotion){\r\n if(transactionPromotion && transactionPromotion.length > 0){\r\n this.rjObject['PromoVoucherItem'] = {};\r\n this.rjObject['PromoVoucherItem']['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n this.rjObject['PromoVoucherItem']['LineNumber'] = this.generateLineNumber();\r\n this.rjObject['PromoVoucherItem']['NetValue'] = this.removeDecimal(transactionPromotion[0].promotionLinePrice) * -1;\r\n this.rjObject['PromoVoucherItem']['EffectiveNetValue'] = this.removeDecimal(transactionPromotion[0].promotionLinePrice) * -1;\r\n this.rjObject['PromoVoucherItem']['Description'] = transactionPromotion[0].promotionInfo;\r\n this.rjObject['PromoVoucherItem']['DeviceID'] = this.deviceId;\r\n this.rjObject['PromoVoucherItem']['UserID'] = this.transactionDocument.userName;\r\n this.rjObject['PromoVoucherItem']['DateTimeCreated'] = this.createdAt;\r\n this.rjObject['PromoVoucherItem']['ProductId'] = \"\"; //todo\r\n this.rjObject['PromoVoucherItem']['SerialNumber'] = \"\" ; //todo\r\n this.rjObject['PromoVoucherItem']['MMGroupId'] = \"\";\r\n }\r\n }\r\n \r\n getQuantity(element: any) {\r\n let quantity\r\n if(this.transactionDocument.unreferencedRefund){\r\n quantity = element['quantity'] < 0 ? element['quantity'] : (-element['quantity']);\r\n }\r\n else{\r\n quantity = element['refundedQuantity'] < 0 ? element['refundedQuantity'] : (-element['refundedQuantity']);\r\n }\r\n return quantity;\r\n }\r\n}\r\n","import { TransactionDocument } from \"./mapper-library.model\";\r\n\r\nexport class WebReturnMapperBuilderClass {\r\n\r\n private document: any;\r\n private webReturnObject: TransactionDocument = {\r\n id: '',\r\n orgCode: \"\",\r\n storeId: \"\",\r\n storeNodeId: \"\",\r\n storeNodeStructure: \"\",\r\n deviceId: \"\",\r\n terminalId: \"\",\r\n initiatingModule: \"\",\r\n export: false,\r\n basket: {},\r\n basketSummary: {},\r\n baseCurrency: \"\",\r\n customer: {\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n postCode: '',\r\n id: '',\r\n billingAddress: {},\r\n shippingAddress: {},\r\n\r\n }\r\n }\r\n\r\n constructor(document) {\r\n if (document) {\r\n this.document = document;\r\n }\r\n }\r\n\r\n WebReturnMapper() {\r\n this.webReturnObject['type'] = 'WEB_RETURNS';\r\n this.webReturnObject['datetime'] = this.getUTCDateTime(this.getText(this.document.updated_at));\r\n this.webReturnObject.baseCurrency = this.getText(this.document.base_currency_code);\r\n this.webReturnObject.storeId = this.getText(this.document.store_id);\r\n this.webReturnObject.subsidiaryId = '1';\r\n this.webReturnObject.initiatingModule = 'MAGENTO';\r\n this.webReturnObject.createdAt = this.getUTCDateTime(this.getText(this.document.created_at));\r\n this.webReturnObject.updatedAt = this.getUTCDateTime(this.getText(this.document.updated_at));\r\n this.webReturnObject.export = true;\r\n this.webReturnObject.transCompletedAt = this.getUTCDateTime(this.getText(this.document.updated_at));\r\n this.webReturnObject['externalTransactionId'] = this.getText(this.document.order_id);\r\n\r\n // customer\r\n this.webReturnObject['customer']['firstName'] = this.getText(this.document.customer_firstname) || '';\r\n this.webReturnObject['customer']['lastName'] = this.getText(this.document.customer_lastname) || '';\r\n this.webReturnObject['customer']['email'] = this.getText(this.document.customer_email) || '';\r\n this.webReturnObject['customer']['postCode'] = '';\r\n\r\n // Billing address\r\n this.webReturnObject['customer']['billingAddress']['address1'] = (this.document.billing_address && this.document.billing_address.street) ? this.getText(this.document.billing_address.street) : '';\r\n this.webReturnObject['customer']['billingAddress']['city'] = (this.document.billing_address && this.document.billing_address.city) ? this.getText(this.document.billing_address.city) : '';\r\n this.webReturnObject['customer']['billingAddress']['county'] = (this.document.billing_address && this.document.billing_address.region) ? this.getText(this.document.billing_address.region) : '';\r\n this.webReturnObject['customer']['billingAddress']['postCode'] = (this.document.billing_address && this.document.billing_address.postcode) ? this.getText(this.document.billing_address.postcode) : '';\r\n this.webReturnObject['customer']['billingAddress']['country'] = (this.document.billing_address && this.document.billing_address.country) ? this.getText(this.document.billing_address.country) : '';\r\n\r\n // Shipping address\r\n this.webReturnObject['customer']['shippingAddress']['address1'] = (this.document.shipping_address && this.document.shipping_address.street) ? this.getText(this.document.shipping_address.street) : '';\r\n this.webReturnObject['customer']['shippingAddress']['city'] = (this.document.shipping_address && this.document.shipping_address.city) ? this.getText(this.document.shipping_address.city) : '';\r\n this.webReturnObject['customer']['shippingAddress']['county'] = (this.document.shipping_address && this.document.shipping_address.region) ? this.getText(this.document.shipping_address.region) : '';\r\n this.webReturnObject['customer']['shippingAddress']['postCode'] = (this.document.shipping_address && this.document.shipping_address.postcode) ? this.getText(this.document.shipping_address.postcode) : '';\r\n this.webReturnObject['customer']['shippingAddress']['country'] = (this.document.shipping_address && this.document.shipping_address.country) ? this.getText(this.document.shipping_address.country) : '';\r\n\r\n // basketSummary \r\n this.webReturnObject.basketSummary['discountTotal'] = Number(this.document.discount_amount ? this.getText(this.document.discount_amount) : 0);\r\n this.webReturnObject.basketSummary['VATTotal'] = Number(this.document.base_total_paid ? this.getText(this.document.base_total_paid) : 0);\r\n this.webReturnObject.basketSummary['saleTotal'] = Number(this.document.base_total_invoiced ? this.getText(this.document.base_total_invoiced) : 0);\r\n this.webReturnObject.basketSummary['basketTotal'] = Number(this.document.base_total_paid ? this.getText(this.document.base_total_paid) : 0);\r\n this.webReturnObject.basketSummary['totalItems'] = Number(this.document.total_qty_ordered ? this.getText(this.document.total_qty_ordered) : 0);\r\n this.webReturnObject.basketSummary['refundTotal'] = Number(this.document.base_total_refunded ? this.getText(this.document.base_total_refunded) : 0);\r\n\r\n // basket line discount\r\n this.webReturnObject.basket['lineDiscount'] = [];\r\n\r\n let lineDiscount = {\r\n itemLineId: (this.document.items && this.document.items.item && this.document.items.item.item_id) ? this.getText(this.document.items.item.item_id) : 0,\r\n discountAmount: (this.document.items && this.document.items.item && this.document.items.item.discount_amount) ? Number(this.getText(this.document.items.item.discount_amount)) : 0\r\n }\r\n this.webReturnObject.basket['lineDiscount'].push(lineDiscount);\r\n\r\n // basket transaction discount\r\n this.webReturnObject.basket['transactionDiscount'] = [];\r\n\r\n let transactionDiscount = {\r\n discountAmount: (this.document && this.document.discount_amount) ? Number(this.getText(this.document.discount_amount)) : 0\r\n }\r\n this.webReturnObject.basket['transactionDiscount'].push(transactionDiscount);\r\n\r\n // basket products \r\n this.webReturnObject.basket['products'] = [];\r\n let product : any= {};\r\n if (this.document.items && this.document.items.item && this.document.items.item) {\r\n if (this.document.items.item instanceof Array) {\r\n this.document.items.item.forEach(element => {\r\n product = {\r\n description: (element.name) ? this.getText(element.name) : '',\r\n SKU: (element.sku) ? this.getText(element.sku) : '',\r\n quantity: (element.qty_ordered) ? Number(this.getText(element.qty_ordered)) : 0,\r\n refundedQuantity: (element.qty_refunded) ? Number(this.getText(this.document.items.item.qty_refunded)) : 0,\r\n price: (element.original_price) ? Number(this.getText(element.original_price)) : 0,\r\n itemLineId: (element.item_id) ? Number(this.getText(element.item_id)) : 0,\r\n // totalLinePrice: (element.row_invoiced) ? Number(this.getText(element.row_invoiced)) : 0,\r\n totalLinePrice: (element.qty_ordered - element.qty_refunded) * element.base_original_price || 0,\r\n }\r\n if (product && product.price != 0) {\r\n this.webReturnObject.basket['products'].push(product);\r\n }\r\n });\r\n } else {\r\n product = {\r\n description: (this.document.items && this.document.items.item && this.document.items.item.name) ? this.getText(this.document.items.item.name) : '',\r\n SKU: (this.document.items && this.document.items.item && this.document.items.item.sku) ? this.getText(this.document.items.item.sku) : '',\r\n quantity: (this.document.items && this.document.items.item && this.document.items.item.qty_ordered) ? Number(this.getText(this.document.items.item.qty_ordered)) : 0,\r\n refundedQuantity: (this.document.items && this.document.items.item && this.document.items.item.qty_refunded) ? Number(this.getText(this.document.items.item.qty_refunded)) : 0,\r\n price: (this.document.items && this.document.items.item && this.document.items.item.original_price) ? Number(this.getText(this.document.items.item.original_price)) : 0,\r\n itemLineId: (this.document.items && this.document.items.item && this.document.items.item.item_id) ? Number(this.getText(this.document.items.item.item_id)) : 0,\r\n // totalLinePrice: (this.document.items && this.document.items.item && this.document.items.item.row_invoiced) ? Number(this.getText(this.document.items.item.row_invoiced)) : 0,\r\n totalLinePrice: (this.document.items.item.qty_ordered - this.document.items.item.qty_refunded) * this.document.items.item.base_original_price || 0,\r\n }\r\n if (product && product.price != 0) {\r\n this.webReturnObject.basket['products'].push(product);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n deviceId(deviceId) {\r\n this.webReturnObject.deviceId = deviceId;\r\n return this;\r\n }\r\n\r\n terminalId(terminalId) {\r\n this.webReturnObject.terminalId = terminalId;\r\n return this;\r\n }\r\n\r\n orgCode(orgCode) {\r\n this.webReturnObject.orgCode = orgCode;\r\n return this;\r\n }\r\n\r\n storeId(storeId) {\r\n this.webReturnObject.storeId = storeId;\r\n return this;\r\n }\r\n\r\n storeNodeId(storeNodeId: string) {\r\n this.webReturnObject.storeNodeId = storeNodeId;\r\n return this;\r\n }\r\n\r\n storeNodeStructure(storeNodeStructure: string) {\r\n this.webReturnObject.storeNodeStructure = storeNodeStructure;\r\n return this;\r\n }\r\n\r\n docId(docId) {\r\n this.webReturnObject.id = docId;\r\n return this;\r\n }\r\n\r\n updateUserID(userID: string) {\r\n this.webReturnObject.userId = userID;\r\n return this;\r\n }\r\n\r\n updateUserName(name) {\r\n this.webReturnObject.userName = name;\r\n return this;\r\n }\r\n\r\n build() {\r\n return this.webReturnObject;\r\n }\r\n\r\n getText(obj) {\r\n if (obj && obj.text) {\r\n return obj.text;\r\n } else {\r\n return obj;\r\n }\r\n }\r\n\r\n getUTCDateTime(date) {\r\n if (date) {\r\n return new Date(date).toISOString();\r\n }\r\n }\r\n}\r\n"],"names":["Component","NgModule","BehaviorSubject","tslib_1.__values","Injectable","CurrencyPipe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pmcretail-mapper-library.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://@pmcretail/mapper-library/lib/mapper-library.component.ts","ng://@pmcretail/mapper-library/lib/mapper-library.module.ts","ng://@pmcretail/mapper-library/lib/mapper-library.model.ts","ng://@pmcretail/mapper-library/lib/basket.service.ts","ng://@pmcretail/mapper-library/lib/number-util.service.ts","ng://@pmcretail/mapper-library/lib/TransactionDocumentBuilder.ts","ng://@pmcretail/mapper-library/lib/RJ-mapper.class.ts","ng://@pmcretail/mapper-library/lib/WebReturn-mapper.class.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-mapper-library',\n template: `\n <p>\n mapper-library works!\n </p>\n `,\n styles: [\n ]\n})\nexport class MapperLibraryComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { MapperLibraryComponent } from './mapper-library.component';\n\n\n\n@NgModule({\n declarations: [\n MapperLibraryComponent\n ],\n imports: [\n ],\n exports: [\n MapperLibraryComponent\n ]\n})\nexport class MapperLibraryModule { }\n","\r\n\r\nexport enum TRANSACTION_TYPE {\r\n SALE = \"SALE\",\r\n REFUND = \"REFUND\",\r\n SALE_REFUND = \"SALE_REFUND\",\r\n SALE_EXCHANGE = \"SALE_EXCHANGE\",\r\n VOID = \"VOID\"\r\n}\r\n\r\nexport interface ItemDiscount {\r\n trnDiscountsPortion: number;\r\n trnPromotionsPortion: number;\r\n refundPortion: number;\r\n currentRefundPortion?: number;\r\n}\r\n\r\nexport enum DELIVERY_METHODS {\r\n DELIVERY = 1,\r\n DROP_SHIP = 2,\r\n COLLECT_FROM_STORE = 3,\r\n}\r\n\r\nexport interface ProductChange {\r\n itemLineId?: number;\r\n SKU: string;\r\n quantity: number;\r\n selectedPrice?: number;\r\n lineDiscount?: LineDiscount;\r\n linePromotions?: LinePromotions;\r\n exchange?: Exchange;\r\n refundedQuantity?: number; // contains quantity of both full priced and promotional quantities\r\n refundPromotionalQuantity?: number; // promotional quantity\r\n refunded?: boolean;\r\n refundedTotal?: number;\r\n refundedReason?: string;\r\n refundedReasonDescription?: string;\r\n isChecked?: boolean;\r\n sealed?: boolean;\r\n isLastExchanged?: boolean;\r\n}\r\n\r\n/**\r\n * Product\r\n */\r\nexport interface Product extends ProductChange {\r\n itemLineId?: number;\r\n status: number;\r\n subGroup: number;\r\n brand: string;\r\n currency: string;\r\n category: string;\r\n countryofOrigin: string;\r\n productId: string;\r\n productType: number;\r\n name?: string;\r\n imageUrls: [string];\r\n isImageFailToLoad?: boolean;\r\n size: string;\r\n type: string;\r\n season: number;\r\n productGroup: number;\r\n styleCode: string;\r\n nodeStructure: NodeStructure[];\r\n barcode: string;\r\n price: Price[];\r\n colour: string;\r\n description: string;\r\n totalLinePrice: number;\r\n total: number;\r\n addedInBasket?: boolean;\r\n selectedVAT?: number;\r\n selectedVATCode?: string;\r\n selectedRRPPrice?: number;\r\n lineDiscount?: LineDiscount;\r\n exchange?: Exchange;\r\n // refundedQuantity?: number;\r\n // refunded?: boolean;\r\n // refundedTotal?: number;\r\n // refundedReasonDescription?:string;\r\n // isChecked?:boolean;\r\n refundPromotionalQuantity?: number; // promotional quantity\r\n exchangeReason?: string;\r\n exchangeQuantity?: number;\r\n itemDiscounts: ItemDiscount;\r\n\r\n giftCardNumberIssued?: string;\r\n giftCardAmount?: number;\r\n giftCardRecipientEmail?: string;\r\n giftCardExpiryDate?: string;\r\n giftCardRecipientName?: string;\r\n giftCard?: boolean;\r\n\r\n discountable: boolean;\r\n // sealed?:boolean;\r\n excludePromotion: boolean;\r\n categories: Categories[];\r\n descriptions: Descriptions[];\r\n barcodes: string[];\r\n\r\n //New Feilds\r\n externalId: string;\r\n createdDate: string;\r\n updatedDate: string;\r\n createdBy: string;\r\n updatedBy: string;\r\n attributes: CoreAttribute[];\r\n id: string;\r\n long_description: string;\r\n\r\n // Mixed Sales fields\r\n isWebOrder?: boolean,\r\n fullfilmentId: string,\r\n fullfilmentLocationName?: string,\r\n deliveryMethod?: string,\r\n deliveryGroup?: string,\r\n selectedInventory?: InventoryInfo;\r\n leadTime?: leadTime\r\n}\r\nexport interface leadTime {\r\n type: string,\r\n value: string\r\n}\r\n\r\nexport interface Exchange {\r\n exchangeId: number,\r\n lineItemId: number,\r\n reason: string,\r\n quantity: number,\r\n newItems: Product[];\r\n}\r\n\r\nexport interface Categories {\r\n id: string;\r\n parentId: string;\r\n name: string;\r\n categoryId: string;\r\n status: boolean;\r\n}\r\n\r\nexport interface Descriptions {\r\n name: string;\r\n countryCode: string;\r\n value: string;\r\n}\r\n\r\nexport interface CoreAttribute {\r\n name: string;\r\n value: string;\r\n searchable: boolean;\r\n countryCode: string;\r\n}\r\n\r\n/**\r\n * Basket\r\n */\r\n\r\nexport interface Basket {\r\n subsidiaryId?: string;\r\n products: Product[];\r\n transactionDiscount: any[];\r\n quantity: number;\r\n total: number;\r\n saleTotal: number;\r\n discountTotal?: number;\r\n transactionId?: string;\r\n offlineTransactionId?: string;\r\n baseCurrency: string;\r\n basketTotal?: number;\r\n refundTotal?: number;\r\n transactionPromotion?: TransactionPromotion[];\r\n customer?: any;\r\n exchange?: Exchange[];\r\n inStoreFlag?: boolean\r\n}\r\n\r\n\r\n\r\n/**\r\n * Price\r\n */\r\nexport interface Price {\r\n VAT: number;\r\n VATCode: string;\r\n salesPrice: number;\r\n currencyCode: string;\r\n RRPPrice: number;\r\n}\r\n\r\n/**\r\n * Node structure\r\n */\r\ninterface NodeStructure {\r\n status: boolean;\r\n name: string;\r\n nodeType: string;\r\n isOverride: boolean;\r\n nodeId: string;\r\n parentId: string;\r\n}\r\n\r\n/**\r\n * Line Discount\r\n */\r\nexport interface LineDiscount {\r\n itemLineId: string,\r\n discountAmount: number,\r\n discountType: string,\r\n // reasonCode: string,\r\n name?: string,\r\n unitPrice: number,\r\n discountedLinePrice?: number,\r\n priceManagerOverride?: UserOverride,\r\n priceOverrideReasonCode?: string,\r\n priceOverrideReasonName?: string,\r\n priceOverrideAmount?: number,\r\n percentageDiscountManagerOverride?: UserOverride,\r\n percentageDiscountReasonCode?: string,\r\n percentageDiscountReasonName?: string,\r\n percentageDiscountValue?: number\r\n}\r\n\r\n/**\r\n * User Override\r\n */\r\nexport interface UserOverride {\r\n userId: string,\r\n automaticApprove: string,\r\n originalUserId: string\r\n}\r\n\r\n/**\r\n* line Promotions\r\n*/\r\nexport interface LinePromotions {\r\n\r\n trigger: Trigger[],\r\n itemLineId: number,\r\n promotionId: string,\r\n displayText: string,\r\n promotionType: string,\r\n promotionAmount: number,\r\n name: string,\r\n promotionInfo: string,\r\n promotionLinePrice: number\r\n refunded?: boolean;\r\n}\r\n\r\n/**\r\n* trigger\r\n*/\r\nexport interface Trigger {\r\n itemLineId: string;\r\n quantity?: number;\r\n totalQuantity?: number;\r\n}\r\n\r\n/**\r\n* Transaction Promotion\r\n*/\r\nexport interface TransactionPromotion {\r\n displayText: string;\r\n name: string;\r\n promotionAmount: number;\r\n promotionId: string;\r\n promotionInfo: string;\r\n promotionType: string;\r\n itemLineIds: number[];\r\n\r\n}\r\n\r\nexport interface RefundProductChange {\r\n itemLineId?: number;\r\n refundedQuantity?: number;\r\n refundedPromotionalQuantity?: number;\r\n refundTotal?: number;\r\n refundedReason?: string;\r\n refundedReasonDescription?: string;\r\n refundWithPromotion: boolean;\r\n isLastExchanged?: boolean;\r\n}\r\n\r\nexport interface InventoryInfo {\r\n storeName: string,\r\n storeId: string,\r\n quantityAvailable: number,\r\n quantityRequired: number\r\n}\r\n\r\nexport interface InventoryRequestInfo extends InventoryInfo {\r\n requestedQuantity: number,\r\n requestedAction: DELIVERY_METHODS\r\n}\r\n\r\nexport interface DeliveryInfo {\r\n groups: DeliveryGroupInfo[]\r\n}\r\n\r\nexport interface DeliveryGroupInfo {\r\n groupNumber: number;\r\n items: Product[];\r\n estimate?: Estimate;\r\n}\r\n\r\nexport interface Estimate {\r\n type: string,\r\n value: string\r\n}\r\n\r\nexport interface TransactionDocument {\r\n transactionId?: string;\r\n subsidiaryId?: string;\r\n offlineTransactionId?:string;\r\n transactionRef?: string;\r\n dateTime?: string;\r\n orgCode: string;\r\n storeId: string;\r\n storeNodeId:string;\r\n storeNodeStructure:string;\r\n deviceId: string;\r\n terminalId:string;\r\n initiatingModule :string;\r\n export:boolean;\r\n userId?: string;\r\n userName?:string;\r\n customer?: Customer;\r\n basket: any;\r\n basketSummary: any;\r\n // lineDiscount: LineDiscount[];\r\n baseCurrency: string;\r\n splitPayment?:boolean;\r\n isPaymentCompleted?:boolean;\r\n paymentDetails?: any;\r\n type?: string;\r\n operationStatus?: string;\r\n createdAt?: string;\r\n updatedAt?: string;\r\n transCompletedAt?: string;\r\n id?: string;\r\n saleTotal?: number;\r\n reasonCode?: string;\r\n reasonDescription?: string;\r\n override?: UserOverride;\r\n originalTransId?:string;\r\n originalExternalId?: string;\r\n apiResponse?: APIResponse; // TODO add handler as per export provider\r\n unreferencedRefund?:boolean;\r\n giftedReceipt?:boolean;\r\n currentTransactionDetails?:any;\r\n isChecked?:boolean;\r\n}\r\n\r\nexport interface APIResponse\r\n{\r\n internalId?:number;\r\n tranid?:string\r\n}\r\n\r\nexport interface CurrentTransactionDetails{\r\n products: Product[];\r\n lineDiscount?:LineDiscount[];\r\n linePromotion?:LinePromotions[];\r\n transactionPromotion?:TransactionPromotion[];\r\n transactionDiscount?:TransactionDiscount[];\r\n basketSummary?:BasketSummary; \r\n taxBreakdown?:TaxBreakdown; \r\n totalTaxSummary?:TotalTaxSummary[];\r\n}\r\nexport interface BasketSummary {\r\n totalItems: number;\r\n saleTotal: number;\r\n VATTotal: number;\r\n discountTotal: number;\r\n basketTotal: number;\r\n refundTotal?:number;\r\n}\r\n\r\nexport interface TransactionDiscount{\r\n discountAmount:number;\r\n discountType:String;\r\n reasonCode:string;\r\n override?: UserOverride;\r\n itemLineIds?:number[];\r\n}\r\n\r\nexport interface TBasket {\r\n products: TProduct[];\r\n lineDiscount:LineDiscount[];\r\n exchange:Exchange[];\r\n linePromotion:LinePromotions[];\r\n transactionPromotion?:TransactionPromotion[];\r\n transactionDiscount?:TransactionDiscount[];\r\n taxBreakdown?:TaxBreakdown;\r\n totalTaxSummary?:TotalTaxSummary[];\r\n\r\n \r\n}\r\n\r\nexport interface TExchange{\r\n exchangeId?:number,\r\n lineItemId?: number,\r\n reason?: string,\r\n quantity?: number,\r\n newItems?:TNewItems[];\r\n }\r\n \r\n export interface TNewItems{\r\n lineItemId:number,\r\n Quantity:number\r\n }\r\n\r\nexport interface TProduct {\r\n itemLineId: string;\r\n SKU: string;\r\n description: string;\r\n imageUrls: [string];\r\n price: number;\r\n taxCode?: string;\r\n taxPercent?: string;\r\n quantity: number;\r\n refundedQuantity?: number;\r\n refundedPromotionalQuantity?:number;\r\n refunded?: boolean;\r\n refundedTotal?: number;\r\n refundedReason?:string;\r\n refundedReasonDescription?:string;\r\n selectedRRPPrice?: number;\r\n totalLinePrice: number;\r\n barCode?: string;\r\n barcodes?: string[];\r\n flagged?: boolean;\r\n exchange?:Exchange;\r\n excludePromotion:boolean;\r\n discountable?:boolean;\r\n\r\n itemDiscounts?:ItemDiscounts;\r\n isLastExchanged?: boolean;\r\n\r\n // Mixed Sales fields\r\n fullfilmentId:string,\r\n fullfilmentLocationName:string,\r\n deliveryMethod?:string,\r\n deliveryGroup?:string,\r\n giftCardNumberIssued?: string,\r\n giftCardAmount?: number,\r\n giftCardRecipientEmail?: string,\r\n giftCardExpiryDate?: string ,\r\n giftCardRecipientName?: string,\r\n giftCard?:boolean,\r\n currency?:string,\r\n isWebOrder?:boolean,\r\n leadTime?: leadTime\r\n \r\n // currenttransaction doc changes\r\n lineDiscount?:any\r\n\r\n attributes?:CoreAttribute[];\r\n}\r\n\r\nexport interface ItemDiscounts{\r\n trnDiscountsPortion:number;\r\n trnPromotionsPortion:number;\r\n refundPortion:number;\r\n}\r\n\r\n\r\n\r\nexport interface Customer {\r\n id: string;\r\n title?: string;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n postCode: string;\r\n telephone?: string;\r\n billingAddress?: Address;\r\n shippingAddress?: Address;\r\n addressDetail?: string;\r\n noCustomerSelected?: boolean;\r\n externalId?: string; \r\n \r\n}\r\n\r\nexport interface Address \r\n{\r\n address1?: string;\r\n address2?: string;\r\n address3?: string;\r\n city?: string;\r\n county?: string;\r\n postCode?: string;\r\n country?: string;\r\n }\r\n\r\nexport interface PaymentDetails {\r\n cardNumber?: any;\r\n sqNo?:number;\r\n result?: string;\r\n currency: string;\r\n amount: string;\r\n authcode?: string;\r\n pan?: string;\r\n cardType?: string;\r\n transactionDate?: string;\r\n mid?: string;\r\n tid?: string;\r\n cvm?: string;\r\n hostReferenceId?: string;\r\n aid?: string;\r\n receiptNo?: string;\r\n expirydate?: string;\r\n transactionReference: string;\r\n applicationVersion?: string;\r\n entryMethod?:string;\r\n transactionType:string;\r\n totalamount:string;\r\n paymentType?:string;\r\n}\r\n\r\nexport interface TaxBreakdown\r\n{\r\n taxLines : TaxLine[],\r\n totalTaxableAmount: number;\r\n}\r\n\r\nexport interface TotalTaxSummary{\r\n VATCode:string,\r\n VAT : number;\r\n PreTaxSum: number\r\n TaxSum: number\r\n TXrateSum: number\r\n}\r\n\r\nexport interface TaxLine\r\n{\r\n itemLineId: number,\r\n taxableAmount: number,\r\n taxLineTotal: number,\r\n VAT: number,\r\n VATCode : string,\r\n PreTax: number\r\n}\r\n\r\nexport enum DISCOUNTTYPE {\r\n PERCENT = 'Percent',\r\n AMOUNT = 'AMOUNT'\r\n}","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DELIVERY_METHODS } from './mapper-library.model';\r\nimport { Basket, DeliveryGroupInfo, DeliveryInfo, Product, TransactionPromotion } from './mapper-library.model';\r\nimport { TransactionDiscount } from './mapper-library.model';\r\nimport { NumberUtilService } from './number-util.service';\r\n\r\nexport class BasketService {\r\n currentBasket: Basket = {\r\n products: [],\r\n transactionDiscount: [],\r\n quantity: 0,\r\n total: 0,\r\n saleTotal: 0,\r\n baseCurrency: ''\r\n };\r\n\r\n private basketSource = new BehaviorSubject<any>(null);\r\n basket = this.basketSource.asObservable();\r\n\r\n private productSource = new BehaviorSubject<any>(null);\r\n product = this.productSource.asObservable();\r\n\r\n private peerSource = new BehaviorSubject<boolean>(false);\r\n peerSync = this.peerSource.asObservable();\r\n\r\n private scanSource = new BehaviorSubject<boolean>(false);\r\n scanner = this.scanSource.asObservable();\r\n\r\n private _isMixedBasketSales: boolean | undefined;\r\n public get isMixedBasketSales(): any {\r\n return this._isMixedBasketSales;\r\n }\r\n public set isMixedBasketSales(v: any) {\r\n this._isMixedBasketSales = v;\r\n }\r\n\r\n\r\n constructor(private numberUtilService: NumberUtilService) { }\r\n\r\n updateBasket(basket: Basket) {\r\n this.currentBasket = basket;\r\n this.isMixedBasketSales = this.filterProductListWithWebOrder(true).length > 0;\r\n this.basketSource.next(basket);\r\n }\r\n\r\n /**\r\n * calculates the total basket value and quantity\r\n * @param null\r\n * @returns void\r\n */\r\n updateBasketTotal(basketDetails: { quantity: number; total: number; products: any; transactionId: any; basketTotal: any; }, basketState: { updateBasket: (arg0: any) => void; }) {\r\n basketDetails.quantity = 0;\r\n basketDetails.total = 0;\r\n for (const p of basketDetails.products) {\r\n basketDetails.quantity = basketDetails.quantity + p.quantity;\r\n basketDetails.total =\r\n this.numberUtilService.trimTo2Decimal(basketDetails.total) +\r\n this.numberUtilService.trimTo2Decimal(p.total);\r\n }\r\n console.log(\r\n \"e:basket :basket service : basketDetails updated values for transaction id\",\r\n basketDetails.transactionId,\r\n JSON.stringify(basketDetails)\r\n );\r\n basketDetails.basketTotal = basketDetails.total;\r\n basketState.updateBasket(basketDetails);\r\n }\r\n\r\n /**\r\n * add Line promotion\r\n * @param null\r\n * @returns basketDetails\r\n */\r\n addlinePromotion(promotionList: { result: { linePromotions: string | any[]; }; }, basketDetails: { products: any; }) {\r\n console.log(\r\n \"e:basket :basket Service : promotionList and basketDetails for linePromotions\",\r\n JSON.stringify(promotionList),\r\n JSON.stringify(basketDetails)\r\n );\r\n if (\r\n promotionList &&\r\n promotionList.result &&\r\n promotionList.result.linePromotions &&\r\n promotionList.result.linePromotions.length > 0\r\n ) {\r\n for (var element of basketDetails.products) {\r\n for (var promotionelement of promotionList.result.linePromotions) {\r\n if (\r\n element.itemLineId.toString() ===\r\n promotionelement.itemLineId.toString()\r\n ) {\r\n element.linePromotions = promotionelement;\r\n }\r\n }\r\n }\r\n }\r\n return basketDetails;\r\n }\r\n\r\n /**\r\n * add Transaction promotion\r\n * @param null\r\n * @returns basketDetails\r\n */\r\n\r\n addTransactionPromotion(promotionList: { result: { transactionPromotion: any }; }, basketdetails: Basket) {\r\n console.log(\r\n \"e:basket :basket Service : promotionList and basketDetails for transactionPromotion\",\r\n JSON.stringify(promotionList),\r\n JSON.stringify(basketdetails),\r\n JSON.stringify(basketdetails.transactionPromotion)\r\n );\r\n if (\r\n promotionList &&\r\n promotionList.result &&\r\n promotionList.result.transactionPromotion &&\r\n promotionList.result.transactionPromotion.length > 0\r\n ) {\r\n promotionList.result.transactionPromotion.forEach((tPromotion: any) => {\r\n let transactionPromotionEntryUpdated: any = Object.assign(\r\n {},\r\n tPromotion\r\n );\r\n\r\n transactionPromotionEntryUpdated.itemLineIds = basketdetails.products.map(\r\n (product) => {\r\n return product.itemLineId;\r\n }\r\n );\r\n\r\n if (!basketdetails.transactionPromotion) {\r\n basketdetails.transactionPromotion = [];\r\n }\r\n basketdetails.transactionPromotion.push(\r\n transactionPromotionEntryUpdated\r\n );\r\n\r\n basketdetails = this.transactionPromotionProductPortionCalc(\r\n basketdetails,\r\n transactionPromotionEntryUpdated\r\n );\r\n });\r\n }\r\n console.log(\r\n \"basket details in refund calculation file\",\r\n JSON.stringify(basketdetails)\r\n );\r\n return basketdetails;\r\n }\r\n\r\n updateProductTotalForSummary(basketDetails: { total: string | number; quantity: string | number; products: any; }) {\r\n /*sale- product refundedQuantity = undefined\r\n partial refund - product refundedQuantity is > 0\r\n total refund - proudct refundedQuantity is > 0\r\n exchange - exchange product refundedQuantity is > 0 \r\n new product refundedQuantity = undefined \r\n old product without exchange refundedQuantity = 0\r\n unreference refund-product refundedQuantity is > 0 */\r\n\r\n basketDetails.total = 0;\r\n basketDetails.quantity = 0;\r\n for (var product of basketDetails.products) {\r\n if (product.linePromotions) {\r\n product.total = product.linePromotions.promotionLinePrice;\r\n } else if (product.lineDiscount && !product.linePromotions) {\r\n product.total = product.lineDiscount.discountedLinePrice;\r\n } else {\r\n product.total = product.totalLinePrice;\r\n }\r\n product.total =\r\n product.total -\r\n Math.abs(product.refundedTotal ? product.refundedTotal : 0);\r\n\r\n basketDetails.total += product.total;\r\n basketDetails.quantity =\r\n basketDetails.quantity +\r\n (product.quantity -\r\n (product.refundedQuantity ? product.refundedQuantity : 0));\r\n console.log(\r\n \"e-basket:ExchangeSummaryScreen:update basketdetails total :\" +\r\n basketDetails.total +\r\n \" Product line ID : \" +\r\n product.itemLineId +\r\n \" product total : \" +\r\n product.total,\r\n \"quantity : \" + basketDetails.quantity\r\n );\r\n }\r\n return this.updateBasketTotalForSummary(basketDetails);\r\n }\r\n\r\n updateBasketTotalForSummary(basketDetails: any) {\r\n basketDetails.basketTotal = basketDetails.total;\r\n console.info(\r\n \"ebasket : basket Service : update Basket Total for transaction transactionDiscount \",\r\n JSON.stringify(basketDetails.transactionDiscount)\r\n );\r\n\r\n console.info(\r\n \"ebasket : basket Service : update Basket Total for transaction transactionPromotion \",\r\n JSON.stringify(basketDetails.transactionPromotion)\r\n );\r\n\r\n basketDetails = this.updateTransactionPromotion(basketDetails);\r\n basketDetails = this.updateTransactionDiscount(basketDetails);\r\n basketDetails.basketTotal = Number(basketDetails.basketTotal.toFixed(2));\r\n\r\n console.info(\r\n \"ebasket : basket Service : update Basket Total: basketTotal after promotion applied for basketTotal\",\r\n basketDetails.basketTotal\r\n );\r\n return basketDetails;\r\n }\r\n\r\n updateTransactionDiscount(basketDetails: { transactionDiscount: any[]; basketTotal: number; }) {\r\n if (\r\n basketDetails.transactionDiscount &&\r\n basketDetails.transactionDiscount.length > 0\r\n ) {\r\n const discountTotal = basketDetails.transactionDiscount.reduce(\r\n (n: any, { discountAmount }: any) => n + discountAmount,\r\n 0\r\n );\r\n console.log(\"ebasket : basket Service : discountTotal \", discountTotal);\r\n basketDetails.basketTotal =\r\n basketDetails.basketTotal - Math.abs(discountTotal);\r\n }\r\n return basketDetails;\r\n }\r\n\r\n updateTransactionPromotion(basketDetails: { transactionPromotion: any[]; basketTotal: number; }) {\r\n if (\r\n basketDetails.transactionPromotion &&\r\n basketDetails.transactionPromotion.length > 0\r\n ) {\r\n const discountTotal = basketDetails.transactionPromotion.reduce(\r\n (n: any, { promotionAmount }: any) => n + promotionAmount,\r\n 0\r\n );\r\n basketDetails.basketTotal =\r\n basketDetails.basketTotal - Math.abs(discountTotal);\r\n }\r\n return basketDetails;\r\n }\r\n\r\n updateBasketTotalWithoutDiscount(basket: Basket): Basket {\r\n basket.total = 0;\r\n basket.quantity = 0;\r\n\r\n for (var product of basket.products) {\r\n if (product.linePromotions) {\r\n product.total = product.linePromotions.promotionLinePrice;\r\n } else if (product.lineDiscount && !product.linePromotions) {\r\n product.total = product.lineDiscount.discountedLinePrice || 0;\r\n } else {\r\n product.total = product.totalLinePrice;\r\n }\r\n\r\n product.total =\r\n product.total -\r\n Math.abs(product.refundedTotal ? product.refundedTotal : 0);\r\n basket.total += product.total;\r\n basket.quantity =\r\n basket.quantity +\r\n (product.quantity -\r\n (product.refundedQuantity ? product.refundedQuantity : 0));\r\n\r\n console.log(\r\n \"e-basket:basket service:update basketdetails total :\" +\r\n JSON.stringify(basket) +\r\n basket.total +\r\n \" Product line ID : \" +\r\n product.itemLineId +\r\n \" product total : \" +\r\n product.total\r\n );\r\n }\r\n\r\n basket.basketTotal = basket.total;\r\n return basket;\r\n }\r\n\r\n updateBasketTotalWithDiscounts(basket: any): Basket {\r\n console.log(\r\n \"e:basket :RefundBasketScreen : this.basketDetails new values\",\r\n basket,\r\n JSON.stringify(basket.basketTotal)\r\n );\r\n if (basket.transactionPromotion && basket.transactionPromotion.length > 0) {\r\n const discountTotal = basket.transactionPromotion.reduce(\r\n (n: any, { promotionAmount }: any) => n + promotionAmount,\r\n 0\r\n );\r\n basket.basketTotal = basket.basketTotal - discountTotal;\r\n }\r\n if (basket.transactionDiscount && basket.transactionDiscount.length > 0) {\r\n const discountTotal = basket.transactionDiscount.reduce(\r\n (n: any, { discountAmount }: any) => n + discountAmount,\r\n 0\r\n );\r\n\r\n basket.basketTotal = basket.basketTotal - discountTotal;\r\n }\r\n console.log(\r\n \"e:basket :RefundBasketScreen : basket new values\",\r\n JSON.stringify(basket)\r\n );\r\n\r\n return basket;\r\n }\r\n\r\n transactionDiscountAndPromotionProductortionCalculation(basket: Basket) {\r\n if (basket.transactionDiscount && basket.transactionDiscount.length > 0) {\r\n basket.transactionDiscount.forEach(\r\n (discount) =>\r\n (basket = this.transactionDiscountProductPortionCalc(\r\n basket,\r\n discount\r\n ))\r\n );\r\n }\r\n\r\n if (basket.transactionPromotion && basket.transactionPromotion.length > 0) {\r\n basket.transactionPromotion.forEach((promotion) => {\r\n basket = this.transactionPromotionProductPortionCalc(basket, promotion);\r\n });\r\n }\r\n console.log(\r\n \"ebasket: basket item discount protion calculation\",\r\n basket,\r\n basket.products\r\n );\r\n return basket;\r\n }\r\n\r\n transactionPromotionProductPortionCalc(\r\n basket: any,\r\n promotion: any\r\n ) {\r\n let total = 0;\r\n let percentage = 0;\r\n {\r\n basket.products.forEach((p:any) => {\r\n if (promotion.itemLineIds.includes(p.itemLineId)) {\r\n p = this.validateProductItemDiscount(p);\r\n const productContributionInTotal =\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.trnDiscountsPortion) +\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.trnPromotionsPortion) -\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.refundPortion);\r\n total += (p.total - this.numberUtilService.trimTo2Decimal2(productContributionInTotal));\r\n }\r\n });\r\n console.log(\r\n `ebasket: trnsactionPromotion: ${JSON.stringify(\r\n promotion\r\n )}, selected products total: ${total}`\r\n );\r\n basket.products.forEach((product: any) => {\r\n product = this.validateProductItemDiscount(product);\r\n\r\n const productContributionInTotal =\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnDiscountsPortion) +\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnPromotionsPortion) -\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.refundPortion);\r\n\r\n if (promotion.itemLineIds.includes(product.itemLineId)) {\r\n percentage = ((product.total - this.numberUtilService.trimTo2Decimal2(productContributionInTotal)) / total) * 100;\r\n product.itemDiscounts.trnPromotionsPortion +=\r\n (promotion.promotionAmount * percentage) / 100;\r\n product.itemDiscounts.trnPromotionsPortion = this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnPromotionsPortion);\r\n }\r\n });\r\n }\r\n return basket;\r\n }\r\n\r\n transactionDiscountProductPortionCalc(\r\n basket: any,\r\n discount: any\r\n ) {\r\n let total = 0;\r\n let percentage = 0;\r\n\r\n basket.products.forEach((p: any) => {\r\n if (discount.itemLineIds.includes(p.itemLineId)) {\r\n p = this.validateProductItemDiscount(p);\r\n const productContributionInTotal =\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.trnDiscountsPortion) +\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.trnPromotionsPortion) -\r\n this.numberUtilService.trimTo2Decimal2(p.itemDiscounts.refundPortion);\r\n\r\n\r\n total += (p.total - this.numberUtilService.trimTo2Decimal2(productContributionInTotal));\r\n }\r\n });\r\n\r\n console.log(\r\n `ebasket: trnsactionDiscount: ${JSON.stringify(\r\n discount\r\n )}, selected products total: ${total}`\r\n );\r\n\r\n basket.products.forEach((product:any) => {\r\n product = this.validateProductItemDiscount(product);\r\n console.log(product.discountable, \"ebasket : basket service : discountable in basket service\");\r\n\r\n const productContributionInTotal =\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnDiscountsPortion) +\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnPromotionsPortion) -\r\n this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.refundPortion);\r\n\r\n if (discount.itemLineIds.includes(product.itemLineId) && product.discountable == true) {\r\n percentage = ((product.total - this.numberUtilService.trimTo2Decimal2(productContributionInTotal)) / total) * 100;\r\n product.itemDiscounts.trnDiscountsPortion +=\r\n (discount.discountAmount * percentage) / 100;\r\n product.itemDiscounts.trnDiscountsPortion = this.numberUtilService.trimTo2Decimal2(product.itemDiscounts.trnDiscountsPortion)\r\n }\r\n });\r\n return basket;\r\n }\r\n\r\n public validateProductItemDiscount(product: Product) {\r\n if (!product.itemDiscounts) {\r\n product.itemDiscounts = {\r\n trnDiscountsPortion: 0,\r\n trnPromotionsPortion: 0,\r\n refundPortion: 0,\r\n };\r\n }\r\n return product;\r\n }\r\n\r\n markProduct(product: Product) {\r\n this.productSource.next(product);\r\n }\r\n stopPeerSyncProcess(peerSync: boolean) {\r\n this.peerSource.next(peerSync);\r\n }\r\n\r\n scanStart(isScanning: boolean) {\r\n this.scanSource.next(isScanning);\r\n }\r\n\r\n promotionRemainingCalculation(promotion: TransactionPromotion[]) {\r\n var promotionValue = 0;\r\n promotion.forEach((element) => {\r\n promotionValue += element.promotionAmount;\r\n });\r\n return promotionValue;\r\n }\r\n\r\n discountRemainingCalculation(discount: TransactionDiscount[]) {\r\n var discountValue = 0;\r\n discount.forEach((element) => {\r\n discountValue += element.discountAmount;\r\n });\r\n return discountValue;\r\n }\r\n\r\n discountRefundedCalculation(discount: TransactionDiscount[]) {\r\n var discountValue = 0;\r\n discount.forEach((element) => {\r\n if (element.discountAmount < 0) {\r\n discountValue += element.discountAmount;\r\n }\r\n });\r\n return discountValue;\r\n }\r\n\r\n generateNewItemLineId(products: Product[]) {\r\n let largestNumber: any = 0;\r\n\r\n if (products.length > 0) {\r\n let itemLineIdArray = products.map((product) => {\r\n return product.itemLineId;\r\n });\r\n\r\n largestNumber = itemLineIdArray.reduce((a :any, b:any) => Math.max(a, b));\r\n }\r\n\r\n return largestNumber + 1;\r\n }\r\n\r\n updateBasketProductDataAsPerQuantity(\r\n product: any,\r\n quantity: number\r\n ): Product {\r\n\r\n console.log(`ebasket: updateBasketProductDataAsPerQuantity : ${quantity} product: ${JSON.stringify(product)}`);\r\n product.quantity = quantity;\r\n if (product.hasOwnProperty(\"lineDiscount\")) {\r\n // && this.product.quantity !== this.productDetailForm.controls.quantity.value\r\n product.lineDiscount.discountedLinePrice = Number(\r\n this.numberUtilService.getFlooredFixed(\r\n product.lineDiscount.unitPrice * quantity,\r\n 2\r\n )\r\n );\r\n product.lineDiscount.discountAmount =\r\n product.totalLinePrice - product.lineDiscount.discountedLinePrice;\r\n } else {\r\n product.totalLinePrice =\r\n quantity * this.numberUtilService.trimTo2Decimal(product.selectedPrice);\r\n }\r\n if (product.lineDiscount) {\r\n product.total = product.lineDiscount.discountedLinePrice;\r\n } else {\r\n product.total = product.totalLinePrice;\r\n }\r\n console.log(`ebasket: updateBasketProductDataAsPerQuantity : ${quantity} product: ${JSON.stringify(product)}`);\r\n\r\n return product;\r\n }\r\n\r\n filterProductListWithWebOrder(isWebOrder: boolean): Product[] {\r\n console.log(\"ebasket: filterProductListWithWebOrder hit\", JSON.stringify(this.currentBasket.products));\r\n if (isWebOrder)\r\n return this.currentBasket.products.filter((x) => x.isWebOrder);\r\n else {\r\n return this.currentBasket.products.filter((x) => !x.isWebOrder);\r\n }\r\n }\r\n\r\n filterProductListWithDelivery(): Product[] {\r\n console.log(\"ebasket: filterProductListWithDelivery hit\", JSON.stringify(this.currentBasket.products));\r\n return this.currentBasket.products.filter((x) => x.deliveryMethod === DELIVERY_METHODS.DELIVERY.toString());\r\n }\r\n\r\n filterProductListWithDeliveryGroup(group: string, products: Product[]): Product[] {\r\n console.log(\"ebasket: filterProductListWithDeliveryGroup hit\", JSON.stringify(products));\r\n return products.filter((x) => x.deliveryGroup === group);\r\n }\r\n\r\n generateNewDeliveryGroupNumber(products: Product[]) {\r\n let largestNumber = 0;\r\n\r\n if (products.length > 0) {\r\n let deliveryGroupArr = products.map((product) => {\r\n if (product.deliveryGroup) {\r\n return parseInt(product.deliveryGroup);\r\n }\r\n return 0;\r\n });\r\n\r\n largestNumber = deliveryGroupArr.reduce((a, b) => Math.max(a, b));\r\n }\r\n\r\n return (largestNumber + 1).toString();\r\n }\r\n\r\n getDeliveryGroupNumbers(products: Product[]) {\r\n console.log(\"getDeliveryGroupNumbers initiating : \", JSON.stringify(products));\r\n\r\n let uniqueAndsortedResult: number[] = [];\r\n\r\n if (products.length > 0) {\r\n let deliveryGroupArr = products.map((product) => {\r\n if (product.deliveryGroup) {\r\n return parseInt(product.deliveryGroup);\r\n }\r\n else if (product.deliveryMethod === \"1\") {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n\r\n uniqueAndsortedResult = Array.from(new Set(deliveryGroupArr)).sort((a, b) => a - b);\r\n console.log(\"getDeliveryGroupNumbers : \", JSON.stringify(uniqueAndsortedResult));\r\n }\r\n return uniqueAndsortedResult;\r\n }\r\n\r\n updateProductsWithNewDeliveryGroupNumber(products: Product[]) {\r\n console.log(\"updateProductsWithNewDeliveryGroupNumber initiating : \", JSON.stringify(products));\r\n\r\n let newGroupNumber = this.generateNewDeliveryGroupNumber(this.currentBasket.products);\r\n if (products.length > 0) {\r\n this.currentBasket.products.forEach(cBProducts => {\r\n products.forEach(element => {\r\n if (cBProducts.itemLineId === element.itemLineId) {\r\n cBProducts.deliveryGroup = newGroupNumber;\r\n }\r\n\r\n });\r\n });\r\n\r\n }\r\n\r\n this.updateBasket(this.currentBasket);\r\n return;\r\n }\r\n\r\n calculateEstimatedTime(products: any[]) {\r\n try {\r\n let time;\r\n let estmatedTime: number = 0;\r\n let estimatedDays: string = \"Hours\";\r\n products.forEach((element: { leadTime: { type: string; value: any; }; }) => {\r\n\r\n if (element.leadTime.type.toLocaleLowerCase() === \"weeks\") {\r\n time = Number(element.leadTime.value) * 24 * 7;\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays\r\n console.log(\"week\", estmatedTime, estimatedDays);\r\n\r\n } else if (element.leadTime.type.toLocaleLowerCase() === \"days\") {\r\n time = Number(element.leadTime.value) * 24;\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays\r\n\r\n console.log(\"days\", estmatedTime, estimatedDays);\r\n\r\n }\r\n else if (element.leadTime.type.toLocaleLowerCase() === \"months\") {\r\n time = Number(element.leadTime.value) * 24 * 30;\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays\r\n\r\n console.log(\"months\", estmatedTime, estimatedDays);\r\n\r\n }\r\n else if (element.leadTime.type.toLocaleLowerCase() === \"years\") {\r\n time = Number(element.leadTime.value) * 24 * 365;\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays\r\n\r\n console.log(\"years\", estmatedTime, estimatedDays);\r\n\r\n } else {\r\n time = Number(element.leadTime.value);\r\n estmatedTime = Math.max(estmatedTime, time);\r\n estimatedDays = (estmatedTime === time) ? element.leadTime.type : estimatedDays;\r\n console.log(\"hours\", estmatedTime, estimatedDays);\r\n\r\n }\r\n });\r\n\r\n if (estimatedDays.toLocaleLowerCase() === \"days\") {\r\n estmatedTime = estmatedTime / 24;\r\n } else if (estimatedDays.toLocaleLowerCase() === \"weeks\") {\r\n estmatedTime = estmatedTime / (24 * 7);\r\n } else if (estimatedDays.toLocaleLowerCase() === \"months\") {\r\n estmatedTime = estmatedTime / (24 * 30);\r\n } else if (estimatedDays.toLocaleLowerCase() === \"years\") {\r\n estmatedTime = estmatedTime / (24 * 365);\r\n }\r\n\r\n let estimate = {\r\n value: estmatedTime.toString(),\r\n type: estimatedDays\r\n }\r\n return estimate;\r\n } catch (error) {\r\n console.log(\"error in calculateEstimatedTime\", error);\r\n }\r\n return 0;\r\n }\r\n\r\n updateProductsWithDeliveryGroupNumber(oldGroup: string, newGroup: string) {\r\n console.log(\"updateProductsWithDeliveryGroupNumber initiating\");\r\n\r\n this.currentBasket.products.forEach(cBProducts => {\r\n if (cBProducts.deliveryGroup === oldGroup) {\r\n cBProducts.deliveryGroup = newGroup;\r\n }\r\n\r\n });\r\n\r\n this.updateBasket(this.currentBasket);\r\n return;\r\n }\r\n\r\n getDeliveryInfo(): any {\r\n console.log(\"getDeliveryGroupInfor initiating\");\r\n try {\r\n let groupInfo: DeliveryInfo = {\r\n groups: []\r\n }\r\n\r\n this.getDeliveryGroupNumbers(this.currentBasket.products).forEach((groupNumber) => {\r\n let group: any = {\r\n groupNumber: groupNumber,\r\n items: [],\r\n estimate: {\r\n type: \"Hours\",\r\n value: \"0\"\r\n }\r\n }\r\n this.currentBasket.products.forEach(cBProducts => {\r\n if (cBProducts.deliveryGroup === groupNumber.toString()) {\r\n group.items.push(cBProducts);\r\n }\r\n });\r\n\r\n group.estimate = this.calculateEstimatedTime(group.items);\r\n\r\n groupInfo.groups.push(group);\r\n\r\n });\r\n\r\n return groupInfo;\r\n }\r\n catch (error) {\r\n console.log(\"error\", error);\r\n }\r\n }\r\n}\r\n","import { CurrencyPipe } from \"@angular/common\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NumberUtilService {\r\n constructor( private cp: CurrencyPipe) {}\r\n\r\n trimTo2Decimal(no: any) {\r\n //return Math.floor(no * 100) / 100;\r\n return no;\r\n }\r\n\r\n trimTo2Decimal2(no: number) {\r\n return Number(this.getFlooredFixed(no,2));\r\n }\r\n\r\n getFlooredFixed(v:any, d:any) {\r\n return (Math.floor(v * Math.pow(10, d)) / Math.pow(10, d)).toFixed(d);\r\n }\r\n\r\n AppendWithCurrencySymbol(numValue: any, currencyCode: string): string {\r\n let returnValue: any = \"\";\r\n if (numValue) {\r\n const numb: number = parseFloat(numValue.toString().replace(',',''));\r\n returnValue = this.cp.transform(\r\n Number(numValue).toFixed(2),\r\n currencyCode.toLocaleUpperCase(),\r\n \"symbol\"\r\n );\r\n console.log(\"AppendWithCurrencySymbol :\" + returnValue);\r\n } else {\r\n returnValue = this.cp.transform(\r\n \"0.00\",\r\n currencyCode.toLocaleUpperCase(),\r\n \"symbol\"\r\n );\r\n }\r\n return returnValue;\r\n }\r\n}\r\n","import { CurrencyPipe } from \"@angular/common\";\r\nimport { BasketSummary, CurrentTransactionDetails, Customer, DELIVERY_METHODS, ItemDiscounts, TaxBreakdown, TaxLine, TBasket, TotalTaxSummary, TProduct, TransactionDocument } from \"./mapper-library.model\";\r\nimport { TRANSACTION_TYPE, Basket, LineDiscount, LinePromotions, Product, UserOverride } from \"./mapper-library.model\";\r\nimport { BasketService } from \"./basket.service\";\r\nimport { NumberUtilService } from \"./number-util.service\";\r\n\r\n/**\r\n * Transaction document builder\r\n */\r\nexport class TransactionDocumentBuilder {\r\n private transactionDocument: TransactionDocument;\r\n private numberUtilService: NumberUtilService;\r\n private storeInfo : any;\r\n \r\n constructor(\r\n transactionDoc?: TransactionDocument,\r\n private currencyPipe?: CurrencyPipe,\r\n private basketService?: BasketService | any,\r\n ) {\r\n this.numberUtilService = new NumberUtilService(currencyPipe);\r\n this.basketService = new BasketService(this.numberUtilService);\r\n this.storeInfo = JSON.parse(localStorage.getItem('storeInfo') || '{}');\r\n if (transactionDoc) {\r\n this.transactionDocument = transactionDoc;\r\n } else {\r\n this.transactionDocument = {\r\n transactionId: \"\",\r\n offlineTransactionId: \"\",\r\n transactionRef: \"\",\r\n dateTime: \"\",\r\n orgCode: \"\",\r\n storeId: \"\",\r\n storeNodeId: \"\",\r\n storeNodeStructure: \"\",\r\n deviceId: \"\",\r\n terminalId: \"\",\r\n userId: \"\",\r\n initiatingModule : \"eBasket\",\r\n export: false,\r\n basket: {} as TBasket,\r\n basketSummary: {} as BasketSummary,\r\n baseCurrency: \"\",\r\n type: \"\",\r\n operationStatus: \"\",\r\n createdAt: \"\",\r\n updatedAt: \"\",\r\n id: \"\",\r\n currentTransactionDetails: {} as CurrentTransactionDetails,\r\n saleTotal: 0,\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Transactions ref\r\n * @returns ref\r\n */\r\n transactionRef(): TransactionDocumentBuilder {\r\n const storeDetails = JSON.parse(localStorage.getItem('storeInfo') || '{}');\r\n const date = new Date();\r\n const random = (((1 + Math.random()) * 0x10000) | 0)\r\n .toString(16)\r\n .substring(1);\r\n this.transactionDocument.transactionRef =\r\n storeDetails.orgCode + storeDetails.storeId + date.toISOString() + random;\r\n console.log(\"ebasket: transaction ref created\", this.transactionDocument.transactionRef)\r\n return this;\r\n }\r\n\r\n /**\r\n * Transactions id\r\n * @param transactionID\r\n * @returns id\r\n */\r\n transactionId(transactionID: string, isOnline: boolean = true): TransactionDocumentBuilder {\r\n if (isOnline) {\r\n this.transactionDocument.transactionId = transactionID;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Transactions id\r\n * @param transactionID\r\n * @returns id\r\n */\r\n offlineTransactionId(transactionID: string, isOnline: any): TransactionDocumentBuilder {\r\n if (!isOnline) {\r\n this.transactionDocument.offlineTransactionId = transactionID;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * storeNode Id\r\n * @param storeNodeId\r\n * @returns id\r\n */\r\n storeNodeId(storeNodeId: string): TransactionDocumentBuilder {\r\n this.transactionDocument.storeNodeId = storeNodeId;\r\n return this;\r\n }\r\n\r\n /**\r\n* storeNode structure\r\n* @param storeNodeStructure\r\n* @returns id\r\n*/\r\n storeNodeStructure(storeNodeStructure: string): TransactionDocumentBuilder {\r\n this.transactionDocument.storeNodeStructure = storeNodeStructure;\r\n return this;\r\n }\r\n\r\n /**\r\n * Orgs code\r\n * @param orgCode\r\n * @returns code\r\n */\r\n orgCode(orgCode: any): TransactionDocumentBuilder {\r\n this.transactionDocument.orgCode = orgCode;\r\n return this;\r\n }\r\n /**\r\n * Stores id\r\n * @param storeId\r\n * @returns id\r\n */\r\n storeId(storeId: any): TransactionDocumentBuilder {\r\n this.transactionDocument.storeId = storeId;\r\n return this;\r\n }\r\n /**\r\n * Dates time\r\n * @returns time\r\n */\r\n dateTime(): TransactionDocumentBuilder {\r\n const date = new Date();\r\n this.transactionDocument.dateTime = date.toISOString();\r\n return this;\r\n }\r\n /**\r\n * Devices id\r\n * @param deviceId\r\n * @returns id\r\n */\r\n deviceId(deviceId: any): TransactionDocumentBuilder {\r\n this.transactionDocument.deviceId = deviceId;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * terminal id\r\n * @param terminalId\r\n * @returns id\r\n */\r\n terminalId(terminalId: any): TransactionDocumentBuilder {\r\n this.transactionDocument.terminalId = terminalId;\r\n return this;\r\n }\r\n\r\n\r\n\r\n\r\n\r\n /**\r\n * saleExport\r\n * @param saleExport\r\n * @returns id\r\n */\r\n export(saleExport: any): TransactionDocumentBuilder {\r\n this.transactionDocument.export = saleExport;\r\n return this;\r\n }\r\n\r\n\r\n\r\n /* customer(): TransactionDocumentBuilder {\r\n const user = JSON.parse(localStorage.getItem('userDetails'));\r\n this.transactionDocument.customer = user;\r\n return this;\r\n } */\r\n /**\r\n * Baskets transaction document builder\r\n * @param basketDetails\r\n * @returns basket\r\n */\r\n basket(basketDetails: Basket): TransactionDocumentBuilder {\r\n console.log(\"ebasket: basket details update in transaction document\", JSON.stringify(basketDetails));\r\n\r\n this.transactionDocument.subsidiaryId = basketDetails.subsidiaryId || (localStorage.getItem('subsidiaryId') || '');\r\n this.transactionDocument.basket.products = [] as TProduct[];\r\n this.transactionDocument.basket.lineDiscount = [];\r\n this.transactionDocument.basket.linePromotion = [];\r\n this.transactionDocument.basket.transactionPromotion = [];\r\n basketDetails.products.forEach((product: any, index) => {\r\n const p = {} as TProduct;\r\n p.itemDiscounts = {} as ItemDiscounts;\r\n p.SKU = product.SKU;\r\n p.excludePromotion = product.excludePromotion;\r\n p.barCode = product.barcode;\r\n p.barcodes = product.barcodes;\r\n p.description = product.description;\r\n p.itemLineId = product.itemLineId ? product.itemLineId.toString() : \"\" + (index + 1);\r\n p.price = product.selectedPrice;\r\n p.quantity = product.quantity;\r\n p.totalLinePrice = product.quantity * product.selectedPrice;\r\n p.imageUrls = product.imageUrls;\r\n p.selectedRRPPrice = product.selectedRRPPrice;\r\n\r\n //inventory fields\r\n \r\n p.fullfilmentId = product.fullfilmentId? product.fullfilmentId: this.storeInfo.storeId;\r\n\r\n p.fullfilmentLocationName = product.fullfilmentLocationName;\r\n p.deliveryGroup = product.deliveryGroup;\r\n p.leadTime = product.leadTime;\r\n p.deliveryMethod = product.deliveryMethod;\r\n\r\n p.giftCard = product.giftCard;\r\n p.giftCardExpiryDate = product.giftCardExpiryDate;\r\n p.giftCardNumberIssued = product.giftCardNumberIssued;\r\n p.giftCardRecipientEmail = product.giftCardRecipientEmail;\r\n p.giftCardRecipientName = product.giftCardRecipientName;\r\n\r\n if (product.refundedQuantity > 0) {\r\n p.refundedQuantity = product.refundedQuantity;\r\n p.refundedPromotionalQuantity = product.refundPromotionalQuantity;\r\n p.refunded = product.refunded;\r\n p.refundedReasonDescription = product.refundedReasonDescription;\r\n p.refundedReason = product.refundedReason;\r\n if (!p.refundedReasonDescription) {\r\n p.refundedReasonDescription = p.refundedReason;\r\n }\r\n p.refundedTotal = product.refundedTotal;\r\n p.isLastExchanged = product.isLastExchanged;\r\n }\r\n\r\n if (product.exchange) {\r\n p.exchange = product.exchange;\r\n }\r\n if (product.lineDiscount) {\r\n p.lineDiscount = product.lineDiscount;\r\n }\r\n p.itemDiscounts = product.itemDiscounts as ItemDiscounts;\r\n this.transactionDocument.basket.products.push(p);\r\n this.lineDiscount(basketDetails);\r\n });\r\n console.info(\"ebasket: transactiondocument basket details updated\", JSON.stringify(this.transactionDocument.basket));\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * current transaction Details Total(New Products)\r\n * @returns currentTransactionDetails\r\n */\r\n\r\n currentTransactionDetails(basket: Basket): TransactionDocumentBuilder {\r\n console.log(\"ebasket: current transaction details for exchanges\", basket);\r\n this.transactionDocument.currentTransactionDetails.products = [] as Product[];\r\n this.transactionDocument.currentTransactionDetails.linePromotion = [] as LinePromotions[];\r\n this.transactionDocument.currentTransactionDetails.lineDiscount = [] as LineDiscount[];\r\n this.transactionDocument.currentTransactionDetails.transactionDiscount = [];\r\n this.transactionDocument.currentTransactionDetails.products = basket.products;\r\n this.transactionDocument.currentTransactionDetails.products = this.transactionDocument.currentTransactionDetails.products.filter(\r\n ( proj: { refundedQuantity: number; }) => proj.refundedQuantity != 0\r\n );\r\n\r\n this.transactionDocument.currentTransactionDetails.products.forEach((product: { refundedQuantity: any; quantity: any; totalLinePrice: number; refundedTotal: number; total: any; refunded: boolean; linePromotions: any; lineDiscount: any; }) => {\r\n if (product.refundedQuantity) {\r\n product.quantity = product.refundedQuantity;\r\n // updating total line price with actual price to be refunded including the refunding qty\r\n product.totalLinePrice = Math.abs(product.refundedTotal);\r\n product.total = product.totalLinePrice;\r\n if (product.quantity === product.refundedQuantity) {\r\n product.refunded = true;\r\n }\r\n }\r\n //Updating line promotions and line discounts \r\n if (product.linePromotions && !product.refundedQuantity) {\r\n this.transactionDocument.currentTransactionDetails.linePromotion.push(product.linePromotions)\r\n }\r\n if (product.lineDiscount && !product.refundedQuantity) {\r\n this.transactionDocument.currentTransactionDetails.lineDiscount.push(product.lineDiscount)\r\n }\r\n });\r\n\r\n console.log(\"ebasket: current transaction details after removing old products\", this.transactionDocument.currentTransactionDetails.products);\r\n\r\n if (basket.transactionDiscount && basket.transactionDiscount.length > 0) {\r\n this.transactionDocument.currentTransactionDetails.transactionDiscount.push(...basket.transactionDiscount);\r\n }\r\n this.transactionDocument.currentTransactionDetails.basketSummary = {} as BasketSummary;\r\n\r\n this.transactionDocument.currentTransactionDetails.basketSummary.saleTotal = this.numberUtilService.trimTo2Decimal2(this.updateSaleTotal(this.transactionDocument.currentTransactionDetails));\r\n this.transactionDocument.currentTransactionDetails.basketSummary.totalItems = basket.quantity;\r\n\r\n\r\n this.transactionDocument.currentTransactionDetails.basketSummary.basketTotal = basket.basketTotal;\r\n this.transactionDocument.currentTransactionDetails.basketSummary.refundTotal = this.updateCurrentTransactionDetailsRefundTotal();\r\n // For partial refund discount is updatied in total line price so discountTotal will always be zero & in case of exchange discount total is calculated\r\n\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.SALE_EXCHANGE) {\r\n this.transactionDocument.currentTransactionDetails.basketSummary.discountTotal = this.numberUtilService.trimTo2Decimal2(this.updateCurrentTransactionDetailsDiscountTotal());\r\n } else {\r\n if (this.transactionDocument.currentTransactionDetails.transactionDiscount && this.transactionDocument.currentTransactionDetails.transactionDiscount.length > 0) {\r\n let discountTotal = 0;\r\n this.transactionDocument.currentTransactionDetails.transactionDiscount.forEach((discount: { discountAmount: number; }) => {\r\n discountTotal += discount.discountAmount;\r\n });\r\n this.transactionDocument.currentTransactionDetails.basketSummary.discountTotal = Math.abs(discountTotal);\r\n } else {\r\n this.transactionDocument.currentTransactionDetails.basketSummary.discountTotal = 0;\r\n }\r\n }\r\n\r\n console.log(\"ebasket:this.transactionDocument.currentTransactionDetails\", JSON.stringify(this.transactionDocument.currentTransactionDetails));\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * current transaction Tax Total\r\n * @returns Tax Total\r\n */\r\n\r\n updateCurrentTransactionDetailsTaxBreakdown(basketDetails: Basket): TransactionDocumentBuilder {\r\n let transactionDiscountTotal = 0;\r\n let taxBreakdown: TaxBreakdown = {\r\n taxLines: [],\r\n totalTaxableAmount: 0,\r\n };\r\n\r\n if (this.transactionDocument.currentTransactionDetails.transactionDiscount && this.transactionDocument.currentTransactionDetails.transactionDiscount.length > 0) {\r\n this.transactionDocument.currentTransactionDetails.transactionDiscount.forEach((discount: { discountAmount: number; }) => {\r\n transactionDiscountTotal += discount.discountAmount;\r\n });\r\n }\r\n\r\n if (this.transactionDocument.currentTransactionDetails.products && this.transactionDocument.currentTransactionDetails.products.length > 0) {\r\n this.transactionDocument.currentTransactionDetails.products.forEach((product: { itemLineId: any; selectedVAT: any; selectedVATCode: any; total: any; refundedQuantity: number; itemDiscounts: { currentRefundPortion: number; trnDiscountsPortion: number; trnPromotionsPortion: number; }; }) => {\r\n let taxLine: TaxLine = {\r\n itemLineId: product.itemLineId,\r\n VAT: product.selectedVAT ? product.selectedVAT : 0,\r\n VATCode: product.selectedVATCode,\r\n taxLineTotal: 0,\r\n taxableAmount: product.total,\r\n PreTax: 0\r\n\r\n };\r\n console.info(\"Product contribution : item line ID :current transaction Details\",\r\n product.itemLineId, \"tax line :\", JSON.stringify(taxLine), JSON.stringify(basketDetails.basketTotal));\r\n\r\n //step 1\r\n // if Transaction Discount and/or promotion applied, find net selling price of each product as taxableamount\r\n\r\n //If transaction discount/promotion is applied taxable amount should be deducting transaction promotion and transaction disacount portion\r\n if (product.refundedQuantity && product.refundedQuantity > 0) {\r\n\r\n taxLine.taxableAmount = -Math.abs(taxLine.taxableAmount - product.itemDiscounts.currentRefundPortion);\r\n } else {\r\n taxLine.taxableAmount = taxLine.taxableAmount - product.itemDiscounts.trnDiscountsPortion - product.itemDiscounts.trnPromotionsPortion;\r\n }\r\n\r\n //step 2 - find pre tax\r\n taxLine.PreTax = this.numberUtilService.trimTo2Decimal2((taxLine.taxableAmount * 100) / (100 + taxLine.VAT));\r\n\r\n //step 3 - Update taxbreakdown\r\n taxBreakdown.totalTaxableAmount += taxLine.taxableAmount;\r\n taxLine.taxableAmount = this.numberUtilService.trimTo2Decimal2(taxLine.taxableAmount);\r\n \r\n // step 4 - update tax Line total\r\n taxLine.taxLineTotal = this.numberUtilService.trimTo2Decimal2(taxLine.taxableAmount - taxLine.PreTax);\r\n taxBreakdown.taxLines.push(taxLine);\r\n });\r\n }\r\n\r\n taxBreakdown.totalTaxableAmount = this.numberUtilService.trimTo2Decimal2(taxBreakdown.totalTaxableAmount);\r\n this.transactionDocument.currentTransactionDetails.taxBreakdown = taxBreakdown;\r\n if (this.transactionDocument.currentTransactionDetails.taxBreakdown && this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines && this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines.length > 0) {\r\n this.transactionDocument.currentTransactionDetails.basketSummary.VATTotal = this.numberUtilService.trimTo2Decimal2(this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines.reduce(\r\n (n: any, { taxLineTotal }: any) => n + taxLineTotal,\r\n 0\r\n ));\r\n }\r\n else {\r\n this.transactionDocument.currentTransactionDetails.basketSummary.VATTotal = 0.00;\r\n }\r\n\r\n console.log(\"eBasket:after calculating tax currenttransactionDetails\", this.transactionDocument.currentTransactionDetails)\r\n return this;\r\n }\r\n\r\n updateCurrentTransactionDetailsTotalTaxSummary(): TransactionDocumentBuilder {\r\n \r\n console.log(\"Total Tax Summery Request :\", JSON.stringify(this.transactionDocument.currentTransactionDetails.taxBreakdown));\r\n\r\n let totalTaxSummaryArray: TotalTaxSummary[] = []\r\n let totalTaxSummaryGroup = []\r\n\r\n console.log(\"Tax Lines for Total Tax Summery :\", JSON.stringify(this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines));\r\n\r\n this.transactionDocument.currentTransactionDetails.taxBreakdown.taxLines.forEach((element: { VATCode: any; VAT: any; PreTax: any; taxLineTotal: any; }) => {\r\n let TaxSummary: TotalTaxSummary = {\r\n VATCode:\"\",\r\n VAT: -12345,\r\n PreTaxSum: 0,\r\n TaxSum: 0,\r\n TXrateSum: 0\r\n };\r\n TaxSummary.VATCode=element.VATCode;\r\n TaxSummary.VAT = element.VAT; \r\n \r\n TaxSummary.PreTaxSum = this.numberUtilService.trimTo2Decimal2(element.PreTax); \r\n TaxSummary.TaxSum = this.numberUtilService.trimTo2Decimal2(element.taxLineTotal);\r\n TaxSummary.TXrateSum = this.numberUtilService.trimTo2Decimal2(TaxSummary.PreTaxSum + TaxSummary.TaxSum); \r\n totalTaxSummaryArray.push(TaxSummary);\r\n })\r\n\r\n console.log(\"Total Tax Summery Without Grouped : \", JSON.stringify(totalTaxSummaryArray));\r\n \r\n totalTaxSummaryGroup = totalTaxSummaryArray.reduce((preparedArray:any,currentObj:any) => {\r\n let ind = preparedArray.findIndex((x: { VAT: any; }) => x.VAT === currentObj.VAT);\r\n if(ind === -1){\r\n preparedArray.push(currentObj)\r\n }else {\r\n preparedArray[ind].VATCode = currentObj.VATCode;\r\n preparedArray[ind].VAT = currentObj.VAT;\r\n preparedArray[ind].PreTaxSum += currentObj.PreTaxSum;\r\n preparedArray[ind].TaxSum += currentObj.TaxSum;\r\n preparedArray[ind].TXrateSum += currentObj.TXrateSum;\r\n }\r\n return preparedArray;\r\n },[])\r\n // listOfTags.map(x => unique.filter(a => a.label == x.label && a.color == x.color).length > 0 ? null : unique.push(x));\r\n\r\n console.log(\"Total Tax Summer Group :\", JSON.stringify(totalTaxSummaryGroup));\r\n\r\n this.transactionDocument.currentTransactionDetails.totalTaxSummary = totalTaxSummaryGroup;\r\n return this;\r\n\r\n }\r\n\r\n /**\r\n * current transaction Disocunt Total\r\n * @returns Discount Total\r\n */\r\n updateCurrentTransactionDetailsDiscountTotal() {\r\n let refundTotal = this.transactionDocument.currentTransactionDetails.basketSummary.refundTotal ? this.transactionDocument.currentTransactionDetails.basketSummary.refundTotal : 0;\r\n\r\n console.log(\"e-basket: transaction builder updateCurrentTransactionDetailsDiscountTotal: discountTotal\", refundTotal, this.transactionDocument.currentTransactionDetails.basketSummary.basketTotal, this.transactionDocument.currentTransactionDetails.basketSummary.saleTotal);\r\n const discountTotal =\r\n Math.abs(\r\n Math.abs(this.transactionDocument.currentTransactionDetails.basketSummary.saleTotal) -\r\n (Math.abs(this.transactionDocument.currentTransactionDetails.basketSummary.basketTotal) + Math.abs(refundTotal))\r\n );\r\n console.log(\"e-basket: transaction builder updateCurrentTransactionDetailsDiscountTotal: discountTotal\", discountTotal)\r\n return Number(discountTotal.toFixed(2));\r\n }\r\n\r\n /**\r\n * current transaction Refund Total\r\n * @returns Refund Total\r\n */\r\n updateCurrentTransactionDetailsRefundTotal() {\r\n let totalRefund = 0;\r\n for (let index = 0; index < this.transactionDocument.currentTransactionDetails.products.length; index++) {\r\n const product: Product = this.transactionDocument.currentTransactionDetails.products[index];\r\n if (product.refundedTotal) {\r\n totalRefund = totalRefund + product.refundedTotal;\r\n }\r\n console.log(\"ebasket : transaction Service: totalRefund for Current TransactionDetails\" + totalRefund)\r\n }\r\n return totalRefund;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Baskets summary\r\n * @param basketDetails\r\n * @returns summary\r\n */\r\n basketSummary(basketDetails: Basket): TransactionDocumentBuilder {\r\n this.transactionDocument.basketSummary.basketTotal = this.numberUtilService.trimTo2Decimal(basketDetails.basketTotal);\r\n\r\n this.transactionDocument.basketSummary.saleTotal = this.numberUtilService.trimTo2Decimal2(this.updateSaleTotal(\r\n basketDetails\r\n ));\r\n this.transactionDocument.basketSummary.refundTotal = this.getRefundTotal();\r\n if (\r\n this.transactionDocument.basket.lineDiscount ||\r\n this.transactionDocument.basket.linePromotion\r\n ) {\r\n this.transactionDocument.basketSummary.discountTotal = this.numberUtilService.trimTo2Decimal2(this.updateDiscountTotal());\r\n }\r\n this.transactionDocument.basketSummary.totalItems = basketDetails.quantity;\r\n\r\n\r\n if (this.transactionDocument.basket.taxBreakdown) {\r\n this.transactionDocument.basketSummary.VATTotal = this.numberUtilService.trimTo2Decimal2(this.transactionDocument.basket.taxBreakdown.taxLines.reduce(\r\n (n: any, { taxLineTotal }: any) => n + taxLineTotal,\r\n 0\r\n ));\r\n }\r\n else {\r\n this.transactionDocument.basketSummary.VATTotal = 0.00;\r\n }\r\n\r\n console.info(\"ebasket: basketsummary updated in transaction document: \", JSON.stringify(this.transactionDocument.basketSummary));\r\n return this;\r\n }\r\n\r\n /**\r\n * Line Discount\r\n * @param basketDetails\r\n * @returns line Discount\r\n */\r\n lineDiscount(basketDetails: Basket): TransactionDocumentBuilder {\r\n this.transactionDocument.basket.lineDiscount = [];\r\n for (let index = 0; index < basketDetails.products.length; index++) {\r\n const element = basketDetails.products[index];\r\n if (element.lineDiscount) {\r\n this.transactionDocument.basket.lineDiscount.push(element.lineDiscount);\r\n this.transactionDocument.basket.lineDiscount = this.transactionDocument.basket.lineDiscount.reduce(\r\n (acc: any[], val: { itemLineId: any; }) => {\r\n if (!acc.find((el: { itemLineId: any; }) => el.itemLineId === val.itemLineId)) {\r\n acc.push(val);\r\n }\r\n return acc;\r\n },\r\n []\r\n );\r\n }\r\n\r\n // console.info(\r\n // \"e-basket :line discount updated in transaction document\",\r\n // this.transactionDocument.basket.lineDiscount\r\n // );\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * exchange\r\n * @param basketDetails\r\n * @returns exchange \r\n */\r\n exchange(basketDetails: Basket): TransactionDocumentBuilder {\r\n this.transactionDocument.basket.exchange = basketDetails.exchange && basketDetails.exchange.length > 0 ? [...basketDetails.exchange] : [];\r\n for (let index = 0; index < basketDetails.products.length; index++) {\r\n\r\n const element: any = basketDetails.products[index];\r\n if (element.exchange != undefined) {\r\n const isPresent = this.transactionDocument.basket.exchange.some((el: { exchangeId: any; }) => el.exchangeId === element.exchange.exchangeId);\r\n if (!isPresent) {\r\n let exchangeItems = [];\r\n for (let j = 0; j < element.exchange.newItems.length; j++) {\r\n const item = element.exchange.newItems[j];\r\n let newItems: any = { lineItemId: item.itemLineId, Quantity: item.quantity }\r\n exchangeItems.push(newItems);\r\n }\r\n element.exchange.newItems = [...exchangeItems];\r\n this.transactionDocument.basket.exchange.push(element.exchange);\r\n }\r\n }\r\n console.log(\r\n \"e-basket :TransactionDocumentBuilder: this.transactionDocument.basket exchange\",\r\n JSON.stringify(this.transactionDocument.basket.exchange)\r\n );\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * add previous exchange data\r\n * @param originalTransactionDocument\r\n * @returns line Promotions\r\n */\r\n addExchangeData(originalTransactionDocument: TransactionDocument): TransactionDocumentBuilder {\r\n this.transactionDocument.basket.exchange = originalTransactionDocument.basket.exchange ? [...originalTransactionDocument.basket.exchange] : null;\r\n return this;\r\n }\r\n\r\n /**\r\n * line Promotions\r\n * @param basketDetails\r\n * @returns line Promotions\r\n */\r\n linePromotion(basketDetails: Basket): TransactionDocumentBuilder {\r\n this.transactionDocument.basket.linePromotion = [];\r\n for (let index = 0; index < basketDetails.products.length; index++) {\r\n const element = basketDetails.products[index];\r\n if (element.linePromotions) {\r\n this.transactionDocument.basket.linePromotion.push(\r\n element.linePromotions\r\n );\r\n this.transactionDocument.basket.linePromotion = this.transactionDocument.basket.linePromotion.reduce(\r\n (acc: any[], val: { itemLineId: any; }) => {\r\n if (!acc.find((el: { itemLineId: any; }) => el.itemLineId === val.itemLineId)) {\r\n acc.push(val);\r\n }\r\n return acc;\r\n },\r\n []\r\n );\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * transaction Promotion\r\n * @param basketDetails\r\n * @returns transaction Promotion\r\n */\r\n transactionPromotion(basketDetails: Basket): TransactionDocumentBuilder {\r\n if (basketDetails.transactionPromotion) {\r\n this.transactionDocument.basket.transactionPromotion =\r\n basketDetails.transactionPromotion;\r\n // for (let index = 0; index < basketDetails.TransactionDiscount.length; index++) {\r\n // this.transactionDocument.basket.transactionPromotion.push(element.linePromotions)\r\n // this.transactionDocument.basket.transactionPromotion = this.transactionDocument.basket.linePromotions.reduce((acc, val) => {\r\n // if (!acc.find(el => el.itemLineId === val.itemLineId)) {\r\n // acc.push(val);\r\n // }\r\n // return acc;\r\n // }, []);\r\n // }\r\n console.log(\r\n \"e-basket :TransactionDocumentBuilder: this.transactionDocument.basket.transactionPromotion\",\r\n JSON.stringify(this.transactionDocument.basket.transactionPromotion)\r\n );\r\n }\r\n return this;\r\n }\r\n\r\n transactionDiscount(basketDetails: Basket): TransactionDocumentBuilder {\r\n if (basketDetails.transactionDiscount) {\r\n this.transactionDocument.basket.transactionDiscount =\r\n basketDetails.transactionDiscount;\r\n\r\n console.log(\r\n \"e-basket :TransactionDocumentBuilder: transaction Discount\",\r\n JSON.stringify(this.transactionDocument.basket.transactionDiscount)\r\n );\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Payments details\r\n * @param paymentDetails\r\n * @returns\r\n */\r\n paymentDetails(paymentDetails: any) {\r\n console.info(\"ebasket : payment details after transaction completed\",JSON.stringify(paymentDetails));\r\n \r\n this.transactionDocument.paymentDetails = paymentDetails;\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Payments details\r\n * @param paymentDetails\r\n * @returns\r\n */\r\n splitPayment(splitPayment: boolean) { \r\n this.transactionDocument.splitPayment = splitPayment;\r\n return this;\r\n } \r\n\r\n /**\r\n * Payments details\r\n * @param paymentDetails\r\n * @returns\r\n */\r\n isPaymentCompleted(isPaymentCompleted: boolean) {\r\n this.transactionDocument.isPaymentCompleted = isPaymentCompleted;\r\n return this;\r\n } \r\n \r\n\r\n\r\n\r\n /**\r\n * Bases currency\r\n * @param currency\r\n * @returns currency\r\n */\r\n baseCurrency(currency: any): TransactionDocumentBuilder {\r\n this.transactionDocument.baseCurrency = currency;\r\n return this;\r\n }\r\n\r\n /**\r\n * gift option at\r\n * @returns at\r\n */\r\n giftOption(gift: any): TransactionDocumentBuilder {\r\n console.log(\r\n \"e-basket :TransactionDocumentBuilder: this.transactionDocument.giftoption\",\r\n gift\r\n );\r\n if (gift) {\r\n this.transactionDocument.giftedReceipt = gift;\r\n }\r\n return this;\r\n }\r\n /**\r\n\r\n/**\r\n * manual Discount\r\n * @param discountData\r\n * @returns\r\n */\r\n\r\n // manualDiscount(discountData : basketDiscount):TransactionDocumentBuilder {\r\n // let saleTotal = this.transactionDocument.basketSummary.basketTotal;\r\n // if(discountData.discountType =='Percent'){\r\n // this.transactionDocument.basketSummary.basketTotal = saleTotal-(saleTotal*(discountData.discountAmount/100));\r\n // discountData.discountAmount = -1*(saleTotal-this.transactionDocument.basketSummary.basketTotal);\r\n // }else {\r\n // this.transactionDocument.basketSummary.basketTotal =saleTotal-discountData.discountAmount;\r\n // discountData.discountAmount = -1*discountData.discountAmount;\r\n // }\r\n // this.transactionDocument.transactionDiscount.push(discountData);\r\n // return this;\r\n\r\n // }\r\n\r\n /**\r\n * Types transaction document builder\r\n * @param t\r\n * @returns type\r\n */\r\n type(t: any): TransactionDocumentBuilder {\r\n this.transactionDocument.type = t;\r\n return this;\r\n }\r\n /**\r\n * Operations status\r\n * @param o\r\n * @returns status\r\n */\r\n operationStatus(o: any): TransactionDocumentBuilder {\r\n this.transactionDocument.operationStatus = o;\r\n return this;\r\n }\r\n /**\r\n * Created at\r\n * @returns at\r\n */\r\n createdAt(): TransactionDocumentBuilder {\r\n const date = new Date();\r\n this.transactionDocument.createdAt = date.toISOString();\r\n this.transactionDocument.updatedAt = date.toISOString();\r\n return this;\r\n }\r\n /**\r\n * Updated at\r\n * @returns at\r\n */\r\n updatedAt(): TransactionDocumentBuilder {\r\n const date = new Date();\r\n this.transactionDocument.updatedAt = date.toISOString();\r\n return this;\r\n }\r\n /**\r\n * transsaction completion at\r\n * @returns transaction completion date\r\n */\r\n transactionCompletedAt(): TransactionDocumentBuilder {\r\n const date = new Date();\r\n this.transactionDocument.transCompletedAt = date.toISOString();\r\n return this;\r\n }\r\n /**\r\n * Builds transaction document builder\r\n * @returns build\r\n */\r\n build(): TransactionDocument {\r\n return this.transactionDocument;\r\n }\r\n\r\n /**\r\n * Sales total in refund\r\n * @param saleTotal\r\n * @returns total in refund\r\n */\r\n saleTotalInRefund(saleTotal: number): TransactionDocumentBuilder {\r\n this.transactionDocument.saleTotal = saleTotal;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets basket details\r\n * @returns basket details\r\n */\r\n getBasketDetails(): Basket {\r\n console.info(\"ebasket: Getting Basket for transactionDocument\", JSON.stringify(this.transactionDocument));\r\n\r\n let basket: Basket = {\r\n subsidiaryId : this.transactionDocument.subsidiaryId,\r\n transactionDiscount: this.transactionDocument.basket.transactionDiscount,\r\n transactionPromotion: this.transactionDocument.basket.transactionPromotion,\r\n transactionId: this.transactionDocument.transactionId,\r\n offlineTransactionId: this.transactionDocument.offlineTransactionId,\r\n total: this.transactionDocument.basketSummary.basketTotal,\r\n basketTotal: this.transactionDocument.basketSummary.basketTotal,\r\n discountTotal: this.transactionDocument.basketSummary.discountTotal,\r\n saleTotal: this.transactionDocument.basketSummary.saleTotal,\r\n refundTotal: this.transactionDocument.basketSummary.refundTotal,\r\n quantity: this.transactionDocument.basketSummary.totalItems,\r\n products: [],\r\n baseCurrency: this.transactionDocument.baseCurrency,\r\n customer: this.transactionDocument.customer,\r\n };\r\n\r\n basket.products = [] as Product[];\r\n this.transactionDocument.basket.products.forEach((product: { SKU: any; barCode: any; barcodes: any; description: any; imageUrls: any; totalLinePrice: any; itemLineId: any; excludePromotion: any; price: any; quantity: any; selectedRRPPrice: any; fullfilmentId: any; fullfilmentLocationName: any; deliveryGroup: string; leadTime: any; deliveryMethod: any; giftCard: any; giftCardExpiryDate: any; giftCardNumberIssued: any; giftCardRecipientEmail: any; giftCardRecipientName: any; refundedTotal: any; refundedQuantity: number; refundedReasonDescription: any; refundedReason: any; refundedPromotionalQuantity: any; isLastExchanged: any; }, index: any) => {\r\n console.log(JSON.stringify(product), \"ebasket: basket detail update in basket\");\r\n const p = {} as any;\r\n p.SKU = product.SKU;\r\n p.barcode = product.barCode;\r\n p.barcodes = product.barcodes;\r\n\r\n p.description = product.description;\r\n p.imageUrls = product.imageUrls;\r\n p.currency = this.transactionDocument.baseCurrency;\r\n p.totalLinePrice = product.totalLinePrice;\r\n p.itemLineId = Number(product.itemLineId);\r\n p.excludePromotion = product.excludePromotion;\r\n\r\n p.selectedPrice = product.price;\r\n p.quantity = product.quantity;\r\n p.total = product.totalLinePrice;\r\n p.selectedRRPPrice = product.selectedRRPPrice;\r\n\r\n p.fullfilmentId = product.fullfilmentId;\r\n p.fullfilmentLocationName = product.fullfilmentLocationName;\r\n p.deliveryGroup = product.deliveryGroup || \"1\";\r\n p.leadTime = product.leadTime;\r\n p.deliveryMethod = product.deliveryMethod || DELIVERY_METHODS.COLLECT_FROM_STORE.toString();\r\n\r\n if(p.fullfilmentId != this.transactionDocument.storeId)\r\n {\r\n p.isWebOrder = true;\r\n }\r\n \r\n p.giftCard = product.giftCard;\r\n p.giftCardExpiryDate = product.giftCardExpiryDate;\r\n p.giftCardNumberIssued = product.giftCardNumberIssued;\r\n p.giftCardRecipientEmail = product.giftCardRecipientEmail;\r\n p.giftCardRecipientName = product.giftCardRecipientName;\r\n \r\n if (\r\n this.transactionDocument.basket.lineDiscount &&\r\n this.transactionDocument.basket.lineDiscount.length > 0\r\n ) {\r\n this.transactionDocument.basket.lineDiscount.forEach((lineDiscount: { itemLineId: { toString: () => any; }; discountedLinePrice: any; }) => {\r\n if (product.itemLineId === lineDiscount.itemLineId.toString()) {\r\n p.lineDiscount = lineDiscount;\r\n p.total = lineDiscount.discountedLinePrice;\r\n }\r\n });\r\n }\r\n\r\n if (\r\n this.transactionDocument.basket.linePromotion &&\r\n this.transactionDocument.basket.linePromotion.length > 0\r\n ) {\r\n this.transactionDocument.basket.linePromotion.forEach((linePromotion: { itemLineId: { toString: () => any; }; promotionLinePrice: any; }) => {\r\n if (product.itemLineId === linePromotion.itemLineId.toString()) {\r\n p.linePromotions = linePromotion;\r\n p.total = linePromotion.promotionLinePrice;\r\n }\r\n });\r\n }\r\n\r\n if (\r\n this.transactionDocument.basket.taxBreakdown &&\r\n this.transactionDocument.basket.taxBreakdown.taxLines.length > 0\r\n ) {\r\n this.transactionDocument.basket.taxBreakdown.taxLines.forEach((taxLine: { itemLineId: { toString: () => any; }; VAT: any; VATCode: any; }) => {\r\n if (product.itemLineId && product.itemLineId === taxLine.itemLineId.toString()) {\r\n p.selectedVAT = taxLine.VAT;\r\n p.selectedVATCode = taxLine.VATCode;\r\n }\r\n });\r\n }\r\n\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.REFUND) {\r\n p.total = product.refundedTotal;\r\n } else if ((this.transactionDocument.type === TRANSACTION_TYPE.SALE_REFUND || TRANSACTION_TYPE.SALE_EXCHANGE) && product.refundedQuantity > 0) {\r\n p.refundedReasonDescription = product.refundedReasonDescription;\r\n p.refundedReason = product.refundedReason;\r\n if (!p.refundedReasonDescription) {\r\n p.refundedReasonDescription = p.refundedReason;\r\n }\r\n p.refundedQuantity = product.refundedQuantity;\r\n p.refundPromotionalQuantity = product.refundedPromotionalQuantity;\r\n p.refundedTotal = product.refundedTotal;\r\n p.total -= Math.abs(p.refundedTotal);\r\n p.isLastExchanged = product.isLastExchanged;\r\n }\r\n\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.REFUND) {\r\n if (p.total > 0) {\r\n p.total *= -1;\r\n }\r\n }\r\n\r\n basket.products.push(p);\r\n\r\n });\r\n\r\n basket = this.getTransactionDiscountAndTransactionPromotionPortion(basket);\r\n basket.total = (basket.basketTotal || 0) + this.getTotalDiscountWithTransactionDiscountsAndPromotions(basket);\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.SALE_REFUND) {\r\n basket.quantity = this.getRefundedTotalWithQuantity(basket);\r\n }\r\n console.info(\"ebasket: Basket created successfully\", JSON.stringify(basket))\r\n return basket;\r\n }\r\n\r\n /**\r\n * Gets basket details\r\n * @returns refund basket details\r\n */\r\n // getRefundBasketDetails(): Basket {\r\n // let basket: Basket = {\r\n // subsidiaryId : this.transactionDocument.subsidiaryId,\r\n // transactionDiscount: this.transactionDocument.basket.transactionDiscount,\r\n // transactionPromotion: this.transactionDocument.basket.transactionPromotion,\r\n // transactionId: this.transactionDocument.transactionId,\r\n // total: this.transactionDocument.basketSummary.basketTotal,\r\n // basketTotal: this.transactionDocument.basketSummary.basketTotal,\r\n // discountTotal: this.transactionDocument.basketSummary.discountTotal,\r\n // saleTotal: this.transactionDocument.basketSummary.saleTotal,\r\n // quantity: this.transactionDocument.basketSummary.totalItems,\r\n // products: [],\r\n // baseCurrency: this.transactionDocument.baseCurrency,\r\n // customer: this.transactionDocument.customer,\r\n // };\r\n\r\n // basket.products = [] as Product[];\r\n // this.transactionDocument.basket.products.forEach((product: { SKU: any; barCode: any; barcodes: any; description: any; imageUrls: any; totalLinePrice: any; itemLineId: any; excludePromotion: any; price: number; quantity: any; selectedRRPPrice: any; fullfilmentId: any; fullfilmentLocationName: any; deliveryGroup: string; leadTime: any; deliveryMethod: any; giftCard: any; giftCardExpiryDate: any; giftCardNumberIssued: any; giftCardRecipientEmail: any; giftCardRecipientName: any; itemDiscounts: any; refundedPromotionalQuantity: any; refundedQuantity: number; refunded: any; isLastExchanged: any; exchange: any; refundedTotal: number; }, index: any) => {\r\n // const p = {} as Product;\r\n // p.SKU = product.SKU;\r\n // p.barcode = product.barCode;\r\n // p.barcodes = product.barcodes;\r\n\r\n // p.description = product.description;\r\n // p.imageUrls = product.imageUrls;\r\n // p.currency = this.transactionDocument.baseCurrency;\r\n // p.totalLinePrice = product.totalLinePrice;\r\n // p.itemLineId = Number(product.itemLineId);\r\n // p.excludePromotion = product.excludePromotion;\r\n\r\n // p.selectedPrice = product.price;\r\n // p.quantity = product.quantity;\r\n // p.total = product.totalLinePrice;\r\n // p.selectedRRPPrice = product.selectedRRPPrice;\r\n\r\n // p.fullfilmentId = product.fullfilmentId;\r\n // p.fullfilmentLocationName = product.fullfilmentLocationName;\r\n // p.deliveryGroup = product.deliveryGroup || \"1\";\r\n // p.leadTime = product.leadTime;\r\n // p.deliveryMethod = product.deliveryMethod || DELIVERY_METHODS.COLLECT_FROM_STORE.toString();\r\n\r\n // p.giftCard = product.giftCard;\r\n // p.giftCardExpiryDate = product.giftCardExpiryDate;\r\n // p.giftCardNumberIssued = product.giftCardNumberIssued;\r\n // p.giftCardRecipientEmail = product.giftCardRecipientEmail;\r\n // p.giftCardRecipientName = product.giftCardRecipientName;\r\n \r\n \r\n // if(p.fullfilmentId != this.transactionDocument.storeId)\r\n // {\r\n // p.isWebOrder = true;\r\n // }\r\n \r\n // if (product.itemDiscounts) {\r\n // p.itemDiscounts = product.itemDiscounts as ItemDiscount;\r\n // }\r\n\r\n // // if(!p.itemDiscounts){\r\n // // console.log(p.itemDiscounts);\r\n\r\n // // this.basketService.transactionDiscountAndPromotionProductortionCalculation(basket);\r\n // // }\r\n // p.refundPromotionalQuantity = product.refundedPromotionalQuantity ? product.refundedPromotionalQuantity : 0;\r\n\r\n // if (product.refundedQuantity) {\r\n // p.quantity = p.quantity - product.refundedQuantity;\r\n // p.totalLinePrice = (p.quantity * product.price);\r\n // p.total = p.totalLinePrice;\r\n // // p.refundPromotionalQuantity = product.refundedPromotionalQuantity;\r\n // p.refunded = product.refunded;\r\n // p.isLastExchanged = product.isLastExchanged;\r\n // }\r\n // if (product.exchange) {\r\n // p.exchange = product.exchange;\r\n // }\r\n\r\n // if (\r\n // this.transactionDocument.basket.lineDiscount &&\r\n // this.transactionDocument.basket.lineDiscount.length > 0\r\n // ) {\r\n\r\n // this.transactionDocument.basket.lineDiscount.forEach((lineDiscount: { itemLineId: { toString: () => any; }; discountedLinePrice: any; }) => {\r\n\r\n // if (product.itemLineId === lineDiscount.itemLineId.toString() && product.refundedQuantity > 0) {\r\n // p.lineDiscount = Object.assign({}, lineDiscount);\r\n // p.lineDiscount.discountedLinePrice = p.lineDiscount.unitPrice * p.quantity\r\n // p.lineDiscount.discountAmount = p.total - p.lineDiscount.discountedLinePrice\r\n // p.total = p.lineDiscount.discountedLinePrice;\r\n // } else if (product.itemLineId === lineDiscount.itemLineId.toString()) {\r\n // p.lineDiscount = lineDiscount;\r\n // p.total = lineDiscount.discountedLinePrice\r\n // }\r\n // });\r\n // }\r\n\r\n // if (\r\n // this.transactionDocument.basket.linePromotion &&\r\n // this.transactionDocument.basket.linePromotion.length > 0\r\n // ) {\r\n // this.transactionDocument.basket.linePromotion.forEach((linePromotion: { itemLineId: { toString: () => any; }; refunded: any; }) => {\r\n // if (product.itemLineId === linePromotion.itemLineId.toString() && !linePromotion.refunded) {\r\n // p.linePromotions = linePromotion;\r\n // p.total = p.linePromotions.promotionLinePrice;\r\n // p.total = p.total - (product.refundedTotal ? Math.abs(product.refundedTotal) : 0);\r\n // }\r\n // });\r\n // }\r\n\r\n // p.refundedQuantity = 0;\r\n // p.refundedTotal = 0;\r\n\r\n // if (\r\n // this.transactionDocument.basket.taxBreakdown &&\r\n // this.transactionDocument.basket.taxBreakdown.taxLines.length > 0\r\n // ) {\r\n // this.transactionDocument.basket.taxBreakdown.taxLines.forEach((taxLine: { itemLineId: { toString: () => any; }; VAT: any; VATCode: any; }) => {\r\n // if (product.itemLineId === taxLine.itemLineId.toString()) {\r\n // p.selectedVAT = taxLine.VAT;\r\n // p.selectedVATCode = taxLine.VATCode;\r\n // }\r\n // });\r\n // }\r\n\r\n // if (p.quantity > 0) {\r\n // basket.products.push(p);\r\n // }\r\n // });\r\n // // product.itemDiscounts\r\n // if (!basket.products[0].hasOwnProperty('itemDiscounts')) {\r\n // basket = this.getTransactionDiscountAndTransactionPromotionPortion(basket);\r\n\r\n // }\r\n\r\n // console.log(\"ebasket : TransactionDocumentBuilder :new created refunded basket\", JSON.stringify(basket))\r\n // basket.quantity = basket.products.reduce(\r\n // (n: any, { quantity }: any) => n + quantity,\r\n // 0\r\n // );\r\n // basket.total = this.getTotalWithLineDiscountAndLinePromotionApplied(basket);\r\n // basket.basketTotal = basket.total;\r\n // basket.basketTotal = basket.basketTotal - this.getTotalDiscountWithTransactionDiscountsAndPromotions(basket);\r\n // console.log(\r\n // \"ebasket : TransactionDocumentBuilder : update Basket Total: after promotion :basketTotal\",\r\n // basket.basketTotal\r\n // );\r\n\r\n // console.log(\r\n // \"e:basket :TransactionDocumentBuilder : basketDetails updated values\",\r\n // JSON.stringify(basket)\r\n // );\r\n // return basket;\r\n // }\r\n\r\n\r\n getTransactionDiscountAndTransactionPromotionPortion(basket:any) {\r\n if (\r\n basket.transactionDiscount &&\r\n basket.transactionDiscount.length > 0\r\n ) {\r\n basket.transactionDiscount.forEach((discount: { itemLineIds: any; }) => {\r\n if (!discount.itemLineIds) {\r\n discount.itemLineIds = basket.products.map((product: { itemLineId: any; }) => {\r\n return product.itemLineId\r\n });\r\n }\r\n basket = this.basketService.transactionDiscountProductPortionCalc(basket, discount);\r\n });\r\n }\r\n if (\r\n basket.transactionPromotion &&\r\n basket.transactionPromotion.length > 0\r\n ) {\r\n basket.transactionPromotion.forEach((tPromotion: { itemLineIds: any; }) => {\r\n if (!tPromotion.itemLineIds) {\r\n const filteredData = basket.products.filter(\r\n (item: { excludePromotion: boolean; }) => {\r\n return item.excludePromotion === false;\r\n });\r\n\r\n tPromotion.itemLineIds =\r\n filteredData.map((product: { itemLineId: any; }) => {\r\n return product.itemLineId\r\n });\r\n }\r\n basket = this.basketService.transactionPromotionProductPortionCalc(basket, tPromotion);\r\n });\r\n }\r\n\r\n return basket;\r\n }\r\n\r\n\r\n getTotalDiscountWithTransactionDiscountsAndPromotions(basketDetails: any) {\r\n\r\n let discountTotal = 0;\r\n if (\r\n basketDetails.transactionPromotion &&\r\n basketDetails.transactionPromotion.length > 0\r\n ) {\r\n discountTotal += basketDetails.transactionPromotion.reduce(\r\n (n: any, { promotionAmount }: any) => n + promotionAmount,\r\n 0\r\n );\r\n }\r\n if (\r\n basketDetails.transactionDiscount &&\r\n basketDetails.transactionDiscount.length > 0\r\n ) {\r\n\r\n discountTotal += basketDetails.transactionDiscount.reduce(\r\n (n: any, { discountAmount }: any) => n + discountAmount,\r\n 0\r\n );\r\n\r\n\r\n }\r\n console.log(\"ebasket : TransactionDocumentBuilder : Transaction discount Total:\", discountTotal);\r\n\r\n return discountTotal;\r\n }\r\n\r\n\r\n appendCurrencySymbol(currency: number, value: number) {\r\n // value=this.decimalpipe.transform(value,'1.2');\r\n if (value >= 0) {\r\n const returnval = currency + value;\r\n console.log(returnval, \"ebasket: add currency with value\");\r\n return returnval;\r\n } else {\r\n const returnval = \"-\" + (currency + value * -1);\r\n console.log(returnval, \"-(currency+(value*-1))\");\r\n return returnval;\r\n }\r\n }\r\n\r\n // /**\r\n // * Updates total refund\r\n // * @returns total refund\r\n // */\r\n // updateTotalRefund(): TransactionDocumentBuilder {\r\n // this.transactionDocument.basket.products.forEach((product) => {\r\n // product.refundedQuantity = product.quantity;\r\n // product.refundedTotal = product.totalLinePrice * -1;\r\n // console.log(\r\n // \"ebasket: Transaction price override :\",\r\n // this.transactionDocument.basket.lineDiscount\r\n // );\r\n\r\n // if (\r\n // this.transactionDocument.basket.linePromotion &&\r\n // this.transactionDocument.basket.linePromotion.length > 0\r\n // ) {\r\n // this.transactionDocument.basket.linePromotion.forEach((linePromotion) => {\r\n // console.log(\r\n // \"Promotion: basket linePromotion : \",\r\n // this.transactionDocument.basket.linePromotion\r\n // );\r\n // console.log(\r\n // \"linePromotion.itemLineId.toString() : \",\r\n // linePromotion.itemLineId.toString()\r\n // );\r\n // console.log(\r\n // \"condition : \" +\r\n // (product.itemLineId === linePromotion.itemLineId.toString())\r\n // );\r\n\r\n // if (product.itemLineId === linePromotion.itemLineId.toString()) {\r\n // product.refundedTotal =\r\n // linePromotion.promotionLinePrice * -1;\r\n // }\r\n // });\r\n // } else\r\n // if (\r\n // this.transactionDocument.basket.lineDiscount &&\r\n // this.transactionDocument.basket.lineDiscount.length > 0\r\n // ) {\r\n // this.transactionDocument.basket.lineDiscount.forEach((lineDiscount) => {\r\n // console.log(\r\n // \"product.itemLineId : \" +\r\n // this.transactionDocument.basket.lineDiscount\r\n // );\r\n // console.log(\r\n // \"lineDiscount.itemLineId.toString() : \" +\r\n // lineDiscount.itemLineId.toString()\r\n // );\r\n // console.log(\r\n // \"condition : \" +\r\n // (product.itemLineId === lineDiscount.itemLineId.toString())\r\n // );\r\n\r\n // if (product.itemLineId === lineDiscount.itemLineId.toString()) {\r\n // product.refundedTotal = lineDiscount.unitPrice * product.refundedQuantity * -1;\r\n // }\r\n // });\r\n // }\r\n\r\n // console.log(\"Product description :\" + product.description);\r\n // console.log(\"Product total :\" + product.refundedTotal);\r\n // // product.displayrefundedamount=this.appendCurrencySymbol(CURRENCY[this.transactionDocument.baseCurrency],product.refundedTotal);\r\n // // console.log(product.displayrefundedamount,\"displayrefundedamount\");\r\n // product.refunded = true;\r\n // });\r\n // const baskettotal = (this.transactionDocument.basketSummary.basketTotal *= -1);\r\n // // this.transactionDocument.basketSummary.displaybaskettotal=this.appendCurrencySymbol(CURRENCY[this.transactionDocument.baseCurrency], baskettotal);\r\n // const saletotal = (this.transactionDocument.basketSummary.saleTotal *= -1);\r\n // // this.transactionDocument.basketSummary.displaysaletotal = this.appendCurrencySymbol(CURRENCY[this.transactionDocument.baseCurrency], saletotal);\r\n // (this.transactionDocument.basketSummary.VATTotal *= -1);\r\n // return this;\r\n // }\r\n\r\n /**\r\n * Sale Total\r\n * @param basketDetails\r\n * @returns Sale Total\r\n */\r\n updateSaleTotal(basketDetails: { products: any[]; }) {\r\n const saleTotal = basketDetails.products.reduce(\r\n (n: any, { totalLinePrice }: any) => n + totalLinePrice,\r\n 0\r\n );\r\n return saleTotal\r\n }\r\n\r\n getTotalWithLineDiscountAndLinePromotionApplied(basketDetails: { products: any; }): number {\r\n let saletotal: number = 0.0;\r\n for (let product of basketDetails.products) {\r\n // if (product.linePromotions) {\r\n // saletotal += product.linePromotions.promotionLinePrice;\r\n // } else if (\r\n // product.lineDiscount &&\r\n // !product.linePromotions\r\n // ) {\r\n // saletotal +=\r\n // product.quantity * Number(product.lineDiscount.unitPrice.toFixed(2));\r\n // } else {\r\n // saletotal +=\r\n // product.quantity * Number(product.selectedPrice.toFixed(2));\r\n // }\r\n saletotal += product.total;\r\n console.log(\r\n \"e-basket:update product Total:\" + saletotal,\r\n JSON.stringify(product)\r\n );\r\n }\r\n return saletotal;\r\n }\r\n\r\n getRefundedTotalWithQuantity(basketDetails: { products: string | any[]; }): number {\r\n let quantity = 0;\r\n for (let index = 0; index < basketDetails.products.length; index++) {\r\n const product: any = basketDetails.products[index];\r\n\r\n if (!product.refundedReasonDescription) {\r\n\r\n quantity = quantity + product.quantity;\r\n\r\n } else {\r\n quantity = quantity + (product.quantity - product.refundedQuantity);\r\n\r\n // basketDetails.total = basketDetails.total + product.refundedTotal;\r\n\r\n }\r\n }\r\n return quantity;\r\n\r\n }\r\n\r\n /**\r\n * Discount Total\r\n * @returns Discount Total\r\n */\r\n updateDiscountTotal() {\r\n let refundTotal = this.transactionDocument.basketSummary.refundTotal ? this.transactionDocument.basketSummary.refundTotal : 0;\r\n console.info(\"e-basket: transaction builder: refundTotal\", JSON.stringify(refundTotal),\r\n JSON.stringify(this.transactionDocument.basketSummary));\r\n const discountTotal =\r\n Math.abs(\r\n Math.abs(this.transactionDocument.basketSummary.saleTotal) -\r\n (\r\n Math.abs(this.transactionDocument.basketSummary.basketTotal) + Math.abs(refundTotal)\r\n )\r\n );\r\n console.log(\"e-basket: transaction builder: discountTotal\", JSON.stringify(discountTotal))\r\n return Number(discountTotal.toFixed(2));\r\n }\r\n\r\n updateReasonCode(reasonCode: {\r\n code: string;\r\n name: string;\r\n }): TransactionDocumentBuilder {\r\n this.transactionDocument.reasonCode = reasonCode.code;\r\n this.transactionDocument.reasonDescription = reasonCode.name;\r\n return this;\r\n }\r\n\r\n updateManagerOverride(\r\n useroverride: UserOverride\r\n ): TransactionDocumentBuilder {\r\n this.transactionDocument.override = useroverride;\r\n return this;\r\n }\r\n\r\n updateUserID(\r\n userID: string\r\n ): TransactionDocumentBuilder {\r\n this.transactionDocument.userId = userID;\r\n return this;\r\n }\r\n\r\n updateUserName(name: any) : TransactionDocumentBuilder {\r\n this.transactionDocument.userName = name;\r\n return this;\r\n\r\n }\r\n \r\n addCustomerDetails(customerDetail: Customer): TransactionDocumentBuilder {\r\n this.transactionDocument.customer = customerDetail;\r\n return this;\r\n }\r\n\r\n updateTaxBreakdown(basketDetails: Basket): TransactionDocumentBuilder {\r\n // let transactionDiscountTotal = 0;\r\n let taxBreakdown: TaxBreakdown = {\r\n taxLines: [],\r\n totalTaxableAmount: 0,\r\n };\r\n\r\n\r\n\r\n // if (this.transactionDocument.basket.transactionDiscount && this.transactionDocument.basket.transactionDiscount.length > 0) {\r\n // this.transactionDocument.basket.transactionDiscount.forEach((discount) => {\r\n // transactionDiscountTotal += discount.discountAmount;\r\n // });\r\n // }\r\n\r\n // if (this.transactionDocument.basket.transactionPromotion && this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n // this.transactionDocument.basket.transactionPromotion.forEach(\r\n // (promotion) => {\r\n // transactionDiscountTotal += promotion.promotionAmount;\r\n // }\r\n // );\r\n // }\r\n\r\n basketDetails.products.forEach((product: any) => {\r\n let taxLine: TaxLine = {\r\n itemLineId: product.itemLineId,\r\n VAT: product.selectedVAT ? product.selectedVAT : 0,\r\n VATCode: product.selectedVATCode,\r\n taxLineTotal: 0,\r\n taxableAmount: product.total,\r\n PreTax: 0\r\n };\r\n console.info(\"Product contribution : item line ID :\", product.itemLineId,\r\n \"tax line :\", JSON.stringify(taxLine));\r\n\r\n // step 1\r\n // if Transaction Discount and/or promotion applied, find net selling price of each product as taxableamount\r\n // if (transactionDiscountTotal > 0) {\r\n product = this.basketService.validateProductItemDiscount(product);\r\n\r\n const productContributionInTotal =\r\n product.itemDiscounts.trnDiscountsPortion +\r\n product.itemDiscounts.trnPromotionsPortion -\r\n product.itemDiscounts.refundPortion;\r\n // tp+td-rp;\r\n\r\n console.info(\"Product contribution : item line ID :\", product.itemLineId,\r\n \"contribution :\", JSON.stringify(productContributionInTotal));\r\n // calculate net selling price after applying transaction discount as per product contribution\r\n taxLine.taxableAmount -= productContributionInTotal;\r\n // }\r\n\r\n //step 2 - find pre tax\r\n taxLine.PreTax = this.numberUtilService.trimTo2Decimal2((taxLine.taxableAmount * 100) / (100 + taxLine.VAT));\r\n\r\n //step 3 - Update taxbreakdown\r\n taxBreakdown.totalTaxableAmount += taxLine.taxableAmount;\r\n taxLine.taxableAmount = this.numberUtilService.trimTo2Decimal2(taxLine.taxableAmount);\r\n \r\n // step 4 - update tax Line total\r\n taxLine.taxLineTotal = this.numberUtilService.trimTo2Decimal2(taxLine.taxableAmount - taxLine.PreTax);\r\n taxBreakdown.taxLines.push(taxLine);\r\n });\r\n\r\n taxBreakdown.totalTaxableAmount = this.numberUtilService.trimTo2Decimal2(taxBreakdown.totalTaxableAmount);\r\n this.transactionDocument.basket.taxBreakdown = taxBreakdown;\r\n return this;\r\n }\r\n\r\n updateTotalTaxSummary(): TransactionDocumentBuilder {\r\n\r\n console.log(\"Total Tax Summery Request :\", JSON.stringify(this.transactionDocument.basket.taxBreakdown));\r\n\r\n\r\n let totalTaxSummaryArray: TotalTaxSummary[] = []\r\n let totalTaxSummaryGroup = []\r\n\r\n console.log(\"Tax Lines for Total Tax Summery :\", JSON.stringify(this.transactionDocument.basket.taxBreakdown.taxLines));\r\n\r\n\r\n this.transactionDocument.basket.taxBreakdown.taxLines.forEach((element: { VATCode: any; VAT: any; PreTax: any; taxLineTotal: any; }) => {\r\n let TaxSummary: TotalTaxSummary = {\r\n VATCode: \"\",\r\n VAT: -12345,\r\n PreTaxSum: 0,\r\n TaxSum: 0,\r\n TXrateSum: 0\r\n \r\n };\r\n TaxSummary.VATCode = element.VATCode;\r\n TaxSummary.VAT = element.VAT; \r\n TaxSummary.PreTaxSum = this.numberUtilService.trimTo2Decimal2(element.PreTax);\r\n TaxSummary.TaxSum = this.numberUtilService.trimTo2Decimal2(element.taxLineTotal);\r\n TaxSummary.TXrateSum = this.numberUtilService.trimTo2Decimal2(TaxSummary.PreTaxSum + TaxSummary.TaxSum); \r\n totalTaxSummaryArray.push(TaxSummary);\r\n })\r\n\r\n console.log(\"Total Tax Summery Without Grouped : \", JSON.stringify(totalTaxSummaryArray));\r\n \r\n totalTaxSummaryGroup = totalTaxSummaryArray.reduce((preparedArray:any,currentObj) => {\r\n\r\n let ind = preparedArray.findIndex((x: { VAT: any; }) => x.VAT === currentObj.VAT);\r\n if(ind === -1){\r\n preparedArray.push(currentObj)\r\n }else {\r\n preparedArray[ind].VATCode = currentObj.VATCode;\r\n preparedArray[ind].VAT = currentObj.VAT;\r\n preparedArray[ind].PreTaxSum += currentObj.PreTaxSum;\r\n preparedArray[ind].TaxSum += currentObj.TaxSum;\r\n preparedArray[ind].TXrateSum += currentObj.TXrateSum;\r\n }\r\n return preparedArray;\r\n },[])\r\n \r\n console.log(\"Total Tax Summer Group :\",totalTaxSummaryGroup);\r\n\r\n\r\n this.transactionDocument.basket.totalTaxSummary = totalTaxSummaryGroup;\r\n\r\n return this;\r\n\r\n }\r\n\r\n\r\n /**\r\n * TransactionId\r\n * @returns OriginalTransactionId\r\n */\r\n addOriginalTransId(tranDoc:TransactionDocument): TransactionDocumentBuilder {\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.REFUND || this.transactionDocument.type === TRANSACTION_TYPE.SALE_REFUND || this.transactionDocument.type === TRANSACTION_TYPE.SALE_EXCHANGE) {\r\n this.transactionDocument.originalTransId = tranDoc.transactionId;\r\n if(tranDoc.apiResponse && tranDoc.apiResponse.internalId)\r\n {\r\n this.transactionDocument.originalExternalId = tranDoc.apiResponse.internalId.toString();\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * unreferenced Refund\r\n * @returns boolean value\r\n */\r\n addUnreferencedRefund(): TransactionDocumentBuilder {\r\n this.transactionDocument.unreferencedRefund = true;\r\n return this;\r\n }\r\n\r\n getRefundTotal() {\r\n let totalRefund = 0;\r\n for (let index = 0; index < this.transactionDocument.basket.products.length; index++) {\r\n const product: TProduct = this.transactionDocument.basket.products[index];\r\n if (product.refundedTotal) {\r\n totalRefund = totalRefund + product.refundedTotal;\r\n }\r\n console.log(\"ebasket : transaction Service: totalRefund\" + totalRefund)\r\n }\r\n return totalRefund;\r\n }\r\n\r\n docId(docId: any): TransactionDocumentBuilder {\r\n this.transactionDocument.id = docId;\r\n return this;\r\n }\r\n}\r\n","import { DISCOUNTTYPE, LineDiscount, TProduct, TransactionDiscount, TransactionDocument, TRANSACTION_TYPE } from \"./mapper-library.model\"\r\nimport { TransactionDocumentBuilder } from \"./TransactionDocumentBuilder\";\r\nexport class RJMapperBuilderClass {\r\n\r\n private transactionDocument: TransactionDocument;\r\n private deviceId: any;\r\n private transactionNumber: any;\r\n private manifestVersion: any;\r\n private databaseSchemaVersion: any;\r\n private basketType: any;\r\n private xmlSchemaVersion: any;\r\n private majorVersion: any;\r\n private minorVersion: any;\r\n private externalState: any;\r\n private cashierId: any;\r\n private companyId: any;\r\n private terminalNumber: any;\r\n private taxMethodId: any;\r\n private tradingRegionId: any;\r\n private basketCurrencyId: any;\r\n private basketCountryId: any;\r\n private basketLanguageId: any;\r\n private itemCount = 0;\r\n private largestNumber = 0;\r\n private branchId: any;\r\n private createdAt: any;\r\n private updatedAt :any;\r\n private salesPersonName: any;\r\n private rjObject: any = {}\r\n\r\n constructor(transactionDoc?: TransactionDocument) {\r\n if (transactionDoc) {\r\n this.transactionDocument = transactionDoc;\r\n } else {\r\n this.transactionDocument = {\r\n transactionId: \"\",\r\n offlineTransactionId: \"\",\r\n transactionRef: \"\",\r\n dateTime: \"\",\r\n orgCode: \"\",\r\n storeId: \"\",\r\n storeNodeId: \"\",\r\n storeNodeStructure: \"\",\r\n deviceId: \"\",\r\n terminalId: \"\",\r\n userId: \"\",\r\n initiatingModule: \"eBasket\",\r\n export: false,\r\n basket: {} as any,\r\n basketSummary: {} as any,\r\n baseCurrency: \"\",\r\n type: \"\",\r\n operationStatus: \"\",\r\n createdAt: \"\",\r\n updatedAt: \"\",\r\n id: \"\",\r\n currentTransactionDetails: {} as any,\r\n saleTotal: 0,\r\n };\r\n }\r\n this.initilizeItemCount();\r\n this.setLineNumberForProducts();\r\n this.createdAt = this.getDate(this.transactionDocument.createdAt);\r\n this.updatedAt = this.getDate(this.transactionDocument.updatedAt);\r\n }\r\n\r\n getPosbasketInfo() {\r\n this.rjObject['Keyword'] = this.generateKeyword();\r\n this.rjObject['ID'] = this.generateId(this.createdAt);\r\n this.rjObject['XMLSchemaVersion'] = '2';\r\n this.rjObject['LastUpdated'] = this.updatedAt;\r\n this.rjObject['MajorVersion'] = this.majorVersion;\r\n this.rjObject['MinorVersion'] = this.minorVersion;\r\n this.rjObject['ManifestVersion'] = this.manifestVersion;\r\n this.rjObject['DatabaseSchemaVersion'] = this.databaseSchemaVersion;\r\n this.rjObject['BasketType'] = this.basketType;\r\n this.rjObject['State'] = this.getState();\r\n this.rjObject['ExternalState'] = this.externalState;\r\n\r\n return this;\r\n }\r\n\r\n\r\n getheaderInfo() {\r\n this.rjObject['Header'] = {};\r\n this.rjObject['Header'].TimeZoneOffset = this.convertToString(this.generateTimezoneoffset(this.transactionDocument.createdAt));\r\n this.rjObject['Header'].DateTimeCreated = this.createdAt;\r\n this.rjObject['Header'].OriginatedBy = {};\r\n this.rjObject['Header'].OriginatedBy.DeviceID = this.deviceId;\r\n this.rjObject['Header'].OriginatedBy.CashierID = this.cashierId;\r\n this.rjObject['Header'].OriginatedBy.CompanyID = this.companyId;\r\n this.rjObject['Header'].OriginatedBy.StoreID = this.transactionDocument.storeId;\r\n this.rjObject['Header'].OriginatedBy.BranchID = this.branchId;\r\n this.rjObject['Header'].OriginatedBy.TerminalNumber = this.terminalNumber;\r\n this.rjObject['Header'].OriginatedBy.TransactionNumber = this.transactionNumber;\r\n this.rjObject['Header'].TaxMethodID = this.taxMethodId;\r\n this.rjObject['Header'].DynamicStockLookup = this.generateDynamicStockLookUp();\r\n this.rjObject['Header'].BasketLanguageID = this.basketLanguageId; //todo\r\n this.rjObject['Header'].BasketCountryID = this.basketCountryId; //todo\r\n this.rjObject['Header'].BasketCurrencyID = this.transactionDocument.baseCurrency;\r\n this.rjObject['Header'].TradingRegionID = this.tradingRegionId;\r\n this.rjObject['Header'].Eurozone = \" \";//unknown\r\n this.rjObject['Header'].EuroBaseExchangeRate = \"\"; //unknown\r\n this.rjObject['Header'].PrintableName = this.transactionDocument.userName; //unknown\r\n\r\n return this;\r\n }\r\n\r\n rjMapper() {\r\n var transactionDiscount:any = [] ;\r\n if (this.transactionDocument.basket.transactionDiscount && this.transactionDocument.basket.transactionDiscount.length > 0) {\r\n transactionDiscount = this.transactionDocument.basket.transactionDiscount\r\n }\r\n if (this.transactionDocument.type === TRANSACTION_TYPE.SALE) {\r\n this.rjObject['ProductSale'] = [];\r\n this.rjObject['ModifierItem'] = [];\r\n\r\n this.transactionDocument.basket.products.forEach((element: any) => {\r\n let lineDiscount = [];\r\n if (this.transactionDocument.basket.lineDiscount && this.transactionDocument.basket.lineDiscount.length > 0) {\r\n lineDiscount = this.transactionDocument.basket.lineDiscount.filter((x: any) => x.itemLineId === element.itemLineId);\r\n if (lineDiscount.length > 0) {\r\n const index = this.transactionDocument.basket.lineDiscount.indexOf(lineDiscount[0]);\r\n if (index > -1) {\r\n this.transactionDocument.basket.lineDiscount.splice(index, 1);\r\n }\r\n }\r\n }\r\n let data = this.addProduct(element, (lineDiscount.length > 0 ? lineDiscount[0] : null),(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n this.rjObject['ProductSale'].push(data);\r\n this.getModifierItem(lineDiscount.length > 0 ? lineDiscount[0] : null, element.itemLineId);\r\n });\r\n let transactionPromotion = [];\r\n if (this.transactionDocument.basket.transactionPromotion && this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n transactionPromotion = this.transactionDocument.basket.transactionPromotion;\r\n this.getTransactionPromotion(transactionPromotion);\r\n }\r\n } else if (this.transactionDocument.type === TRANSACTION_TYPE.REFUND) {\r\n this.rjObject['ProductReturn'] = [];\r\n this.rjObject['ModifierItem'] = []; \r\n this.transactionDocument.basket.products.forEach((element: any) => {\r\n let data = this.returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null),(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n this.rjObject['ProductReturn'].push(data);\r\n this.getModifierItem(element.lineDiscount, element.itemLineId);\r\n });\r\n } else if (this.transactionDocument.type === TRANSACTION_TYPE.SALE_REFUND) {\r\n this.rjObject['ProductReturn'] = [];\r\n this.rjObject['ModifierItem'] = [];\r\n \r\n let transactionDoc: any = new TransactionDocumentBuilder().basket(this.transactionDocument.currentTransactionDetails).build();\r\n transactionDoc.basket.products.forEach((element: any) => {\r\n let data = this.returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null),(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n let obj = {\r\n \"OriginalReceiptSupplied\": 0,\r\n \"OriginalBranchID\": 0,\r\n \"OriginalTerminalNumber\": 0,\r\n \"OriginalTransactionNumber\": 0,\r\n \"OriginalCashierNumber\": 0\r\n };\r\n data['Return'] = {...data['Return'], ...obj};\r\n this.rjObject['ProductReturn'].push(data);\r\n this.getModifierItem(element.lineDiscount, element.itemLineId);\r\n })\r\n } else if (this.transactionDocument.type === TRANSACTION_TYPE.SALE_EXCHANGE) {\r\n this.rjObject['ProductReturn'] = [];\r\n this.rjObject['ProductSale'] = [];\r\n this.rjObject['ModifierItem'] = [];\r\n \r\n let transactionDoc: any = new TransactionDocumentBuilder().basket(this.transactionDocument.currentTransactionDetails).build();\r\n transactionDoc.basket.products.forEach((element: any) => {\r\n if (element.refundedQuantity > 0) {\r\n let returnProduct = this.returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null),(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n let obj = {\r\n \"OriginalReceiptSupplied\": 0,\r\n \"OriginalBranchID\": 0,\r\n \"OriginalTerminalNumber\": 0,\r\n \"OriginalTransactionNumber\": 0,\r\n \"OriginalCashierNumber\": 0\r\n };\r\n returnProduct['Return'] = {...returnProduct['Return'], ...obj};\r\n this.rjObject['ProductReturn'].push(returnProduct);\r\n } else {\r\n let addProduct = this.addProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null) ,(transactionDiscount.length > 0 ? transactionDiscount : null));\r\n this.rjObject['ProductSale'].push(addProduct);\r\n }\r\n this.getModifierItem(element.lineDiscount, element.itemLineId);\r\n })\r\n\r\n }\r\n return this;\r\n }\r\n\r\n getBasketDiscount() {\r\n if (!this.transactionDocument.basket.transactionDiscount) return this;\r\n this.rjObject['BasketDiscount'] = [];\r\n this.transactionDocument.basket.transactionDiscount.forEach((element: any) => {\r\n let obj: any = {}\r\n obj['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['DeviceID']=this.deviceId;\r\n obj['DateTimeCreated']=this.updatedAt;\r\n obj['NetValue'] = this.convertToString(element.discountAmount * -1);\r\n obj['EffectiveNetValue'] =this.convertToString( element.discountAmount * -1);\r\n obj['Description'] = element.reasonDisplayText;\r\n obj['UserID'] = this.transactionDocument.userName;\r\n obj['ReasonCodeID'] = element.reasonCode;\r\n obj['DiscountType'] = this.convertToString(element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase() ? 0 : 1); \r\n obj['RoundingRule'] = this.convertToString(2);\r\n obj['ModifiedLineNumber'] = element.itemLineIds; \r\n obj['LineNumber'] = this.convertToString(this.generateLineNumber()); \r\n obj['DiscountedValue'] = this.transactionDocument.basketSummary.basketTotal + this.transactionDocument.basketSummary.discountTotal;\r\n if(element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase()){\r\n obj['DiscountPercentage'] = this.convertToString((element.discountAmount / this.transactionDocument.basketSummary.basketTotal).toFixed(1))\r\n }\r\n if(this.transactionDocument.type === 'REFUND'){\r\n obj['NetValue'] = this.convertToString(element.discountAmount < 0 ? -element.discountAmount : element.discountAmount);\r\n obj['EffectiveNetValue'] =this.convertToString( element.discountAmount < 0 ? -element.discountAmount : element.discountAmount);\r\n }\r\n\r\n this.rjObject['BasketDiscount'].push(obj);\r\n });\r\n return this;\r\n }\r\n\r\n getModifierItem(data: any, lineNo: any) {\r\n if (data && lineNo) {\r\n let obj: any = {};\r\n obj.XMLSchemaVersion = 1;\r\n obj.LineNumber = this.generateLineNumber();\r\n obj.NetValue = 0;\r\n obj.EffectiveNetValue = 0;\r\n obj.Description = data.percentageDiscountReasonName ? data.percentageDiscountReasonName : data.priceOverrideReasonName;\r\n obj.DeviceID = this.deviceId;\r\n obj.UserID = this.transactionDocument.userName;\r\n obj.DateTimeCreated = this.updatedAt;\r\n obj.AuthorisingUserID = this.transactionDocument.userName;\r\n obj.ReasonCodeID = data.percentageDiscountReasonCode ? data.percentageDiscountReasonCode : data.priceOverrideReasonCode;\r\n obj.ModifiedLineNumber = lineNo;\r\n obj.ModifiedIndex = 1;\r\n\r\n this.rjObject['ModifierItem'].push(obj);\r\n }\r\n }\r\n\r\n getTrailerInfo() {\r\n this.rjObject['Trailer'] = {};\r\n this.rjObject.Trailer.DateTimeCompleted = this.updatedAt;\r\n this.rjObject.Trailer.CompletedBy = {};\r\n this.rjObject.Trailer.CompletedBy.DeviceID = this.deviceId;\r\n this.rjObject.Trailer.CompletedBy.CashierID = this.cashierId;\r\n this.rjObject.Trailer.CompletedBy.StoreID = this.transactionDocument.storeId;\r\n this.rjObject.Trailer.CompletedBy.BranchID = this.branchId;\r\n this.rjObject.Trailer.CompletedBy.TerminalNumber = this.terminalNumber;\r\n this.rjObject.Trailer.CompletedBy.TransactionNumber = this.transactionNumber;\r\n this.rjObject.Trailer.Total = this.convertToString(this.transactionDocument.basketSummary.basketTotal * 100);\r\n this.rjObject.Trailer.ItemCount = this.itemCount; //gives total count for product\r\n this.rjObject.Trailer.ItemQuantity = this.convertToString(this.transactionDocument.basketSummary.totalItems);\r\n this.rjObject.Trailer.NetItemQuantity = this.convertToString(this.transactionDocument.basketSummary.totalItems);\r\n this.rjObject.Trailer.TaxTotal = this.convertToString(this.removeDecimal(this.transactionDocument.basketSummary.VATTotal));\r\n this.rjObject.Trailer.SequenceDeviceID = this.deviceId;\r\n this.rjObject.Trailer.SequenceNumber = 'snsn' //static for now\r\n\r\n this.rjObject['Trailer']['TaxItem'] = [];\r\n this.transactionDocument.basket.taxBreakdown.taxLines.forEach((element: any) => {\r\n let obj: any = {};\r\n\r\n obj['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['TaxRate'] = this.convertToString(element.VATCode);\r\n obj['TaxableTotal'] = this.convertToString(this.removeDecimal(element.taxableAmount));\r\n obj['TaxTotal'] = this.convertToString(this.removeDecimal(this.removeDecimal(element.taxLineTotal)));\r\n obj['TaxDescription'] = this.convertToString(element.VATCode);\r\n obj['TaxIncluded'] = '1';\r\n obj['TaxPercentage'] = this.addDecimal(element.VAT.toFixed(2)).toFixed(2);\r\n\r\n this.rjObject['Trailer']['TaxItem'].push(obj)\r\n });\r\n if (this.transactionDocument.basket.linePromotion.length > 0 || this.transactionDocument.basket.linePromotion.length > 0) {\r\n this.rjObject['Trailer']['PromotionItem'] = [];\r\n if (this.transactionDocument.basket.linePromotion.length > 0) {\r\n this.transactionDocument.basket.linePromotion.forEach((element: any) => {\r\n let obj: any = {};\r\n\r\n obj['PromotionID'] = element.promotionId;\r\n obj['PromotionSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;\r\n obj['PromotionQuantity'] = \"1\";\r\n obj['PromotionDescription'] = element.displayText;\r\n obj['PromotionHit'] = {}\r\n obj['PromotionHit']['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['PromotionHit']['HitNumber'] = \"1\";\r\n obj['PromotionHit']['HitQuantity'] = \"1\";\r\n obj['PromotionHit']['HitSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;\r\n obj['PromotionHit']['PromotionTrigger'] = {};\r\n let product = this.transactionDocument.basket.products.find((item: any) => item.itemLineId == element.itemLineId);\r\n obj['PromotionHit']['PromotionTrigger']['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['PromotionHit']['PromotionTrigger']['ProductID'] = product.SKU;\r\n obj['PromotionHit']['PromotionTrigger']['UnitValue'] = this.convertToString(element.promotionLinePrice / product.quantity);\r\n obj['PromotionHit']['PromotionTrigger']['LineNumber'] = this.getNumber(product.SKU);\r\n obj['PromotionHit']['PromotionTrigger']['Quantity'] = this.convertToString(product.quantity.toFixed(1));\r\n obj['PromotionHit']['PromotionTrigger']['TaxCode'] = this.transactionDocument.basket.taxBreakdown.taxLines.find((item: any) => item.itemLineId == element.itemLineId).VATCode;\r\n this.rjObject['Trailer']['PromotionItem'].push(obj);\r\n });\r\n }\r\n\r\n if (this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n\r\n this.transactionDocument.basket.transactionPromotion.forEach((element: any) => {\r\n let obj: any = {};\r\n obj['PromotionID'] = element.promotionId;\r\n obj['PromotionSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;\r\n obj['PromotionQuantity'] = \"1\";\r\n obj['PromotionDescription'] = element.displayText;\r\n obj['PromotionHit'] = {}\r\n obj['PromotionHit']['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['PromotionHit']['HitNumber'] = \"1\";\r\n obj['PromotionHit']['HitQuantity'] = \"1\";\r\n obj['PromotionHit']['HitSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;\r\n obj['PromotionHit']['PromotionTrigger'] = [];\r\n this.transactionDocument.basket.products.forEach((product: any) => {\r\n let promotionTrigger = {};\r\n element.itemLineIds.forEach((itemLineId: any) => {\r\n if (JSON.stringify(itemLineId) === product.itemLineId) {\r\n promotionTrigger['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n promotionTrigger['ProductID'] = product.SKU;\r\n promotionTrigger['UnitValue'] = this.convertToString(element.promotionLinePrice / product.quantity);\r\n promotionTrigger['LineNumber'] = this.getNumber(product.SKU);\r\n promotionTrigger['Quantity'] = this.convertToString(product.quantity);\r\n promotionTrigger['TaxCode'] = this.transactionDocument.basket.taxBreakdown.taxLines.find((item: any) => item.itemLineId == product.itemLineId).VATCode;\r\n obj['PromotionHit']['PromotionTrigger'].push(promotionTrigger);\r\n }\r\n });\r\n });\r\n this.rjObject['Trailer']['PromotionItem'].push(obj);\r\n });\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n getTenderInfo() {\r\n if (this.transactionDocument.paymentDetails && this.transactionDocument.paymentDetails.length > 0) {\r\n this.transactionDocument.paymentDetails.forEach((element: any) => {\r\n if(element.externalTenderKey){\r\n this.rjObject[element.externalTenderKey] = [];\r\n if (element.paymentType.toUpperCase() === 'GIFT CARD') {\r\n let obj = {\r\n XMLSchemaVersion: this.xmlSchemaVersion,\r\n LineNumber: this.generateLineNumber(),\r\n NetValue: this.convertToString(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n EffectiveNetValue: this.convertToString(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n Description: this.getDescription(element),\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.updatedAt,\r\n TenderType: element.externalTenderType ? element.externalTenderType : '',\r\n TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',\r\n TenderAmount: this.convertToString(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n CurrencyID: this.transactionDocument.baseCurrency,\r\n CurrencyDescription: this.transactionDocument.baseCurrency,\r\n GiftVoucherSalesAllowed: '',//todo\r\n AllowRechargeableVoucherSales: '',//todo\r\n GiftVoucherID: ''\r\n }\r\n this.rjObject[element.externalTenderKey].push(obj)\r\n }\r\n else {\r\n let obj1 = {\r\n XMLSchemaVersion: \"1\",\r\n LineNumber: this.generateLineNumber(),//todo\r\n NetValue: this.convertToString(-1 * this.removeDecimal(Math.round(element.amount))),\r\n EffectiveNetValue: this.convertToString(-1 * this.removeDecimal(Math.round(element.amount))),\r\n Description: this.getDescription(element),\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.updatedAt,\r\n TenderType: element.externalTenderType ? element.externalTenderType : '',\r\n TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',\r\n TenderAmount: this.convertToString(-1 * this.removeDecimal(Math.round(element.amount))),\r\n CurrencyID: this.transactionDocument.baseCurrency,\r\n CurrencyDescription: this.transactionDocument.baseCurrency,\r\n IncludeInTransactionTotalCheck: \"1\",\r\n AllowRechargeableVoucherSales: \"1\",\r\n OpenDrawerAtEnd: \"1\"\r\n }\r\n this.rjObject[element.externalTenderKey].push(obj1)\r\n }\r\n } else{\r\n this.rjObject['CashTender'] = [];\r\n if (element.paymentType.toUpperCase() === 'GIFT CARD') {\r\n let obj = {\r\n XMLSchemaVersion: this.xmlSchemaVersion,\r\n LineNumber: this.generateLineNumber(),\r\n NetValue: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n EffectiveNetValue: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n Description: this.getDescription(element),\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.updatedAt,\r\n TenderType: element.externalTenderType ? element.externalTenderType : '',\r\n TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',\r\n TenderAmount: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n CurrencyID: this.transactionDocument.baseCurrency,\r\n CurrencyDescription: this.transactionDocument.baseCurrency,\r\n GiftVoucherSalesAllowed: '',//todo\r\n AllowRechargeableVoucherSales: '',//todo\r\n GiftVoucherID: ''\r\n }\r\n this.rjObject['CashTender'].push(obj)\r\n }\r\n else {\r\n let obj1 = {\r\n XMLSchemaVersion: \"1\",\r\n LineNumber: this.generateLineNumber(),\r\n NetValue: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n EffectiveNetValue: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n Description: this.getDescription(element),\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.updatedAt,\r\n TenderType: element.externalTenderType ? element.externalTenderType : '',\r\n TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',\r\n TenderAmount: JSON.stringify(-1 * this.removeDecimal((Math.round(element.amount)))),\r\n CurrencyID: this.transactionDocument.baseCurrency,\r\n CurrencyDescription: this.transactionDocument.baseCurrency,\r\n IncludeInTransactionTotalCheck: \"1\",\r\n AllowRechargeableVoucherSales: \"1\",\r\n OpenDrawerAtEnd: \"1\"\r\n }\r\n this.rjObject['CashTender'].push(obj1)\r\n }\r\n }\r\n });\r\n }\r\n return this;\r\n }\r\n\r\n getNumber(productId) {\r\n let lineNumber; \r\n for (let i = 0; i < this.rjObject['ProductSale'].length; i++) {\r\n const element = this.rjObject['ProductSale'][i];\r\n if(JSON.stringify(productId) === JSON.stringify(element.ProductID)){\r\n lineNumber = element.LineNumber;\r\n break;\r\n }\r\n }\r\n return lineNumber;\r\n }\r\n\r\n setLineNumberForProducts() {\r\n let itemLineIdArray = [];\r\n itemLineIdArray = this.transactionDocument.basket.products.map((product: any) => {\r\n return parseInt(product.itemLineId);\r\n })\r\n this.largestNumber = itemLineIdArray.reduce((a: any, b: any) => Math.max(a, b));\r\n }\r\n\r\n generateLineNumber() {\r\n this.largestNumber += 1;\r\n this.itemCount += 1;\r\n return this.largestNumber;\r\n }\r\n\r\n initilizeItemCount() {\r\n this.itemCount = this.transactionDocument.basket.products.length;\r\n }\r\n\r\n build() {\r\n return this.rjObject;\r\n }\r\n\r\n getDescription(element: any) {\r\n if (element.paymentType.toUpperCase() === 'CARD') {\r\n return element.cardType\r\n }\r\n else {\r\n return element.paymentType;\r\n }\r\n }\r\n\r\n getMMGROUPID(attributes) {\r\n if (attributes && attributes.length > 0) {\r\n let filterValue = attributes.filter((attribute) => attribute.name === \"MMGROUPID\");\r\n if(filterValue && filterValue.length > 0){\r\n return filterValue[0].value;\r\n }\r\n }\r\n }\r\n\r\n setDeviceInfo(id: any) {\r\n this.deviceId = id\r\n return this\r\n }\r\n\r\n removeDecimal(value: number) {\r\n return value * 100;\r\n }\r\n\r\n addDecimal(value: number) {\r\n return value /100;\r\n }\r\n\r\n setTransactionNumber(value: any) {\r\n this.transactionNumber = value;\r\n return this\r\n }\r\n\r\n setManifestVersion(value: any) {\r\n this.manifestVersion = value;\r\n return this\r\n }\r\n\r\n setDatabaseSchemaVersion(value: any) {\r\n this.databaseSchemaVersion = value;\r\n return this\r\n }\r\n\r\n setBasketType(value: any) {\r\n this.basketType = value;\r\n return this\r\n }\r\n\r\n setTradingRegionID(value: any) {\r\n this.tradingRegionId = value\r\n return this\r\n }\r\n\r\n setCompanyID(value: any) {\r\n this.companyId = value\r\n return this\r\n }\r\n\r\n setTaxMethodID(value: any) {\r\n this.taxMethodId = value\r\n return this\r\n }\r\n\r\n setMajorVersion(value: any) {\r\n this.majorVersion = value\r\n return this\r\n }\r\n\r\n setMinorVersion(value: any) {\r\n this.minorVersion = value\r\n return this\r\n }\r\n\r\n setXMLSchemaVersion(value: any) {\r\n this.xmlSchemaVersion = value\r\n return this\r\n }\r\n\r\n setExternalState(value: any) {\r\n this.externalState = value\r\n return this\r\n }\r\n\r\n setCashierID() {\r\n this.cashierId = (this.transactionDocument && this.transactionDocument.userName) ? this.transactionDocument.userName : '';\r\n return this\r\n }\r\n\r\n setTerminalNumber(value: any) {\r\n this.terminalNumber = value;\r\n return this;\r\n }\r\n\r\n setBasketLanguageID(value: any) {\r\n this.basketLanguageId = value;\r\n return this;\r\n }\r\n setBasketCountryID(value: any) {\r\n this.basketCountryId = value;\r\n return this;\r\n }\r\n\r\n setBasketCurrencyID(value: any) {\r\n this.basketCurrencyId = value;\r\n return this;\r\n }\r\n\r\n setBranchID(value: any) {\r\n this.branchId = value;\r\n return this;\r\n }\r\n\r\n setSalesPersonName(value: any) {\r\n this.salesPersonName = value;\r\n return this;\r\n }\r\n\r\n generateId(date: any) {\r\n let newDateTime = date.replace(/[^0-9]/g, '')\r\n let id = (this.deviceId + '|' + newDateTime + '|' + this.transactionNumber).toString();\r\n return id;\r\n } \r\n\r\n generateTimezoneoffset(date: any) {\r\n let x = date ? date : '';\r\n return new Date(x).getTimezoneOffset();\r\n }\r\n\r\n generateKeyword() {\r\n let x = (this.companyId + '|' + this.transactionDocument.storeId + '|' + this.terminalNumber + '|' + this.transactionNumber).toString();\r\n return x;\r\n }\r\n\r\n getState() {\r\n if (this.transactionDocument.operationStatus === 'PAY_SUCCESS') {\r\n return 'Completed';\r\n }\r\n else {\r\n return 'Cancelled';\r\n }\r\n }\r\n\r\n returnProduct(element: any, lineDiscount: LineDiscount , transactionDiscount: TransactionDiscount) {\r\n let obj: any = {};\r\n let taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((item: any) => item.itemLineId == element['itemLineId']);\r\n obj['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n obj['LineNumber'] = element['itemLineId'];\r\n obj['NetValue'] = this.removeDecimal(element['refundedTotal']);\r\n obj['EffectiveNetValue'] = this.removeDecimal(element['refundedTotal']);\r\n obj['Description'] = element['description'];\r\n obj['DeviceID'] = this.transactionDocument['terminalId'];\r\n obj['UserID'] = this.transactionDocument.userName;\r\n obj['DateTimeCreated'] = this.createdAt;\r\n obj['ExtendedValue'] = this.removeDecimal(element['totalLinePrice']*-1);\r\n obj['UnitPrice'] = this.removeDecimal(element['price']);\r\n obj['Quantity'] = this.getQuantity(element);\r\n obj['OriginalTaxAmountSet'] = 1;\r\n obj['ProductID'] = element['SKU'];\r\n obj['HandKeyed'] = 1;\r\n obj['LongDescription'] = element['description'];\r\n obj['Return'] = {};\r\n obj['Return']['ReturnReasonID'] = element['refundedReason'];\r\n obj['Return']['ReturnDescription'] = element['refundedReasonDescription'];\r\n obj['Return']['ReturnToStock'] = this.getQuantity(element);\r\n obj['TaxCode'] = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((item: any) => item.itemLineId == element['itemLineId']).VATCode;\r\n\r\n obj['DisplayTaxCode'] = ''; // todo\r\n obj['ProductAttributes'] = ''; //todo - not required\r\n obj['Perishable'] = this.getMMGROUPID(element.attributes);\r\n //obj['MMGroupID'] = this.getCaregories(element);\r\n obj['MMGroupID'] = this.getMMGROUPID(element.attributes);\r\n obj['CustomerDetails'] = \"\"; // todo - blank\r\n obj['TotalPromotionSaving'] = element['promotionAmount'] || -1; // TODO\r\n obj['OriginalTaxAmount'] = this.convertToString((this.removeDecimal(this.getOriginalTax(element,taxTotal.VAT) * -1)).toFixed(2));\r\n obj['taxAmount'] = this.removeDecimal(taxTotal.taxLineTotal < 0 ?(taxTotal.taxLineTotal) : (-taxTotal.taxLineTotal));\r\n\r\n if (lineDiscount) {\r\n if (lineDiscount.percentageDiscountReasonName && lineDiscount.percentageDiscountReasonCode) {\r\n // line discount\r\n obj['Discount'] = {};\r\n obj['Discount'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;\r\n obj['Discount'].ModifierDateTime = obj.DateTimeCreated;\r\n obj['Discount'].ModifierReasonID = lineDiscount.percentageDiscountReasonCode;\r\n obj['Discount'].ModifierDescription = lineDiscount.percentageDiscountReasonName;\r\n obj['Discount'].AuthorisingUserID = this.transactionDocument.userName;\r\n obj['Discount'].DiscountType = lineDiscount.discountType;\r\n obj['Discount'].XMLSchemaVersion = 1;\r\n obj['Discount'].OriginalPrice = this.removeDecimal(lineDiscount.discountAmount + (lineDiscount.discountedLinePrice || 0));\r\n obj['Discount'].DiscountedValue = this.removeDecimal(lineDiscount.unitPrice);\r\n obj['Discount'].DiscountPercentage = lineDiscount.percentageDiscountValue;\r\n obj['Discount'].RoundingRule = 2;\r\n }\r\n\r\n if (lineDiscount.priceOverrideReasonCode && lineDiscount.priceOverrideReasonName) {\r\n //price override\r\n obj['PriceOverride'] = {};\r\n obj['PriceOverride'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;\r\n obj['PriceOverride'].ModifierDateTime = obj.DateTimeCreated;\r\n obj['PriceOverride'].ModifierReasonID = lineDiscount.priceOverrideReasonCode;\r\n obj['PriceOverride'].ModifierReasonDescription = lineDiscount.priceOverrideReasonName;\r\n obj['PriceOverride'].AuthorisingUserID = this.transactionDocument.userName;\r\n obj['PriceOverride'].XMLSchemaVersion = 1;\r\n obj['PriceOverride'].NewPrice = this.removeDecimal(lineDiscount.unitPrice);\r\n obj['PriceOverride'].OriginalPrice = this.removeDecimal(lineDiscount.discountedLinePrice || 0 + lineDiscount.discountAmount);\r\n }\r\n\r\n //update the product price\r\n obj.NetValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;\r\n obj.EffectiveNetValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;\r\n obj.ExtendedValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;\r\n obj.UnitPrice = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;\r\n }\r\n\r\n if(transactionDiscount) {\r\n obj['BasketDiscountModifier'] = [];\r\n this.transactionDocument.basket.transactionDiscount.forEach((e: any) => { \r\n let discountObj: any ={}\r\n e.itemLineIds.forEach((x: any) => {\r\n if (x == element.itemLineId) { \r\n var discountAmount = this.convertToString(e.discountAmount * -1); \r\n discountObj.BasketDiscountLineNumber = this.getLineNumber(e,discountAmount);\r\n discountObj.XMLSchemaVersion = this.xmlSchemaVersion;\r\n discountObj.DiscountedValue = this.getDiscountedValue(element.totalLinePrice, e.discountAmount);\r\n obj['BasketDiscountModifier'].push(discountObj);\r\n } \r\n }); \r\n });\r\n var totaltransactionDiscount = 0;\r\n obj['BasketDiscountModifier'].forEach((value:any)=>{\r\n totaltransactionDiscount = totaltransactionDiscount + value.DiscountedValue;\r\n });\r\n //update the product price\r\n obj['EffectiveNetValue'] = obj.EffectiveNetValue + totaltransactionDiscount;\r\n }\r\n\r\n if (this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n obj['PromotionSaving'] = [];\r\n this.transactionDocument.basket.transactionPromotion.forEach((transactionPromo: any) => {\r\n let promotionObj: any = {};\r\n transactionPromo.itemLineIds.forEach((itemLineId: any) => {\r\n if (itemLineId == element.itemLineId) {\r\n promotionObj.ModifierValue = transactionPromo.promotionAmount;\r\n promotionObj.ModifierDateTime = this.transactionDocument.createdAt;\r\n promotionObj.ModifierDescription = transactionPromo.displayText;\r\n promotionObj.XMLSchemaVersion = this.xmlSchemaVersion;\r\n promotionObj.PromotionID = transactionPromo.promotionId;\r\n promotionObj.PromotionDescription = transactionPromo.displayText;\r\n promotionObj.HitNumber = '1';\r\n promotionObj.PromotionHitProductQuantity = this.getQuantity(element);\r\n promotionObj.PromotionHitQuantity = this.getQuantity(element) * -1;\r\n obj['PromotionSaving'].push(promotionObj);\r\n }\r\n });\r\n });\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n addProduct(element: TProduct, lineDiscount: LineDiscount, transactionDiscount: TransactionDiscount) {\r\n let taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((item: any) => item.itemLineId == element['itemLineId']);\r\n let obj: any = {\r\n XMLSchemaVersion: this.xmlSchemaVersion,\r\n LineNumber: element.itemLineId,\r\n NetValue: this.removeDecimal(element.totalLinePrice),\r\n EffectiveNetValue: this.removeDecimal(element.totalLinePrice),\r\n Description: element.description,\r\n DeviceID: this.deviceId,\r\n UserID: this.transactionDocument.userName,\r\n DateTimeCreated: this.createdAt,\r\n ExtendedValue: this.removeDecimal(element.price),\r\n UnitPrice: this.removeDecimal(element.price),\r\n //MMGroupID: this.getCaregories(element),\r\n Quantity: element.quantity,\r\n SalespersonID: this.transactionDocument.userName,\r\n SalespersonName: this.salesPersonName,\r\n TaxCode: this.transactionDocument.basket['taxBreakdown']['taxLines'].find((item: any) => item.itemLineId == element['itemLineId']).VATCode,\r\n TaxModifiable: \"1\", //todo\r\n OriginalTaxAmount : this.convertToString((this.removeDecimal(this.getOriginalTax(element,taxTotal.VAT)).toFixed(2))),\r\n TaxAmount : this.convertToString(this.removeDecimal(taxTotal.taxLineTotal)),\r\n OriginalTaxAmountSet: \"1\",//todo\r\n ProductID: element.SKU,\r\n HandKeyed: \"1\",//todo\r\n CustomerDetails: \"\",\r\n Perishable: this.getMMGROUPID(element.attributes),\r\n MMGroupID: this.getMMGROUPID(element.attributes)\r\n }\r\n if (lineDiscount) {\r\n if (lineDiscount.percentageDiscountReasonName && lineDiscount.percentageDiscountReasonCode) {\r\n // line discount\r\n obj['Discount'] = {};\r\n obj['Discount'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;\r\n obj['Discount'].ModifierDateTime = obj.DateTimeCreated;\r\n obj['Discount'].ModifierReasonID = lineDiscount.percentageDiscountReasonCode;\r\n obj['Discount'].ModifierDescription = lineDiscount.percentageDiscountReasonName;\r\n obj['Discount'].AuthorisingUserID = this.transactionDocument.userName;\r\n obj['Discount'].DiscountType = lineDiscount.discountType;\r\n obj['Discount'].XMLSchemaVersion = 1;\r\n obj['Discount'].OriginalPrice = this.removeDecimal(lineDiscount.discountAmount + (lineDiscount.discountedLinePrice || 0));\r\n obj['Discount'].DiscountedValue = this.removeDecimal(lineDiscount.unitPrice);\r\n obj['Discount'].DiscountPercentage = lineDiscount.percentageDiscountValue;\r\n obj['Discount'].RoundingRule = 2;\r\n }\r\n\r\n if (lineDiscount.priceOverrideReasonCode && lineDiscount.priceOverrideReasonName) {\r\n //price override\r\n obj['PriceOverride'] = {};\r\n obj['PriceOverride'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;\r\n obj['PriceOverride'].ModifierDateTime = obj.DateTimeCreated;\r\n obj['PriceOverride'].ModifierReasonID = lineDiscount.priceOverrideReasonCode;\r\n obj['PriceOverride'].ModifierReasonDescription = lineDiscount.priceOverrideReasonName;\r\n obj['PriceOverride'].AuthorisingUserID = this.transactionDocument.userName;\r\n obj['PriceOverride'].XMLSchemaVersion = this.xmlSchemaVersion;\r\n obj['PriceOverride'].NewPrice = this.removeDecimal(lineDiscount.unitPrice);\r\n obj['PriceOverride'].OriginalPrice = this.removeDecimal(lineDiscount.discountedLinePrice || 0 + lineDiscount.discountAmount);\r\n }\r\n\r\n //update the product price\r\n obj['NetValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);\r\n obj['EffectiveNetValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);\r\n obj['ExtendedValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);\r\n obj['UnitPrice'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);\r\n }\r\n\r\n if(transactionDiscount) {\r\n obj['BasketDiscountModifier'] = [];\r\n this.transactionDocument.basket.transactionDiscount.forEach((e:any) => { \r\n let discountObj: any ={};\r\n e.itemLineIds.forEach((itemLineId: any) => {\r\n if (itemLineId == element.itemLineId) { \r\n let discountAmount = this.convertToString(e.discountAmount * -1); \r\n discountObj.XMLSchemaVersion = this.xmlSchemaVersion;\r\n discountObj.DiscountedValue = -(this.getDiscountedValue(element.totalLinePrice, e.discountAmount));\r\n discountObj.BasketDiscountLineNumber = this.getLineNumber(e,discountAmount) ;\r\n obj['BasketDiscountModifier'].push(discountObj); \r\n } \r\n }); \r\n });\r\n let totaltransactionDiscount = 0;\r\n obj['BasketDiscountModifier'].forEach((value:any)=>{\r\n totaltransactionDiscount = totaltransactionDiscount + value.DiscountedValue;\r\n });\r\n //update the product price\r\n obj['EffectiveNetValue'] = obj.EffectiveNetValue + totaltransactionDiscount; \r\n }\r\n \r\n if (this.transactionDocument.basket.transactionPromotion.length > 0 || this.transactionDocument.basket.linePromotion.length > 0) {\r\n obj['DistributedPromotionSaving'] = [];\r\n if (this.transactionDocument.basket.transactionPromotion.length > 0) {\r\n this.transactionDocument.basket.transactionPromotion.forEach((e: any) => {\r\n let promotionObj: any = {};\r\n e.itemLineIds.forEach((itemLineId: any) => {\r\n if (itemLineId == element.itemLineId) {\r\n promotionObj.PromotionID = e.promotionId;\r\n promotionObj.Hit = '1';\r\n promotionObj.Saving = this.getSaving(element.totalLinePrice, e.promotionAmount);\r\n promotionObj.ISaving = this.getSaving(element.totalLinePrice, e.promotionAmount);\r\n obj['DistributedPromotionSaving'].push(promotionObj);\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (this.transactionDocument.basket.linePromotion.length > 0) {\r\n this.transactionDocument.basket.linePromotion.forEach((linePromotion: any) => {\r\n let promotionObj: any = {};\r\n if (element.itemLineId == linePromotion.itemLineId) {\r\n promotionObj.PromotionID = linePromotion.promotionId;\r\n promotionObj.Hit = \"1\";\r\n promotionObj.Saving = linePromotion.promotionLinePrice;\r\n promotionObj.ISaving = linePromotion.promotionLinePrice;\r\n obj['DistributedPromotionSaving'].push(promotionObj);\r\n }\r\n });\r\n }\r\n let transactionPromotion = 0;\r\n obj['DistributedPromotionSaving'].forEach((value: any) => {\r\n transactionPromotion = transactionPromotion + value.Saving;\r\n });\r\n obj['EffectiveNetValue'] = obj.EffectiveNetValue + transactionPromotion;\r\n }\r\n return obj;\r\n }\r\n\r\n getSaving(price,promotionAmount): any {\r\n let Saving = (price*promotionAmount)/this.transactionDocument.basketSummary.saleTotal;\r\n return Saving;\r\n }\r\n\r\n getLineNumber(value: any,discountAmount:string ){\r\n let lineNumber;\r\n for (let i = 0; i < this.rjObject['BasketDiscount'].length; i++) {\r\n const element = this.rjObject['BasketDiscount'][i];\r\n if( value.reasonCode === element.ReasonCodeID && discountAmount === element.NetValue){\r\n lineNumber = element.LineNumber;\r\n break; \r\n } \r\n }\r\n return lineNumber; \r\n }\r\n\r\n\r\n getDiscountedValue(price:any ,discountAmount:any ) {\r\n let DiscountedValue =((price * discountAmount)/this.transactionDocument.basketSummary.saleTotal)*100 ;\r\n return DiscountedValue;\r\n }\r\n\r\n getOriginalTax(element: TProduct, VAT) {\r\n let pricebeforetax = (element.price * 100)/(100 + VAT )\r\n let originaltax= element.price - pricebeforetax\r\n return originaltax;\r\n }\r\n\r\n convertToString(value: any) {\r\n try {\r\n value = JSON.stringify(value);\r\n return value;\r\n }\r\n catch (e) {\r\n console.log(value, 'can not be converted in string', e);\r\n }\r\n }\r\n\r\n generateDynamicStockLookUp() {\r\n let x = '0';\r\n this.transactionDocument.basket.products.forEach((element: any) => {\r\n if (element.deliveryMethod === '1' || element.deliveryMethod === '2') {\r\n x = '1';\r\n }\r\n });\r\n return x;\r\n }\r\n\r\n // getAttributes(){\r\n // let name: string | any[] = []\r\n // this.transactionDocument.basket.products.forEach((element: any) => {\r\n // if (element && element.attributes && element.attributes.length > 0) {\r\n // name = element.attributes.filter((x: any) => x.name.toUpperCase() === element.name.toUpperCase());\r\n // }\r\n // });\r\n // if (name.length > 0) {\r\n // return name[0].value\r\n // }\r\n // else{\r\n // return \"\"\r\n // }\r\n // }\r\n\r\n // getCaregories(element) {\r\n // let MMGroupId = \" \";\r\n // if (element.categories && element.categories.length > 0) {\r\n // let categories = element.categories.filter((x) => x.parentId != '');\r\n // let value = categories.filter((x) => x.id != x.parentId);\r\n // MMGroupId = value[0].name;\r\n // }\r\n // return MMGroupId;\r\n // }\r\n\r\n getDate(date:string){\r\n let offset = this.generateTimezoneoffset(date) * -1;\r\n let offsetHours = Math.abs(Math.floor(offset / 60)); \r\n\t let offsetMinutes = Math.abs(offset) - offsetHours * 60;\r\n\r\n let offsetSign = '+';\r\n if (offset < 0) {\r\n offsetSign = '-';\r\n }\r\n\r\n let newdate = date.substring(0,19);\r\n const x = (newdate+ offsetSign +String(offsetHours).padStart(2, '0')+':'+String(offsetMinutes).padStart(2, '0')).toString();\r\n return x; \r\n }\r\n \r\n getTransactionPromotion(transactionPromotion){\r\n if(transactionPromotion && transactionPromotion.length > 0){\r\n this.rjObject['PromoVoucherItem'] = {};\r\n this.rjObject['PromoVoucherItem']['XMLSchemaVersion'] = this.xmlSchemaVersion;\r\n this.rjObject['PromoVoucherItem']['LineNumber'] = this.generateLineNumber();\r\n this.rjObject['PromoVoucherItem']['NetValue'] = this.removeDecimal(transactionPromotion[0].promotionLinePrice) * -1;\r\n this.rjObject['PromoVoucherItem']['EffectiveNetValue'] = this.removeDecimal(transactionPromotion[0].promotionLinePrice) * -1;\r\n this.rjObject['PromoVoucherItem']['Description'] = transactionPromotion[0].promotionInfo;\r\n this.rjObject['PromoVoucherItem']['DeviceID'] = this.deviceId;\r\n this.rjObject['PromoVoucherItem']['UserID'] = this.transactionDocument.userName;\r\n this.rjObject['PromoVoucherItem']['DateTimeCreated'] = this.createdAt;\r\n this.rjObject['PromoVoucherItem']['ProductId'] = \"\"; //todo\r\n this.rjObject['PromoVoucherItem']['SerialNumber'] = \"\" ; //todo\r\n this.rjObject['PromoVoucherItem']['MMGroupId'] = \"\";\r\n }\r\n }\r\n \r\n getQuantity(element: any) {\r\n let quantity\r\n if(this.transactionDocument.unreferencedRefund){\r\n quantity = element['quantity'] < 0 ? element['quantity'] : (-element['quantity']);\r\n }\r\n else{\r\n quantity = element['refundedQuantity'] < 0 ? element['refundedQuantity'] : (-element['refundedQuantity']);\r\n }\r\n return quantity;\r\n }\r\n}\r\n","import { TransactionDocument } from \"./mapper-library.model\";\r\n\r\nexport class WebReturnMapperBuilderClass {\r\n\r\n private document: any;\r\n private webReturnObject: TransactionDocument = {\r\n id: '',\r\n orgCode: \"\",\r\n storeId: \"\",\r\n storeNodeId: \"\",\r\n storeNodeStructure: \"\",\r\n deviceId: \"\",\r\n terminalId: \"\",\r\n initiatingModule: \"\",\r\n export: false,\r\n basket: {},\r\n basketSummary: {},\r\n baseCurrency: \"\",\r\n customer: {\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n postCode: '',\r\n id: '',\r\n billingAddress: {},\r\n shippingAddress: {},\r\n\r\n }\r\n }\r\n\r\n constructor(document) {\r\n if (document) {\r\n this.document = document;\r\n }\r\n }\r\n\r\n WebReturnMapper() {\r\n this.webReturnObject['type'] = 'WEB_RETURNS';\r\n this.webReturnObject['datetime'] = this.getUTCDateTime(this.getText(this.document.updated_at));\r\n this.webReturnObject.baseCurrency = this.getText(this.document.base_currency_code);\r\n this.webReturnObject.storeId = this.getText(this.document.store_id);\r\n this.webReturnObject.subsidiaryId = '1';\r\n this.webReturnObject.initiatingModule = 'MAGENTO';\r\n this.webReturnObject.createdAt = this.getUTCDateTime(this.getText(this.document.created_at));\r\n this.webReturnObject.updatedAt = this.getUTCDateTime(this.getText(this.document.updated_at));\r\n this.webReturnObject.export = true;\r\n this.webReturnObject.transCompletedAt = this.getUTCDateTime(this.getText(this.document.updated_at));\r\n this.webReturnObject['externalTransactionId'] = this.getText(this.document.order_id);\r\n\r\n // customer\r\n this.webReturnObject['customer']['firstName'] = this.getText(this.document.customer_firstname) || '';\r\n this.webReturnObject['customer']['lastName'] = this.getText(this.document.customer_lastname) || '';\r\n this.webReturnObject['customer']['email'] = this.getText(this.document.customer_email) || '';\r\n this.webReturnObject['customer']['postCode'] = '';\r\n\r\n // Billing address\r\n this.webReturnObject['customer']['billingAddress']['address1'] = (this.document.billing_address && this.document.billing_address.street) ? this.getText(this.document.billing_address.street) : '';\r\n this.webReturnObject['customer']['billingAddress']['city'] = (this.document.billing_address && this.document.billing_address.city) ? this.getText(this.document.billing_address.city) : '';\r\n this.webReturnObject['customer']['billingAddress']['county'] = (this.document.billing_address && this.document.billing_address.region) ? this.getText(this.document.billing_address.region) : '';\r\n this.webReturnObject['customer']['billingAddress']['postCode'] = (this.document.billing_address && this.document.billing_address.postcode) ? this.getText(this.document.billing_address.postcode) : '';\r\n this.webReturnObject['customer']['billingAddress']['country'] = (this.document.billing_address && this.document.billing_address.country) ? this.getText(this.document.billing_address.country) : '';\r\n\r\n // Shipping address\r\n this.webReturnObject['customer']['shippingAddress']['address1'] = (this.document.shipping_address && this.document.shipping_address.street) ? this.getText(this.document.shipping_address.street) : '';\r\n this.webReturnObject['customer']['shippingAddress']['city'] = (this.document.shipping_address && this.document.shipping_address.city) ? this.getText(this.document.shipping_address.city) : '';\r\n this.webReturnObject['customer']['shippingAddress']['county'] = (this.document.shipping_address && this.document.shipping_address.region) ? this.getText(this.document.shipping_address.region) : '';\r\n this.webReturnObject['customer']['shippingAddress']['postCode'] = (this.document.shipping_address && this.document.shipping_address.postcode) ? this.getText(this.document.shipping_address.postcode) : '';\r\n this.webReturnObject['customer']['shippingAddress']['country'] = (this.document.shipping_address && this.document.shipping_address.country) ? this.getText(this.document.shipping_address.country) : '';\r\n\r\n // basketSummary \r\n this.webReturnObject.basketSummary['discountTotal'] = Number(this.document.discount_amount ? this.getText(this.document.discount_amount) : 0);\r\n this.webReturnObject.basketSummary['VATTotal'] = Number(this.document.base_total_paid ? this.getText(this.document.base_total_paid) : 0);\r\n this.webReturnObject.basketSummary['saleTotal'] = Number(this.document.base_total_invoiced ? this.getText(this.document.base_total_invoiced) : 0);\r\n this.webReturnObject.basketSummary['basketTotal'] = Number(this.document.base_total_paid ? this.getText(this.document.base_total_paid) : 0);\r\n this.webReturnObject.basketSummary['totalItems'] = Number(this.document.total_qty_ordered ? this.getText(this.document.total_qty_ordered) : 0);\r\n this.webReturnObject.basketSummary['refundTotal'] = Number(this.document.base_total_refunded ? this.getText(this.document.base_total_refunded) : 0);\r\n\r\n // basket line discount\r\n this.webReturnObject.basket['lineDiscount'] = [];\r\n\r\n let lineDiscount = {\r\n itemLineId: (this.document.items && this.document.items.item && this.document.items.item.item_id) ? this.getText(this.document.items.item.item_id) : 0,\r\n discountAmount: (this.document.items && this.document.items.item && this.document.items.item.discount_amount) ? Number(this.getText(this.document.items.item.discount_amount)) : 0\r\n }\r\n this.webReturnObject.basket['lineDiscount'].push(lineDiscount);\r\n\r\n // basket transaction discount\r\n this.webReturnObject.basket['transactionDiscount'] = [];\r\n\r\n let transactionDiscount = {\r\n discountAmount: (this.document && this.document.discount_amount) ? Number(this.getText(this.document.discount_amount)) : 0\r\n }\r\n this.webReturnObject.basket['transactionDiscount'].push(transactionDiscount);\r\n\r\n // basket products \r\n this.webReturnObject.basket['products'] = [];\r\n let product : any= {};\r\n if (this.document.items && this.document.items.item && this.document.items.item) {\r\n if (this.document.items.item instanceof Array) {\r\n this.document.items.item.forEach(element => {\r\n product = {\r\n description: (element.name) ? this.getText(element.name) : '',\r\n SKU: (element.sku) ? this.getText(element.sku) : '',\r\n quantity: (element.qty_ordered) ? Number(this.getText(element.qty_ordered)) : 0,\r\n refundedQuantity: (element.qty_refunded) ? Number(this.getText(this.document.items.item.qty_refunded)) : 0,\r\n price: (element.original_price) ? Number(this.getText(element.original_price)) : 0,\r\n itemLineId: (element.item_id) ? Number(this.getText(element.item_id)) : 0,\r\n // totalLinePrice: (element.row_invoiced) ? Number(this.getText(element.row_invoiced)) : 0,\r\n totalLinePrice: ((element.qty_ordered - element.qty_refunded) * element.base_original_price) || 0,\r\n }\r\n if (product && product.price != 0) {\r\n this.webReturnObject.basket['products'].push(product);\r\n }\r\n });\r\n } else {\r\n product = {\r\n description: (this.document.items && this.document.items.item && this.document.items.item.name) ? this.getText(this.document.items.item.name) : '',\r\n SKU: (this.document.items && this.document.items.item && this.document.items.item.sku) ? this.getText(this.document.items.item.sku) : '',\r\n quantity: (this.document.items && this.document.items.item && this.document.items.item.qty_ordered) ? Number(this.getText(this.document.items.item.qty_ordered)) : 0,\r\n refundedQuantity: (this.document.items && this.document.items.item && this.document.items.item.qty_refunded) ? Number(this.getText(this.document.items.item.qty_refunded)) : 0,\r\n price: (this.document.items && this.document.items.item && this.document.items.item.original_price) ? Number(this.getText(this.document.items.item.original_price)) : 0,\r\n itemLineId: (this.document.items && this.document.items.item && this.document.items.item.item_id) ? Number(this.getText(this.document.items.item.item_id)) : 0,\r\n // totalLinePrice: (this.document.items && this.document.items.item && this.document.items.item.row_invoiced) ? Number(this.getText(this.document.items.item.row_invoiced)) : 0,\r\n totalLinePrice: ((this.document.items.item.qty_ordered - this.document.items.item.qty_refunded) * this.document.items.item.base_original_price) || 0,\r\n }\r\n if (product && product.price != 0) {\r\n this.webReturnObject.basket['products'].push(product);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n deviceId(deviceId) {\r\n this.webReturnObject.deviceId = deviceId;\r\n return this;\r\n }\r\n\r\n terminalId(terminalId) {\r\n this.webReturnObject.terminalId = terminalId;\r\n return this;\r\n }\r\n\r\n orgCode(orgCode) {\r\n this.webReturnObject.orgCode = orgCode;\r\n return this;\r\n }\r\n\r\n storeId(storeId) {\r\n this.webReturnObject.storeId = storeId;\r\n return this;\r\n }\r\n\r\n storeNodeId(storeNodeId: string) {\r\n this.webReturnObject.storeNodeId = storeNodeId;\r\n return this;\r\n }\r\n\r\n storeNodeStructure(storeNodeStructure: string) {\r\n this.webReturnObject.storeNodeStructure = storeNodeStructure;\r\n return this;\r\n }\r\n\r\n docId(docId) {\r\n this.webReturnObject.id = docId;\r\n return this;\r\n }\r\n\r\n updateUserID(userID: string) {\r\n this.webReturnObject.userId = userID;\r\n return this;\r\n }\r\n\r\n updateUserName(name) {\r\n this.webReturnObject.userName = name;\r\n return this;\r\n }\r\n\r\n build() {\r\n return this.webReturnObject;\r\n }\r\n\r\n getText(obj) {\r\n if (obj && obj.text) {\r\n return obj.text;\r\n } else {\r\n return obj;\r\n }\r\n }\r\n\r\n getUTCDateTime(date) {\r\n if (date) {\r\n return new Date(date).toISOString();\r\n }\r\n }\r\n}\r\n"],"names":["Component","NgModule","BehaviorSubject","tslib_1.__values","Injectable","CurrencyPipe"],"mappings":"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"}
|