{"version":3,"file":"Duration-Dc-U7HJB.js","sources":["../../../Nitrogen.Client/src/models/PaymentProcessor.js","../../../Nitrogen.Client/src/models/WorkOrderPdfStyle.js","../../../Nitrogen.Client/src/models/Settings.js","../../../Nitrogen.Client/src/api/modules/cache.js","../../../Nitrogen.Client/src/api/modules/settings.js","../../../Nitrogen.Client/src/models/DurationUnit.js","../../../Nitrogen.Client/src/models/Duration.js"],"sourcesContent":["export default class PaymentProcessor {\r\n\tstatic none = 0;\r\n\tstatic authorizeNet = 1;\r\n\tstatic heartland = 2;\r\n\r\n\tstatic options = [\r\n\t\t{ id: this.none, name: 'None' },\r\n\t\t{ id: this.authorizeNet, name: 'Authorize.Net' },\r\n\t\t{ id: this.heartland, name: 'Heartland Payment Systems' },\r\n\t];\r\n\r\n\tstatic display(value) {\r\n\t\tconst item = this.options.find(x => x.id === value);\r\n\t\treturn item ? item.name : '';\r\n\t}\r\n\r\n\tstatic isValid(value) {\r\n\t\treturn value === this.none || value === this.authorizeNet || value === this.heartland;\r\n\t}\r\n}\r\n","export default class WorkOrderPdfStyle {\r\n\tstatic standard = 0;\r\n\tstatic traditional = 1;\r\n\r\n\tstatic options = [\r\n\t\t{ id: this.standard, name: 'Standard (Default)' },\r\n\t\t{ id: this.traditional, name: 'Traditional' },\r\n\t];\r\n\r\n\tstatic display(value) {\r\n\t\tconst item = this.options.find(x => x.id === value);\r\n\t\treturn item ? item.name : '';\r\n\t}\r\n\r\n\tstatic isValid(value) {\r\n\t\treturn value === this.standard || value === this.traditional;\r\n\t}\r\n}\r\n","import PaymentProcessor from './PaymentProcessor.js';\r\nimport WorkOrderPdfStyle from './WorkOrderPdfStyle.js';\r\nimport { getArrayFromDto as getArray, getValueFromDto as getValue } from './_helpers.js';\r\n\r\nexport default class Settings {\r\n\tconstructor(dto) {\r\n\t\tthis.companyName = getValue(dto, 'companyName', 'string', '');\r\n\t\tthis.timeZone = getValue(dto, 'timeZone', 'string', '');\r\n\t\tthis.dashboardEstimateAgeLimit = getValue(dto, 'dashboardEstimateAgeLimit', 'number', 0);\r\n\t\tthis.geocodioApiKey = getValue(dto, 'geocodioApiKey', 'string', '');\r\n\t\tthis.googleApiKey = getValue(dto, 'googleApiKey', 'string', '');\r\n\t\tthis.modules = getArray(dto, 'modules', []);\r\n\t\tthis.defaultState = getValue(dto, 'defaultState', 'string', null);\r\n\t\tthis.showSetupGuide = getValue(dto, 'showSetupGuide', 'boolean', false);\r\n\t\tthis.bccEmails = getValue(dto, 'bccEmails', 'boolean', false);\r\n\t\tthis.ipAddressRestrictions = getArray(dto, 'ipAddressRestrictions');\r\n\t\tthis.fromEmailAddress = getValue(dto, 'fromEmailAddress', 'string', '');\r\n\t\tthis.testMode = getValue(dto, 'testMode', 'boolean', false);\r\n\t\tthis.paymentCardBrandsAccepted = getArray(dto, 'paymentCardBrandsAccepted');\r\n\t\tthis.paymentCreditCardProcessor = getValue(dto, 'paymentCreditCardProcessor', 'number', PaymentProcessor.none);\r\n\t\tthis.authorizeNetCaptureFunds = getValue(dto, 'authorizeNetCaptureFunds', 'boolean', false);\r\n\t\tthis.authorizeNetApiLoginId = getValue(dto, 'authorizeNetApiLoginId', 'string', '');\r\n\t\tthis.authorizeNetTransactionKey = getValue(dto, 'authorizeNetTransactionKey', 'string', '');\r\n\t\tthis.authorizeNetPublicClientKey = getValue(dto, 'authorizeNetPublicClientKey', 'string', '');\r\n\t\tthis.heartlandCaptureFunds = getValue(dto, 'heartlandCaptureFunds', 'boolean', false);\r\n\t\tthis.heartlandSecretKey = getValue(dto, 'heartlandSecretKey', 'string', '');\r\n\t\tthis.heartlandPublicKey = getValue(dto, 'heartlandPublicKey', 'string', '');\r\n\t\tthis.operatorInChargeId = getValue(dto, 'operatorInChargeId', 'number', null);\r\n\t\tthis.defaultOperatorId = getValue(dto, 'defaultOperatorId', 'number', null);\r\n\t\tthis.defaultVehicleId = getValue(dto, 'defaultVehicleId', 'number', null);\r\n\t\tthis.requireOperatorPunch = getValue(dto, 'requireOperatorPunch', 'boolean', false);\r\n\t\tthis.showOperatorsFutureWorkOrders = getValue(dto, 'showOperatorsFutureWorkOrders', 'boolean', false);\r\n\t\tthis.inspectionDisclaimer = getValue(dto, 'inspectionDisclaimer', 'string', '');\r\n\t\tthis.onlinePaymentUrl = getValue(dto, 'onlinePaymentUrl', 'string', '');\r\n\t\tthis.businessLicenseNumber = getValue(dto, 'businessLicenseNumber', 'string', '');\r\n\t\tthis.paymentDisclaimer = getValue(dto, 'paymentDisclaimer', 'string', '');\r\n\t\tthis.workOrderPdfStyle = getValue(dto, 'workOrderPdfStyle', 'number', WorkOrderPdfStyle.standard);\r\n\t\tthis.hasLandDisposalSite = getValue(dto, 'hasLandDisposalSite', 'boolean', false); // PDF only\r\n\t\tthis.workOrderTypeUnassignedColor = getValue(dto, 'workOrderTypeUnassignedColor', 'string', '');\r\n\t\tthis.dispatchMapDefaultDateRange = getValue(dto, 'dispatchMapDefaultDateRange', 'string', '');\r\n\t\tthis.correctPhUsingTemperature = getValue(dto, 'correctPhUsingTemperature', 'boolean', false);\r\n\t\tthis.showFullWorkOrderStartTime = getValue(dto, 'showFullWorkOrderStartTime', 'boolean', false);\r\n\t\tthis.showAmountCollectedOnInvoice = getValue(dto, 'showAmountCollectedOnInvoice', 'boolean', false);\r\n\t}\r\n}\r\n","import { toCamelCase } from '@/helpers/helpers';\r\nimport { getIdb } from '@/idb';\r\nimport { DateTime } from 'luxon';\r\nimport { fetchWrap, offlineResponse } from '../_helpers';\r\n\r\nexport default {\r\n\tcheckIfAnyOutOfDate() {\r\n\t\treturn this.checkIfOutOfDate([\r\n\t\t\t'companyLocations',\r\n\t\t\t'inspectionItems',\r\n\t\t\t'inventory',\r\n\t\t\t'paymentTerms',\r\n\t\t\t'roles',\r\n\t\t\t'services',\r\n\t\t\t'settings',\r\n\t\t\t'tankTypes',\r\n\t\t\t'users',\r\n\t\t\t'vehicleMaintenanceTypes',\r\n\t\t\t'vehicles',\r\n\t\t\t'vehicleTypes',\r\n\t\t\t'wasteDisposalSites',\r\n\t\t\t'wasteDisposalSiteTypes',\r\n\t\t\t'wasteTypes',\r\n\t\t\t'rentalItemTypes',\r\n\t\t\t'rentalItems',\r\n\t\t\t'workOrderTypes',\r\n\t\t]);\r\n\t},\r\n\t/**\r\n\t * Check the idb cache for the following APIs and updates the idb cache timestamp if the cache item is out-of-date\r\n\t * @param {string[]} keys cache keys to check\r\n\t */\r\n\tasync checkIfOutOfDate(keys) {\r\n\t\tif (keys.length === 0) return;\r\n\t\tconst idb = await getIdb();\r\n\t\tif (!idb) return;\r\n\t\tlet cacheTimestamps = await idb.get('localInfo', 'cacheTimestamps');\r\n\t\tif (!cacheTimestamps) return;\r\n\t\tconst model = {};\r\n\t\tlet hasKey = false;\r\n\t\tfor (const key of keys) {\r\n\t\t\tif (cacheTimestamps[key]) {\r\n\t\t\t\tmodel[key] = cacheTimestamps[key];\r\n\t\t\t\thasKey = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!hasKey) return;\r\n\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Cache/OutOfDate', {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\r\n\t\t\t\tbody: JSON.stringify(model),\r\n\t\t\t});\r\n\t\t} catch {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tconst data = await response.json();\r\n\t\t\tif (Array.isArray(data) && data.length > 0) {\r\n\t\t\t\t// get this from idb again since it could have changed\r\n\t\t\t\tcacheTimestamps = (await idb.get('localInfo', 'cacheTimestamps')) ?? {};\r\n\t\t\t\tfor (const key of data) {\r\n\t\t\t\t\tdelete cacheTimestamps[toCamelCase(key)];\r\n\t\t\t\t}\r\n\t\t\t\tawait idb.put('localInfo', cacheTimestamps, 'cacheTimestamps');\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tasync invalidateAllCaches() {\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Cache/InvalidateAllCaches', { method: 'POST' });\r\n\t\t} catch {\r\n\t\t\tresponse = offlineResponse();\r\n\t\t}\r\n\t\treturn response;\r\n\t},\r\n\t/**\r\n\t * Set the last time an API response was cached\r\n\t * @param {string} key cache key\r\n\t * @param {DateTime} value timestamp\r\n\t */\r\n\tasync setTimestamp(key, value) {\r\n\t\tconst idb = await getIdb();\r\n\t\tif (!idb) return;\r\n\t\tconst cacheTimestamps = (await idb.get('localInfo', 'cacheTimestamps')) ?? {};\r\n\t\tcacheTimestamps[key] = value.toISO();\r\n\t\tawait idb.put('localInfo', cacheTimestamps, 'cacheTimestamps');\r\n\t},\r\n\t/**\r\n\t * Clear the last time an API response was cached\r\n\t * @param {string} key cache key\r\n\t */\r\n\tasync clearTimestamp(key) {\r\n\t\tconst idb = await getIdb();\r\n\t\tif (!idb) return;\r\n\t\tconst cacheTimestamps = (await idb.get('localInfo', 'cacheTimestamps')) ?? {};\r\n\t\tif (key in cacheTimestamps) {\r\n\t\t\tdelete cacheTimestamps[key];\r\n\t\t\tawait idb.put('localInfo', cacheTimestamps, 'cacheTimestamps');\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Check if an API was cached and is not out-of-date\r\n\t * @param {string} key cache key\r\n\t * @returns {Promise} true if the cache can be used, otherwise false\r\n\t */\r\n\tasync isCacheHit(key) {\r\n\t\tconst idb = await getIdb();\r\n\t\tif (!idb) return false;\r\n\t\tconst cacheTimestamps = (await idb.get('localInfo', 'cacheTimestamps')) ?? {};\r\n\t\treturn cacheTimestamps[key] && DateTime.fromISO(cacheTimestamps[key]).isValid;\r\n\t},\r\n\t/**\r\n\t * Check if API requests can be cached\r\n\t * @returns {Promise} true if the cache can be used, otherwise false\r\n\t */\r\n\tasync canCache() {\r\n\t\tconst idb = await getIdb();\r\n\t\tif (!idb) return false;\r\n\t\treturn !!(await idb.get('localInfo', 'cacheTimestamps'));\r\n\t}\r\n};\r\n","import { getIdb } from '@/idb';\r\nimport Settings from '@/models/Settings';\r\nimport { compare as jsonPatchCompare } from 'fast-json-patch';\r\nimport { DateTime } from 'luxon';\r\nimport { fetchWrap, idbResponse, isIdbResponse, offlineResponse } from '../_helpers';\r\nimport cache from './cache';\r\n\r\nconst idbStore = 'settings';\r\n\r\nexport default {\r\n\tasync getSettings() {\r\n\t\tconst idb = await getIdb();\r\n\t\tlet response, data = null, timestamp;\r\n\t\tlet useIdb = await cache.isCacheHit(idbStore);\r\n\t\tif (!useIdb) {\r\n\t\t\ttry {\r\n\t\t\t\ttimestamp = DateTime.now();\r\n\t\t\t\tresponse = await fetchWrap('/api/Settings');\r\n\t\t\t\tif (response.ok) { data = await response.json(); }\r\n\t\t\t} catch {\r\n\t\t\t\tuseIdb = true;\r\n\t\t\t\tresponse = offlineResponse();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (useIdb && idb) {\r\n\t\t\tdata = await idb.get(idbStore, 0);\r\n\t\t\tresponse = idbResponse(200);\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tif (idb && !isIdbResponse(response)) {\r\n\t\t\t\tawait idb.put(idbStore, data, 0);\r\n\t\t\t\tawait cache.setTimestamp(idbStore, timestamp);\r\n\t\t\t}\r\n\t\t\treturn new Settings(data);\r\n\t\t} else {\r\n\t\t\tthrow response;\r\n\t\t}\r\n\t},\r\n\tasync getSettingsForPdf() {\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Settings/ForPdf');\r\n\t\t} catch {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tconst data = await response.json();\r\n\t\t\treturn new Settings(data);\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t},\r\n\tasync getMyIp() {\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Settings/MyIp');\r\n\t\t} catch {\r\n\t\t\tresponse = offlineResponse();\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\treturn await response.text();\r\n\t\t} else {\r\n\t\t\tthrow response;\r\n\t\t}\r\n\t},\r\n\tasync getSettingsForUpdate() {\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Settings/ForEdit');\r\n\t\t} catch {\r\n\t\t\tresponse = offlineResponse();\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tconst data = await response.json();\r\n\t\t\treturn new Settings(data);\r\n\t\t} else {\r\n\t\t\tthrow response;\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Update settings\r\n\t * @param {Settings} model settings to update.\r\n\t * @returns (async) Returns the updated Settings if the request was successful, otherwise a Response.\r\n\t */\r\n\tasync update(model, oldModel) {\r\n\t\tconst currentData = JSON.parse(JSON.stringify(oldModel));\r\n\t\tconst newData = JSON.parse(JSON.stringify(model));\r\n\t\tconst patch = jsonPatchCompare(currentData, newData);\r\n\t\tif (patch.length === 0) {\r\n\t\t\treturn new Settings(newData);\r\n\t\t}\r\n\t\treturn await this.patch(patch);\r\n\t},\r\n\tasync patch(patch) {\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Settings', {\r\n\t\t\t\tmethod: 'PATCH',\r\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\r\n\t\t\t\tbody: JSON.stringify(patch),\r\n\t\t\t});\r\n\t\t} catch {\r\n\t\t\tresponse = offlineResponse();\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tawait cache.clearTimestamp(idbStore);\r\n\t\t\tconst data = await response.json();\r\n\t\t\treturn new Settings(data);\r\n\t\t} else {\r\n\t\t\treturn response;\r\n\t\t}\r\n\t}\r\n};\r\n","export default class DurationUnit {\r\n\tstatic day = 0;\r\n\tstatic week = 1;\r\n\tstatic month = 2;\r\n\tstatic year = 3;\r\n\r\n\tstatic options = [\r\n\t\t{ id: this.day, name: 'Day' },\r\n\t\t{ id: this.week, name: 'Week' },\r\n\t\t{ id: this.month, name: 'Month' },\r\n\t\t{ id: this.year, name: 'Year' },\r\n\t];\r\n\r\n\tstatic display(value, number) {\r\n\t\tconst item = this.options.find(x => x.id === value);\r\n\t\treturn item ? (item.name + (number === 1 ? '' : 's')) : '';\r\n\t}\r\n\r\n\tstatic isValid(value) {\r\n\t\treturn value === this.day || value === this.week || value === this.month || value === this.year;\r\n\t}\r\n}\r\n","import DurationUnit from './DurationUnit.js';\r\nimport { Duration as LuxonDuration } from 'luxon';\r\n\r\nexport default class Duration {\r\n\tconstructor(dto) {\r\n\t\tthis.amount = 0;\r\n\t\tthis.unit = DurationUnit.day;\r\n\r\n\t\tif (typeof dto === 'object' && dto !== null) {\r\n\t\t\tif (typeof dto.amount === 'number') {\r\n\t\t\t\tthis.amount = dto.amount;\r\n\t\t\t}\r\n\t\t\tif (typeof dto.unit === 'number' && DurationUnit.isValid(dto.unit)) {\r\n\t\t\t\tthis.unit = dto.unit;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tstatic get zero() {\r\n\t\treturn new Duration();\r\n\t}\r\n\r\n\ttoLocaleString() {\r\n\t\treturn this.amount.toLocaleString() + ' ' + DurationUnit.display(this.unit, this.amount);\r\n\t}\r\n\r\n\tisValid(required) {\r\n\t\treturn typeof this.amount === 'number' && (required ? this.amount >= 1 : this.amount >= 0) && DurationUnit.isValid(this.unit);\r\n\t}\r\n\r\n\ttoLuxonDuration() {\r\n\t\treturn LuxonDuration.fromObject({\r\n\t\t\tday: this.unit === DurationUnit.day ? this.amount : 0,\r\n\t\t\tweek: this.unit === DurationUnit.week ? this.amount : 0,\r\n\t\t\tmonth: this.unit === DurationUnit.month ? this.amount : 0,\r\n\t\t\tyear: this.unit === DurationUnit.year ? this.amount : 0,\r\n\t\t});\r\n\t}\r\n}\r\n"],"names":["_PaymentProcessor","value","item","x","__publicField","PaymentProcessor","_WorkOrderPdfStyle","WorkOrderPdfStyle","Settings","dto","getValue","getArray","cache","keys","idb","getIdb","cacheTimestamps","model","hasKey","key","response","fetchWrap","data","toCamelCase","offlineResponse","DateTime","idbStore","settingsApi","timestamp","useIdb","idbResponse","isIdbResponse","oldModel","currentData","newData","patch","jsonPatchCompare","_DurationUnit","number","DurationUnit","Duration","required","LuxonDuration"],"mappings":"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"}