{"version":3,"sources":["webpack:///./src/views/quote/mixins/QuoteInvoiceValidationMixin.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./src/views/quote/mixins/QuoteInvoiceStoreMixin.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./src/views/quote/mixins/QuoteItemValidationMixin.js","webpack:///./src/views/quote/mixins/QuoteLabourMixin.js","webpack:///./src/views/quote/mixins/QuoteOtherLabourMixin.js","webpack:///./src/views/quote/mixins/QuoteNotificationMixin.js","webpack:///./src/views/quote/mixins/QuotePartMixin.js","webpack:///./src/views/quote/mixins/QuoteOpgMixin.js","webpack:///./src/views/quote/mixins/QuoteMiscMixin.js","webpack:///./src/views/quote/mixins/QuoteSubletMixin.js","webpack:///./src/views/quote/mixins/QuoteItemDifferenceMixin.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash.get/index.js","webpack:///./src/views/quote/mixins/QuoteItemsMixin.js","webpack:///./src/views/quote/mixins/QuoteTotalsMethodMixin.js","webpack:///./src/views/quote/mixins/QuoteAssessmentMixin.js"],"names":["inject","computed","$v","this","$vv","root","now","Date","module","exports","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","moduleName","mapGetters","baseSnapshot","currentSnapshot","isUpdateInvoice","isUpdateExcessInvoice","invoiceIncludedQuotes","isFixedGst","invoiceExtraCharge","fixedGst","get","set","value","setIsFixedGst","extraCharge","setInvoiceExtraCharge","methods","mapActions","getIncludedStatus","quote","isIncluded","findIndex","s","quoteId","reTrimStart","baseTrim","slice","replace","isObject","toNumber","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","validationItems","$route","name","QuoteRoutes","QuoteLabour","entity","labours","QuoteOtherLabour","others","QuotePart","parts","QuoteOpg","opgs","QuoteMisc","miscs","QuoteSublet","sublets","isValidItemNo","quoteItemId","$model","i","$each","itemNo","required","isValidItemDesc","itemDesc","mixins","QuoteTotalsMethodMixin","QuoteItemsMixin","labourTotal","rrTotal","repairTotal","rwaTotal","paintTotal","mixinEntity","calculateItemCategoryTotal","quotingMethod","ItemCategoryTypes","RR","REP","RWA","PAINT","weldHourTotal","filter","deleted","reportOnly","toUpperCase","includes","itemType","reduce","total","item","hourValue","quoteInsurer","ntarLoadingItems","ntarOtherLoadingItems","ntarLoadingValues","updateValue","QuotingMethodTypes","Dollar","dollarValue","roundAwayFromZero","rate","getLabourRateEx","rev","QuoteItemRevTypes","Normal","SpecRate","addUpdateRepairPaintLoading","updateTotal","innerValue","rates","vehicle","code","paintGroup","codeType","isNtar","find","labourCodeId","labourType","$labourTypes","t","labourTypeCode","newRate","labourTypeId","shopRate","modifiedBy","modifiedDate","createdBy","createdDate","isNew","quoteVersion","push","isManualLoading","repairItem","linkedItem","linkedItemId","isLoadItem","ntarLoadingItem","LabourTimeTypes","eMTA","n","mtaItemDescription","category","hasPaintLoading","deleteItem","loadingPercent","paintItem","console","log","paintHour","getDefaultPaintItem","paintItems","paintLoadingItemNo","parseInt","toString","paintLoadingItem","p","loadingValue","insurerLoadingValues","v","lowerThreshold","upperThreshold","QuoteItemModel","sortNo","map","splice","lineNumber","nextLineNumber","lines","getLabourRate","isPaintType","Object","values","PaintGroupTypes","some","otherTotal","cdTotal","crushTotal","mechTotal","fgTotal","CD","CRUSH","MECH","FIBER","showSuccessToast","message","duration","$notification","openNotificationWithType","showQuoteChangedToast","showToast","_debounce","type","QuoteNotificationMixin","partTotal","PART","snapshotDiff","partsCheckSettingExists","partsCheckSetting","NTAR","LTAR","updateMarkup","items","deleteOtherItem","itemToUpdate","markup","getMarkupPercent","markupValue","onPartConditionChange","addUpdatePartPaintLoading","mark","PartTypes","NEW","newMarkup","USED","usedMarkup","EXCH","exchangeMarkup","RECR","recoreMarkup","RECD","reconditionedMarkup","ALTN","AFT","afterMarketMarkup","CAFT","AFTA","partItem","side","deletePaintLoadingItem","raItemNo","loadingValueType","originalItemStatus","itemStatus","itemIndex","obj","indexOf","isDeleted","QuoteItemStatusTypes","Deleted","$toast","open","position","actionText","onAction","countryId","Guid","empty","companyId","query","butterflyCode","scheduleId","bodyId","bodySize","variantId","nvic","sortColumn","sortOrder","pageIndex","pageSize","QuoteService","getAvailableLabourItems","toLowerCase","opgTotal","OPG","getOpgRate","Hour","r","opgCode","$emit","getDefaultRate","miscTotal","MISC","subletTotal","SUBL","itemQuantity","isLineDifferentFromLastCommunication","isOrmLineDifferentFromLastCommunication","ex","getCommunicationFieldsToCheck","target","getTargetEntity","orm","getOrmFieldsToCheck","lookupItemElementName","lookup","0","1","2","3","4","5","6","7","fieldsToCheck","itemElementName","sublet","isOrmFieldDifferenceFromLastCommunication","fieldName","exFieldName","historyLine","getLastOrmHistoryLine","exItem","record","value1","_get","value2","isDifferent","toLocaleUpperCase","trim","keys","ormHistory","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","isBinary","HASH_UNDEFINED","INFINITY","funcTag","genTag","symbolTag","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reRegExpChar","reEscapeChar","reIsHostCtor","freeGlobal","global","freeSelf","self","Function","getValue","object","key","isHostObject","e","arrayProto","Array","prototype","funcProto","objectProto","coreJsData","maskSrcKey","uid","exec","IE_PROTO","funcToString","hasOwnProperty","objectToString","reIsNative","RegExp","call","Symbol","Map","getNative","nativeCreate","symbolProto","symbolToString","Hash","entries","clear","entry","hashClear","__data__","hashDelete","has","hashGet","data","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","pop","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","array","eq","baseGet","path","isKey","castPath","toKey","baseIsNative","isMasked","pattern","isFunction","toSource","baseToString","isArray","stringToPath","isKeyable","memoize","match","number","resolver","memoized","cache","Cache","tag","isObjectLike","defaultValue","components","AudanetLockNotification","QuoteAssessmentMixin","defaultRowColourClass","itemAssessments","displayDeleted","classText","isItemDeleted","isOutstandingOrdered","quantityOrdered","quantityReturned","isItemRemoved","baseItemDiff","baseItem","getBaseItem","itemId","watch","handler","newVal","oldVal","vm","forEach","diff","itemStatusDiff","deep","calculateItemsTotal","subTotal","deleteItemAuthorise","isQuoteItemDeleted","isAdded","updateAssessmentItem","undoDeleteItem","selectAllItems","activeItems","isSelected","defaultSelectItems","addBlankItemAuthorise","ItemCategoryCodeTypes","itemTypes","c","newItem","submittedItem","authorisedItem","emptyItem","$filters","pad","editQuotedMode","_cloneDeep","editAuthorisedMode","getQuoteItemAssessments","assessments","sortedAssessments","sort","a1","a2","subQuoteNo","quoteItemAssessments","assessment","quoteItemSubmitted","submittedAssessment","assessmentQuoteItems","aqi","quoteItemAuthorised","authorisedAssessment","getItemsAssessments","quoteAssessments","itemsAssessments","getItemValue","getItemDeltaValue","markupValueDelta","itemQuantityDelta","valueDelta","dollarValueDelta","rateDelta","hourValueDelta","itemsChanged","itemChanged","lastQuotedAssessment","lastAuthorisedAssessment","lastQuoteAssessment","itemAssessment","itemValueChanged","valueCalculationType","rowDisplayStatus","revalue","newValue","oldValue","percentage","getAssessmentItemsDeltaTotal","reportOnlyColorClass","tableCellColorClass","targetItem","itemValue","targetItemValue","tableCellTextColorClass","createAssessment","assessorName","isDraft","isAuthorise","isInvoiced","createAssessmentDetails","assessmentDetail","createAssessmentQuoteItems","partNo","partSource","itemComment","buyPrice","buyPriceDelta","calculateDeltaValue","vendorName","hasAuthoriseHistory","lastValue","wasReportOnly","calculateAssessmentItemCategoryTotal","isItemInvoiced","invoiced","a"],"mappings":"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","file":"static/js/assessment-invoice-chunk~quote-authorise-components-chunk~quote-builder-chunk~quote-components-chunk~d199b3a7.442a45e0.js","sourcesContent":["export default {\n inject: ['$vv'],\n computed: {\n $v() {\n return this.$vv || this.$v\n }\n }\n}\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","import { mapGetters, mapActions } from 'vuex'\n\nconst moduleName = 'quotes'\n\nexport default {\n computed: {\n ...mapGetters(moduleName, {\n baseSnapshot: 'baseSnapshot',\n currentSnapshot: 'currentSnapshot',\n isUpdateInvoice: 'isUpdateInvoice',\n isUpdateExcessInvoice: 'isUpdateExcessInvoice',\n invoiceIncludedQuotes: 'invoiceIncludedQuotes',\n isFixedGst: 'isFixedGst',\n invoiceExtraCharge: 'invoiceExtraCharge'\n }),\n fixedGst: {\n get() {\n return this.isFixedGst\n },\n set(value) {\n this.setIsFixedGst(value)\n }\n },\n extraCharge: {\n get() {\n return this.invoiceExtraCharge\n },\n set(value) {\n this.setInvoiceExtraCharge(value)\n }\n }\n },\n methods: {\n ...mapActions(moduleName, [\n 'setIsUpdateInvoice',\n 'setIsUpdateExcessInvoice',\n 'setIsFixedGst',\n 'addInvoiceIncludedQuotes',\n 'removeInvoiceIncludedQuotes',\n 'clearInvoiceIncludedQuotes',\n 'setInvoiceExtraCharge'\n ]),\n getIncludedStatus(quote) {\n const isIncluded = this.invoiceIncludedQuotes.findIndex(s => s.quoteId === quote.quoteId) >= 0\n return isIncluded\n }\n }\n}\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import QuoteRoutes from '../route-types'\n\nexport default {\n inject: ['$vv'],\n computed: {\n $v() {\n return this.$vv || this.$v\n },\n validationItems() {\n switch (this.$route.name) {\n case QuoteRoutes.QuoteLabour.name:\n return this.$v.entity.labours\n case QuoteRoutes.QuoteOtherLabour.name:\n return this.$v.entity.others\n case QuoteRoutes.QuotePart.name:\n return this.$v.entity.parts\n case QuoteRoutes.QuoteOpg.name:\n return this.$v.entity.opgs\n case QuoteRoutes.QuoteMisc.name:\n return this.$v.entity.miscs\n case QuoteRoutes.QuoteSublet.name:\n return this.$v.entity.sublets\n }\n }\n },\n methods: {\n isValidItemNo(quoteItemId) {\n if (this.validationItems) {\n const index = this.validationItems.$model.findIndex(i => i.quoteItemId === quoteItemId)\n if (this.validationItems.$each[index]) {\n return this.validationItems.$each[index].itemNo.required\n } else {\n return false\n }\n }\n },\n isValidItemDesc(quoteItemId) {\n if (this.validationItems) {\n const index = this.validationItems.$model.findIndex(i => i.quoteItemId === quoteItemId)\n if (this.validationItems.$each[index]) {\n return this.validationItems.$each[index].itemDesc.required\n } else {\n return false\n }\n }\n }\n }\n}\n","import { ItemCategoryTypes, QuoteItemRevTypes, QuotingMethodTypes, PaintGroupTypes, LabourTimeTypes } from '@/enums'\nimport { roundAwayFromZero } from '@/components/utils/AccountingFunctions'\nimport QuoteTotalsMethodMixin from './QuoteTotalsMethodMixin'\nimport QuoteItemsMixin from './QuoteItemsMixin'\nimport { mapGetters } from 'vuex'\nimport { QuoteItemModel } from '@/classes/viewmodels'\n\nexport default {\n mixins: [QuoteTotalsMethodMixin, QuoteItemsMixin],\n computed: {\n labourTotal() {\n return this.rrTotal + this.repairTotal + this.rwaTotal + this.paintTotal\n },\n rrTotal() {\n if (this.mixinEntity) {\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.labours, ItemCategoryTypes.RR)\n }\n },\n repairTotal() {\n if (this.mixinEntity) {\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.labours, ItemCategoryTypes.REP)\n }\n },\n rwaTotal() {\n if (this.mixinEntity) {\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.labours, ItemCategoryTypes.RWA)\n }\n },\n paintTotal() {\n if (this.mixinEntity) {\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.labours, ItemCategoryTypes.PAINT)\n }\n },\n weldHourTotal() {\n if (this.mixinEntity) {\n return this.mixinEntity.labours\n .filter((i) => !i.deleted && !i.reportOnly && i.itemDesc.toUpperCase().includes('(W)') && i.itemType === ItemCategoryTypes.RR)\n .reduce(function (total, item) {\n return total + item.hourValue\n }, 0)\n }\n },\n ...mapGetters('quotes', {\n quoteInsurer: 'quoteInsurer',\n ntarLoadingItems: 'ntarLoadingItems',\n ntarOtherLoadingItems: 'ntarOtherLoadingItems',\n ntarLoadingValues: 'ntarLoadingValues'\n })\n },\n methods: {\n updateValue(index, item) {\n // const itemToUpdate = this.innerValue.labours.find(i => i.quoteItemId === item.quoteItemId)\n // if (this.value.quotingMethod === QuotingMethodTypes.Dollar) {\n // itemToUpdate.dollarValue = item.hourValue\n // } else {\n // itemToUpdate.dollarValue = roundAwayFromZero(item.hourValue * item.rate)\n // }\n // if (item && item.deleteOtherItem && item.hourValue > 0) {\n // item.hourValue = item.hourValue * -1\n // }\n if (this.value.quotingMethod === QuotingMethodTypes.Dollar) {\n item.dollarValue = item.hourValue\n } else {\n item.dollarValue = roundAwayFromZero(item.hourValue * item.rate)\n if (this.getLabourRateEx(item).rate === item.rate) {\n // The following if statement is for compatibility to V1\n // if (item.rev !== null) {\n item.rev = QuoteItemRevTypes.Normal\n // }\n } else {\n item.rev = QuoteItemRevTypes.SpecRate\n }\n }\n // if (this.value.quotingMethod === QuotingMethodTypes.Dollar) {\n // this.items[index].dollarValue = this.items[index].hourValue\n // } else {\n // this.items[index].dollarValue = roundAwayFromZero(this.items[index].hourValue * this.items[index].rate)\n // }\n this.addUpdateRepairPaintLoading(item)\n this.updateTotal()\n },\n\n getLabourRateEx(item) {\n if (!this.innerValue.rates && this.vehicle) {\n return {}\n }\n const code = item.itemType !== ItemCategoryTypes.PAINT ? item.itemType : this.vehicle ? this.vehicle.paintGroup : 'S1'\n const codeType = item.itemType !== ItemCategoryTypes.PAINT ? item.itemType : ItemCategoryTypes.PAINT\n let rate = this.isNtar ? this.innerValue.rates[0] : this.innerValue.rates.find((i) => i.labourCodeId === code)\n if (!rate) {\n const labourType = this.$labourTypes.find((t) => t.labourTypeCode === codeType)\n const newRate = {\n quoteId: this.innerValue.quoteId,\n labourCodeId: code,\n labourTypeId: labourType.labourTypeId,\n rate: this.isNtar ? this.innerValue.shopRate : 0,\n modifiedBy: '',\n modifiedDate: null,\n createdBy: '',\n createdDate: null,\n isNew: true,\n quoteVersion: 0,\n deleted: false\n }\n this.innerValue.rates.push(newRate)\n rate = newRate\n }\n return rate\n },\n async addUpdateRepairPaintLoading(item, isManualLoading = false) {\n let repairItem =\n item.itemType === ItemCategoryTypes.REP\n ? this.innerValue.labours.find((i) => i.quoteItemId === item.quoteItemId && !i.deleted)\n : this.innerValue.labours.find((i) => i.itemType === ItemCategoryTypes.REP && i.itemNo === item.itemNo && i.itemDesc === item.itemDesc && !i.deleted)\n // console.log(repairItem)\n if (!this.isNtar || !repairItem || !this.ntarLoadingItems || !this.ntarOtherLoadingItems || !this.ntarLoadingValues || !this.quoteInsurer) {\n return\n }\n\n const linkedItem = this.innerValue.labours.find((i) => i.linkedItemId === repairItem.quoteItemId && i.isLoadItem && !i.deleted)\n let ntarLoadingItem = null\n if (this.innerValue.labourType === LabourTimeTypes.eMTA) {\n ntarLoadingItem = this.ntarOtherLoadingItems.find((n) => n.mtaItemDescription === repairItem.itemDesc && n.category === 'RA')\n } else {\n ntarLoadingItem = this.ntarLoadingItems.find((n) => n.itemNo === repairItem.itemNo && n.category === 'RA')\n }\n const hasPaintLoading =\n (ntarLoadingItem || isManualLoading) && (repairItem.itemType === ItemCategoryTypes.REP || repairItem.itemType === ItemCategoryTypes.PAINT)\n if (!hasPaintLoading && !linkedItem) {\n // console.log('!hasPaintLoading', repairItem.itemNo, ntarLoadingItem)\n return\n } else if (linkedItem && (repairItem.hourValue === 0 || repairItem.reportOnly)) {\n // Delete paint loading\n // console.log('Delete paint loading')\n const index = this.innerValue.labours.findIndex((i) => i.quoteItemId === linkedItem.quoteItemId)\n this.deleteItem(linkedItem, index)\n repairItem.loadingPercent = 0\n return\n }\n let paintItem =\n item.itemType === ItemCategoryTypes.PAINT\n ? this.innerValue.labours.find((i) => i.quoteItemId === item.quoteItemId && !i.deleted)\n : this.innerValue.labours.find(\n (i) => i.itemType === ItemCategoryTypes.PAINT && i.itemNo === repairItem.itemNo && i.itemDesc === repairItem.itemDesc && !i.deleted\n )\n console.log('find paintItem', paintItem)\n let paintHour = 0\n if (!paintItem) {\n const paintItems = await this.getDefaultPaintItem(repairItem.itemNo)\n paintItem = paintItems[0]\n console.log('!paintItem', paintItem)\n paintHour = paintItem.paintHour\n } else {\n paintHour = paintItem.hourValue\n console.log('found paintItem', paintItem)\n }\n const paintLoadingItemNo = (parseInt(repairItem.itemNo, 10) + 5000).toString()\n let paintLoadingItem =\n linkedItem ||\n this.innerValue.labours.find((p) => p.itemType === ItemCategoryTypes.PAINT && p.itemNo === paintLoadingItemNo && p.isLoadItem && !p.deleted)\n let isNew = false\n const loadingValue = this.quoteInsurer.insurerLoadingValues.find(\n (v) => v.category === 'RA' && repairItem.hourValue >= v.lowerThreshold && repairItem.hourValue <= v.upperThreshold\n )\n const loadingPercent = (!loadingValue ? 0 : loadingValue.value) * 100\n if (!isManualLoading) {\n repairItem.loadingPercent = loadingPercent\n } else if (isManualLoading && loadingPercent > repairItem.loadingPercent) {\n repairItem.loadingPercent = loadingPercent\n }\n // console.log(repairItem.itemNo, ntarLoadingItem, paintItem, paintLoadingItem)\n // Cannot find existing loading item then create new\n // console.log(paintLoadingItemNo, repairItem.loadingPercent, paintLoadingItem.isNew)\n if (!paintLoadingItem) {\n paintLoadingItem = new QuoteItemModel(this.value.quoteId, paintLoadingItemNo, `Paint Loading, ${repairItem.itemDesc}`, ItemCategoryTypes.PAINT)\n paintLoadingItem.sortNo = this.value.length ? Math.max(...this.value.map((i) => i.sortNo)) + 1 : 1\n isNew = true\n } else if (loadingPercent > repairItem.loadingPercent) {\n // lll\n }\n paintLoadingItem.isLoadItem = true\n paintLoadingItem.linkedItemId = repairItem.quoteItemId\n paintLoadingItem.hourValue = roundAwayFromZero((paintHour * repairItem.loadingPercent) / 100)\n paintLoadingItem.rate = this.value.shopRate\n paintLoadingItem.dollarValue = roundAwayFromZero(paintLoadingItem.hourValue * this.value.shopRate)\n repairItem.linkedItemId = paintLoadingItem.quoteItemId\n // console.log(paintLoadingItemNo, repairItem.loadingPercent, paintLoadingItem.isNew)\n if (isNew) {\n this.innerValue.labours.splice(this.innerValue.labours.length, 1, paintLoadingItem)\n paintLoadingItem.lineNumber = this.nextLineNumber\n this.innerValue.lines = paintLoadingItem.lineNumber + 1\n // this.items = _orderBy(this.innerValue.labours.filter(i => !i.deleted), [this.filter.sortColumn], [this.filter.sortOrder])\n }\n },\n getLabourRate(code, rates, shopRate, quoteId) {\n if (!rates) {\n return {}\n }\n const isPaintType = Object.values(PaintGroupTypes).some((p) => p === code)\n const codeType = isPaintType ? ItemCategoryTypes.PAINT : code\n let rate = this.isNtar ? rates[0] : rates.find((i) => i.labourCodeId === code)\n if (!rate) {\n const labourType = this.$labourTypes.find((t) => t.labourTypeCode === codeType)\n const newRate = {\n quoteId: quoteId,\n labourCodeId: code,\n labourTypeId: labourType.labourTypeId,\n rate: this.isNtar ? shopRate : 0,\n modifiedBy: '',\n modifiedDate: null,\n createdBy: '',\n createdDate: null,\n isNew: true,\n quoteVersion: 0,\n deleted: false\n }\n rates.push(newRate)\n rate = newRate\n }\n return rate\n }\n\n }\n}\n","import { ItemCategoryTypes, QuotingMethodTypes } from '@/enums'\r\nimport QuoteTotalsMethodMixin from './QuoteTotalsMethodMixin'\r\nimport QuoteItemsMixin from './QuoteItemsMixin'\r\nimport { roundAwayFromZero } from '@/components/utils/AccountingFunctions'\r\n\r\nexport default {\r\n mixins: [QuoteTotalsMethodMixin, QuoteItemsMixin],\r\n computed: {\r\n otherTotal() {\r\n if (this.mixinEntity) {\r\n return this.cdTotal + this.crushTotal + this.mechTotal + this.fgTotal\r\n }\r\n },\r\n cdTotal() {\r\n if (this.mixinEntity) {\r\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.others, ItemCategoryTypes.CD)\r\n }\r\n },\r\n crushTotal() {\r\n if (this.mixinEntity) {\r\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.others, ItemCategoryTypes.CRUSH)\r\n }\r\n },\r\n mechTotal() {\r\n if (this.mixinEntity) {\r\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.others, ItemCategoryTypes.MECH)\r\n }\r\n },\r\n fgTotal() {\r\n if (this.mixinEntity) {\r\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.others, ItemCategoryTypes.FIBER)\r\n }\r\n }\r\n },\r\n methods: {\r\n updateValue(index, item) {\r\n // if (item && item.deleteOtherItem && item.hourValue > 0) {\r\n // item.hourValue = item.hourValue * -1\r\n // }\r\n if (this.value.quotingMethod === QuotingMethodTypes.Dollar) {\r\n item.dollarValue = item.hourValue\r\n } else {\r\n item.dollarValue = roundAwayFromZero(item.hourValue * item.rate)\r\n }\r\n this.updateTotal()\r\n },\r\n getLabourRate(code, rates, shopRate, quoteId) {\r\n if (!rates) {\r\n return {}\r\n }\r\n var rate = rates.find((i) => i.labourCodeId === code)\r\n if (!rate) {\r\n const labourType = this.$labourTypes.find((t) => t.labourTypeCode === code)\r\n const newRate = {\r\n quoteId: quoteId,\r\n labourCodeId: code,\r\n labourTypeId: labourType.labourTypeId,\r\n rate: this.isNtar ? shopRate : 0,\r\n modifiedBy: '',\r\n modifiedDate: null,\r\n createdBy: '',\r\n createdDate: null,\r\n isNew: true,\r\n quoteVersion: 0,\r\n deleted: false\r\n }\r\n rates.push(newRate)\r\n rate = newRate\r\n }\r\n return rate\r\n }\r\n }\r\n}\r\n","import _debounce from 'lodash/debounce'\n\nexport default {\n methods: {\n showSuccessToast(message, duration = 3000) {\n // this.$toast.open({\n // message: message,\n // type: 'is-success',\n // position: 'is-top',\n // queue: false,\n // duration: duration\n // })\n this.$notification.openNotificationWithType('success','',message,duration)\n\n },\n showQuoteChangedToast() {\n // this.$toast.open({\n // message: 'Quote has changed. Please save before continuing',\n // type: 'is-warning',\n // position: 'is-top',\n // queue: false,\n // duration: 3000\n // })\n this.$notification.openNotificationWithType('warning','','Quote has changed. Please save before continuing',3000)\n\n },\n showToast: _debounce(function(message, type = 'success', location = 'top') {\n // this.$toast.open({\n // message: message,\n // type: `is-${type}`,\n // position: `is-${location}`,\n // queue: true,\n // duration: 2000\n // })\n this.$notification.openNotificationWithType(type,'',message,2000)\n\n }, 500)\n }\n}\n","import { ItemCategoryTypes, PartTypes, LabourTimeTypes } from '@/enums'\nimport QuoteTotalsMethodMixin from './QuoteTotalsMethodMixin'\nimport QuoteNotificationMixin from './QuoteNotificationMixin'\nimport QuoteItemsMixin from './QuoteItemsMixin'\nimport { mapGetters, mapActions } from 'vuex'\nimport { roundAwayFromZero } from '@/components/utils/AccountingFunctions'\n\nconst moduleName = 'quotes'\n\nexport default {\n mixins: [\n QuoteTotalsMethodMixin,\n QuoteItemsMixin,\n QuoteNotificationMixin\n ],\n computed: {\n partTotal() {\n if (this.mixinEntity) {\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.parts, ItemCategoryTypes.PART)\n }\n },\n ...mapGetters('quotes', {\n snapshotDiff: 'snapshotDiff',\n quoteInsurer: 'quoteInsurer',\n ntarLoadingItems: 'ntarLoadingItems',\n ntarOtherLoadingItems: 'ntarOtherLoadingItems',\n ntarLoadingValues: 'ntarLoadingValues',\n partsCheckSettingExists: 'partsCheckSettingExists',\n partsCheckSetting: 'partsCheckSetting'\n }),\n isNtar() {\n return (\n this.innerValue.labourType === LabourTimeTypes.NTAR ||\n this.innerValue.labourType === LabourTimeTypes.LTAR ||\n this.innerValue.labourType === LabourTimeTypes.eMTA\n )\n }\n },\n methods: {\n ...mapActions(moduleName, ['getExternalSetting']),\n updateValue(index, item) {\n // if (item && item.deleteOtherItem && item.itemQuantity > 0) {\n // item.itemQuantity = item.itemQuantity * -1\n // }\n this.updateTotal()\n },\n updateMarkup(index, item) {\n if (this.items && !item.deleteOtherItem) {\n const itemToUpdate = this.innerValue.parts.find((i) => i.quoteItemId === item.quoteItemId)\n const markup = this.getMarkupPercent(item)\n itemToUpdate.markupValue = roundAwayFromZero(item.value + item.value * (markup / 100))\n }\n this.updateTotal()\n },\n onPartConditionChange(item) {\n if (this.items) {\n const itemToUpdate = this.innerValue.parts.find((i) => i.quoteItemId === item.quoteItemId)\n const markup = this.getMarkupPercent(item)\n itemToUpdate.markupValue = roundAwayFromZero(item.value + item.value * (markup / 100))\n this.addUpdatePartPaintLoading(item)\n }\n this.updateTotal()\n },\n getMarkupPercent(item) {\n let markup = 0\n switch (item.mark) {\n case PartTypes.NEW.value:\n markup = this.innerValue.newMarkup\n break\n case PartTypes.USED.value:\n markup = this.innerValue.usedMarkup\n break\n case PartTypes.EXCH.value:\n markup = this.innerValue.exchangeMarkup\n break\n case PartTypes.RECR.value:\n markup = this.innerValue.recoreMarkup\n break\n case PartTypes.RECD.value:\n markup = this.innerValue.reconditionedMarkup\n break\n case PartTypes.ALTN.value:\n markup = this.innerValue.usedMarkup\n break\n case PartTypes.AFT.value:\n markup = this.innerValue.afterMarketMarkup\n break\n case PartTypes.CAFT.value:\n markup = this.innerValue.afterMarketMarkup\n break\n case PartTypes.AFTA.value:\n markup = this.innerValue.afterMarketMarkup\n break\n }\n return markup\n },\n async addUpdatePartPaintLoading(partItem) {\n if (!this.isNtar || !this.ntarLoadingItems || !this.quoteInsurer) {\n // console.log('!this.isNtar')\n return\n }\n const linkedItem = this.innerValue.labours.find((i) => i.linkedItemId === partItem.quoteItemId && i.isLoadItem && !i.deleted)\n let ntarLoadingItem = this.ntarLoadingItems.find((n) => n.itemNo === partItem.itemNo && n.category === 'PRT')\n if (!ntarLoadingItem && partItem.side) {\n ntarLoadingItem = this.ntarLoadingItems.find((n) => n.itemNo === `${partItem.itemNo}${partItem.side}` && n.category === 'PRT')\n }\n const hasPaintLoading = ntarLoadingItem && (partItem.mark === PartTypes.USED.value || partItem.mark === PartTypes.EXCH.value)\n if (!hasPaintLoading && !linkedItem) {\n // console.log('!hasPaintLoading', linkedItem)\n return\n } else if (linkedItem && partItem.mark !== PartTypes.USED.value && partItem.mark !== PartTypes.EXCH.value) {\n // Delete paint loading item\n // console.log('Deleting paint loading')\n this.deletePaintLoadingItem(linkedItem)\n return\n }\n\n let paintItem = this.innerValue.labours.find((i) => i.itemType === ItemCategoryTypes.PAINT && i.itemNo === ntarLoadingItem.raItemNo && !i.deleted)\n let paintHour = 0\n if (!paintItem) {\n const paintItems = await this.getDefaultPaintItem(ntarLoadingItem.raItemNo)\n paintItem = paintItems[0]\n paintHour = paintItem.paintHour\n } else {\n paintHour = paintItem.hourValue\n }\n // console.log(paintItem)\n const paintLoadingItemNo = (parseInt(ntarLoadingItem.raItemNo, 10) + 5000).toString()\n let paintLoadingItem =\n linkedItem ||\n this.innerValue.labours.find((p) => p.itemType === ItemCategoryTypes.PAINT && p.itemNo === paintLoadingItemNo && p.isLoadItem && !p.deleted)\n let isNew = false\n let loadingValueType = ''\n if (partItem.mark === PartTypes.USED.value) {\n loadingValueType = 3\n } else if (partItem.mark === PartTypes.EXCH.value) {\n loadingValueType = 2\n }\n const loadingValue = this.quoteInsurer.insurerLoadingValues.find((v) => v.category === 'PRT' && v.loadingValueType === loadingValueType)\n const loadingPercent = (!loadingValue ? 0 : loadingValue.value) * 100\n partItem.loadingPercent = loadingPercent\n if (!paintLoadingItem) {\n paintLoadingItem = new QuoteItemModel(this.value.quoteId, paintLoadingItemNo, `Paint Loading, ${partItem.itemDesc}`, ItemCategoryTypes.PAINT)\n paintLoadingItem.sortNo = this.value.length ? Math.max(...this.value.map((i) => i.sortNo)) + 1 : 1\n isNew = true\n }\n // console.log(paintHour, partItem.loadingPercent)\n paintLoadingItem.lineNumber = this.nextLineNumber\n paintLoadingItem.isLoadItem = true\n paintLoadingItem.linkedItemId = partItem.quoteItemId\n paintLoadingItem.hourValue = roundAwayFromZero((paintHour * partItem.loadingPercent) / 100)\n paintLoadingItem.rate = this.value.shopRate\n paintLoadingItem.dollarValue = roundAwayFromZero(paintLoadingItem.hourValue * this.value.shopRate)\n partItem.linkedItemId = paintLoadingItem.quoteItemId\n if (isNew) {\n this.innerValue.labours.splice(this.innerValue.labours.length, 1, paintLoadingItem)\n this.innerValue.lines = paintLoadingItem.lineNumber + 1\n }\n // console.log('part paint loading added', paintLoadingItem.linkedItemId)\n },\n deletePaintLoadingItem(item) {\n let originalItemStatus = item.itemStatus\n if (item.isNew) {\n const itemIndex = this.innerValue.labours\n .map(function (obj) {\n return obj.quoteItemId\n })\n .indexOf(item.quoteItemId)\n if (itemIndex >= 0) {\n this.innerValue.labours.splice(itemIndex, 1)\n }\n } else {\n item.deleted = true\n item.isDeleted = true\n item.itemStatus = QuoteItemStatusTypes.Deleted\n }\n this.updateTotal()\n this.$toast.open({\n message: `Item ${item.itemDesc} deleted`,\n type: 'is-danger',\n position: 'is-top',\n actionText: 'Undo',\n onAction: () => {\n if (item.isNew) {\n this.innerValue.labours.splice(this.innerValue.labours.length, 1, item)\n // this.items.splice(this.items.length, 1, item)\n } else {\n item.deleted = false\n item.isDeleted = false\n item.itemStatus = originalItemStatus\n }\n this.updateTotal()\n }\n })\n },\n async getDefaultPaintItem(itemNo) {\n const filter = {\n countryId: Guid.empty(),\n companyId: this.value.companyId,\n query: itemNo,\n butterflyCode: '',\n scheduleId: this.vehicle.scheduleId || '',\n bodyId: this.vehicle.bodyId || '',\n bodySize: '',\n paintGroup: this.vehicle.paintGroup || '',\n variantId: 0,\n nvic: '',\n sortColumn: '',\n sortOrder: '',\n pageIndex: 1,\n pageSize: 1\n }\n const paintItem = await QuoteService.getAvailableLabourItems(filter, this.value.labourType.toLowerCase())\n return paintItem\n }\n }\n}\n","import { ItemCategoryTypes, QuotingMethodTypes } from '@/enums'\r\nimport QuoteTotalsMethodMixin from './QuoteTotalsMethodMixin'\r\nimport QuoteItemsMixin from './QuoteItemsMixin'\r\nimport { roundAwayFromZero } from '@/components/utils/AccountingFunctions'\r\n\r\nexport default {\r\n mixins: [QuoteTotalsMethodMixin, QuoteItemsMixin],\r\n computed: {\r\n opgTotal() {\r\n if (this.mixinEntity) {\r\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.opgs, ItemCategoryTypes.OPG)\r\n }\r\n }\r\n },\r\n methods: {\r\n updateValue(index, item) {\r\n // if (item && item.deleteOtherItem && item.hourValue > 0) {\r\n // item.hourValue = item.hourValue * -1\r\n // }\r\n if (this.value.quotingMethod === QuotingMethodTypes.Dollar) {\r\n item.dollarValue = item.hourValue\r\n } else {\r\n item.dollarValue = roundAwayFromZero(item.hourValue * item.rate)\r\n }\r\n this.updateTotal()\r\n },\r\n getOpgRate(item, index) {\r\n if (this.value.quotingMethod === QuotingMethodTypes.Hour) {\r\n let rate = this.isNtar ? this.innerValue.rates[0] : this.innerValue.rates.find((r) => r.labourCodeId === item.opgCode)\r\n if (!rate) {\r\n const labourType = this.$labourTypes.find((t) => t.labourTypeCode === PaintGroupTypes.PAINT)\r\n const newRate = {\r\n quoteId: this.innerValue.quoteId,\r\n labourCodeId: item.opgCode,\r\n labourTypeId: labourType.labourTypeId,\r\n rate: this.isNtar ? this.innerValue.shopRate : 0,\r\n modifiedBy: '',\r\n modifiedDate: null,\r\n createdBy: '',\r\n createdDate: null,\r\n isNew: true,\r\n quoteVersion: 0,\r\n deleted: false\r\n }\r\n this.innerValue.rates.push(newRate)\r\n rate = newRate\r\n }\r\n // this.items[index].rate = rate.rate\r\n // this.items[index].dollarValue = this.items[index].hourValue * this.items[index].rate\r\n item.rate = rate.rate\r\n item.dollarValue = roundAwayFromZero(item.hourValue * item.rate)\r\n }\r\n this.$emit('opg-code-changed')\r\n this.updateTotal()\r\n },\r\n getDefaultRate(item, index) {\r\n let rate = this.isNtar ? this.innerValue.rates[0] : this.innerValue.rates.find((r) => r.labourCodeId === item.opgCode)\r\n return rate.rate\r\n }\r\n }\r\n}\r\n","import { ItemCategoryTypes } from '@/enums'\r\nimport QuoteTotalsMethodMixin from './QuoteTotalsMethodMixin'\r\nimport QuoteItemsMixin from './QuoteItemsMixin'\r\n\r\nexport default {\r\n mixins: [QuoteTotalsMethodMixin, QuoteItemsMixin],\r\n computed: {\r\n miscTotal() {\r\n if (this.mixinEntity) {\r\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.miscs, ItemCategoryTypes.MISC)\r\n }\r\n }\r\n },\r\n methods: {\r\n updateValue(index, item) {\r\n // if (item && item.deleteOtherItem && item.value > 0) {\r\n // item.value = item.value * -1\r\n // }\r\n this.updateTotal()\r\n }\r\n }\r\n}\r\n","import { ItemCategoryTypes } from '@/enums'\r\nimport QuoteTotalsMethodMixin from './QuoteTotalsMethodMixin'\r\nimport QuoteItemsMixin from './QuoteItemsMixin'\r\n\r\nexport default {\r\n mixins: [QuoteTotalsMethodMixin, QuoteItemsMixin],\r\n computed: {\r\n subletTotal() {\r\n if (this.mixinEntity) {\r\n return this.calculateItemCategoryTotal(this.mixinEntity.quotingMethod, this.mixinEntity.sublets, ItemCategoryTypes.SUBL)\r\n }\r\n }\r\n },\r\n methods: {\r\n updateValue(index, item) {\r\n if (item && item.deleteOtherItem && item.value > 0) {\r\n item.value = item.value * (item.itemQuantity !== 0 ? item.itemQuantity : 1)\r\n }\r\n this.updateTotal()\r\n }\r\n }\r\n}\r\n","import _get from 'lodash.get'\r\n\r\nexport default {\r\n methods: {\r\n isLineDifferentFromLastCommunication(item) {\r\n try {\r\n return this.isOrmLineDifferentFromLastCommunication(item)\r\n } catch(ex) {\r\n console.log(ex)\r\n return false\r\n }\r\n },\r\n getCommunicationFieldsToCheck(item) {\r\n let target = this.getTargetEntity()\r\n\r\n if (target.orm !== null) {\r\n return this.getOrmFieldsToCheck(item)\r\n }\r\n\r\n return []\r\n },\r\n lookupItemElementName(value) {\r\n let lookup = {\r\n 0: 'MECH',\r\n 1: 'Misc',\r\n 2: 'PAINT',\r\n 3: 'PaintMaterials',\r\n 4: 'Part',\r\n 5: 'RR',\r\n 6: 'REP',\r\n 7: 'Towing',\r\n 'Sublet': 'SUBL'\r\n }\r\n\r\n return lookup[value]\r\n },\r\n getOrmFieldsToCheck(item) {\r\n let fieldsToCheck = {\r\n //lineNumber: 'itemNo',\r\n //itemNo: 'code',\r\n itemDesc: 'description',\r\n itemType: (item) => {\r\n let name = item.itemElementName\r\n if(name == '1') {\r\n if(item?.item?.sublet !== null) {\r\n name = 'Sublet'\r\n }\r\n }\r\n\r\n return this.lookupItemElementName(name).toUpperCase()\r\n }\r\n }\r\n\r\n if(item.itemType == 'PART') {\r\n fieldsToCheck['itemQuantity'] = 'item.partQuantity'\r\n fieldsToCheck['value'] = 'item.partValue'\r\n fieldsToCheck['partNo'] = 'item.partSource.item.partNumber'\r\n } else if(item.itemType == 'MISC') {\r\n fieldsToCheck['value'] = 'quoteItemValue'\r\n } else if(item.itemType == 'SUBL') {\r\n fieldsToCheck['value'] = 'quoteItemValue'\r\n } else {\r\n fieldsToCheck['hourValue'] = 'item.hours'\r\n fieldsToCheck['dollarValue'] = 'quoteItemValue'\r\n }\r\n\r\n return fieldsToCheck\r\n },\r\n isOrmFieldDifferenceFromLastCommunication(item, fieldName) {\r\n\r\n let target = this.getTargetEntity()\r\n\r\n if (target.orm === null) {\r\n return false\r\n }\r\n\r\n let fieldsToCheck = this.getOrmFieldsToCheck(item)\r\n\r\n let exFieldName = fieldsToCheck[fieldName]\r\n const historyLine = this.getLastOrmHistoryLine(item)\r\n let exItem = historyLine ? historyLine.record : null\r\n\r\n let value1 = _get(item, fieldName)\r\n\r\n let value2 = null\r\n if(typeof exFieldName === 'function') {\r\n value2 = exFieldName(exItem)\r\n } else {\r\n value2 = _get(exItem, exFieldName)\r\n }\r\n\r\n // IGNORE CASE\r\n let isDifferent = (value1+'').toLocaleUpperCase().trim() != (value2+'').toLocaleUpperCase().trim()\r\n\r\n if(isDifferent) {\r\n console.log(item.itemDesc, item.itemType,fieldName,value1,value2)\r\n }\r\n\r\n return isDifferent\r\n },\r\n isOrmLineDifferentFromLastCommunication(item) {\r\n\r\n let target = this.getTargetEntity()\r\n\r\n if (target.orm === null) {\r\n return false\r\n }\r\n\r\n let fieldsToCheck = this.getCommunicationFieldsToCheck(item)\r\n for(let fieldName of Object.keys(fieldsToCheck)) {\r\n if(this.isOrmFieldDifferenceFromLastCommunication(item, fieldName)) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n },\r\n getLastOrmHistoryLine(item) {\r\n\r\n let target = this.getTargetEntity()\r\n\r\n if(target.ormHistory === undefined || target.ormHistory[item.lineNumber] === undefined) {\r\n return null\r\n }\r\n\r\n return target.ormHistory[item.lineNumber].slice(-1)[0]\r\n },\r\n getTargetEntity() {\r\n var target = this.innerValue\r\n if(this.innerValue === undefined) {\r\n target = this.value\r\n }\r\n return target\r\n }\r\n }\r\n}","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","import { mapGetters } from 'vuex'\r\nimport { AudanetLockNotification } from '../components'\r\nimport QuoteAssessmentMixin from './QuoteAssessmentMixin'\r\n\r\nexport default {\r\n components: { AudanetLockNotification },\r\n mixins: [QuoteAssessmentMixin],\r\n computed: {\r\n defaultRowColourClass: function () {\r\n return (item, itemAssessments, displayDeleted) => {\r\n let classText = []\r\n if (this.isItemDeleted(item, itemAssessments) && displayDeleted !== undefined ) {\r\n classText.push('is-delete-real-item')\r\n let isOutstandingOrdered = item.quantityOrdered > 0 && item.quantityReturned < item.quantityOrdered\r\n if (isOutstandingOrdered) {\r\n classText.push('is-delete-item')\r\n } else if (!displayDeleted) {\r\n classText.push('is-hidden')\r\n }\r\n }\r\n else if (this.isItemRemoved(item, itemAssessments)) {\r\n classText.push('strike-through-line')\r\n }\r\n\r\n if (item.deleteOtherItem && (item.value < 0 || item.dollarValue < 0)) {\r\n classText.push('is-delete-item')\r\n } else if (item.isNew && !item.deleteOtherItem) {\r\n classText.push('is-new-item')\r\n } else if (this.baseItemDiff(item)) {\r\n classText.push('is-changed-item')\r\n }\r\n\r\n /*if(this.isLineDifferentFromLastCommunication(item)) {\r\n classText.push('has-background-warning')\r\n }*/\r\n\r\n return classText\r\n }\r\n },\r\n ...mapGetters('quotes', {\r\n baseSnapshot: 'baseSnapshot',\r\n baseItem: 'baseItem',\r\n baseItemDiff: 'baseItemDiff'\r\n })\r\n },\r\n methods: {\r\n getBaseItem(itemId, itemType) {\r\n if (!this.baseSnapshot) {\r\n return false\r\n }\r\n let baseItem = null\r\n switch (itemType) {\r\n case ItemCategoryTypes.RR:\r\n case ItemCategoryTypes.REP:\r\n case ItemCategoryTypes.RWA:\r\n case ItemCategoryTypes.PAINT:\r\n baseItem = this.baseSnapshot.labours.find((i) => i.quoteItemId === itemId)\r\n break\r\n case ItemCategoryTypes.MECH:\r\n case ItemCategoryTypes.CD:\r\n case ItemCategoryTypes.CRUSH:\r\n case ItemCategoryTypes.FIBER:\r\n baseItem = this.baseSnapshot.others.find((i) => i.quoteItemId === itemId)\r\n break\r\n case ItemCategoryTypes.PART:\r\n baseItem = this.baseSnapshot.parts.find((i) => i.quoteItemId === itemId)\r\n break\r\n case ItemCategoryTypes.OPG:\r\n baseItem = this.baseSnapshot.opgs.find((i) => i.quoteItemId === itemId)\r\n break\r\n case ItemCategoryTypes.MISC:\r\n baseItem = this.baseSnapshot.miscs.find((i) => i.quoteItemId === itemId)\r\n break\r\n case ItemCategoryTypes.SUBL:\r\n baseItem = this.baseSnapshot.sublets.find((i) => i.quoteItemId === itemId)\r\n break\r\n default:\r\n baseItem = null\r\n }\r\n return baseItem\r\n }\r\n },\r\n watch: {\r\n items: {\r\n // This is to update item's itemStatus when changed\r\n // Reset to original value if nothing changed\r\n handler: function (newVal, oldVal) {\r\n // console.log('items changed')\r\n if (oldVal) {\r\n const vm = this\r\n newVal.forEach(function (i) {\r\n // const diff = vm.baseItemDiff(i)\r\n // const itemStatusDiff = diff ? diff.find(d => d.kind === 'E' && d.path[0] === 'itemStatus') : null\r\n // // console.log('Changed', itemStatusDiff)\r\n // if (diff && diff.length === 1 && itemStatusDiff) {\r\n // const baseItem = vm.baseItem(i)\r\n // i.itemStatus = baseItem.itemStatus\r\n // } else if (diff) {\r\n // // console.log(vm.baseItemDiff(i))\r\n // i.itemStatus = 'C'\r\n // }\r\n const diff = vm.baseItemDiff(i, ['itemStatus'])\r\n const itemStatusDiff = vm.baseItemDiff(i, ['itemStatus'], false)\r\n // console.log('Changed', itemStatusDiff)\r\n if (diff && itemStatusDiff) {\r\n const baseItem = vm.baseItem(i)\r\n i.itemStatus = baseItem.itemStatus\r\n } else if (diff) {\r\n // console.log(vm.baseItemDiff(i))\r\n i.itemStatus = 'C'\r\n }\r\n })\r\n }\r\n },\r\n deep: true\r\n }\r\n }\r\n}\r\n","import { QuotingMethodTypes, ItemCategoryTypes } from '@/enums'\r\nimport { roundAwayFromZero } from '@/components/utils/AccountingFunctions'\r\n\r\nexport default {\r\n computed: {\r\n mixinEntity() {\r\n return this.entity || this.innerValue\r\n }\r\n },\r\n methods: {\r\n calculateItemCategoryTotal(quotingMethod, items, itemType) {\r\n let total = 0\r\n if (itemType === ItemCategoryTypes.PART) {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly)\r\n .reduce(function (total, item) {\r\n return roundAwayFromZero(total + item.itemQuantity * item.markupValue)\r\n }, 0)\r\n } else if (itemType === ItemCategoryTypes.MISC) {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly)\r\n .reduce(function (total, item) {\r\n return total + item.value\r\n }, 0)\r\n } else if (itemType === ItemCategoryTypes.OPG) {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly)\r\n .reduce(function (total, item) {\r\n return total + (quotingMethod === QuotingMethodTypes.Dollar ? item.dollarValue : item.hourValue * item.rate)\r\n }, 0)\r\n } else if (itemType === ItemCategoryTypes.SUBL) {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly)\r\n .reduce(function (total, item) {\r\n return total + item.value\r\n }, 0)\r\n } else {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly && i.itemType === itemType)\r\n .reduce(function (total, item) {\r\n return roundAwayFromZero(total + item.dollarValue)\r\n }, 0)\r\n }\r\n return total\r\n },\r\n calculateItemsTotal(quotingMethod, items) {\r\n let total = 0\r\n total += items\r\n .filter((i) => !i.deleted && !i.reportOnly && i.itemType === ItemCategoryTypes.PART)\r\n .reduce(function (subTotal, item) {\r\n return roundAwayFromZero(subTotal + item.itemQuantity * item.markupValue)\r\n }, 0)\r\n total += items\r\n .filter((i) => !i.deleted && !i.reportOnly && (i.itemType === ItemCategoryTypes.MISC || i.itemType === ItemCategoryTypes.SUBL))\r\n .reduce(function (subTotal, item) {\r\n return subTotal + item.value\r\n }, 0)\r\n total += items\r\n .filter((i) => !i.deleted && !i.reportOnly && i.itemType === ItemCategoryTypes.OPG)\r\n .reduce(function (subTotal, item) {\r\n return subTotal + (quotingMethod === QuotingMethodTypes.Dollar ? item.dollarValue : item.hourValue * item.rate)\r\n }, 0)\r\n\r\n total += items\r\n .filter(\r\n (i) =>\r\n !i.deleted &&\r\n !i.reportOnly &&\r\n i.itemType !== ItemCategoryTypes.OPG &&\r\n i.itemType !== ItemCategoryTypes.PART &&\r\n i.itemType !== ItemCategoryTypes.MISC &&\r\n i.itemType !== ItemCategoryTypes.SUBL\r\n )\r\n .reduce(function (subTotal, item) {\r\n return roundAwayFromZero(subTotal + (quotingMethod === QuotingMethodTypes.Dollar ? item.dollarValue : roundAwayFromZero(item.hourValue * item.rate)))\r\n }, 0)\r\n return total\r\n }\r\n }\r\n}\r\n","import { ItemCategoryCodeTypes, QuotingMethodTypes } from '@/enums'\r\nimport QuoteTotalsMethodMixin from './QuoteTotalsMethodMixin'\r\nimport { roundAwayFromZero } from '@/components/utils/AccountingFunctions'\r\nimport { ItemCategoryTypes } from '../../../enums'\r\nimport { QuoteItemModel } from '@/classes/viewmodels'\r\nimport _cloneDeep from 'lodash.clonedeep'\r\n\r\n// import cloneDeep from 'lodash.clonedeep'\r\n\r\nexport default {\r\n mixins: [QuoteTotalsMethodMixin],\r\n computed: {},\r\n methods: {\r\n deleteItemAuthorise(item, index) {\r\n item.isQuoteItemDeleted = true\r\n if (item.isAdded) {\r\n item.isDeleted = true\r\n }\r\n this.updateAssessmentItem(index, item)\r\n },\r\n undoDeleteItem(item, index) {\r\n item.isQuoteItemDeleted = false\r\n this.updateAssessmentItem(index, item)\r\n },\r\n selectAllItems(value) {\r\n if (value !== null) {\r\n this.activeItems.forEach((item) => {\r\n item.isSelected = value\r\n this.updateAssessmentItem(this.activeItems.indexOf(item), item)\r\n })\r\n }\r\n },\r\n defaultSelectItems() {\r\n this.activeItems.forEach((item) => {\r\n item.isSelected = false\r\n })\r\n },\r\n addBlankItemAuthorise() {\r\n let rate = 0\r\n // const type = ItemCategoryTypes.RR\r\n switch (this.itemType) {\r\n case ItemCategoryTypes.RR:\r\n rate = this.isNtar ? this.value.shopRate : this.getLabourRate(ItemCategoryTypes.RR, this.value.rates, this.value.shopRate, this.value.quoteId).rate\r\n break\r\n case ItemCategoryTypes.RWA:\r\n rate = this.isNtar ? this.value.shopRate : this.getLabourRate(ItemCategoryTypes.RWA, this.value.rates, this.value.shopRate, this.value.quoteId).rate\r\n break\r\n case ItemCategoryTypes.REP:\r\n rate = this.isNtar ? this.value.shopRate : this.getLabourRate(ItemCategoryTypes.REP, this.value.rates, this.value.shopRate, this.value.quoteId).rate\r\n break\r\n case ItemCategoryTypes.PAINT:\r\n rate = this.isNtar ? this.value.shopRate : this.getLabourRate(this.vehicle.paintGroup, this.value.rates, this.value.shopRate, this.value.quoteId).rate\r\n break\r\n }\r\n let sortNo = 0\r\n if (ItemCategoryCodeTypes.itemTypes.filter((c) => c.category === 'Labour').some((c) => c.code === this.itemType)) {\r\n sortNo = this.value.labours.length ? Math.max(...this.value.labours.map((i) => i.sortNo)) + 1 : 1\r\n } else if (ItemCategoryCodeTypes.itemTypes.filter((c) => c.category === 'Part').some((c) => c.code === this.itemType)) {\r\n sortNo = this.value.parts.length ? Math.max(...this.value.parts.map((i) => i.sortNo)) + 1 : 1\r\n } else if (ItemCategoryCodeTypes.itemTypes.filter((c) => c.category === 'OPG').some((c) => c.code === this.itemType)) {\r\n sortNo = this.value.opgs.length ? Math.max(...this.value.opgs.map((i) => i.sortNo)) + 1 : 1\r\n } else if (ItemCategoryCodeTypes.itemTypes.filter((c) => c.category === 'Misc').some((c) => c.code === this.itemType)) {\r\n sortNo = this.value.miscs.length ? Math.max(...this.value.miscs.map((i) => i.sortNo)) + 1 : 1\r\n } else if (ItemCategoryCodeTypes.itemTypes.filter((c) => c.category === 'Sublet').some((c) => c.code === this.itemType)) {\r\n sortNo = this.value.sublets.length ? Math.max(...this.value.sublets.map((i) => i.sortNo)) + 1 : 1\r\n } else if (ItemCategoryCodeTypes.itemTypes.filter((c) => c.category === 'OtherLabour').some((c) => c.code === this.itemType)) {\r\n sortNo = this.value.others.length ? Math.max(...this.value.others.map((i) => i.sortNo)) + 1 : 1\r\n }\r\n let newItem = {\r\n submittedItem: null,\r\n authorisedItem: null\r\n }\r\n let emptyItem = new QuoteItemModel(this.innerValue.quoteId, '', '', this.itemType)\r\n emptyItem.isSelected = true\r\n emptyItem.itemDesc = ''\r\n emptyItem.isAdded = true\r\n emptyItem.itemType = this.itemType\r\n emptyItem.reportOnly = false\r\n emptyItem.lineNumber = this.nextLineNumber\r\n emptyItem.itemNo = this.$filters.pad(newItem.lineNumber, 4)\r\n emptyItem.hourValue = 0\r\n emptyItem.rate = rate\r\n emptyItem.dollarValue = 0\r\n emptyItem.opgCode = ItemCategoryCodeTypes.itemTypes.filter((c) => c.category === 'OPG' || c.category === 'Labour').some((c) => c.code === this.itemType)\r\n ? this.vehicle.paintGroup\r\n : null\r\n emptyItem.sortNo = sortNo\r\n emptyItem.isNew = true\r\n emptyItem.itemType = this.itemType\r\n\r\n if (this.editQuotedMode) {\r\n newItem.submittedItem = _cloneDeep(emptyItem)\r\n }\r\n if (this.editAuthorisedMode) {\r\n newItem.authorisedItem = _cloneDeep(emptyItem)\r\n }\r\n\r\n return newItem\r\n },\r\n getQuoteItemAssessments(assessments, item) {\r\n let sortedAssessments = assessments.sort((a1, a2) => a1.subQuoteNo - a2.subQuoteNo)\r\n let quoteItemAssessments = []\r\n sortedAssessments.forEach((assessment) => {\r\n const quoteItemSubmitted = assessment?.submittedAssessment?.assessmentQuoteItems?.find((aqi) => aqi.quoteItemId === item.quoteItemId)\r\n const quoteItemAuthorised = assessment?.authorisedAssessment?.assessmentQuoteItems?.find((aqi) => aqi.quoteItemId === item.quoteItemId)\r\n if (quoteItemAuthorised) {\r\n quoteItemAssessments.push([quoteItemSubmitted, quoteItemAuthorised])\r\n } else if (quoteItemSubmitted) {\r\n quoteItemAssessments.push([quoteItemSubmitted])\r\n }\r\n })\r\n return quoteItemAssessments\r\n },\r\n getItemsAssessments(items, quoteAssessments) {\r\n let itemsAssessments = []\r\n items.forEach((item) => {\r\n let itemAssessments = {}\r\n itemAssessments.quoteItemId = item.quoteItemId\r\n itemAssessments.assessments = this.getQuoteItemAssessments(quoteAssessments, item)\r\n if (itemAssessments.assessments.length > 0) {\r\n itemsAssessments.push(itemAssessments)\r\n }\r\n })\r\n return itemsAssessments\r\n },\r\n getItemValue(item, quotingMethod) {\r\n if (item.itemType === ItemCategoryTypes.PART) {\r\n return item.itemQuantity * item.markupValue\r\n } else if (item.itemType === ItemCategoryTypes.MISC || item.itemType === ItemCategoryTypes.SUBL) {\r\n return item.value\r\n } else {\r\n return quotingMethod === QuotingMethodTypes.Dollar ? item.dollarValue : item.hourValue * item.rate\r\n }\r\n },\r\n getItemDeltaValue(item, quotingMethod) {\r\n if (item.itemType === ItemCategoryTypes.PART) {\r\n return roundAwayFromZero(item.itemQuantity * item.markupValueDelta + item.itemQuantityDelta * item.markupValue - item.itemQuantityDelta * item.markupValueDelta)\r\n } else if (item.itemType === ItemCategoryTypes.MISC || item.itemType === ItemCategoryTypes.SUBL) {\r\n return item.valueDelta\r\n } else {\r\n return quotingMethod === QuotingMethodTypes.Dollar\r\n ? item.dollarValueDelta\r\n : roundAwayFromZero(item.hourValue * item.rateDelta + item.hourValueDelta * item.rate - item.hourValueDelta * item.rateDelta)\r\n }\r\n },\r\n itemsChanged(items, quotingMethod) {\r\n return items.filter((i) => this.itemChanged(i, i.lastQuotedAssessment, i.lastAuthorisedAssessment, quotingMethod))\r\n },\r\n itemChanged(item, lastQuoteAssessment, lastAuthorisedAssessment, quotingMethod) {\r\n //if no assessment it is new\r\n if (!lastQuoteAssessment && !lastAuthorisedAssessment) {\r\n if (item.deleted) {\r\n return false\r\n }\r\n return true\r\n }\r\n let itemAssessment = lastAuthorisedAssessment ? lastAuthorisedAssessment : lastQuoteAssessment\r\n return this.itemValueChanged(item, itemAssessment, quotingMethod)\r\n },\r\n itemValueChanged(item, itemAssessment, quotingMethod) {\r\n if (!itemAssessment) {\r\n return item.deleted !== true //item is new (assessment is not available)\r\n }\r\n if (item.deleted) {\r\n return itemAssessment.isQuoteItemDeleted !== true //item is deleted and already assessed(no changes)\r\n }\r\n if (itemAssessment.reportOnly !== item.reportOnly) return true\r\n if (itemAssessment.value !== item.value) return true\r\n if (itemAssessment.isQuoteItemDeleted !== item.deleted) return true\r\n if (ItemCategoryCodeTypes.itemTypes.filter((c) => c.valueCalculationType === 'Labour').some((c) => c.code === item.itemType)) {\r\n if (itemAssessment.dollarValue !== item.dollarValue) return true\r\n if (itemAssessment.hourValue !== item.hourValue && quotingMethod === QuotingMethodTypes.Hour) return true\r\n }\r\n if (ItemCategoryCodeTypes.itemTypes.filter((c) => c.category === 'Part').some((c) => c.code === item.itemType)) {\r\n if (itemAssessment.itemQuantity * itemAssessment.markupValue !== item.itemQuantity * item.markupValue) return true\r\n }\r\n if (ItemCategoryCodeTypes.itemTypes.filter((c) => c.category === 'Misc' || c.category === 'Sublet').some((c) => c.code === item.itemType)) {\r\n if (itemAssessment.value !== item.value) return true\r\n }\r\n return false\r\n },\r\n //true if item deleted before any assessment\r\n isItemDeleted(item, assessmentQuoteItems = null) {\r\n if (assessmentQuoteItems === null) {\r\n return item.deleted || item.isDeleted\r\n } else if (item.deleted || item.isDeleted) {\r\n if (assessmentQuoteItems.length > 0) return false\r\n else return true\r\n }\r\n return false\r\n },\r\n //true if Item is deleted but has an assessment\r\n isItemRemoved(item, assessmentQuoteItems) {\r\n //if retrieved item is already deleted:\r\n // if there is an assessment for the item, return true\r\n if (item.deleted || item.isDeleted) {\r\n if (assessmentQuoteItems.length > 0) return true\r\n else return false\r\n }\r\n return false\r\n },\r\n rowDisplayStatus(item, assessmentQuoteItems) {\r\n let classText = []\r\n if (this.isItemRemoved(item, assessmentQuoteItems)) {\r\n classText.push('strike-through-line')\r\n }\r\n return classText\r\n },\r\n revalue(newValue, oldValue, items) {\r\n let total = 0\r\n items\r\n .filter((i) => !i.reportOnly && !(i.deleted || i.isDeleted))\r\n .forEach((item, index) => {\r\n const percentage = item.dollarValue / oldValue\r\n item.dollarValue = roundAwayFromZero(percentage * newValue)\r\n if (index === items.length - 1) {\r\n item.dollarValue = roundAwayFromZero(newValue - total)\r\n }\r\n item.hourValue = roundAwayFromZero(item.dollarValue / item.rate)\r\n total = roundAwayFromZero(total + item.dollarValue)\r\n })\r\n },\r\n getAssessmentItemsDeltaTotal(items, quotingMethod) {\r\n let total = 0\r\n items\r\n .filter((i) => i.deleted !== true )\r\n .forEach((item) => {\r\n if (item.isQuoteItemDeleted || item.reportOnly) {\r\n total += this.getItemDeltaValue(item, quotingMethod) - this.getItemValue(item, quotingMethod)\r\n } else {\r\n total += this.getItemDeltaValue(item, quotingMethod)\r\n }\r\n })\r\n return total\r\n },\r\n reportOnlyColorClass(item) {\r\n let classText = []\r\n if (item.reportOnly) {\r\n classText.push('report-only-value')\r\n }\r\n return classText\r\n },\r\n tableCellColorClass(item, targetItem) {\r\n let classText = []\r\n if (item) {\r\n const itemValue = this.getItemValue(item, this.value.quotingMethod)\r\n const targetItemValue = targetItem ? this.getItemValue(targetItem, this.value.quotingMethod) : 0\r\n if (itemValue > targetItemValue) {\r\n classText.push('success-bg')\r\n }\r\n if (itemValue < targetItemValue) {\r\n classText.push('danger-bg')\r\n }\r\n }\r\n return classText\r\n },\r\n tableCellTextColorClass(item, targetItem) {\r\n let classText = []\r\n if (item && targetItem) {\r\n const itemValue = this.getItemValue(item, this.value.quotingMethod)\r\n const targetItemValue = targetItem ? this.getItemValue(targetItem, this.value.quotingMethod) : 0\r\n if (itemValue > targetItemValue) {\r\n classText.push('is-success has-text-success')\r\n }\r\n if (itemValue < targetItemValue) {\r\n classText.push('is-danger has-text-danger')\r\n }\r\n }\r\n return classText\r\n },\r\n createAssessment(items, subQuoteNo, assessorName = null, isDraft = true) {\r\n if (items.length === 0) return null\r\n const assessment = {\r\n assessorName: assessorName,\r\n subQuoteNo: subQuoteNo,\r\n isDraft: isDraft,\r\n isAuthorise: false,\r\n isInvoiced: false,\r\n authorisedAssessment: null,\r\n submittedAssessment: this.createAssessmentDetails(items,subQuoteNo, isDraft, false)\r\n }\r\n return assessment\r\n },\r\n createAssessmentDetails(items, subQuoteNo, isDraft = true, isAuthorise = false) {\r\n let assessmentDetail = {\r\n assessmentQuoteItems: this.createAssessmentQuoteItems(items, subQuoteNo, isAuthorise),\r\n isDraft: isDraft\r\n }\r\n return assessmentDetail\r\n },\r\n createAssessmentQuoteItems(items, subQuoteNo, isAuthorise = false) {\r\n if (!items || items.length === 0) return []\r\n return items.map((i) => {\r\n const reportOnly = i.lastAuthorisedAssessment?.reportOnly ?? i.lastQuoteAssessment?.reportOnly\r\n return {\r\n quoteItemId: i.quoteItemId,\r\n itemType: i.itemType,\r\n itemNo: i.itemNo,\r\n itemDesc: i.itemDesc,\r\n hourValue: i.hourValue,\r\n rate: i.rate,\r\n dollarValue: i.dollarValue,\r\n partNo: i.partNo,\r\n partSource: i.partSource,\r\n itemComment: i.itemComment,\r\n itemQuantity: i.itemQuantity,\r\n value: i.value,\r\n reportOnly: i.reportOnly,\r\n isQuoteItemDeleted: isAuthorise ? i.isQuoteItemDeleted : i.deleted || i.isDeleted,\r\n markupValue: i.markupValue,\r\n mark: i.mark,\r\n buyPrice: i.buyPrice,\r\n buyPriceDelta: this.calculateDeltaValue(\r\n i.buyPrice,\r\n i.lastAuthorisedAssessment?.buyPrice ?? i.lastQuotedAssessment?.buyPrice,\r\n reportOnly),\r\n dollarValueDelta: this.calculateDeltaValue(\r\n i.dollarValue,\r\n i.lastAuthorisedAssessment?.dollarValue ?? i.lastQuotedAssessment?.dollarValue,\r\n reportOnly),\r\n hourValueDelta: this.calculateDeltaValue(\r\n i.hourValue,\r\n i.lastAuthorisedAssessment?.hourValue ?? i.lastQuotedAssessment?.hourValue,\r\n reportOnly),\r\n itemQuantityDelta: this.calculateDeltaValue(\r\n i.itemQuantity,\r\n i.lastAuthorisedAssessment?.itemQuantity ?? i.lastQuotedAssessment?.itemQuantity,\r\n reportOnly),\r\n markupValueDelta: this.calculateDeltaValue(\r\n i.markupValue,\r\n i.lastAuthorisedAssessment?.markupValue ?? i.lastQuotedAssessment?.markupValue,\r\n reportOnly),\r\n rateDelta: this.calculateDeltaValue(\r\n i.rate,\r\n i.lastAuthorisedAssessment?.rate ?? i.lastQuotedAssessment?.rate,\r\n reportOnly),\r\n valueDelta: this.calculateDeltaValue(\r\n i.value,\r\n i.lastAuthorisedAssessment?.value ?? i.lastQuotedAssessment?.value,\r\n reportOnly),\r\n lineNumber: i.lineNumber,\r\n opgCode: i.opgCode,\r\n vendorName: i.vendorName,\r\n deleted: false,\r\n isSelected: false,\r\n hasAuthoriseHistory: isAuthorise ? i.hasAuthoriseHistory : i.lastAuthorisedAssessment !== null,\r\n subQuoteNo: subQuoteNo\r\n }\r\n })\r\n },\r\n calculateDeltaValue(value, lastValue, wasReportOnly) {\r\n if (lastValue && !wasReportOnly) {\r\n return value - lastValue\r\n } else {\r\n return value\r\n }\r\n },\r\n calculateAssessmentItemCategoryTotal(quotingMethod, items, itemType) {\r\n let total = 0\r\n if (itemType === ItemCategoryTypes.PART) {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly && !i.isQuoteItemDeleted)\r\n .reduce(function (total, item) {\r\n return roundAwayFromZero(total + item.itemQuantity * item.markupValue)\r\n }, 0)\r\n } else if (itemType === ItemCategoryTypes.MISC) {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly && !i.isQuoteItemDeleted)\r\n .reduce(function (total, item) {\r\n return total + item.value\r\n }, 0)\r\n } else if (itemType === ItemCategoryTypes.OPG) {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly && !i.isQuoteItemDeleted)\r\n .reduce(function (total, item) {\r\n return total + (quotingMethod === QuotingMethodTypes.Dollar ? item.dollarValue : item.hourValue * item.rate)\r\n }, 0)\r\n } else if (itemType === ItemCategoryTypes.SUBL) {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly && !i.isQuoteItemDeleted)\r\n .reduce(function (total, item) {\r\n return total + item.value\r\n }, 0)\r\n } else {\r\n total = items\r\n // eslint-disable-next-line no-unexpected-multiline\r\n .filter((i) => !i.deleted && !i.reportOnly && !i.isQuoteItemDeleted && i.itemType === itemType)\r\n .reduce(function (total, item) {\r\n return roundAwayFromZero(total + item.dollarValue)\r\n }, 0)\r\n }\r\n return total\r\n },\r\n isItemInvoiced(item) {\r\n var invoiced = false\r\n this.innerValue.quoteAssessments\r\n .filter((a) => a.isInvoiced === true)\r\n .forEach((assessment) => {\r\n if (assessment.authorisedAssessment) {\r\n var itemAssessments = assessment.authorisedAssessment.assessmentQuoteItems.find((i) => i.quoteItemId === item.quoteItemId)\r\n if (itemAssessments) {\r\n invoiced = true\r\n }\r\n }\r\n })\r\n return invoiced\r\n }\r\n }\r\n}\r\n"],"sourceRoot":""}