{"version":3,"sources":["1initializers.js","billingperiodmodels.js","billingperiodviews.js","invoicemodels.js","invoicepaymenteditviews.js","invoicesummaryviews.js","invoicingmanagementviews.js","payableinvoicedatatables.js","payableinvoiceeditviews.js","payableinvoicelistviews.js","payableinvoicemodels.js","payableinvoicesettingsviews.js","receivableinvoicedatatables.js","receivableinvoiceeditviews.js","receivableinvoicelistviews.js","receivableinvoicemodels.js","receivableinvoicesettingsviews.js"],"names":["PJQ","collections","invoicing","models","views","modules","routes","route","name","callback","projectId","projectWall","initProjectNavigator","parseInt","view","invoiceId","paymentId","app","addRoutes","BillingPeriodSettings","BaseModel","extend","defaults","isAPIv2","idAttribute","endpoint","helpers","urlHelpers","generateEndpoint","value","this","options","parse","model","billingPeriods","budget","BillingPeriods","BillingPeriod","id","BaseCollection","BillingPeriodSettingsModal","BaseModal","template","templating","Template","constants","INVOICING","minWidth","isEditPeriod","events","click .btn-save","click .btn-close","click .btn-automated","beforeModalCreated","isFetched","session","project","fetchBillingPeriodSettings","_","bind","settings","render","renderData","afterRender","Binder","$el","watchElements","inputHelpers","inputMaskInteger","$","inputs","Selectpicker","el","defaultValue","get","isMultiple","isIntChoices","onChange","set","frequency","startDay","endDay","dueDay","startDayPicker","choices","getStartEndDateChoices","endDayPicker","dueDayPicker","save","validate","success","res","notifications","notify","successNotify","message","onSave","removeModal","Date","i","push","formatHelpers","getOrdinalSuffix","dateHelpers","getDayName","isValid","showError","close","onClose","EditBillingPeriodModal","Datepicker","datepickerOptions","format","dateFormats","datePicker","DATE","defaultDate","parseDateString","newDate","isNew","BillingPeriodsList","BaseView","click .edit-period","click .delete-period","click .btn-billing-period-settings","click .btn-add-billing-period","click .toggle-automated","beforeFirstRender","isEdit","dataTable","dataTables","DataTable","data","rowId","subTemplates","header","headerData","afterHeaderRender","$header","order","language","zeroRecords","pageLength","onRowDoubleClick","row","editBillingPeriod","contextMenuOptions","actions","onClick","isShown","isDanger","deleteBillingPeriod","columns","title","width","orderable","type","icons","join","getDateString","searchable","html","billingPeriodSettings","addBillingPeriod","billingPeriod","add","addRow","refresh","editBillingPeriodClicked","e","target","currentTarget","getRow","closest","period","toggleAutomated","_this","prop","deleteBillingPeriodClicked","cid","modals","DeleteCancel","body","onDelete","destroy","removeRow","Invoice","getSummary","beforeSave","ajax","Request","toJSON","post","done","response","fail","lineItems","attachments","getChangedModels","fetchPossibleLineItems","fnCallback","possibleLineItems","coll","PayableInvoice","PayableInvoiceLineItems","ReceivableInvoiceLineItems","getSubTotal","getRetainage","getRetainageReleased","getGrandTotal","InvoiceLineItem","group","groups","Group","getWorkRetainageRemaining","invoice","wRetain","payableInvoiceStatus","APPROVED","COMPLETE","getMaterialRetainageRemaining","mRetain","getWorkRetainageTotal","getMaterialRetainageTotal","getProgressAmountTotal","progressAmount","getTotalCompleteAndStored","getMaterialsStored","getBalanceToFinish","matStored","getTaxAmount","taxTotal","taxRate","taxable","Math","round","getUnRoundedTaxAmount","Invoices","InvoiceLineItems","InvoicePaymentModal","maxWidth","isShowCloseButton","noop","isPayable","click .btn-view-invoice","click .btn-delete","click .btn-sync-erp","click .btn-unlink-erp","click .btn-export","canViewInvoices","hasPermission","canViewCommitments","isAdmin","canViewPrimeContracts","canEdit","canDelete","fetchERPIntegration","erp","erpIntegration","PayableInvoicePayment","notes","number","invoiceNumber","companyId","contractedContact","contractedContactId","ReceivableInvoicePayment","client","clientId","fnRender","fetch","beforeRender","isERPSynced","inputMaskCurrency","contacts","ContactsSelectInput","selectedContact","displayContactsBlock","dateReceivedPicker","fileUploader","files","FileUploaderGrid","collection","canUpload","useApiV2","previewImageDimension","onSuccess","file","isDirty","attachment","viewInvoice","EditPayableInvoiceModal","EditReceivableInvoiceModal","ReceivableInvoice","viewPrimeContract","primeContracts","PrimeContractEditModal","PrimeContract","viewCommitment","commitments","CommitmentEditModal","Commitment","syncERP","loader","Loader","remove","unlinkERP","error","errMsg","errorNotify","exportPayment","downloadFile","delete","savePayment","dirtyAttributes","email","_this$options$project","_this$options$project2","projectName","trim","subject","concat","size","ComposeEmailModal","share","hasChanged","SaveDontSave","onDontSave","InvoiceSummary","click .btn-export-summary","summary","export","InvoicingManagement","totals","shown.bs.tab .nav-tabs","canViewPayableInvoices","canViewReceivableInvoices","payableInvoices","activateTab","renderPayableInvoicesView","renderReceivableInvoicesView","renderBillingPeriodsView","tab","toLowerCase","activeTab","isActivating","tabActivated","attr","router","navigate","toString","trigger","activeView","payableView","PayableInvoicesList","attributes","renderStats","PayableInvoices","receivableView","ReceivableInvoicesList","receivableInvoices","ReceivableInvoices","billingPeriodsView","bst","$totals","draft","getTotalAmountsByStatus","receivableInvoiceStatus","DRAFT","reviewing","REVIEWING","approved","complete","revise","REVISE","renderSubTemplate","empty","PayableInvoiceDataTable","emptyTable","toggleRowClass","onViewInvoice","click .view-commitment","beforeDataTableRender","rowsPerPage","getDefaultFilter","statusIds","userSettings","noneSelectedText","setFilter","filterType","STATUS_FILTER","currentBillingPeriod","find","bpId","showAllBillingPeriods","getFilterData","statusFilter","getFilter","billingPeriodFilter","filter","contains","startA","endA","startB","endB","checkDateRangesOverlap","fnBPFilter","getColumns","_this2","includeAllColumns","arguments","length","undefined","includeColumns","customFields","each","customField","columnsDefault","columnData","defaultContent","getERPIcon","erpSyncStatus","columnName","payableInvoiceStatusNames","DATE_TIME","titleSettings","companyName","className","formatCurrency","startsWith","fieldValue","getCustomFieldValue","customFieldType","BOOLEAN","CHOICE","choice","DATETIME","INTEGER","toLocaleString","MONEY","parseFloat","numbersOnly","PERCENT","toFixed","visible","getRowChildTable","childOpts","costTypes","unitsOfMeasure","parentDataTable","dom","LineItemDataTable","getRowChildData","ChangeOrderLineItems","changeOrderId","viewInvoiceClicked","viewCommitmentClicked","commitmentId","click .btn-view-commitment","click .btn-view-payment","click .btn-new-payment","change .input-coi-required","change .input-w9-required","change .input-lien-waiver-required","click .btn-add-line-item","click .btn-submit","click .btn-save-email","click .btn-push-erp","click .erp-sync-payments .btn-pull-erp","click .btn-undo-push-erp","click .btn-email","click .nav-link","click .btn-invite-to-bill","change .cb-paid","click .btn-itb-respond","click .btn-view-history","_beforeModalCreated","_asyncToGenerator","_regeneratorRuntime","mark","_callee","customFieldValues","wrap","_context","prev","next","fetchPayableInvoiceFieldSettings","coreFieldSettings","sent","fetchPayableInvoiceSettings","fetchPayableInvoiceCustomFields","fetchCostCodes","costCodes","fetchCostTypes","fetchUnitsOfMeasure","index","fieldNumber","fieldTypeId","fieldType","commitment","commitmentType","commitmentNumber","invoiceContact","invoiceContactId","statusId","isCOIRequired","isCOIApproved","coiAttachments","isW9Required","isW9Approved","defaultWorkRetainagePercent","defaultMaterialRetainagePercent","w9Attachments","billingPeriodId","startDate","endDate","billingDate","getSetting","fetchERPObject","stop","apply","_PJQ$app$session$user","_PJQ$app$session$user2","_this$model$invoiceCo","canEditLineItems","canEditBillingDates","canAddPayments","canEditStatus","canInviteToBill","canRespondToInvite","user","status","userId","isSubmitting","payments","syncStatus","integrations","syncStatuses","SYNCED","invoiceSettings","checkFieldVisible","checkFieldRequired","_this3","activateView","stopListening","listenTo","renderERP","renderGeneral","renderLineItems","renderPayments","updateCounts","inviteResponse","handleInviteResponse","respondToInviteClicked","responseValue","_this4","fnUpdateResponse","updateInviteStatus","updatedModel","reset","YesNo","onYes","text","GENERAL","LINEITEMS","PAYMENTS","SUMMARY","activeViewChanged","hash","replace","renderSummary","validateApproval","$coi","Alert","$w9","_this5","useDecimalPercentFields","canViewContacts","statusPicker","map","st","disabled","disabledStatuses","indexOf","newStatus","_this6","oldStatus","setValue","dueDate","periodStartPicker","periodEndPicker","dueDatePicker","canView","coiUploader","renderCOIApproval","w9Uploader","renderW9Approval","lienWaiverUploader","lienWaiverAttachments","renderLienWaiverApproval","customFieldsForm","CustomFieldsForm","fieldValues","coiApproval","ButtonGroup","colorInactiveButtons","buttonClasses","buttons","label","colorClass","w9Approval","lienWaiverApproval","_this7","summaryView","lineItemsView","LineItemsView","lineItemModel","PayableInvoiceLineItem","enableStoredMaterials","enableRetainage","enableSelection","enableTax","canImportBudget","showSubTotal","showGrandTotal","onLineItemChange","onLineItemAdd","onLineItemDelete","onCommitmentView","onChangeOrderView","pullERPPayments","_this8","hasAvailableAction","PULL_PAYABLE_PAYMENTS","pullPayableInvoicePayments","paymentsDataTable","isHideSearch","paging","dateReceived","viewPayment","newPayment","viewPaymentClicked","payment","_this9","$erp","getERPBadge","canPush","disablePushReason","PUSH_PAYABLE_INVOICES_WO_SYNCED_COMMMITMENT","renderERPButtons","pushSupported","PUSH_PAYABLE_INVOICES","unlinkSupported","UNLINK_PAYABLE_INVOICES","canPushChanges","$erpPayments","pullSupported","pushERP","_this10","pushPayableInvoice","undoPushERP","undoPush","_this11","unlinkPayableInvoice","fieldName","fieldSettings","findWhere","viewHistory","_viewHistory","_callee2","historyItems","history","_context2","date","person","action","PayableInvoiceHistory","HistoryTimelineModal","subTitle","items","exportInvoice","hideError","$number","setInputError","$notes","clearError","submitInvoice","submit","result","saveEmail","_this12","notifyText","saveInvoice","_this13","_this14","prevObject","scrollTop","getChanged","_this$options$project3","_this$options$project4","inviteToBill","_this15","xhr","err","updatePaid","click .btn-settings","click .btn-create-invoice","click .btn-delete-invoice","_beforeFirstRender","_callee3","_context3","costCodeId","costTypeId","fetchPayableInvoiceUserSettings","renderView","off","on","initInvoice","initPayment","getDataTableInstance","_this16","onPageSizeChange","canAdd","getSettings","PAYABLE_INVOICES","colReorder","fixedColumnsRight","realtime","columnOrderChanged","newInvoice","_this17","deleteInvoiceClicked","deleteInvoice","editSettings","PayableInvoiceSettingsModal","invoicesView","exportList","parameter","getTimezoneOffset","ModalViewPayableInvoices","arr","PayableInvoiceAttachments","CommitmentAttachments","PayableInvoicePayments","Contact","externalId","responseJSON","makeERPUrl","integration","providers","QBO","signature","toEmails","ccEmails","_updateInviteStatus","_callee4","_context4","_x","_x2","PayableInvoiceHistoryItem","actionNames","invtobill","getActionName","_this$actionNames$thi","getDescription","fromStatus","from","toStatus","to","PayableInvoiceAttachment","File","PayableInvoiceCustomField","CustomField","PayableInvoiceSettings","Settings","PayableInvoiceUserSettings","viewSettings","setting","PayableInvoiceFieldSetting","PayableInvoicePaymentAttachment","params","getPayments","_toConsumableArray","Files","PayableInvoiceCustomFields","PayableInvoiceCustomFieldChoices","PayableInvoiceCustomFieldChoice","PayableInvoiceFieldSettings","PayableInvoicePaymentAttachments","change .select-column","click .btn-edit-company-default","click button.settings-save","defaultStatusFilter","selectedColumns","column","defaultFilterSelectPicker","currentView","selectView","editCompanySettings","forCompany","show","hide","undelegateEvents","columnSelected","sender","fnOnSave","settingTemp","slice","columnTemp","ReceivableInvoiceDataTable","click .view-contract","_this18","receivableInvoiceStatusNames","viewPrimeContractClicked","primeContractId","click .btn-view-prime-contract","_beforeModalCreated2","_callee5","_context5","fetchReceivableInvoiceFieldSettings","fetchReceivableInvoiceSettings","fetchReceivableInvoiceCustomFields","primeContract","primeContractNumber","_this19","PUSH_RECEIVABLE_INVOICES_WO_SYNCED_CONTRACT","PUSH_RECEIVABLE_INVOICES","UNLINK_RECEIVABLE_INVOICES","PULL_RECEIVABLE_PAYMENTS","_this20","pushReceivableInvoice","_this21","unlinkReceivableInvoice","_this22","_this23","ReceivableInvoiceLineItem","onPrimeContractView","_this24","pullReceivableInvoicePayments","_this25","_viewHistory2","_callee6","_context6","ReceivableInvoiceHistory","_this26","_this27","_this28","_this29","_this$options$project5","_this$options$project6","_beforeFirstRender2","_callee7","_context7","fetchReceivableInvoiceUserSettings","_this30","RECEIVABLE_INVOICES","createInvoice","_this31","invoiceEditor","ReceivableInvoiceSettingsModal","ModalViewReceivableInvoices","ReceivableInvoiceAttachments","ReceivableInvoicePayments","getAutofillAmounts","autofillLineItems","ReceivableInvoiceHistoryItem","_this$actionNames$thi2","ReceivableInvoiceAttachment","ReceivableInvoiceCustomField","ReceivableInvoiceSettings","ReceivableInvoiceUserSettings","ReceivableInvoiceFieldSetting","ReceivableInvoicePaymentAttachment","ReceivableInvoiceCustomFields","ReceivableInvoiceCustomFieldChoices","ReceivableInvoiceCustomFieldChoice","ReceivableInvoiceFieldSettings","ReceivableInvoicePaymentAttachments"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.collections.invoicing = {};\n\nPJQ.models.invoicing = {};\n\nPJQ.views.invoicing = {};\n\nPJQ.modules.invoicing = {\n routes: [\n {\n route: 'projects/:projectId/invoicing',\n name: 'invoicing',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"invoicing\");\n }\n },\n {\n route: 'projects/:projectId/invoicing/payable',\n name: 'payableinvoices',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"invoicing\", {\n view: 'payable'\n });\n }\n },\n {\n route: 'projects/:projectId/invoicing/payable/:invoiceId',\n name: 'commitment',\n callback: function (projectId, invoiceId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"invoicing\", {\n invoiceId: parseInt(invoiceId),\n view: 'payable'\n });\n }\n },\n {\n route: 'projects/:projectId/invoicing/payable/payments/:paymentId',\n name: 'commitment',\n callback: function (projectId, paymentId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"invoicing\", {\n paymentId: parseInt(paymentId),\n view: 'payable'\n });\n }\n },\n {\n route: 'projects/:projectId/invoicing/receivable',\n name: 'receivable',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"invoicing\", {\n view: 'receivable'\n });\n }\n },\n {\n route: 'projects/:projectId/invoicing/receivable/:invoiceId',\n name: 'commitment',\n callback: function (projectId, invoiceId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"invoicing\", {\n invoiceId: parseInt(invoiceId),\n view: 'receivable'\n });\n }\n },\n {\n route: 'projects/:projectId/invoicing/receivable/payments/:paymentId',\n name: 'commitment',\n callback: function (projectId, paymentId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"invoicing\", {\n paymentId: parseInt(paymentId),\n view: 'receivable'\n });\n }\n },\n {\n route: 'projects/:projectId/invoicing/billingperiods',\n name: 'invoicing',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"invoicing\", {\n view: 'billingperiods'\n });\n }\n }\n ]\n};\n\nPJQ.app.addRoutes(PJQ.modules.invoicing.routes);\n","//Models\nPJQ.models.invoicing.BillingPeriodSettings = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.projectId\n },\n {\n endpoint: 'billingperiods'\n },\n {\n endpoint: 'settings'\n }\n ]);\n },\n parse: function (model) {\n if (!model)\n return model;\n\n this.billingPeriods = new PJQ.collections.budget.BillingPeriods(model.billingPeriods);\n\n return model;\n },\n});\n\nPJQ.models.invoicing.BillingPeriod = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.projectId\n },\n {\n endpoint: 'billingperiods',\n value: this.id\n }\n ]);\n },\n});\n\n//Collections\nPJQ.collections.invoicing.BillingPeriods = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.invoicing.BillingPeriod\n});","PJQ.views.invoicing.BillingPeriodSettingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'modal-billing-period-settings'),\n minWidth: '600px',\n isEditPeriod: false\n },\n events: {\n 'click .btn-save': 'save',\n 'click .btn-close': 'close',\n 'click .btn-automated': 'toggleAutomated'\n },\n beforeModalCreated: function () {\n this.isFetched = false;\n PJQ.app.session.project.fetchBillingPeriodSettings(_.bind(function (settings) {\n this.settings = settings;\n this.isFetched = true;\n this.render();\n }, this));\n },\n renderData: function () {\n return {\n settings: this.settings\n }\n },\n afterRender: function () {\n if(!this.isFetched)\n return;\n\n new PJQ.Binder(this.$el, this.settings, {\n watchElements: [\n 'input'\n ]\n });\n\n PJQ.helpers.inputHelpers.inputMaskInteger(this.$('.end-day-offset'));\n PJQ.helpers.inputHelpers.inputMaskInteger(this.$('.due-day-offset'));\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-frequency'),\n defaultValue: this.settings.get('frequency'),\n isMultiple: false,\n isIntChoices: true,\n onChange: _.bind(function (value) {\n this.settings.set({\n frequency: value,\n startDay: null,\n endDay: null,\n dueDay: null,\n })\n this.render();\n }, this)\n });\n\n this.startDayPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-start-date'),\n defaultValue: this.settings.get('startDay'),\n isMultiple: false,\n isIntChoices: true,\n choices: this.getStartEndDateChoices(),\n onChange: _.bind(function (value) {\n this.settings.set('startDay', value);\n }, this)\n });\n\n this.endDayPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-end-date'),\n defaultValue: this.settings.get('endDay'),\n isMultiple: false,\n isIntChoices: true,\n choices: this.getStartEndDateChoices(),\n onChange: _.bind(function (value) {\n this.settings.set('endDay', value);\n }, this)\n });\n\n this.dueDayPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-due-date'),\n defaultValue: this.settings.get('dueDay'),\n isMultiple: false,\n isIntChoices: true,\n choices: this.getStartEndDateChoices(true),\n onChange: _.bind(function (value) {\n this.settings.set('dueDay', value);\n }, this)\n });\n },\n // toggleAutomated: function() {\n // this.settings.set('automated', !this.settings.get('automated'));\n // if(!this.settings.get('automated')){\n // this.settings.save(null, {\n // success: _.bind(function () {\n // this.render();\n // }, this)\n // })\n // }\n // else {\n // this.render();\n // }\n // },\n save: function () {\n if(!this.validate())\n return;\n\n this.settings.save(null, {\n success: _.bind(function (res) {\n PJQ.notifications.notify.successNotify({\n message: 'Billing Period Settings saved successfully'\n });\n\n if(typeof this.options.onSave === 'function'){\n this.options.onSave();\n }\n this.removeModal();\n }, this)\n });\n },\n getStartEndDateChoices: function () {\n let choices = [];\n if(this.settings.get('frequency') === 0){\n // Monthly\n let date = new Date();\n let daysInMonth = 30;\n for(let i= 0; i < daysInMonth; i++){\n choices.push({\n id: i+1,\n name: PJQ.helpers.formatHelpers.getOrdinalSuffix(i + 1)\n });\n }\n\n choices.push({\n id: 31,\n name: 'Last Day'\n });\n }\n else{\n // Weekly\n for(let i= 0; i < 7; i++){\n choices.push({\n id: i,\n name: PJQ.helpers.dateHelpers.getDayName(i)\n });\n }\n }\n return choices;\n },\n validate: function() {\n let isValid = true;\n\n if(this.settings.get('startDay') == null){\n this.startDayPicker.showError('Start Day is Required');\n isValid = false;\n }\n\n if(this.settings.get('endDay') == null){\n this.endDayPicker.showError('End Day is Required');\n isValid = false;\n }\n\n if(this.settings.get('dueDay') == null){\n this.dueDayPicker.showError('Due Day is Required');\n isValid = false;\n }\n\n return isValid\n },\n close: function() {\n if(typeof this.options.onClose === 'function') {\n this.options.onClose();\n }\n this.removeModal();\n }\n});\n\nPJQ.views.invoicing.EditBillingPeriodModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'modal-edit-billing-period'),\n minWidth: '600px',\n isEditPeriod: false\n },\n events: {\n 'click .btn-save': 'save'\n },\n beforeModalCreated: function () {\n this.isFetched = false;\n if (this.model == null) {\n this.model = new PJQ.models.budget.BillingPeriod(null, {\n projectId: PJQ.app.session.project.id\n });\n }\n PJQ.app.session.project.fetchBillingPeriodSettings(_.bind(function (settings) {\n this.settings = settings;\n this.isFetched = true;\n this.render();\n }, this));\n },\n renderData: function () {\n return {\n model: this.model,\n settings: this.settings\n }\n },\n afterRender: function () {\n if(!this.isFetched)\n return\n\n new PJQ.Binder(this.$el, this.settings, {\n watchElements: [\n 'input'\n ]\n });\n\n new PJQ.inputs.Datepicker({\n el: this.$('.period-start'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: PJQ.helpers.dateHelpers.parseDateString(this.model.get('startDate'), false)\n },\n onChange: _.bind(function (newDate) {\n this.model.set('startDate', newDate);\n }, this)\n });\n\n new PJQ.inputs.Datepicker({\n el: this.$('.period-end'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: PJQ.helpers.dateHelpers.parseDateString(this.model.get('endDate'), false)\n },\n onChange: _.bind(function (newDate) {\n this.model.set('endDate', newDate);\n }, this)\n });\n\n new PJQ.inputs.Datepicker({\n el: this.$('.due-date'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: PJQ.helpers.dateHelpers.parseDateString(this.model.get('dueDate'), false)\n },\n onChange: _.bind(function (newDate) {\n this.model.set('dueDate', newDate);\n }, this)\n });\n },\n save: function () {\n let isNew = this.model.isNew();\n this.model.save(null, {\n success: _.bind(function () {\n this.removeModal();\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(isNew ? this.model : null);\n }\n PJQ.notifications.notify.successNotify({\n message: 'Billing Period successfully saved'\n });\n }, this)\n })\n }\n});\n\nPJQ.views.invoicing.BillingPeriodsList = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'billing-periods-list')\n },\n events: {\n 'click .edit-period': 'editBillingPeriodClicked',\n 'click .delete-period': 'deleteBillingPeriodClicked',\n 'click .btn-billing-period-settings': 'billingPeriodSettings',\n 'click .btn-add-billing-period': 'addBillingPeriod',\n 'click .toggle-automated': 'toggleAutomated'\n },\n beforeFirstRender: function () {\n this.options.isEdit = false;\n },\n renderData: function () {\n return {\n isEdit: this.options.isEdit\n }\n },\n afterRender: function () {\n if (this.model.billingPeriods) {\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$(\".billing-periods-table\"),\n data: this.model.billingPeriods.models,\n rowId: \"cid\",\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'data-table-header-billing-periods')\n },\n headerData: {\n settings: this.model\n },\n afterHeaderRender: _.bind(function (view, $header) {\n\n }, this),\n order: [1, 'desc'],\n language: {\n zeroRecords: 'No Billing Periods currently exist'\n },\n pageLength: 25,\n onRowDoubleClick: _.bind(function (row) {\n this.editBillingPeriod(row.data());\n }, this),\n contextMenuOptions: {\n actions: [\n {\n name: 'Edit',\n onClick: _.bind(function (row) {\n this.editBillingPeriod(row.data());\n }, this),\n isShown: _.bind(function (row) {\n return !row.data().get('automated');\n }, this)\n },\n // {\n // name: 'Open Period',\n // onClick: _.bind(function (row) {\n // this.openBillingPeriod(row.data());\n // }, this),\n // isShown: _.bind(function (row) {\n // return !row.data().get('automated') && !row.data().get('isOpen');\n // }, this)\n // },\n // {\n // name: 'Close Period',\n // onClick: _.bind(function (row) {\n // this.closeBillingPeriod(row.data());\n // }, this),\n // isShown: _.bind(function (row) {\n // return !row.data().get('automated') && row.data().get('isOpen');\n // }, this)\n // },\n {\n name: 'Delete',\n isDanger: true,\n onClick: _.bind(function (row) {\n this.deleteBillingPeriod(row.data());\n }, this)\n\n }\n ]\n },\n columns: [\n {\n \"title\": \"\",\n \"data\": \"\",\n \"width\": \"3%\",\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n let icons = [];\n\n if (row.get('isCurrent')) {\n icons.push(\"\");\n }\n // if(row.get('isOpen')){\n // icons.push(\"\");\n // }\n\n return '
' + icons.join('') + '
';\n }, this)\n },\n {\n \"title\": \"Start Date\",\n \"data\": \"\",\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('startDate')), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }, this)\n },\n {\n \"title\": 'End Date',\n \"data\": \"\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('endDate')), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }, this)\n },\n {\n \"title\": 'Due Date',\n \"data\": \"\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('dueDate')), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }, this)\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"160px\",\n \"render\": _.bind(function (data, type, row) {\n let html = '
'\n if (!row.get('automated')) {\n html += ''\n\n // if(row.get('isOpen')){\n // html += ''\n // }\n // else{\n // html += ''\n // }\n }\n html += ''\n return html + '
'\n }, this)\n }\n ]\n });\n }\n },\n // openBillingPeriod: function (billingPeriod) {\n // if(billingPeriod.get('isOpen'))\n // return;\n //\n // let fnCallback = () => {\n // _.each(this.model.billingPeriods.models, (period) => {\n // if(period.get('isOpen')){\n // period.set('isOpen', false);\n // }\n // });\n //\n // billingPeriod.set('isOpen', true);\n // this.dataTable.refresh();\n // }\n //\n //\n // new PJQ.views.modals.YesNo({\n // header: \"Send Contact Updater\",\n // body: \"Opening this period will close any other open periods. Are you sure you want to open this period?\",\n // onYes: _.bind(function () {\n // billingPeriod.openPeriod(fnCallback);\n // }, this)\n // });\n // },\n // closeBillingPeriod: function (billingPeriod) {\n // if(!billingPeriod.get('isOpen'))\n // return;\n //\n // let fnCallback = () => {\n // billingPeriod.set('isOpen', false);\n // this.dataTable.refresh();\n // }\n //\n // new PJQ.views.modals.YesNo({\n // header: \"Send Contact Updater\",\n // body: \"Closing this period will leave no open periods. Are you sure you want to close this period?\",\n // onYes: _.bind(function () {\n // billingPeriod.closePeriod(fnCallback);\n // }, this)\n // });\n // },\n billingPeriodSettings: function () {\n new PJQ.views.invoicing.BillingPeriodSettingsModal({\n settings: this.model,\n onSave: _.bind(function () {\n this.render();\n }, this)\n });\n },\n addBillingPeriod: function() {\n new PJQ.views.invoicing.EditBillingPeriodModal({\n onSave: _.bind(function (billingPeriod) {\n if (billingPeriod != null) {\n this.model.billingPeriods.add(billingPeriod);\n this.dataTable.addRow(billingPeriod);\n }\n this.dataTable.refresh();\n }, this)\n });\n },\n editBillingPeriodClicked: function (e) {\n let target = $(e.currentTarget),\n row = this.dataTable.getRow(target.closest('tr'));\n this.editBillingPeriod(row.data());\n },\n editBillingPeriod: function (period) {\n if (!period.get('automated')) {\n new PJQ.views.invoicing.EditBillingPeriodModal({\n model: period,\n onSave: _.bind(function () {\n this.dataTable.refresh();\n }, this)\n });\n }\n },\n toggleAutomated: function() {\n if(this.model.get('automated')){\n this.model.set('automated', false);\n this.model.save(null, {\n success: _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Automated Billing Periods Disabled'\n });\n this.render();\n }, this)\n });\n }\n else {\n this.model.set('automated', true);\n new PJQ.views.invoicing.BillingPeriodSettingsModal({\n settings: this.model,\n onSave: (billingPeriod) => {\n PJQ.notifications.notify.successNotify({\n message: 'Automated Billing Periods Enabled'\n });\n\n this.render();\n },\n onClose: () => {\n this.model.set('automated', false);\n this.$('.toggle-automated').prop('checked', false);\n }\n });\n }\n },\n deleteBillingPeriodClicked: function (e) {\n let target = $(e.currentTarget),\n row = this.dataTable.getRow(target.closest('tr'));\n this.deleteBillingPeriod(row.data());\n },\n deleteBillingPeriod: function (period) {\n let row = this.dataTable.getRow(period.cid);\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Billing Period\",\n body: \"Are you sure you want to delete this Billing Period?\",\n onDelete: _.bind(function () {\n period.destroy({\n success: _.bind(function () {\n this.dataTable.removeRow(row);\n }, this)\n });\n }, this)\n });\n }\n});","PJQ.models.invoicing.Invoice = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id',\r\n getSummary: function(callback){\r\n this.beforeSave();\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/summary',\r\n isAPIv2: true,\r\n data: this.toJSON()\r\n }).post().done(_.bind(function (response) {\r\n if(typeof callback === 'function'){\r\n callback(response);\r\n }\r\n }, this)).fail(_.bind(function (response) {\r\n\r\n }, this));\r\n },\r\n beforeSave: function () {\r\n this.set({\r\n lineItems: this.lineItems.toJSON(),\r\n attachments: this.attachments.getChangedModels()\r\n });\r\n },\r\n fetchPossibleLineItems: function (callback) {\r\n let fnCallback = _.bind(function(){\r\n if(typeof callback === 'function'){\r\n callback(this.possibleLineItems);\r\n }\r\n }, this)\r\n if(this.possibleLineItems != null){\r\n fnCallback();\r\n }\r\n else{\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/lineitemoptions',\r\n isAPIv2: true\r\n }).get().done(_.bind(function (response) {\r\n let coll;\r\n if(this instanceof PJQ.models.invoicing.PayableInvoice){\r\n coll = PJQ.collections.invoicing.PayableInvoiceLineItems;\r\n }\r\n else{\r\n coll = PJQ.collections.invoicing.ReceivableInvoiceLineItems;\r\n }\r\n this.possibleLineItems = new coll(response);\r\n fnCallback();\r\n }, this)).fail(_.bind(function () {\r\n fnCallback();\r\n }, this));\r\n }\r\n },\r\n getSubTotal: function () {\r\n return this.get('amount');\r\n },\r\n getRetainage: function () {\r\n return this.get('workRetainage') + this.get('materialRetainage');\r\n },\r\n getRetainageReleased: function () {\r\n return this.get('workRetainageReleased') + this.get('materialRetainageReleased');\r\n },\r\n getGrandTotal: function () {\r\n return this.getSubTotal() + this.get('taxAmount');\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.InvoiceLineItem = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id',\r\n parse: function(model) {\r\n if(!model)\r\n return model;\r\n\r\n if (model && model.group) {\r\n this.group = new PJQ.models.groups.Group(model.group);\r\n }\r\n else\r\n this.group = null;\r\n\r\n return model;\r\n },\r\n getWorkRetainageRemaining: function(invoice){\r\n let wRetain = (this.get('workRetainageTotal') - this.get('workRetainageReleasedTotal'));\r\n if(invoice == null || (invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.APPROVED && invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE)){\r\n wRetain += this.get('workRetainage') - this.get('workRetainageReleased');\r\n }\r\n return wRetain;\r\n },\r\n getMaterialRetainageRemaining: function(invoice){\r\n let mRetain = (this.get('materialRetainageTotal') - this.get('materialRetainageReleasedTotal'));\r\n if(invoice == null || (invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.APPROVED && invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE)){\r\n mRetain += this.get('materialRetainage') - this.get('materialRetainageReleased');\r\n }\r\n return mRetain;\r\n },\r\n getWorkRetainageTotal: function(invoice){\r\n let wRetain = (this.get('workRetainageTotal') - this.get('workRetainageReleasedTotal'));\r\n if(invoice == null || (invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.APPROVED && invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE)){\r\n wRetain += this.get('workRetainage');\r\n }\r\n return wRetain;\r\n },\r\n getMaterialRetainageTotal: function(invoice){\r\n let mRetain = (this.get('materialRetainageTotal') - this.get('materialRetainageReleasedTotal'));\r\n if(invoice == null || (invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.APPROVED && invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE)){\r\n mRetain += this.get('materialRetainage');\r\n }\r\n return mRetain;\r\n },\r\n getProgressAmountTotal: function(invoice){\r\n let progressAmount = this.get('progressAmountTotal');\r\n if(invoice == null || (invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.APPROVED && invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE)){\r\n progressAmount += this.get('progressAmount');\r\n }\r\n return progressAmount\r\n },\r\n getTotalCompleteAndStored: function(invoice){\r\n return this.getProgressAmountTotal(invoice) + this.getMaterialsStored(invoice);\r\n },\r\n getBalanceToFinish: function(invoice){\r\n return this.get('committedAmount') - this.getTotalCompleteAndStored(invoice);\r\n },\r\n getMaterialsStored: function(invoice){\r\n let matStored = this.get('materialsStoredTotal')\r\n if(invoice == null || (invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.APPROVED && invoice.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE)){\r\n matStored += this.get('materialsNew');\r\n }\r\n return matStored;\r\n },\r\n getTaxAmount: function () {\r\n if(this.get('progressPercent') === 100){\r\n let taxTotal = this.get('progressTaxAmountTotal'),\r\n committedTax = this.get('committedTaxAmount');\r\n return committedTax - taxTotal;\r\n }\r\n\r\n let taxRate = this.get('taxRate'),\r\n taxable = this.get('progressAmount') + this.get('materialsNew');\r\n return Math.round(taxable * (taxRate / 10000));\r\n },\r\n getUnRoundedTaxAmount: function () {\r\n let taxRate = this.get('taxRate'),\r\n taxable = this.get('progressAmount') + this.get('materialsNew') - this.getRetainage() + this.getRetainageReleased();\r\n return taxable * (taxRate / 10000);\r\n },\r\n getSubTotal: function () {\r\n return this.get('progressAmount') + this.get('materialsNew');\r\n },\r\n getRetainage: function () {\r\n return this.get('workRetainage') + this.get('materialRetainage');\r\n },\r\n getRetainageReleased: function () {\r\n return this.get('workRetainageReleased') + this.get('materialRetainageReleased');\r\n },\r\n getGrandTotal: function () {\r\n return this.getSubTotal() + this.get('taxAmount') - this.getRetainage() + this.getRetainageReleased();\r\n },\r\n});\r\n\r\nPJQ.collections.invoicing.Invoices = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.Invoice\r\n});\r\n\r\nPJQ.collections.invoicing.InvoiceLineItems = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.InvoiceLineItem\r\n});","PJQ.views.invoicing.InvoicePaymentModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'modal-invoice-payment-edit'),\r\n maxWidth: 800,\r\n model: null,\r\n isShowCloseButton: true,\r\n onSave: _.noop(),\r\n onDelete: _.noop(),\r\n isPayable: false\r\n },\r\n events: {\r\n 'click .btn-view-invoice': 'viewInvoice',\r\n 'click .btn-delete': 'delete',\r\n 'click .btn-close': 'close',\r\n 'click .btn-sync-erp': 'syncERP',\r\n 'click .btn-unlink-erp': 'unlinkERP',\r\n 'click .btn-save': 'savePayment',\r\n 'click .btn-export': 'exportPayment'\r\n },\r\n beforeModalCreated: function () {\r\n if(this.options.isPayable) {\r\n this.options.canViewInvoices = PJQ.app.session.project.hasPermission('payableInvoices.canView');\r\n this.options.canViewCommitments = PJQ.app.session.project.hasPermission('commitments.canView');\r\n this.options.isAdmin = PJQ.app.session.project.hasPermission('payableInvoices.isAdmin');\r\n }\r\n else{\r\n this.options.canViewInvoices = PJQ.app.session.project.hasPermission('receivableInvoices.canView');\r\n this.options.canViewPrimeContracts = PJQ.app.session.project.hasPermission('primeContracts.canView');\r\n this.options.isAdmin = PJQ.app.session.project.hasPermission('receivableInvoices.isAdmin');\r\n }\r\n\r\n this.options.canEdit = this.options.isAdmin;\r\n this.options.canDelete = this.options.isAdmin;\r\n\r\n this.isFetched = false;\r\n PJQ.app.session.fetchERPIntegration(_.bind(function (erp) {\r\n this.erpIntegration = erp;\r\n\r\n if (this.model == null) {\r\n if(this.options.isPayable) {\r\n this.model = new PJQ.models.invoicing.PayableInvoicePayment({\r\n notes: '',\r\n number: '',\r\n invoiceId: this.options.invoice.id,\r\n invoiceNumber: this.options.invoice.get('number'),\r\n projectId: this.options.invoice.get('projectId'),\r\n companyId: this.options.invoice.get('companyId'),\r\n contractedContact: this.options.invoice.contractedContact,\r\n contractedContactId: this.options.invoice.contractedContact ? this.options.invoice.contractedContact.id : null\r\n });\r\n }\r\n else {\r\n this.model = new PJQ.models.invoicing.ReceivableInvoicePayment({\r\n notes: '',\r\n number: '',\r\n invoiceId: this.options.invoice.id,\r\n invoiceNumber: this.options.invoice.get('number'),\r\n projectId: this.options.invoice.get('projectId'),\r\n companyId: this.options.invoice.get('companyId'),\r\n client: this.options.invoice.client,\r\n clientId: this.options.invoice.client ? this.options.invoice.client.id : null\r\n });\r\n }\r\n }\r\n\r\n let fnRender = _.bind(function () {\r\n this.isFetched = true;\r\n this.render();\r\n }, this)\r\n if (!this.model.isNew()) {\r\n this.model.fetch({\r\n success: fnRender\r\n });\r\n } else {\r\n fnRender();\r\n }\r\n }, this));\r\n },\r\n beforeRender: function () {\r\n if (this.model != null && !this.model.isNew()) {\r\n if (this.model.isERPSynced()) {\r\n this.options.canEdit = false;\r\n this.options.canDelete = false;\r\n } else {\r\n this.options.canEdit = this.options.isAdmin;\r\n this.options.canDelete = this.options.isAdmin;\r\n }\r\n }\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model,\r\n erpIntegration: this.erpIntegration,\r\n canEdit: this.options.canEdit,\r\n canDelete: this.options.canDelete,\r\n isAdmin: this.options.isAdmin,\r\n canViewInvoices: this.options.canViewInvoices,\r\n isPayable: this.options.isPayable,\r\n canViewCommitments: this.options.canViewCommitments,\r\n canViewPrimeContracts: this.options.canViewPrimeContracts,\r\n isFetched: this.isFetched\r\n }\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched)\r\n return;\r\n\r\n PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.input-dollars-full'), 2, true);\r\n\r\n new PJQ.Binder(this.$el, this.model, {\r\n canEdit: !this.options.canEdit ? false : null,\r\n watchElements: [\r\n 'input',\r\n 'textarea'\r\n ]\r\n });\r\n\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.payment-client'),\r\n selectedContact: this.options.isPayable ? this.model.contractedContact : this.model.client,\r\n canEdit: false,\r\n displayContactsBlock: true,\r\n });\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-payment-method'),\r\n defaultValue: this.model.get('paymentMethod'),\r\n canEdit: this.options.canEdit,\r\n onChange: _.bind(function (value) {\r\n this.model.set('paymentMethod', value);\r\n }, this)\r\n });\r\n\r\n this.dateReceivedPicker = new PJQ.inputs.Datepicker({\r\n el: this.$('.input-date-received'),\r\n canEdit: this.options.canEdit,\r\n datepickerOptions: {\r\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\r\n defaultDate: this.model.get('dateReceived') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('dateReceived'), false) : null\r\n },\r\n onChange: _.bind(function (newDate) {\r\n this.model.set('dateReceived', newDate);\r\n }, this)\r\n });\r\n\r\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\r\n el: this.$('.payment-file-uploader'),\r\n collection: this.model.attachments,\r\n canUpload: this.options.canEdit,\r\n useApiV2: true,\r\n canDelete: this.options.canEdit && this.options.isAdmin,\r\n previewImageDimension: 150,\r\n onSuccess: _.bind(function (file) {\r\n this.model.isDirty = true;\r\n }, this),\r\n onDelete: _.bind(function (attachment, callback) {\r\n if (attachment.id > 0) {\r\n attachment.set('isDeleted', true);\r\n } else {\r\n attachment.destroy();\r\n }\r\n\r\n this.model.isDirty = true;\r\n callback();\r\n }, this)\r\n });\r\n },\r\n viewInvoice: function () {\r\n this.removeModal();\r\n if(this.options.isPayable){\r\n new PJQ.views.invoicing.EditPayableInvoiceModal({\r\n model: new PJQ.models.invoicing.PayableInvoice({\r\n id: this.model.get('invoiceId')\r\n })\r\n });\r\n }\r\n else {\r\n new PJQ.views.invoicing.EditReceivableInvoiceModal({\r\n model: new PJQ.models.invoicing.ReceivableInvoice({\r\n id: this.model.get('invoiceId')\r\n })\r\n });\r\n }\r\n },\r\n viewPrimeContract: function () {\r\n this.removeModal();\r\n new PJQ.views.primeContracts.PrimeContractEditModal({\r\n model: new PJQ.models.primeContracts.PrimeContract({\r\n id: this.model.get('primeContractId')\r\n })\r\n });\r\n },\r\n viewCommitment: function () {\r\n this.removeModal();\r\n new PJQ.views.commitments.CommitmentEditModal({\r\n model: new PJQ.models.commitments.Commitment({\r\n id: this.model.get('commitmentId')\r\n })\r\n });\r\n },\r\n syncERP: function () {\r\n if (this.erpIntegration != null) {\r\n let loader = new PJQ.Loader(this.$('.modal-content'));\r\n this.model.syncERP(_.bind(function () {\r\n if (this.model.isERPSynced()) {\r\n this.render();\r\n } else {\r\n loader.remove();\r\n }\r\n }, this));\r\n }\r\n },\r\n unlinkERP: function () {\r\n if (this.erpIntegration != null) {\r\n let loader = new PJQ.Loader(this.$('.modal-content'));\r\n this.model.unlinkERP(_.bind(function (success, error) {\r\n if (success) {\r\n this.render();\r\n } else {\r\n let errMsg;\r\n if (error === 'LINKED_OBJECT_EXISTS') {\r\n errMsg = 'You cannot unlink this payment until it is deleted from your ERP system';\r\n } else {\r\n errMsg = 'An error occurred when attempting to unlink this payment. Please contact customer service.';\r\n }\r\n PJQ.notifications.notify.errorNotify({\r\n title: 'Payment Still Exists!',\r\n message: errMsg\r\n });\r\n loader.remove();\r\n }\r\n }, this));\r\n }\r\n },\r\n exportPayment: function () {\r\n let callback = _.bind(function () {\r\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: this.options.isPayable ? 'payableinvoicepayments' : 'receivableinvoicepayments',\r\n value: this.model.get('id')\r\n },\r\n {\r\n endpoint: 'export',\r\n }\r\n ]), {isAPIv2: true});\r\n }, this);\r\n\r\n this.save(callback, true);\r\n },\r\n delete: function () {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Delete Invoice\",\r\n body: \"Are you sure you want to delete this Payment?\",\r\n onDelete: _.bind(function () {\r\n if (typeof this.options.onDelete === 'function') {\r\n this.options.onDelete(this.model);\r\n }\r\n this.model.destroy({\r\n success: _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Payment successfully deleted'\r\n });\r\n this.removeModal();\r\n }, this)\r\n });\r\n }, this)\r\n });\r\n },\r\n savePayment: function () {\r\n let isNew = this.model.isNew();\r\n this.model.save(null, {\r\n success: _.bind(function () {\r\n if (isNew) {\r\n this.model.dirtyAttributes = {};\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Payment created successfully'\r\n });\r\n\r\n if (typeof this.options.onSave === 'function')\r\n this.options.onSave(this.model, isNew);\r\n\r\n this.render();\r\n } else {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Payment saved successfully'\r\n });\r\n\r\n if (typeof this.options.onSave === 'function')\r\n this.options.onSave(this.model, isNew);\r\n\r\n this.removeModal();\r\n }\r\n }, this)\r\n });\r\n },\r\n validate: function () {\r\n return true;\r\n },\r\n email: function () {\r\n let projectName = this.options.project?.get('projectName')?.trim();\r\n let subject = `A Payment has been shared with you ${projectName && _.size(projectName) > 0 ? `for ${projectName}` : ''}`;\r\n new PJQ.views.email.ComposeEmailModal({\r\n header: \"Email Payment\",\r\n project: PJQ.app.session.project,\r\n subject: subject,\r\n onSave: _.bind(function (data) {\r\n this.model.share(data, _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Payment email sent'\r\n });\r\n }, this));\r\n }, this)\r\n });\r\n },\r\n close: function () {\r\n if (this.model.hasChanged() && this.options.canEdit) {\r\n new PJQ.views.modals.SaveDontSave({\r\n header: \"Unsaved Changes\",\r\n body: \"Do you want to save changes?\",\r\n onSave: _.bind(function () {\r\n this.savePayment();\r\n this.removeModal();\r\n }, this),\r\n onDontSave: _.bind(function () {\r\n this.removeModal();\r\n }, this)\r\n });\r\n } else {\r\n this.removeModal();\r\n }\r\n }\r\n});","PJQ.views.invoicing.InvoiceSummary = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'invoice-summary')\n },\n events: {\n 'click .btn-export-summary': 'export'\n },\n beforeFirstRender: function () {\n this.summary = {}\n this.model.getSummary(_.bind(function (summary) {\n if (summary != null) {\n this.summary = summary;\n this.render();\n } else {\n this.render();\n }\n }, this))\n },\n renderData: function () {\n return {\n summary: this.summary,\n project: PJQ.app.session.project,\n model: this.model\n }\n },\n export: function () {\n if (typeof this.options.export === 'function') {\n this.options.export(this.model);\n }\n }\n});","PJQ.views.invoicing.InvoicingManagement = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'invoicing-management'),\n subTemplates: {\n totals: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'invoicing-management-totals')\n }\n },\n events: {\n 'shown.bs.tab .nav-tabs': 'tabActivated',\n },\n beforeFirstRender: function () {\n this.options.isAdmin = PJQ.app.session.project.hasPermission('payableInvoices.isAdmin') || PJQ.app.session.project.hasPermission('receivableInvoices.isAdmin');\n this.options.canViewPayableInvoices = PJQ.app.session.project.hasPermission('payableInvoices.canView');\n this.options.canViewReceivableInvoices = PJQ.app.session.project.hasPermission('receivableInvoices.canView');\n },\n renderData: function () {\n return {\n isAdmin: this.options.isAdmin,\n payableInvoices: this.payableInvoices\n }\n },\n afterRender: function () {\n if (this.options.view != null) {\n this.activateTab(this.options.view);\n } else if (this.options.canViewPayableInvoices) {\n this.renderPayableInvoicesView();\n } else if (this.options.canViewReceivableInvoices) {\n this.renderReceivableInvoicesView();\n } else if (this.options.isAdmin) {\n this.renderBillingPeriodsView();\n }\n },\n activateTab: function (tab) {\n switch (tab ? tab.toLowerCase() : null) {\n case 'billingperiods':\n tab = 'BP_List';\n this.renderBillingPeriodsView();\n break;\n case 'receivable':\n tab = 'RI_List';\n this.renderReceivableInvoicesView();\n break;\n default:\n tab = 'PI_List';\n this.renderPayableInvoicesView();\n break;\n }\n this.activeTab = '#' + tab;\n\n this.isActivating = true;\n this.$('.nav-link[href=\"#' + tab + '\"]').tab('show');\n this.isActivating = false;\n },\n tabActivated: function (e) {\n if(this.isActivating){\n return;\n }\n\n let tab = $(e.target).attr('href');\n if(this.activeTab !== tab) {\n this.activeTab = tab;\n switch (this.activeTab) {\n case '#PI_List':\n this.renderPayableInvoicesView();\n break;\n case '#RI_List':\n this.renderReceivableInvoicesView();\n break;\n case '#BP_List':\n this.renderBillingPeriodsView();\n break;\n }\n }\n },\n renderPayableInvoicesView: function () {\n PJQ.app.router.navigate('projects/' + this.options.project.id.toString() + '/invoicing', {\n trigger: false\n });\n this.activeView = 'payable';\n if (this.payableView == null && this.options.canViewPayableInvoices) {\n let fnRender = _.bind(function () {\n this.payableView = new PJQ.views.invoicing.PayableInvoicesList({\n el: this.$('.payable-pane'),\n project: PJQ.app.session.project,\n collection: this.payableInvoices,\n invoiceId: this.options.invoiceId,\n paymentId: this.options.paymentId,\n onChange: _.bind(function(invoice) {\n let currentInvoice = this.payableInvoices.get(invoice.id);\n currentInvoice.set(invoice.attributes);\n this.renderStats();\n }, this)\n });\n this.renderStats();\n }, this);\n if (this.payableInvoices == null) {\n this.payableInvoices = new PJQ.collections.invoicing.PayableInvoices(null, {\n project: this.options.project\n });\n this.payableInvoices.fetch({\n success: _.bind(function () {\n fnRender();\n }, this)\n })\n } else {\n fnRender();\n }\n } else {\n this.renderStats();\n }\n },\n renderReceivableInvoicesView: function () {\n PJQ.app.router.navigate('projects/' + this.options.project.id.toString() + '/invoicing/receivable', {\n trigger: false\n });\n this.activeView = 'receivable';\n if (this.receivableView == null && this.options.canViewPayableInvoices) {\n let fnRender = _.bind(function () {\n this.receivableView = new PJQ.views.invoicing.ReceivableInvoicesList({\n el: this.$('.receivable-pane'),\n project: PJQ.app.session.project,\n collection: this.receivableInvoices,\n invoiceId: this.options.invoiceId,\n paymentId: this.options.paymentId,\n onChange: _.bind(function(invoice) {\n let currentInvoice = this.receivableInvoices.get(invoice.id);\n currentInvoice.set(invoice.attributes);\n this.renderStats();\n }, this)\n });\n this.renderStats();\n }, this);\n if (this.receivableInvoices == null) {\n this.receivableInvoices = new PJQ.collections.invoicing.ReceivableInvoices(null, {\n project: this.options.project\n });\n this.receivableInvoices.fetch({\n success: _.bind(function () {\n fnRender();\n }, this)\n })\n } else {\n fnRender();\n }\n } else {\n this.renderStats();\n }\n },\n renderBillingPeriodsView: function () {\n PJQ.app.router.navigate('projects/' + this.options.project.id.toString() + '/invoicing/billingperiods', {\n trigger: false\n });\n this.activeView = 'billing_periods';\n if (this.billingPeriodsView == null && this.options.canViewPayableInvoices) {\n let fnRender = _.bind(function () {\n this.billingPeriodsView = new PJQ.views.invoicing.BillingPeriodsList({\n el: this.$('.billing-period-pane'),\n project: PJQ.app.session.project,\n model: this.billingPeriodSettings\n });\n }, this);\n if (this.billingPeriodSettings == null) {\n PJQ.app.session.project.fetchBillingPeriodSettings(_.bind(function (bst) {\n this.billingPeriodSettings = bst;\n fnRender();\n }, this));\n } else {\n fnRender();\n }\n } else {\n this.renderStats();\n }\n },\n renderStats: function () {\n let totals = null,\n data = null,\n $totals = this.$('.totals-outer');\n if (this.activeView === 'receivable') {\n totals = this.receivableInvoices.getTotalAmountsByStatus();\n data = {\n draft: totals[PJQ.constants.invoicing.receivableInvoiceStatus.DRAFT],\n reviewing: totals[PJQ.constants.invoicing.receivableInvoiceStatus.REVIEWING],\n approved: totals[PJQ.constants.invoicing.receivableInvoiceStatus.APPROVED],\n complete: totals[PJQ.constants.invoicing.receivableInvoiceStatus.COMPLETE],\n revise: totals[PJQ.constants.invoicing.receivableInvoiceStatus.REVISE]\n };\n } else if (this.activeView === 'payable') {\n totals = this.payableInvoices.getTotalAmountsByStatus();\n data = {\n draft: totals[PJQ.constants.invoicing.payableInvoiceStatus.DRAFT],\n reviewing: totals[PJQ.constants.invoicing.payableInvoiceStatus.REVIEWING],\n approved: totals[PJQ.constants.invoicing.payableInvoiceStatus.APPROVED],\n complete: totals[PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE],\n revise: totals[PJQ.constants.invoicing.payableInvoiceStatus.REVISE]\n };\n }\n if (data != null) {\n this.renderSubTemplate(false, this.options.subTemplates.totals, $totals, data);\n } else {\n $totals.empty();\n }\n }\n});","PJQ.views.invoicing.PayableInvoiceDataTable = PJQ.views.dataTables.DataTable.extend({\r\n defaults: {\r\n language: {\r\n emptyTable: 'No Payable Invoices have been created yet',\r\n zeroRecords: \"No Payable Invoices matched the search criteria\"\r\n },\r\n subTemplates: {\r\n header: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'data-table-header-payable-invoices')\r\n },\r\n toggleRowClass: '.change-order-toggle-row',\r\n onViewInvoice: null\r\n },\r\n events: {\r\n 'click .btn-view-invoice': 'viewInvoiceClicked',\r\n 'click .view-commitment': 'viewCommitmentClicked'\r\n },\r\n beforeDataTableRender: function () {\r\n this.options.pageLength = this.options.settings ? this.options.settings.rowsPerPage : 10;\r\n },\r\n getDefaultFilter: function () {\r\n return _.size(this.options.statusIds) > 0 ? this.options.statusIds : this.options.userSettings.get('defaultStatusFilter');\r\n },\r\n afterHeaderRender: function () {\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.payable-invoice-status-filter'),\r\n defaultValue: this.getDefaultFilter(),\r\n isIntChoices: true,\r\n isMultiple: true,\r\n noneSelectedText: 'No Filters',\r\n onChange: _.bind(function (value) {\r\n this.setFilter(PJQ.constants.invoicing.filterType.STATUS_FILTER, value);\r\n }, this)\r\n });\r\n this.setFilter(PJQ.constants.invoicing.filterType.STATUS_FILTER, this.getDefaultFilter());\r\n\r\n let currentBillingPeriod = _.find(this.options.billingPeriodSettings.billingPeriods.models, function (period) {\r\n return period.get('isCurrent');\r\n }),\r\n bpId = currentBillingPeriod && !this.options.showAllBillingPeriods ? currentBillingPeriod.id : null;\r\n this.setFilter('billingPeriodId', bpId);\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-billing-period'),\r\n defaultValue: bpId,\r\n isMultiple: false,\r\n isIntChoices: true,\r\n onChange: _.bind(function (value) {\r\n this.setFilter('billingPeriodId', value);\r\n }, this)\r\n });\r\n },\r\n getFilterData: function () {\r\n let statusFilter = this.getFilter(PJQ.constants.invoicing.filterType.STATUS_FILTER),\r\n billingPeriodFilter = this.getFilter('billingPeriodId'),\r\n data = this.options.data;\r\n if (_.size(statusFilter) === 0 && billingPeriodFilter == null) {\r\n return data;\r\n }\r\n\r\n if (billingPeriodFilter != null) {\r\n let fnBPFilter = _.bind(function (data) {\r\n let billingPeriod = this.options.billingPeriodSettings.billingPeriods.get(billingPeriodFilter),\r\n startA = billingPeriod.get('startDate'),\r\n endA = billingPeriod.get('endDate');\r\n return _.filter(data, function (row) {\r\n let startB = row.get('startDate'),\r\n endB = row.get('endDate');\r\n return billingPeriodFilter === row.get('billingPeriodId') || PJQ.helpers.dateHelpers.checkDateRangesOverlap(startA, endA, startB, endB);\r\n });\r\n }, this);\r\n return fnBPFilter(_.filter(data, function (row) {\r\n return _.size(statusFilter) === 0 || _.contains(statusFilter, row.get('statusId'));\r\n }));\r\n } else {\r\n return _.filter(data, function (row) {\r\n return _.contains(statusFilter, row.get('statusId'));\r\n });\r\n }\r\n },\r\n getColumns: function (includeAllColumns = false) {\r\n this.options.canViewCommitments = PJQ.app.session.project.hasPermission('commitments.canView');\r\n\r\n let columns = [],\r\n includeColumns = ['number', 'commitment', 'contractedContact.companyName', 'billingDate', 'startDate', 'endDate', 'status', 'amount', 'taxAmount', 'grandTotal', 'paymentAmount', 'paid'];\r\n\r\n if (this.options.customFields) {\r\n _.each(this.options.customFields.models, _.bind(function (customField) {\r\n includeColumns.push('fieldValue' + customField.get('fieldNumber'));\r\n }, this));\r\n }\r\n\r\n if (!includeAllColumns) {\r\n if (this.options.settings && _.size(this.options.settings.columns) > 0)\r\n includeColumns = this.options.settings.columns;\r\n else\r\n includeColumns = this.options.settings && this.options.settings.columnsDefault ? this.options.settings.columnsDefault : includeColumns;\r\n\r\n columns.push({\r\n \"columnData\": \"\",\r\n \"data\": null,\r\n \"title\": \"\",\r\n \"width\": \"20px\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"defaultContent\": '',\r\n \"render\": (data, type, row) => {\r\n if(!this.options.isAdmin){\r\n return \"\";\r\n }\r\n\r\n return PJQ.helpers.erp.getERPIcon(row.erpSyncStatus());\r\n }\r\n });\r\n }\r\n\r\n _.each(includeColumns, _.bind(function (columnName) {\r\n switch (columnName) {\r\n case 'status':\r\n columns.push({\r\n \"columnData\": \"status\",\r\n \"data\": \"attributes.statusId\",\r\n \"title\": \"Status\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.constants.invoicing.payableInvoiceStatusNames[row.get('statusId')]\r\n }, this)\r\n });\r\n break;\r\n case 'number':\r\n columns.push({\r\n \"columnData\": \"number\",\r\n \"data\": \"attributes.number\",\r\n \"title\": \"Number\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return '' + row.get('number') + '';\r\n }, this)\r\n });\r\n break;\r\n case 'commitment':\r\n columns.push({\r\n \"columnData\": \"commitment\",\r\n \"title\": \"Commitment\",\r\n \"data\": \"attributes.commitmentNumber\",\r\n \"orderable\": true,\r\n \"render\": _.bind(function (data, type, row) {\r\n if (this.options.canViewCommitments) {\r\n return '' + row.get('commitmentNumber') + '';\r\n }\r\n return data;\r\n }, this)\r\n },);\r\n break;\r\n case 'notes':\r\n columns.push({\r\n \"columnData\": \"notes\",\r\n \"data\": \"attributes.notes\",\r\n \"title\": \"Notes\"\r\n });\r\n break;\r\n case 'billingDate':\r\n columns.push({\r\n \"columnData\": \"billingDate\",\r\n \"data\": \"attributes.billingDate\",\r\n \"title\": 'Due Date',\r\n \"width\": '90px',\r\n \"render\": _.bind(function (data, type, row) {\r\n if(_.size(data) === 0){\r\n return '';\r\n }\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }, this)\r\n });\r\n break;\r\n case 'startDate':\r\n columns.push({\r\n \"columnData\": \"startDate\",\r\n \"data\": \"attributes.startDate\",\r\n \"title\": 'Start Date',\r\n \"width\": '90px',\r\n \"render\": _.bind(function (data, type, row) {\r\n if(_.size(data) === 0){\r\n return '';\r\n }\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }, this)\r\n });\r\n break;\r\n case 'endDate':\r\n columns.push({\r\n \"columnData\": \"endDate\",\r\n \"data\": \"attributes.endDate\",\r\n \"title\": 'End Date',\r\n \"width\": '90px',\r\n \"render\": _.bind(function (data, type, row) {\r\n if(_.size(data) === 0){\r\n return '';\r\n }\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }, this)\r\n });\r\n break;\r\n case 'createdOn':\r\n columns.push({\r\n \"columnData\": \"createdOn\",\r\n \"data\": \"attributes.createdOn\",\r\n \"title\": 'Created Date',\r\n \"width\": '90px',\r\n \"render\": _.bind(function (data, type, row) {\r\n if(_.size(data) === 0){\r\n return '';\r\n }\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\r\n }, this)\r\n });\r\n break;\r\n case 'contractedContact.companyName':\r\n columns.push({\r\n \"columnData\": \"contractedContact.companyName\",\r\n \"title\": \"Company\",\r\n \"titleSettings\": \"Contracted Company\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return row.get('contractedContact') ? row.get('contractedContact').companyName : 'N/A';\r\n }, this)\r\n });\r\n break;\r\n case 'amount':\r\n columns.push({\r\n \"columnData\": \"amount\",\r\n \"data\": \"attributes.amount\",\r\n \"width\": \"10%\",\r\n \"title\": \"Amount\",\r\n \"className\": \"text-align-right\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('amount'));\r\n }, this)\r\n });\r\n break;\r\n case 'taxAmount':\r\n columns.push({\r\n \"columnData\": \"taxAmount\",\r\n \"data\": \"attributes.taxAmount\",\r\n \"title\": \"Tax\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(data);\r\n }, this)\r\n });\r\n break;\r\n case 'grandTotal':\r\n columns.push({\r\n \"columnData\": \"grandTotal\",\r\n \"data\": \"attributes.amount\",\r\n \"title\": \"Grand Total\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(row.getGrandTotal());\r\n }, this)\r\n });\r\n break;\r\n case 'paymentAmount':\r\n columns.push({\r\n \"columnData\": \"paymentAmount\",\r\n \"data\": \"attributes.paymentAmount\",\r\n \"title\": \"Payments\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(data);\r\n }, this)\r\n });\r\n break;\r\n case 'paid':\r\n columns.push({\r\n \"columnData\": \"paid\",\r\n \"data\": \"attributes.paid\",\r\n \"title\": \"Paid\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return data ? 'Yes' : 'No';\r\n }, this)\r\n });\r\n break;\r\n default:\r\n if (columnName.startsWith('fieldValue')) {\r\n _.each(this.options.customFields.models, function (customField) {\r\n if (columnName === 'fieldValue' + customField.get('fieldNumber')) {\r\n columns.push({\r\n \"columnData\": 'fieldValue' + customField.get('fieldNumber'),\r\n \"title\": customField.get('name'),\r\n \"render\": function (data, type, row) {\r\n let fieldValue = row.getCustomFieldValue(customField.get('id'));\r\n fieldValue = (fieldValue !== null) ? fieldValue : '';\r\n switch (customField.get('fieldTypeId')) {\r\n case PJQ.constants.commitments.customFieldType.BOOLEAN:\r\n if (fieldValue != null)\r\n fieldValue = fieldValue ? 'Yes' : 'No';\r\n break;\r\n case PJQ.constants.commitments.customFieldType.CHOICE:\r\n let choices = [];\r\n // convert single choice value into array so that the logic below can work for both types.\r\n if (typeof fieldValue === 'number')\r\n fieldValue = [fieldValue];\r\n\r\n _.each(customField.choices.models, _.bind(function (choice) {\r\n if (_.find(fieldValue, function (value) {\r\n return value === choice.get('id');\r\n }))\r\n choices.push(choice.get('name'));\r\n }, this));\r\n\r\n fieldValue = choices.join((', '));\r\n break;\r\n case PJQ.constants.commitments.customFieldType.DATE:\r\n if (fieldValue) {\r\n if (type !== 'sort' && type !== 'type')\r\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }\r\n if (fieldValue === undefined)\r\n fieldValue = '';\r\n\r\n break;\r\n case PJQ.constants.commitments.customFieldType.DATETIME:\r\n if (fieldValue) {\r\n if (type !== 'sort' && type !== 'type')\r\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\r\n }\r\n if (fieldValue === undefined)\r\n fieldValue = '';\r\n\r\n break;\r\n case PJQ.constants.commitments.customFieldType.INTEGER:\r\n if (type !== 'sort' && type !== 'type' && fieldValue) {\r\n fieldValue = parseInt(fieldValue).toLocaleString();\r\n }\r\n break;\r\n case PJQ.constants.commitments.customFieldType.MONEY:\r\n if (type === 'sort' || type === 'type') {\r\n if (fieldValue && fieldValue !== '$')\r\n fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true));\r\n else\r\n fieldValue = 0;\r\n } else {\r\n fieldValue = PJQ.helpers.formatHelpers.formatCurrency(parseInt(PJQ.helpers.formatHelpers.numbersOnly(fieldValue)));\r\n }\r\n break;\r\n case PJQ.constants.commitments.customFieldType.PERCENT:\r\n if (type === 'sort' || type === 'type') {\r\n if (fieldValue && fieldValue !== '$')\r\n fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true)).toFixed(2);\r\n else\r\n fieldValue = 0;\r\n } else {\r\n fieldValue = fieldValue ? fieldValue.toString() + '%' : '';\r\n }\r\n\r\n break;\r\n }\r\n\r\n return fieldValue;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n }, this));\r\n\r\n if (!includeAllColumns) {\r\n columns.push({\r\n \"title\": '',\r\n \"render\": _.bind(function (data, type, row) {\r\n return '
';\r\n }, this),\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": \"90px\",\r\n \"className\": \"text-center\",\r\n \"visible\": true\r\n });\r\n }\r\n\r\n return columns;\r\n },\r\n getRowChildTable: function (childOpts) {\r\n childOpts.costTypes = this.options.costTypes;\r\n childOpts.unitsOfMeasure = this.options.unitsOfMeasure;\r\n childOpts.groups = this.options.groups;\r\n childOpts.parentDataTable = this;\r\n childOpts.dom = 't';\r\n return new PJQ.views.commitments.LineItemDataTable(childOpts);\r\n },\r\n getRowChildData: function (row) {\r\n return new PJQ.collections.commitments.ChangeOrderLineItems(null, {\r\n changeOrderId: row.data().id\r\n });\r\n },\r\n viewInvoiceClicked: function (e){\r\n if(typeof(this.options.onViewInvoice) === 'function'){\r\n let row = this.getRow((e.currentTarget).closest('tr')),\r\n invoice = row.data();\r\n if(invoice != null){\r\n this.options.onViewInvoice(invoice);\r\n }\r\n }\r\n },\r\n viewCommitmentClicked: function (e) {\r\n let row = this.getRow((e.currentTarget).closest('tr'));\r\n this.viewCommitment(row.data().get('commitmentId'));\r\n },\r\n viewCommitment: function(commitmentId) {\r\n new PJQ.views.commitments.CommitmentEditModal({\r\n model: new PJQ.models.commitments.Commitment({\r\n id: commitmentId\r\n })\r\n });\r\n }\r\n});","PJQ.views.invoicing.EditPayableInvoiceModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'modal-payable-invoice-edit'),\r\n width: '95%',\r\n maxWidth: 1500,\r\n model: null,\r\n isShowCloseButton: true,\r\n onSave: _.noop(),\r\n onDelete: _.noop()\r\n },\r\n events: {\r\n 'click .btn-view-commitment': 'viewCommitment',\r\n 'click .btn-view-payment': 'viewPaymentClicked',\r\n 'click .btn-new-payment': 'newPayment',\r\n 'change .input-coi-required': 'renderCOIApproval',\r\n 'change .input-w9-required': 'renderW9Approval',\r\n 'change .input-lien-waiver-required': 'renderLienWaiverApproval',\r\n 'click .btn-add-line-item': 'addLineItem',\r\n 'click .btn-delete': 'delete',\r\n 'click .btn-close': 'close',\r\n 'click .btn-submit': 'submitInvoice',\r\n 'click .btn-save-email': 'saveEmail',\r\n 'click .btn-save': 'saveInvoice',\r\n 'click .btn-push-erp': 'pushERP',\r\n 'click .erp-sync-payments .btn-pull-erp': 'pullERPPayments',\r\n 'click .btn-undo-push-erp': 'undoPushERP',\r\n 'click .btn-unlink-erp': 'unlinkERP',\r\n 'click .btn-export': 'exportInvoice',\r\n 'click .btn-email': 'email',\r\n 'click .nav-link': 'activeViewChanged',\r\n 'click .btn-invite-to-bill': 'inviteToBill',\r\n 'change .cb-paid': 'updatePaid',\r\n 'click .btn-itb-respond': 'respondToInviteClicked',\r\n 'click .btn-view-history': 'viewHistory'\r\n },\r\n beforeModalCreated: async function () {\r\n this.isFetched = false;\r\n\r\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\r\n this.coreFieldSettings = await this.options.project.fetchPayableInvoiceFieldSettings();\r\n this.settings = await this.options.project.fetchPayableInvoiceSettings();\r\n this.customFields = await this.options.project.fetchPayableInvoiceCustomFields();\r\n this.billingPeriodSettings = await this.options.project.fetchBillingPeriodSettings();\r\n this.costCodes = await this.options.project.fetchCostCodes();\r\n this.costTypes = await this.options.project.fetchCostTypes();\r\n this.unitsOfMeasure = await this.options.project.fetchUnitsOfMeasure();\r\n\r\n if (this.model == null) {\r\n let customFieldValues = [];\r\n _.each(this.customFields.models, function (model, index) {\r\n let value = model.get('defaultValue') ? model.get('defaultValue') : '';\r\n if (model.get('fieldType') === 'CHOICE') {\r\n value = parseInt(value);\r\n }\r\n customFieldValues.push({\r\n fieldNumber: model.get('fieldNumber'),\r\n fieldTypeId: model.get('fieldTypeId'),\r\n fieldType: model.get('fieldType'),\r\n isMultiple: model.get('isMultiple'),\r\n value: value,\r\n id: model.get('id')\r\n })\r\n }, this);\r\n\r\n this.model = new PJQ.models.invoicing.PayableInvoice({\r\n notes: '',\r\n number: '',\r\n commitmentId: this.options.commitment.id,\r\n commitmentType: this.options.commitment.get('commitmentType'),\r\n commitmentNumber: this.options.commitment.get('number'),\r\n projectId: this.options.commitment.get('projectId'),\r\n companyId: this.options.commitment.get('companyId'),\r\n contractedContact: this.options.commitment.contractedContact,\r\n contractedContactId: this.options.commitment.get('contractedContactId'),\r\n invoiceContact: this.options.commitment.invoiceContact,\r\n invoiceContactId: this.options.commitment.get('invoiceContactId'),\r\n statusId: PJQ.constants.invoicing.payableInvoiceStatus.DRAFT,\r\n isCOIRequired: this.options.commitment.get('isCOIRequired'),\r\n isCOIApproved: this.options.commitment.get('isCOIApproved'),\r\n coiAttachments: this.options.commitment.coiAttachments.toJSON(),\r\n isW9Required: this.options.commitment.get('isW9Required'),\r\n isW9Approved: this.options.commitment.get('isW9Approved'),\r\n defaultWorkRetainagePercent: this.options.commitment.get('defaultWorkRetainagePercent'),\r\n defaultMaterialRetainagePercent: this.options.commitment.get('defaultMaterialRetainagePercent'),\r\n w9Attachments: this.options.commitment.w9Attachments.toJSON(),\r\n customFieldValues: customFieldValues\r\n });\r\n\r\n let billingPeriod = _.find(this.billingPeriodSettings.billingPeriods.models, function (billingPeriod) {\r\n return billingPeriod.get('isCurrent');\r\n })\r\n if (billingPeriod != null) {\r\n this.model.set({\r\n billingPeriodId: billingPeriod.id,\r\n startDate: PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('startDate'), false),\r\n endDate: PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('endDate'), false),\r\n billingDate: PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('dueDate'), false)\r\n });\r\n }\r\n }\r\n\r\n if (!this.model.isNew()) {\r\n await this.model.fetch();\r\n }\r\n\r\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\r\n if (this.erpIntegration != null && this.erpIntegration.getSetting('syncProjects')) {\r\n await this.options.project.fetchERPObject();\r\n\r\n if (this.options.commitment == null) {\r\n this.options.commitment = new PJQ.models.commitments.Commitment({\r\n id: this.model.get('commitmentId')\r\n });\r\n await this.options.commitment.fetch();\r\n }\r\n }\r\n\r\n this.isFetched = true;\r\n this.render();\r\n },\r\n beforeRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n this.options.canEdit = this.options.project.hasPermission('payableInvoices.canEdit');\r\n this.options.canEditLineItems = this.options.canEdit;\r\n this.options.canEditBillingDates = this.options.project.hasPermission('payableInvoices.canEdit');\r\n this.options.isAdmin = this.options.project.hasPermission('payableInvoices.isAdmin');\r\n this.options.canViewCommitments = this.options.project.hasPermission('commitments.canView');\r\n this.options.canAddPayments = this.options.canEdit;\r\n this.options.canDelete = this.options.isAdmin;\r\n this.options.canEditStatus = this.options.isAdmin;\r\n this.options.canInviteToBill = this.options.isAdmin && new Date(this.model.get('billingDate')) > new Date() && this.model.get('statusId') === PJQ.constants.invoicing.payableInvoiceStatus.DRAFT;\r\n this.options.canRespondToInvite = this.model.get('invitedOnDate') != null && this.model.get('inviteStatus') == null && (PJQ.app.session.user?.get('userId') === this.model.contractedContact.get('userId') || PJQ.app.session.user?.get('userId') === this.model.invoiceContact?.get('userId'));\r\n\r\n let status = this.model.get('statusId');\r\n if (this.model.isNew() || status === PJQ.constants.invoicing.payableInvoiceStatus.DRAFT) {\r\n this.options.canEdit = true;\r\n this.options.canEditBillingDates = true;\r\n this.options.canEditLineItems = true;\r\n this.options.canDelete = !this.model.isNew();\r\n } else if (status === PJQ.constants.invoicing.payableInvoiceStatus.APPROVED || status === PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE) {\r\n this.options.canEdit = PJQ.app.session.project.hasPermission('payableInvoices.canEdit');\r\n this.options.canEditBillingDates = false;\r\n this.options.canEditLineItems = false;\r\n this.options.canDelete = false;\r\n } else {\r\n this.options.canEdit = PJQ.app.session.project.hasPermission('payableInvoices.canEdit');\r\n this.options.canEditBillingDates = PJQ.app.session.project.hasPermission('payableInvoices.canEdit');\r\n this.options.canEditLineItems = true;\r\n this.options.canDelete = this.options.isAdmin;\r\n }\r\n\r\n if (PJQ.app.session.user != null &&\r\n ((this.model.get('contractedContact') && PJQ.app.session.user.id === this.model.get('contractedContact').userId)\r\n || (this.model.get('invoiceContact') && PJQ.app.session.user.id === this.model.get('invoiceContact').userId))) {\r\n this.options.isSubmitting = (status === PJQ.constants.invoicing.payableInvoiceStatus.DRAFT || status === PJQ.constants.invoicing.payableInvoiceStatus.REVISE);\r\n\r\n let today = new Date();\r\n if (today > new Date(this.model.get('billingDate'))) {\r\n this.options.canEditBillingDates = false;\r\n this.options.canEdit = false;\r\n this.options.canEditLineItems = false;\r\n this.options.canDelete = false;\r\n this.options.isSubmitting = false;\r\n }\r\n }\r\n\r\n if (status !== PJQ.constants.invoicing.payableInvoiceStatus.APPROVED && status !== PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE) {\r\n this.options.canAddPayments = false;\r\n }\r\n\r\n if ((status === PJQ.constants.invoicing.payableInvoiceStatus.APPROVED || status === PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE)\r\n && (this.model.payments.models.length > 0 || this.model.get('isLatest') === false)) {\r\n this.options.canEditStatus = false;\r\n this.options.canEditLineItems = false;\r\n }\r\n\r\n if (this.model.isNew()) {\r\n this.options.canEditStatus = false;\r\n }\r\n\r\n if (this.erpIntegration != null) {\r\n let syncStatus = this.model.erpSyncStatus();\r\n if (syncStatus === PJQ.constants.integrations.erp.syncStatuses.REVIEWING\r\n || syncStatus === PJQ.constants.integrations.erp.syncStatuses.APPROVED\r\n || syncStatus === PJQ.constants.integrations.erp.syncStatuses.SYNCED\r\n ) {\r\n this.options.canEditBillingDates = false;\r\n this.options.canEdit = false;\r\n this.options.canEditLineItems = false;\r\n this.options.canDelete = false;\r\n this.options.isSubmitting = false;\r\n }\r\n }\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model,\r\n erpIntegration: this.erpIntegration,\r\n customFields: this.customFields,\r\n billingPeriods: this.billingPeriodSettings != null ? this.billingPeriodSettings.billingPeriods : null,\r\n canEdit: this.options.canEdit,\r\n canDelete: this.options.canDelete,\r\n isAdmin: this.options.isAdmin,\r\n canViewCommitments: this.options.canViewCommitments,\r\n canAddPayments: this.options.canAddPayments,\r\n isSubmitting: this.options.isSubmitting,\r\n isFetched: this.isFetched,\r\n canEditBillingDates: this.options.canEditBillingDates,\r\n settings: this.settings,\r\n invoiceSettings: this.invoiceSettings,\r\n activeView: this.options.activeView,\r\n views: this.views,\r\n canInviteToBill: this.options.canInviteToBill,\r\n checkFieldVisible: _.bind(this.checkFieldVisible, this),\r\n checkFieldRequired: _.bind(this.checkFieldRequired, this),\r\n canRespondToInvite: this.options.canRespondToInvite\r\n }\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n this.activateView(this.options.activeView);\r\n\r\n this.stopListening(this.model);\r\n this.listenTo(this.model, 'change:statusId', () => {\r\n this.renderERP();\r\n });\r\n this.stopListening(this.model.lineItems);\r\n this.listenTo(this.model.lineItems, 'update', () => {\r\n this.renderERP();\r\n });\r\n this.renderERP();\r\n\r\n this.renderGeneral();\r\n if (!this.model.isNew()) {\r\n this.renderLineItems();\r\n this.renderPayments();\r\n }\r\n this.updateCounts();\r\n\r\n if (this.options.inviteResponse != null && this.model.get('invitedOnDate') != null && this.model.get('inviteStatus') == null) {\r\n this.handleInviteResponse();\r\n }\r\n },\r\n respondToInviteClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n value = target.data('value');\r\n\r\n this.handleInviteResponse(value);\r\n },\r\n handleInviteResponse: function (responseValue) {\r\n let response = responseValue != null ? responseValue : this.options.inviteResponse,\r\n fnUpdateResponse = () => {\r\n this.model.updateInviteStatus(response, (updatedModel) => {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice response updated successfully'\r\n });\r\n this.model.reset(updatedModel);\r\n\r\n if (typeof this.options.onSave === 'function')\r\n this.options.onSave(this.model, false);\r\n\r\n this.render();\r\n });\r\n };\r\n\r\n if (response === 0) {\r\n new PJQ.views.modals.YesNo({\r\n header: \"Decline Invitation\",\r\n body: \"Are you sure you want to decline to bill this period?\",\r\n onYes: _.bind(function () {\r\n fnUpdateResponse();\r\n }, this)\r\n });\r\n } else {\r\n fnUpdateResponse();\r\n }\r\n },\r\n updateCounts: function () {\r\n this.$('.count-line-items').text(_.size(this.model.lineItems.models));\r\n this.$('.count-payments').text(_.size(this.model.payments.models));\r\n },\r\n views: {\r\n GENERAL: 'PI_General',\r\n LINEITEMS: 'PI_LineItems',\r\n PAYMENTS: 'PI_Payments',\r\n SUMMARY: 'PI_Summary'\r\n },\r\n activeViewChanged: function (e) {\r\n let view = e.target.hash ? e.target.hash.replace('#', '') : null;\r\n this.activateView(view);\r\n },\r\n activateView: function (view) {\r\n switch (view) {\r\n case this.views.LINEITEMS:\r\n case this.views.PAYMENTS:\r\n // do nothing\r\n break;\r\n case this.views.SUMMARY:\r\n this.renderSummary();\r\n break;\r\n default:\r\n view = this.views.GENERAL;\r\n break;\r\n }\r\n\r\n this.$('.nav-link[href=\"#' + view + '\"]').tab('show');\r\n this.options.activeView = view;\r\n },\r\n validateApproval: function () {\r\n let isValid = true;\r\n if (this.model.get('statusId') === PJQ.constants.invoicing.payableInvoiceStatus.APPROVED || this.model.get('statusId') === PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE) {\r\n if (this.model.get('isCOIRequired')) {\r\n let $coi = this.$('.coi-alert');\r\n $coi.empty();\r\n if (!this.model.get('isCOIApproved')) {\r\n new PJQ.Alert($coi, {\r\n type: 'danger',\r\n text: 'You must approve this item before approving the invoice'\r\n });\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (this.model.get('isW9Required')) {\r\n let $w9 = this.$('.w9-alert');\r\n $w9.empty();\r\n if (!this.model.get('isW9Approved')) {\r\n new PJQ.Alert($w9, {\r\n type: 'danger',\r\n text: 'You must approve this item before approving the invoice'\r\n });\r\n isValid = false;\r\n }\r\n }\r\n }\r\n return isValid;\r\n },\r\n renderGeneral: function () {\r\n new PJQ.Binder(this.$el, this.model, {\r\n canEdit: !this.options.canEdit ? false : null,\r\n useDecimalPercentFields: true,\r\n watchElements: [\r\n 'input',\r\n 'textarea'\r\n ]\r\n });\r\n\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.invoice-contracted-company'),\r\n selectedContact: this.model.contractedContact,\r\n canViewContacts: this.options.project.hasPermission('projectContacts.canView'),\r\n canEdit: false,\r\n displayContactsBlock: true,\r\n });\r\n\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.invoice-contact'),\r\n selectedContact: this.model.invoiceContact,\r\n canViewContacts: this.options.project.hasPermission('projectContacts.canView'),\r\n canEdit: false,\r\n displayContactsBlock: true,\r\n });\r\n\r\n this.statusPicker = new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-status'),\r\n isIntChoices: true,\r\n defaultValue: this.model.get('statusId'),\r\n canEdit: this.options.canEditStatus,\r\n choices: _.map(PJQ.constants.invoicing.payableInvoiceStatus, (st) => {\r\n return {\r\n id: st,\r\n name: PJQ.constants.invoicing.payableInvoiceStatusNames[st],\r\n disabled: this.options.disabledStatuses != null && this.options.disabledStatuses.indexOf(st) > -1\r\n }\r\n }),\r\n onChange: _.bind(function (newStatus) {\r\n let oldStatus = this.model.get('statusId');\r\n if (newStatus === oldStatus) {\r\n return;\r\n }\r\n\r\n this.model.set('statusId', newStatus);\r\n if (!this.model.isNew()) {\r\n this.save((success) => {\r\n if (success) {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice saved successfully'\r\n });\r\n } else {\r\n this.model.set('statusId', oldStatus);\r\n this.statusPicker.setValue(oldStatus);\r\n }\r\n });\r\n } else {\r\n this.render();\r\n }\r\n }, this)\r\n });\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-billing-period'),\r\n defaultValue: this.model.get('billingPeriodId'),\r\n isMultiple: false,\r\n isIntChoices: true,\r\n canEdit: this.options.canEdit,\r\n onChange: _.bind(function (value) {\r\n let billingPeriod = this.billingPeriodSettings != null && value != null ? this.billingPeriodSettings.billingPeriods.get(value) : null;\r\n this.model.set('billingPeriodId', value);\r\n this.$('.period-start').attr('disabled', billingPeriod != null);\r\n this.$('.period-end').attr('disabled', billingPeriod != null);\r\n if (billingPeriod != null) {\r\n let startDate = PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('startDate'), false),\r\n endDate = PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('endDate'), false),\r\n dueDate = PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('dueDate'), false);\r\n this.periodStartPicker.setValue(startDate);\r\n this.model.set('startDate', startDate);\r\n\r\n this.periodEndPicker.setValue(endDate);\r\n this.model.set('endDate', endDate);\r\n\r\n this.dueDatePicker.setValue(dueDate);\r\n this.model.set('billingDate', dueDate);\r\n }\r\n }, this)\r\n });\r\n\r\n this.periodStartPicker = new PJQ.inputs.Datepicker({\r\n el: this.$('.period-start'),\r\n canEdit: this.options.canEdit && !(this.model.get('billingPeriodId') > 0),\r\n datepickerOptions: {\r\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\r\n defaultDate: this.model.get('startDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('startDate'), false) : null\r\n },\r\n onChange: _.bind(function (newDate) {\r\n this.model.set('startDate', newDate);\r\n }, this)\r\n });\r\n\r\n this.periodEndPicker = new PJQ.inputs.Datepicker({\r\n el: this.$('.period-end'),\r\n canEdit: this.options.canEdit && !(this.model.get('billingPeriodId') > 0),\r\n datepickerOptions: {\r\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\r\n defaultDate: this.model.get('endDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('endDate'), false) : null\r\n },\r\n onChange: _.bind(function (newDate) {\r\n this.model.set('endDate', newDate);\r\n }, this)\r\n });\r\n\r\n this.dueDatePicker = new PJQ.inputs.Datepicker({\r\n el: this.$('.due-date'),\r\n canEdit: this.options.canEdit,\r\n datepickerOptions: {\r\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\r\n defaultDate: this.model.get('billingDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('billingDate'), false) : null\r\n },\r\n onChange: _.bind(function (newDate) {\r\n this.model.set('billingDate', newDate);\r\n }, this)\r\n });\r\n\r\n if (this.checkFieldVisible('attachments')) {\r\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\r\n el: this.$('.invoice-file-uploader'),\r\n collection: this.model.attachments,\r\n canUpload: this.options.canEdit,\r\n useApiV2: true,\r\n canView: false,\r\n canDelete: this.options.canEdit && this.options.isAdmin,\r\n previewImageDimension: 150,\r\n onSuccess: _.bind(function (file) {\r\n this.model.isDirty = true;\r\n }, this),\r\n onDelete: _.bind(function (attachment, callback) {\r\n if (attachment.id > 0) {\r\n attachment.set('delete', true);\r\n } else {\r\n attachment.destroy();\r\n }\r\n\r\n this.model.isDirty = true;\r\n callback();\r\n }, this)\r\n });\r\n }\r\n\r\n if (this.checkFieldVisible('coiAttachments')) {\r\n this.coiUploader = new PJQ.views.files.FileUploaderGrid({\r\n el: this.$('.coi-file-uploader'),\r\n collection: this.model.coiAttachments,\r\n canUpload: this.options.canEdit,\r\n useApiV2: true,\r\n canView: false,\r\n canDelete: this.options.isAdmin,\r\n previewImageDimension: 150,\r\n onSuccess: _.bind(function (file) {\r\n this.model.isDirty = true;\r\n }, this),\r\n onDelete: _.bind(function (attachment, callback) {\r\n if (attachment.get('id') > 0) {\r\n attachment.set('delete', true);\r\n } else {\r\n attachment.destroy();\r\n }\r\n\r\n this.model.isDirty = true;\r\n callback();\r\n }, this)\r\n });\r\n this.renderCOIApproval();\r\n }\r\n\r\n if (this.checkFieldVisible('w9Attachments')) {\r\n this.w9Uploader = new PJQ.views.files.FileUploaderGrid({\r\n el: this.$('.w9-file-uploader'),\r\n collection: this.model.w9Attachments,\r\n canUpload: this.options.canEdit,\r\n useApiV2: true,\r\n canView: false,\r\n canDelete: this.options.isAdmin,\r\n previewImageDimension: 150,\r\n onSuccess: _.bind(function (file) {\r\n this.model.isDirty = true;\r\n }, this),\r\n onDelete: _.bind(function (attachment, callback) {\r\n if (attachment.get('id') > 0) {\r\n attachment.set('delete', true);\r\n } else {\r\n attachment.destroy();\r\n }\r\n\r\n this.model.isDirty = true;\r\n callback();\r\n }, this)\r\n });\r\n this.renderW9Approval();\r\n }\r\n\r\n if (this.checkFieldVisible('lienWaiverAttachments')) {\r\n this.lienWaiverUploader = new PJQ.views.files.FileUploaderGrid({\r\n el: this.$('.lien-waiver-file-uploader'),\r\n collection: this.model.lienWaiverAttachments,\r\n canUpload: this.options.canEdit,\r\n useApiV2: true,\r\n canView: false,\r\n canDelete: this.options.isAdmin,\r\n previewImageDimension: 150,\r\n onSuccess: _.bind(function (file) {\r\n this.model.isDirty = true;\r\n }, this),\r\n onDelete: _.bind(function (attachment, callback) {\r\n if (attachment.get('id') > 0) {\r\n attachment.set('delete', true);\r\n } else {\r\n attachment.destroy();\r\n }\r\n\r\n this.model.isDirty = true;\r\n callback();\r\n }, this)\r\n });\r\n this.renderLienWaiverApproval();\r\n }\r\n\r\n if (this.customFields && _.size(this.customFields.models) > 0) {\r\n this.customFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\r\n el: this.$('.payable-invoice-custom-fields'),\r\n collection: this.customFields,\r\n fieldValues: this.model.get('customFieldValues'),\r\n isEdit: this.options.canEdit,\r\n isAdmin: this.options.isAdmin,\r\n });\r\n }\r\n },\r\n renderCOIApproval: function () {\r\n if (this.coiApproval != null) {\r\n this.coiApproval.remove();\r\n }\r\n if (this.model.get('isCOIRequired')) {\r\n this.coiApproval = new PJQ.inputs.ButtonGroup({\r\n el: this.$('.coi-approval'),\r\n canEdit: this.options.canEdit && this.options.isAdmin,\r\n colorInactiveButtons: false,\r\n buttonClasses: 'wd-120p',\r\n buttons: [\r\n {\r\n label: \"Not Reviewed\",\r\n value: null,\r\n colorClass: \"light\"\r\n },\r\n {\r\n label: \"Rejected\",\r\n value: false,\r\n colorClass: \"danger\"\r\n },\r\n {\r\n label: \"Approved\",\r\n value: true,\r\n colorClass: \"success\"\r\n }\r\n ],\r\n defaultValue: this.model.get('isCOIApproved'),\r\n onChange: _.bind(function (value) {\r\n this.model.set('isCOIApproved', value);\r\n }, this)\r\n });\r\n }\r\n },\r\n renderW9Approval: function () {\r\n if (this.w9Approval != null) {\r\n this.w9Approval.remove();\r\n }\r\n if (this.model.get('isW9Required')) {\r\n this.w9Approval = new PJQ.inputs.ButtonGroup({\r\n el: this.$('.w9-approval'),\r\n canEdit: this.options.canEdit && this.options.isAdmin,\r\n colorInactiveButtons: false,\r\n buttonClasses: 'wd-120p',\r\n buttons: [\r\n {\r\n label: \"Not Reviewed\",\r\n value: null,\r\n colorClass: \"light\"\r\n },\r\n {\r\n label: \"Rejected\",\r\n value: false,\r\n colorClass: \"danger\"\r\n },\r\n {\r\n label: \"Approved\",\r\n value: true,\r\n colorClass: \"success\"\r\n }\r\n ],\r\n defaultValue: this.model.get('isW9Approved'),\r\n onChange: _.bind(function (value) {\r\n this.model.set('isW9Approved', value);\r\n }, this)\r\n });\r\n }\r\n },\r\n renderLienWaiverApproval: function () {\r\n if (this.lienWaiverApproval != null) {\r\n this.lienWaiverApproval.remove();\r\n }\r\n if (this.model.get('isLienWaiverRequired')) {\r\n this.lienWaiverApproval = new PJQ.inputs.ButtonGroup({\r\n el: this.$('.lien-waiver-approval'),\r\n canEdit: this.options.canEdit && this.options.isAdmin,\r\n colorInactiveButtons: false,\r\n buttonClasses: 'wd-120p',\r\n buttons: [\r\n {\r\n label: \"Not Reviewed\",\r\n value: null,\r\n colorClass: \"light\"\r\n },\r\n {\r\n label: \"Rejected\",\r\n value: false,\r\n colorClass: \"danger\"\r\n },\r\n {\r\n label: \"Approved\",\r\n value: true,\r\n colorClass: \"success\"\r\n }\r\n ],\r\n defaultValue: this.model.get('isLienWaiverApproved'),\r\n onChange: _.bind(function (value) {\r\n this.model.set('isLienWaiverApproved', value);\r\n }, this)\r\n });\r\n }\r\n },\r\n renderSummary: function () {\r\n this.summaryView = new PJQ.views.invoicing.InvoiceSummary({\r\n el: this.$('.invoice-summary'),\r\n model: this.model,\r\n export: () => {\r\n this.save(() => {\r\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices',\r\n value: this.model.get('id')\r\n },\r\n {\r\n endpoint: 'summary'\r\n },\r\n {\r\n endpoint: 'export',\r\n }\r\n ]), {isAPIv2: true});\r\n });\r\n }\r\n })\r\n },\r\n renderLineItems() {\r\n this.lineItemsView = new PJQ.views.budget.LineItemsView({\r\n el: this.$('.invoice-line-items'),\r\n model: this.model,\r\n collection: this.model.lineItems,\r\n lineItemModel: PJQ.models.invoicing.PayableInvoiceLineItem,\r\n isSubmitting: this.options.isSubmitting,\r\n canEdit: this.options.isSubmitting || (this.options.canEdit && this.options.canEditLineItems),\r\n canDelete: this.options.isSubmitting || (this.options.canEdit && this.options.canEditLineItems),\r\n isAdmin: this.options.isAdmin,\r\n enableStoredMaterials: this.settings.get('enableStoredMaterials'),\r\n enableRetainage: this.settings.get('enableRetainage'),\r\n enableSelection: this.options.isSubmitting || (this.options.canEdit && this.options.canEditLineItems),\r\n enableTax: true,\r\n canImportBudget: false,\r\n showSubTotal: true,\r\n showGrandTotal: true,\r\n onLineItemChange: _.bind(function () {\r\n this.model.isDirty = true;\r\n }, this),\r\n onLineItemAdd: _.bind(function () {\r\n this.model.isDirty = true;\r\n this.updateCounts();\r\n }, this),\r\n onLineItemDelete: _.bind(function () {\r\n this.model.isDirty = true;\r\n this.updateCounts();\r\n }, this),\r\n onCommitmentView: _.bind(function () {\r\n this.removeModal();\r\n }, this),\r\n onChangeOrderView: _.bind(function () {\r\n this.removeModal();\r\n }, this),\r\n });\r\n },\r\n pullERPPayments: function () {\r\n if (this.model.isERPSynced() && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_PAYABLE_PAYMENTS)) {\r\n this.erpIntegration.pullPayableInvoicePayments(this.model, (res) => {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Payments successfully pulled from ERP'\r\n });\r\n\r\n this.model.payments.reset(res);\r\n this.renderPayments();\r\n });\r\n }\r\n },\r\n renderPayments: function () {\r\n if (this.model.isNew()) {\r\n return;\r\n }\r\n\r\n this.paymentsDataTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$('.invoice-payments'),\r\n data: this.model.payments.models,\r\n isHideSearch: true,\r\n language: {\r\n emptyTable: 'No Payments have been created yet',\r\n zeroRecords: \"No Payments matched the search criteria\"\r\n },\r\n paging: false,\r\n order: [],\r\n columns: [{\r\n \"columnData\": \"\",\r\n \"data\": null,\r\n \"title\": \"\",\r\n \"width\": \"20px\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"defaultContent\": '',\r\n \"render\": function (data, type, row) {\r\n if (row.isERPSynced()) {\r\n return PJQ.helpers.erp.getERPIcon(row.erpSyncStatus());\r\n }\r\n return '';\r\n }\r\n }, {\r\n \"title\": \"#\",\r\n \"data\": \"attributes.number\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return '' + data + ''\r\n }, this)\r\n },\r\n {\r\n \"title\": 'Received',\r\n \"data\": \"\",\r\n \"render\": _.bind(function (data, type, row) {\r\n let dateReceived = row.get('dateReceived');\r\n if (_.size(dateReceived) === 0) {\r\n return '';\r\n }\r\n\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(dateReceived), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }, this)\r\n },\r\n {\r\n \"data\": \"attributes.amount\",\r\n \"title\": \"Amount\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('amount'));\r\n }, this)\r\n },\r\n {\r\n \"data\": \"\",\r\n \"title\": \"\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": \"80px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n let html = '
'\r\n if (this.options.canViewInvoices) {\r\n html += ''\r\n }\r\n return html + '
';\r\n }, this)\r\n }],\r\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>',\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'View',\r\n onClick: _.bind(function (row) {\r\n this.viewPayment(row.data());\r\n }, this),\r\n isShown: _.bind(function (row) {\r\n return this.options.canViewInvoices;\r\n }, this)\r\n }\r\n ]\r\n },\r\n onRowDoubleClick: _.bind(function (row) {\r\n this.viewPayment(row.data());\r\n }, this)\r\n });\r\n },\r\n newPayment: function () {\r\n this.viewPayment();\r\n },\r\n viewPaymentClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n row = this.paymentsDataTable.getRow(target.closest('tr'));\r\n this.viewPayment(row.data());\r\n },\r\n viewPayment: function (payment) {\r\n this.removeModal();\r\n new PJQ.views.invoicing.InvoicePaymentModal({\r\n model: payment,\r\n invoice: this.model,\r\n isPayable: true,\r\n onSave: _.bind(function (payment, isNew) {\r\n if (isNew) {\r\n this.model.payments.add(payment);\r\n this.paymentsDataTable.addRow(payment);\r\n }\r\n this.updateCounts();\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n }, this),\r\n onDelete: _.bind(function () {\r\n this.updateCounts();\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n }, this)\r\n });\r\n },\r\n viewCommitment: function () {\r\n this.removeModal();\r\n new PJQ.views.commitments.CommitmentEditModal({\r\n model: new PJQ.models.commitments.Commitment({\r\n id: this.model.get('commitmentId')\r\n }),\r\n onSave: () => {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n },\r\n onDelete: () => {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n }\r\n });\r\n },\r\n renderERP: function () {\r\n let $erp = this.$('.erp-sync');\r\n if (!this.options.isAdmin || this.erpIntegration == null || !this.options.project.isERPSynced() || this.model.isNew()) {\r\n $erp.remove();\r\n return;\r\n }\r\n\r\n this.$('.erp-badge').html(PJQ.helpers.erp.getERPBadge(this.model.erpSyncStatus(), this.model.get('externalObject')));\r\n\r\n let canPush = true,\r\n disablePushReason = \"\";\r\n\r\n if (_.size(this.model.lineItems) === 0\r\n || (this.model.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.APPROVED && this.model.get('statusId') !== PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE)) {\r\n canPush = false;\r\n disablePushReason = \"Invoice must be approved or complete and have line items\";\r\n }\r\n\r\n if (!this.options.commitment.isERPSynced() && !this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PAYABLE_INVOICES_WO_SYNCED_COMMMITMENT)) {\r\n canPush = false;\r\n disablePushReason = \"The commitment for this invoice is not synced\";\r\n }\r\n\r\n PJQ.helpers.erp.renderERPButtons($erp, {\r\n pushSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PAYABLE_INVOICES),\r\n canPush: canPush,\r\n disablePushReason: disablePushReason,\r\n status: this.model.erpSyncStatus(),\r\n unlinkSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.UNLINK_PAYABLE_INVOICES),\r\n canPushChanges: false\r\n });\r\n\r\n let $erpPayments = this.$('.erp-sync-payments');\r\n PJQ.helpers.erp.renderERPButtons($erpPayments, {\r\n pushSupported: false,\r\n pullSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_PAYABLE_PAYMENTS)\r\n });\r\n },\r\n pushERP: function (callback) {\r\n if (!this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PAYABLE_INVOICES)) {\r\n return;\r\n }\r\n\r\n this.save((success) => {\r\n if (success) {\r\n this.erpIntegration.pushPayableInvoice(this.model, _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice pushed to ERP'\r\n });\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n } else {\r\n this.render();\r\n }\r\n }, this));\r\n }\r\n });\r\n },\r\n undoPushERP: function () {\r\n if (this.model.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.REVIEWING) {\r\n this.erpIntegration.undoPush(this.model, _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Payable Invoice removed from ERP approval'\r\n });\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n\r\n this.render();\r\n }, this));\r\n }\r\n },\r\n unlinkERP: function () {\r\n new PJQ.views.modals.YesNo({\r\n header: \"Unlink from ERP\",\r\n body: \"Are you sure you want to unlink this Payable Invoice from your ERP system?\",\r\n onYes: () => {\r\n let loader = new PJQ.Loader(this.$('.modal-content'));\r\n this.erpIntegration.unlinkPayableInvoice(this.model, (success) => {\r\n if (success) {\r\n loader.remove();\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Payable Invoice unlinked from ERP'\r\n });\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n\r\n this.render();\r\n }\r\n });\r\n }\r\n });\r\n },\r\n checkFieldVisible: function (fieldName) {\r\n if (this.coreFieldSettings) {\r\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\r\n if (fieldSettings != null) {\r\n return fieldSettings.get('isVisible');\r\n }\r\n }\r\n return true;\r\n },\r\n checkFieldRequired: function (fieldName) {\r\n if (this.coreFieldSettings) {\r\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\r\n if (fieldSettings != null) {\r\n return fieldSettings.get('isRequired');\r\n }\r\n }\r\n return false;\r\n },\r\n viewHistory: async function () {\r\n let historyItems = [{\r\n date: this.model.get('createdOn'),\r\n person: this.model.get('createdBy'),\r\n action: 'Invoice Created'\r\n }];\r\n\r\n let history = new PJQ.collections.invoicing.PayableInvoiceHistory({}, {\r\n invoiceId: this.model.id\r\n });\r\n new PJQ.views.history.HistoryTimelineModal({\r\n collection: history,\r\n subTitle: 'Payable Invoice #' + this.model.get('number'),\r\n items: historyItems\r\n });\r\n },\r\n exportInvoice: function () {\r\n let callback = _.bind(function () {\r\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices',\r\n value: this.model.get('id')\r\n },\r\n {\r\n endpoint: 'export',\r\n }\r\n ]), {isAPIv2: true});\r\n }, this);\r\n\r\n if (this.options.canEdit && this.model.hasChanged()) {\r\n this.save(callback);\r\n } else {\r\n callback();\r\n }\r\n },\r\n delete: function () {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Delete Invoice\",\r\n body: \"Are you sure you want to delete this Invoice?\",\r\n onDelete: _.bind(function () {\r\n if (typeof this.options.onDelete === 'function') {\r\n this.options.onDelete(this.model);\r\n }\r\n this.model.destroy({\r\n success: _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice successfully deleted'\r\n });\r\n this.removeModal();\r\n }, this)\r\n });\r\n }, this)\r\n });\r\n },\r\n validate: function () {\r\n let isValid = true;\r\n this.periodStartPicker.hideError();\r\n this.periodEndPicker.hideError();\r\n this.dueDatePicker.hideError();\r\n\r\n if (this.model.get('startDate') == null) {\r\n isValid = false;\r\n this.periodStartPicker.showError();\r\n }\r\n if (this.model.get('endDate') == null) {\r\n isValid = false;\r\n this.periodEndPicker.showError();\r\n }\r\n if (this.model.get('billingDate') == null) {\r\n isValid = false;\r\n this.dueDatePicker.showError();\r\n }\r\n if (this.customFieldsForm != null && !this.customFieldsForm.validate()) {\r\n isValid = false;\r\n }\r\n\r\n if (!this.validateApproval()) {\r\n isValid = false;\r\n }\r\n\r\n if (this.checkFieldRequired('number')) {\r\n let $number = this.$('.invoice-number');\r\n PJQ.helpers.inputHelpers.setInputError($number, true);\r\n if (_.size(this.model.get('number')) === 0) {\r\n PJQ.helpers.inputHelpers.setInputError($number, false);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (this.checkFieldRequired('notes')) {\r\n let $notes = this.$('.invoice-notes');\r\n PJQ.helpers.inputHelpers.setInputError($notes, true);\r\n if (_.size(this.model.get('notes')) === 0) {\r\n PJQ.helpers.inputHelpers.setInputError($notes, false);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (this.checkFieldRequired('attachments')) {\r\n this.fileUploader.clearError();\r\n let hasValidAttachment = _.find(this.model.attachments.models, function (model) {\r\n return !model.get('delete')\r\n }, this) != null;\r\n\r\n if (!hasValidAttachment) {\r\n this.fileUploader.showError('Missing attachment', 100000);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (this.checkFieldRequired('coiAttachments')) {\r\n this.coiUploader.clearError();\r\n let hasValidAttachment = _.find(this.model.coiAttachments.models, function (model) {\r\n return !model.get('delete')\r\n }, this) != null;\r\n\r\n if (!hasValidAttachment) {\r\n this.coiUploader.showError('Missing attachment', 100000);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (this.checkFieldRequired('w9Attachments')) {\r\n this.w9Uploader.clearError();\r\n let hasValidAttachment = _.find(this.model.w9Attachments.models, function (model) {\r\n return !model.get('delete')\r\n }, this) != null;\r\n\r\n if (!hasValidAttachment) {\r\n this.w9Uploader.showError('Missing attachment', 100000);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (this.checkFieldRequired('lienWaiverAttachments')) {\r\n this.lienWaiverUploader.clearError();\r\n let hasValidAttachment = _.find(this.model.lienWaiverAttachments.models, function (model) {\r\n return !model.get('delete')\r\n }, this) != null;\r\n\r\n if (!hasValidAttachment) {\r\n this.lienWaiverUploader.showError('Missing attachment', 100000);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (!isValid && this.options.activeView !== 'general') {\r\n this.options.activeView = 'general';\r\n this.$('.nav-tabs a[href=\"#I_General\"]').tab('show');\r\n }\r\n\r\n return isValid;\r\n },\r\n submitInvoice: function () {\r\n this.model.submit(null, _.bind(function (result) {\r\n if (result) {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice submitted successfully'\r\n });\r\n\r\n if (typeof this.options.onSave === 'function')\r\n this.options.onSave(this.model);\r\n\r\n this.removeModal();\r\n }\r\n }, this));\r\n },\r\n saveEmail: function () {\r\n let isNew = this.model.isNew();\r\n this.save((success) => {\r\n if (success) {\r\n let notifyText = isNew ? 'Invoice created successfully' : 'Invoice saved successfully';\r\n PJQ.notifications.notify.successNotify({\r\n message: notifyText\r\n });\r\n\r\n this.email();\r\n }\r\n });\r\n },\r\n saveInvoice: function () {\r\n let isNew = this.model.isNew();\r\n this.save((success) => {\r\n if (success) {\r\n let notifyText = isNew ? 'Invoice created successfully' : 'Invoice saved successfully';\r\n PJQ.notifications.notify.successNotify({\r\n message: notifyText\r\n });\r\n\r\n if (!isNew) {\r\n this.removeModal()\r\n }\r\n }\r\n });\r\n },\r\n save: function (callback) {\r\n if (!this.validate()) {\r\n this.$('.modal').prevObject.scrollTop(0);\r\n if (typeof callback === 'function') {\r\n callback(false);\r\n }\r\n return;\r\n }\r\n\r\n this.model.save({\r\n customFields: this.customFieldsForm != null ? this.customFieldsForm.getChanged() : null,\r\n lineItems: this.model.lineItems.toJSON()\r\n }, {\r\n success: () => {\r\n this.render();\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n\r\n PJQ.app.session.project.trigger('payableInvoiceChanged', this.model);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n },\r\n error: () => {\r\n if (typeof callback === 'function') {\r\n callback(false);\r\n }\r\n PJQ.notifications.notify.errorNotify({\r\n message: \"Encountered an error while saving this Invoice. Please contact customer service.\"\r\n });\r\n }\r\n });\r\n },\r\n email: function () {\r\n let projectName = this.options.project?.get('projectName')?.trim();\r\n let subject = `An invoice has been shared with you ${projectName && _.size(projectName) > 0 ? `for ${projectName}` : ''}`;\r\n new PJQ.views.email.ComposeEmailModal({\r\n header: \"Email Invoice\",\r\n project: PJQ.app.session.project,\r\n subject: subject,\r\n onSave: _.bind(function (data) {\r\n this.model.share(data, _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice email sent'\r\n });\r\n }, this));\r\n }, this)\r\n });\r\n },\r\n inviteToBill: function () {\r\n this.save((success) => {\r\n if (success) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices',\r\n value: this.model.get('id')\r\n },\r\n {\r\n endpoint: 'invitetobill',\r\n }\r\n ]),\r\n isAPIv2: true\r\n }).post().done(() => {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invitation to Bill sent'\r\n });\r\n }).fail((xhr, err, result) => {\r\n\r\n });\r\n }\r\n });\r\n },\r\n updatePaid: function (e) {\r\n this.model.set('paid', $(e.currentTarget).prop('checked'));\r\n if (!this.options.canEdit && this.options.isAdmin) {\r\n this.save(() => {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice saved successfully'\r\n });\r\n });\r\n }\r\n },\r\n close: function () {\r\n if (this.model.hasChanged() && this.options.canEdit) {\r\n new PJQ.views.modals.SaveDontSave({\r\n header: \"Unsaved Changes\",\r\n body: \"Do you want to save changes?\",\r\n onSave: _.bind(function () {\r\n this.saveInvoice();\r\n this.removeModal();\r\n }, this),\r\n onDontSave: _.bind(function () {\r\n this.removeModal();\r\n }, this)\r\n });\r\n } else {\r\n this.removeModal();\r\n }\r\n }\r\n});","PJQ.views.invoicing.PayableInvoicesList = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'invoices-list'),\r\n invoiceId: null\r\n },\r\n events: {\r\n 'click .btn-settings': 'editSettings',\r\n 'click .btn-create-invoice': 'newInvoice',\r\n 'click .btn-delete-invoice': 'deleteInvoiceClicked',\r\n 'click .btn-export': 'exportList'\r\n },\r\n beforeFirstRender: async function () {\r\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\r\n\r\n if (this.collection == null) {\r\n this.collection = new PJQ.collections.invoicing.PayableInvoices(null, {\r\n project: PJQ.app.session.project,\r\n costCodeId: this.options.costCodeId ? this.options.costCodeId : null,\r\n costTypeId: this.options.costTypeId ? this.options.costTypeId : null\r\n });\r\n }\r\n\r\n if (!this.collection.isFetched) {\r\n await this.collection.fetch();\r\n }\r\n\r\n this.customFields = await this.options.project.fetchPayableInvoiceCustomFields();\r\n this.userSettings = await PJQ.app.session.fetchPayableInvoiceUserSettings();\r\n this.billingPeriodSettings = await this.options.project.fetchBillingPeriodSettings();\r\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\r\n\r\n this.isFetched = true;\r\n this.render();\r\n },\r\n beforeRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n this.options.canViewCommitments = this.options.project.hasPermission('commitments.canView');\r\n this.options.isAdmin = this.options.project.hasPermission('payableInvoices.isAdmin');\r\n },\r\n renderData: function () {\r\n return {\r\n collection: this.collection,\r\n isFetched: this.isFetched\r\n }\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n this.renderView();\r\n\r\n PJQ.app.session.project.off('payableInvoiceChanged');\r\n PJQ.app.session.project.on('payableInvoiceChanged', function (invoice) {\r\n this.collection.add(invoice);\r\n this.render();\r\n }, this);\r\n\r\n if (this.options.invoiceId > 0) {\r\n let initInvoice = this.collection.get(this.options.invoiceId);\r\n if (initInvoice != null) {\r\n this.viewInvoice(initInvoice, this.options.inviteResponse);\r\n this.options.invoiceId = null;\r\n }\r\n } else if (this.options.paymentId > 0) {\r\n let initPayment = new PJQ.models.invoicing.PayableInvoicePayment({\r\n id: this.options.paymentId\r\n });\r\n\r\n new PJQ.views.invoicing.InvoicePaymentModal({\r\n model: initPayment,\r\n isPayable: true\r\n });\r\n }\r\n },\r\n renderView: function () {\r\n if (this.dataTable) {\r\n this.dataTable.remove();\r\n this.dataTable = null;\r\n }\r\n\r\n this.dataTable = this.getDataTableInstance();\r\n },\r\n getDataTableInstance: function () {\r\n return new PJQ.views.invoicing.PayableInvoiceDataTable({\r\n el: this.$('.invoices-table'),\r\n rowId: \"cid\",\r\n data: this.collection.models,\r\n onPageSizeChange: function (value) {\r\n // PJQ.helpers.cookieHelpers.setCookie(PJQ.constants.cookies.RFI_PAGE_LENGTH, value);\r\n },\r\n isAdmin: this.options.isAdmin,\r\n statusIds: this.options.statusIds,\r\n showAllBillingPeriods: this.options.showAllBillingPeriods,\r\n headerData: _.bind(function () {\r\n return {\r\n billingPeriods: this.billingPeriodSettings ? this.billingPeriodSettings.billingPeriods : null,\r\n project: this.options.project,\r\n canAdd: this.options.canAdd,\r\n isAdmin: this.options.isAdmin\r\n };\r\n }, this),\r\n groups: this.groups,\r\n costTypes: this.costTypes,\r\n unitsOfMeasure: this.unitsOfMeasure,\r\n userSettings: this.userSettings,\r\n billingPeriodSettings: this.billingPeriodSettings,\r\n canViewCommitments: this.options.canViewCommitments,\r\n settings: this.userSettings.getSettings(PJQ.constants.invoicing.view.PAYABLE_INVOICES),\r\n order: [[1, 'asc']],\r\n colReorder: {\r\n fixedColumnsRight: 1,\r\n realtime: false\r\n },\r\n columnOrderChanged: () => {\r\n this.userSettings.save();\r\n },\r\n onViewInvoice: (invoice) => {\r\n this.viewInvoice(invoice);\r\n },\r\n onRowDoubleClick: (row) => {\r\n this.viewInvoice(row.data());\r\n },\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'View',\r\n onClick: _.bind(function (row) {\r\n this.viewInvoice(row.data());\r\n }, this)\r\n }\r\n ]\r\n }\r\n });\r\n },\r\n newInvoice: function () {\r\n this.viewInvoice();\r\n },\r\n viewInvoice: function (invoice, inviteResponse) {\r\n let isNew = invoice == null;\r\n new PJQ.views.invoicing.EditPayableInvoiceModal({\r\n model: invoice,\r\n inviteResponse: inviteResponse,\r\n commitment: this.model,\r\n onSave: (invoice) => {\r\n if (isNew) {\r\n this.collection.add(invoice);\r\n }\r\n this.renderView();\r\n },\r\n onDelete: (invoice) => {\r\n this.collection.remove(invoice);\r\n this.renderView();\r\n }\r\n });\r\n },\r\n deleteInvoiceClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n row = this.dataTable.getRow(target.closest('tr'));\r\n this.deleteInvoice(row);\r\n },\r\n deleteInvoice: function (row) {\r\n if (row != null) {\r\n let invoice = row.data();\r\n if (invoice != null) {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Delete Invoice\",\r\n body: \"Are you sure you want to delete this Invoice?\",\r\n onDelete: _.bind(function () {\r\n invoice.destroy({\r\n success: _.bind(function () {\r\n this.dataTable.removeRow(row);\r\n if (typeof this.options.onDelete === 'function') {\r\n this.options.onDelete(invoice);\r\n }\r\n }, this)\r\n });\r\n }, this)\r\n });\r\n }\r\n }\r\n },\r\n editSettings: function () {\r\n new PJQ.views.invoicing.PayableInvoiceSettingsModal({\r\n invoicesView: this,\r\n onSave: _.bind(function () {\r\n this.renderView();\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Settings updated successfully'\r\n });\r\n }, this)\r\n });\r\n },\r\n exportList: function () {\r\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: PJQ.app.session.project.id\r\n },\r\n {\r\n endpoint: 'payableinvoices'\r\n },\r\n {\r\n endpoint: 'export'\r\n }\r\n ], [\r\n {\r\n parameter: 'timeZoneOffset',\r\n value: new Date().getTimezoneOffset()\r\n }\r\n ]), {isAPIv2: true});\r\n }\r\n});\r\n\r\nPJQ.views.invoicing.ModalViewPayableInvoices = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'modal-view-payable-invoices'),\r\n maxWidth: 1000,\r\n isShowCloseButton: true,\r\n onSave: _.noop,\r\n isAdmin: true\r\n },\r\n events: {},\r\n beforeModalCreated: function () {\r\n\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model\r\n }\r\n },\r\n afterRender: function () {\r\n if (this.model != null) {\r\n new PJQ.views.invoicing.PayableInvoicesList({\r\n el: this.$('.modal-body'),\r\n model: this.model,\r\n costCodeId: this.model.get('costCodeId'),\r\n costTypeId: this.model.get('costTypeId'),\r\n statusIds: this.options.statusIds,\r\n showAllBillingPeriods: this.options.showAllBillingPeriods,\r\n project: this.options.project\r\n })\r\n }\r\n },\r\n});","//Models\r\nPJQ.models.invoicing.PayableInvoice = PJQ.models.invoicing.Invoice.extend({\r\n endpoint: function () {\r\n let arr = [];\r\n if (this.isNew()) {\r\n arr.push({\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n });\r\n }\r\n return PJQ.helpers.urlHelpers.generateEndpoint([...arr, {\r\n endpoint: 'payableinvoices',\r\n value: this.id\r\n }]);\r\n },\r\n beforeSave: function () {\r\n this.set({\r\n lineItems: this.lineItems.toJSON(),\r\n attachments: this.attachments.toJSON(),\r\n w9Attachments: this.w9Attachments.toJSON(),\r\n coiAttachments: this.coiAttachments.toJSON(),\r\n lienWaiverAttachments: this.lienWaiverAttachments.toJSON(),\r\n });\r\n },\r\n parse: function (model) {\r\n if (!model)\r\n return model;\r\n\r\n this.lineItems = new PJQ.collections.invoicing.PayableInvoiceLineItems(model.lineItems);\r\n this.attachments = new PJQ.collections.invoicing.PayableInvoiceAttachments(model.attachments);\r\n this.w9Attachments = new PJQ.collections.commitments.CommitmentAttachments(model.w9Attachments);\r\n this.coiAttachments = new PJQ.collections.commitments.CommitmentAttachments(model.coiAttachments);\r\n this.lienWaiverAttachments = new PJQ.collections.commitments.CommitmentAttachments(model.lienWaiverAttachments);\r\n this.payments = new PJQ.collections.invoicing.PayableInvoicePayments(model.payments);\r\n\r\n if (model.contractedContact) {\r\n if (model.contractedContact instanceof PJQ.models.BaseModel) {\r\n this.contractedContact = model.contractedContact;\r\n } else {\r\n this.contractedContact = new PJQ.models.contacts.Contact(model.contractedContact);\r\n }\r\n }\r\n\r\n if (model.invoiceContact) {\r\n if (model.invoiceContact instanceof PJQ.models.BaseModel) {\r\n this.invoiceContact = model.invoiceContact;\r\n } else {\r\n this.invoiceContact = new PJQ.models.contacts.Contact(model.invoiceContact);\r\n }\r\n }\r\n\r\n return model;\r\n },\r\n syncERP: function (callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/syncerp',\r\n isAPIv2: true,\r\n }).post().done(_.bind(function (res) {\r\n if (res && _.size(res.externalId) > 0) {\r\n this.set('externalObject', res);\r\n }\r\n if (typeof callback === 'function') {\r\n callback(res);\r\n }\r\n }, this)).fail(_.bind(function (xhr, err, result) {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n }, this));\r\n },\r\n unlinkERP: function (callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/unlinkerp',\r\n isAPIv2: true,\r\n }).post().done(_.bind(function () {\r\n this.set('externalObject', null);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }, this)).fail(_.bind(function (xhr) {\r\n if (typeof callback === 'function') {\r\n let err;\r\n if (xhr.responseJSON != null) {\r\n err = xhr.responseJSON.type;\r\n } else {\r\n err = null;\r\n }\r\n callback(false, err);\r\n }\r\n }, this));\r\n },\r\n makeERPUrl: function (integration) {\r\n let externalId = this.externalId();\r\n if (_.size(externalId) === 0) {\r\n return '';\r\n }\r\n\r\n switch (integration.get('name')) {\r\n case PJQ.constants.integrations.providers.QBO.name:\r\n return 'https://app.sandbox.qbo.intuit.com/app/bill?txnId=' + externalId;\r\n default:\r\n return '';\r\n }\r\n },\r\n submit: function (signature, callback) {\r\n this.beforeSave();\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/submit',\r\n isAPIv2: true,\r\n data: this.toJSON()\r\n }).post().done(_.bind(function (response) {\r\n if (typeof callback === 'function') {\r\n this.set(this.parse(response));\r\n callback(true);\r\n }\r\n }, this)).fail(_.bind(function (response) {\r\n if (typeof callback === 'function') {\r\n callback(false);\r\n }\r\n }, this));\r\n },\r\n share: function (data, callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/email',\r\n isAPIv2: true,\r\n data: {\r\n subject: data != null ? data.subject : null,\r\n body: data != null ? data.body : null,\r\n toEmails: data != null ? data.toEmails : null,\r\n ccEmails: data != null ? data.ccEmails : null,\r\n }\r\n }).post().done(_.bind(function (response) {\r\n callback();\r\n }, this)).fail(_.bind(function (xhr, err, result) {\r\n //todo: error\r\n }, this));\r\n },\r\n updateInviteStatus: async function (response, callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/invitestatus?response=' + response,\r\n isAPIv2: true,\r\n data: this.toJSON()\r\n }).post().done(_.bind(function (res) {\r\n callback(res);\r\n }, this)).fail(_.bind(function (xhr, err, result) {\r\n PJQ.notifications.notify.errorNotify({\r\n message: err && err.message ? err.message : \"Something went wrong\"\r\n });\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.PayableInvoiceHistoryItem = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n actionNames: {\r\n 'status': 'Status Changed',\r\n 'email': 'Email Sent',\r\n 'invtobill': 'Sent Invite to Bill'\r\n },\r\n getActionName: function () {\r\n return this.actionNames[this.get('action')] ?? this.get('action');\r\n },\r\n getDescription: function () {\r\n switch (this.get('action')) {\r\n case 'status':\r\n let fromStatus = this.get('data').from,\r\n toStatus = this.get('data').to;\r\n if (fromStatus == null || toStatus == null) {\r\n return '';\r\n }\r\n\r\n return '' + PJQ.constants.invoicing.payableInvoiceStatusNames[fromStatus] + '' + PJQ.constants.invoicing.payableInvoiceStatusNames[toStatus];\r\n case 'email':\r\n case 'invtobill':\r\n let to = this.get('data').to;\r\n if (_.size(to) === 0) {\r\n return '';\r\n }\r\n\r\n return 'To: ' + to.join(', ');\r\n default:\r\n return '';\r\n }\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.PayableInvoiceLineItem = PJQ.models.invoicing.InvoiceLineItem.extend({});\r\n\r\nPJQ.models.invoicing.PayableInvoiceAttachment = PJQ.models.files.File.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id'\r\n});\r\n\r\nPJQ.models.invoicing.PayableInvoiceCustomField = PJQ.models.customFields.CustomField.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices'\r\n },\r\n {\r\n endpoint: 'customfields',\r\n value: this.get('id')\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.PayableInvoiceSettings = PJQ.models.budget.Settings.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'settingId',\r\n endpoint: function () {\r\n if (this.options.projectId > 0) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.projectId\r\n },\r\n {\r\n endpoint: 'payableinvoices'\r\n },\r\n {\r\n endpoint: 'settings'\r\n }\r\n ]);\r\n }\r\n\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices'\r\n },\r\n {\r\n endpoint: 'settings'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.PayableInvoiceUserSettings = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'settingId',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices'\r\n },\r\n {\r\n endpoint: 'settings'\r\n },\r\n {\r\n endpoint: 'user'\r\n }\r\n ]);\r\n },\r\n getSettings: function (view) {\r\n return _.find(this.attributes.viewSettings, _.bind(function (setting) {\r\n return setting.view === view;\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.PayableInvoiceFieldSetting = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'settingId',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'settings'\r\n },\r\n {\r\n endpoint: 'fields',\r\n value: this.id ? this.id : 'payableinvoices'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.PayableInvoicePayment = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n endpoint: function () {\r\n let arr = [];\r\n if (this.isNew()) {\r\n arr.push({\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n });\r\n }\r\n return PJQ.helpers.urlHelpers.generateEndpoint([...arr, {\r\n endpoint: 'payableinvoicepayments',\r\n value: this.id\r\n }]);\r\n },\r\n parse: function (model) {\r\n if (!model)\r\n return model;\r\n\r\n this.attachments = new PJQ.collections.invoicing.PayableInvoiceAttachments(model.attachments);\r\n\r\n if (model.contractedContact) {\r\n if (model.contractedContact instanceof PJQ.models.BaseModel) {\r\n this.contractedContact = model.contractedContact;\r\n } else {\r\n this.contractedContact = new PJQ.models.contacts.Contact(model.contractedContact);\r\n }\r\n } else {\r\n this.contractedContact = null;\r\n }\r\n\r\n return model;\r\n },\r\n beforeSave: function () {\r\n this.set({\r\n attachments: this.attachments.toJSON()\r\n });\r\n },\r\n syncERP: function (callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/syncerp',\r\n isAPIv2: true,\r\n }).post().done(_.bind(function (res) {\r\n if (res && _.size(res.externalId) > 0) {\r\n this.set('externalObject', res);\r\n }\r\n if (typeof callback === 'function') {\r\n callback(res);\r\n }\r\n }, this)).fail(_.bind(function (xhr, err, result) {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n }, this));\r\n },\r\n unlinkERP: function (callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/unlinkerp',\r\n isAPIv2: true,\r\n }).post().done(_.bind(function () {\r\n this.set('externalObject', null);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }, this)).fail(_.bind(function (xhr) {\r\n if (typeof callback === 'function') {\r\n let err;\r\n if (xhr.responseJSON != null) {\r\n err = xhr.responseJSON.type;\r\n } else {\r\n err = null;\r\n }\r\n callback(false, err);\r\n }\r\n }, this));\r\n },\r\n makeERPUrl: function (integration) {\r\n let externalId = this.externalId();\r\n if (_.size(externalId) === 0) {\r\n return '';\r\n }\r\n\r\n switch (integration.get('name')) {\r\n case PJQ.constants.integrations.providers.QBO.name:\r\n return 'https://app.sandbox.qbo.intuit.com/app/invoice?txnId=' + externalId;\r\n default:\r\n return '';\r\n }\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.PayableInvoicePaymentAttachment = PJQ.models.files.File.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id'\r\n});\r\n\r\n//Collections\r\nPJQ.collections.invoicing.PayableInvoices = PJQ.collections.invoicing.Invoices.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.PayableInvoice,\r\n endpoint: function () {\r\n let params = [];\r\n if (this.options.costCodeId && this.options.costTypeId) {\r\n params.push({\r\n parameter: 'costCodeId',\r\n value: this.options.costCodeId\r\n }, {\r\n parameter: 'costTypeId',\r\n value: this.options.costTypeId\r\n });\r\n }\r\n\r\n if (this.options.commitment != null) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices',\r\n value: this.options.commitment.id\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.project.get('projectId')\r\n },\r\n {\r\n endpoint: 'payableinvoices',\r\n value: this.options.commitment ? this.options.commitment.id : null\r\n }\r\n ], params);\r\n }\r\n },\r\n getTotalAmountsByStatus: function () {\r\n let result = {};\r\n result[PJQ.constants.invoicing.payableInvoiceStatus.DRAFT] = 0;\r\n result[PJQ.constants.invoicing.payableInvoiceStatus.REVIEWING] = 0;\r\n result[PJQ.constants.invoicing.payableInvoiceStatus.APPROVED] = 0;\r\n result[PJQ.constants.invoicing.payableInvoiceStatus.COMPLETE] = 0;\r\n result[PJQ.constants.invoicing.payableInvoiceStatus.REVISE] = 0;\r\n _.each(this.models, function (invoice) {\r\n result[invoice.get('statusId')] += invoice.get('amount');\r\n });\r\n return result;\r\n },\r\n getPayments: function () {\r\n let result = [];\r\n _.each(this.models, function (invoice) {\r\n result.push(...invoice.payments.models);\r\n })\r\n return result;\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.PayableInvoiceHistory = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.PayableInvoiceHistoryItem,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices',\r\n value: this.options.invoiceId\r\n },\r\n {\r\n endpoint: 'history'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.PayableInvoiceLineItems = PJQ.collections.invoicing.InvoiceLineItems.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.PayableInvoiceLineItem\r\n});\r\n\r\nPJQ.collections.invoicing.PayableInvoiceAttachments = PJQ.collections.files.Files.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.PayableInvoiceAttachment,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices',\r\n value: this.options.invoiceId\r\n },\r\n {\r\n endpoint: 'attachments'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.PayableInvoiceCustomFields = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.PayableInvoiceCustomField,\r\n endpoint: function () {\r\n let arr = [];\r\n if (this.options.projectId > 0) {\r\n arr.push({\r\n endpoint: 'projects',\r\n value: this.options.projectId\r\n });\r\n }\r\n arr.push(...[\r\n {\r\n endpoint: 'payableinvoices'\r\n },\r\n {\r\n endpoint: 'customfields'\r\n }\r\n ]);\r\n return PJQ.helpers.urlHelpers.generateEndpoint(arr);\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.PayableInvoiceCustomFieldChoices = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.PayableInvoiceCustomFieldChoice\r\n});\r\n\r\nPJQ.collections.invoicing.PayableInvoiceFieldSettings = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.PayableInvoiceFieldSetting,\r\n endpoint: function () {\r\n if (this.options.projectId > 0) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.projectId\r\n },\r\n {\r\n endpoint: 'settings'\r\n },\r\n {\r\n endpoint: 'fields',\r\n value: 'payableinvoices'\r\n }\r\n ]);\r\n }\r\n\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'settings'\r\n },\r\n {\r\n endpoint: 'fields',\r\n value: 'payableinvoices'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.PayableInvoicePayments = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.PayableInvoicePayment,\r\n endpoint: function () {\r\n if (this.options.invoiceId > 0) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoices',\r\n value: this.options.invoiceId\r\n },\r\n {\r\n endpoint: 'payments'\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.project.get('projectId')\r\n },\r\n {\r\n endpoint: 'payableinvoicepayments'\r\n }\r\n ]);\r\n }\r\n },\r\n});\r\n\r\nPJQ.collections.invoicing.PayableInvoicePaymentAttachments = PJQ.collections.files.Files.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.PayableInvoicePaymentAttachment,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'payableinvoicepayments',\r\n value: this.options.paymentId\r\n },\r\n {\r\n endpoint: 'attachments'\r\n }\r\n ]);\r\n }\r\n});","PJQ.views.invoicing.PayableInvoiceSettingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'modal-payable-invoice-settings'),\n minWidth: '600px',\n },\n events: {\n 'change .select-column': 'columnSelected',\n 'click .btn-edit-company-default': 'editCompanySettings',\n 'click button.settings-save': 'onSave'\n },\n beforeModalCreated: function () {\n this.userSettings = this.options.invoicesView.userSettings;\n },\n beforeRender: function () {\n // copy userSettings for our UI; we only update global userSettings object on save.\n this.options.userSettings = [];\n\n this.options.defaultStatusFilter = this.userSettings.get('defaultStatusFilter');\n _.each(this.userSettings.attributes.viewSettings, _.bind(function (setting) {\n let columns = this.options.invoicesView.dataTable.getColumns(true),\n selectedColumns = (_.size(setting.columns) > 0) ? setting.columns : setting.columnsDefault;\n _.each(columns, _.bind(function (column) {\n column.visible = selectedColumns.indexOf(column.columnData) !== -1\n }, this));\n\n this.options.userSettings.push({\n view: setting.view,\n rowsPerPage: setting.rowsPerPage,\n columns: columns\n });\n }, this));\n },\n renderData: function () {\n return {\n userSettings: this.userSettings\n }\n },\n afterRender: function () {\n this.defaultFilterSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-filter-default'),\n isIntChoices: true,\n isMultiple: true,\n defaultValue: this.userSettings.get('defaultStatusFilter'),\n onChange: _.bind(function (value) {\n this.options.defaultStatusFilter = value\n }, this)\n });\n\n this.rowsPerPage = new PJQ.inputs.Selectpicker({\n el: this.$('select.rows-per-page'),\n isIntChoices: true,\n onChange: _.bind(function (value) {\n this.currentView.rowsPerPage = value;\n }, this)\n });\n\n this.selectView(PJQ.constants.invoicing.view.PAYABLE_INVOICES);\n },\n editCompanySettings: function () {\n this.userSettings = new PJQ.models.invoicing.PayableInvoiceUserSettings(null, {\n forCompany: true\n });\n this.userSettings.fetch({\n success: _.bind(function () {\n this.render();\n }, this)\n });\n },\n selectView: function (view) {\n this.currentView = _.find(this.options.userSettings, _.bind(function (setting) {\n return setting.view === view;\n }, this));\n\n if (view.indexOf('-') === -1) {\n this.rowsPerPage.setValue(this.currentView.rowsPerPage);\n this.$('div.rows-per-page').show();\n }\n else\n this.$('div.rows-per-page').hide();\n\n if (this.dataTable) {\n this.dataTable.undelegateEvents();\n $(this.dataTable.el).empty();\n }\n\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('div.select-columns-datatable'),\n data: this.currentView.columns,\n isHideSearch: true,\n pageLength: 6,\n order: [],\n columns: [\n {\"data\": \"title\", \"title\": \"Column\", \"orderable\": false},\n {\n \"data\": \"visible\",\n \"title\": \"Show\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('
');\n }, this),\n \"width\": '10%'\n }\n ],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n\n },\n columnSelected: function (sender) {\n this.dataTable.dataTable.row($(sender.currentTarget).closest('tr')).data().visible = $(sender.currentTarget).prop('checked');\n },\n onSave: function () {\n let fnOnSave = _.bind(function () {\n if (typeof this.options.onSave === 'function')\n this.options.onSave();\n this.removeModal();\n }, this);\n\n this.userSettings.set('defaultStatusFilter', this.options.defaultStatusFilter);\n\n _.each(this.options.userSettings, _.bind(function (settingTemp) {\n _.each(this.userSettings.get('viewSettings'), _.bind(function (setting) {\n if (settingTemp.view === setting.view) {\n setting.rowsPerPage = settingTemp.rowsPerPage;\n\n let columns = _.size(setting.columns) > 0 ? setting.columns.slice() : setting.columnsDefault.slice();\n\n // update columns\n _.each(settingTemp.columns, _.bind(function (column) {\n if (column.visible) {\n if (columns.indexOf(column.columnData) === -1)\n columns.push(column.columnData);\n }\n else {\n if (columns.indexOf(column.columnData) !== -1)\n columns = _.filter(columns, _.bind(function (columnTemp) {\n return columnTemp != column.columnData;\n }, this));\n }\n }, this));\n\n setting.columns = columns;\n }\n }, this));\n }, this));\n\n this.userSettings.save(null, {\n success: _.bind(function () {\n fnOnSave();\n }, this)\n });\n },\n});","PJQ.views.invoicing.ReceivableInvoiceDataTable = PJQ.views.dataTables.DataTable.extend({\r\n defaults: {\r\n language: {\r\n emptyTable: 'No Receivable Invoices have been created yet',\r\n zeroRecords: \"No Receivable Invoices matched the search criteria\"\r\n },\r\n subTemplates: {\r\n header: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'data-table-header-receivable-invoices')\r\n },\r\n toggleRowClass: '.change-order-toggle-row',\r\n onViewInvoice: null\r\n },\r\n events: {\r\n 'click .btn-view-invoice': 'viewInvoiceClicked',\r\n 'click .view-contract': 'viewPrimeContractClicked'\r\n },\r\n beforeDataTableRender: function () {\r\n this.options.pageLength = this.options.settings ? this.options.settings.rowsPerPage : 10;\r\n },\r\n getDefaultFilter: function () {\r\n return _.size(this.options.statusIds) > 0 ? this.options.statusIds : this.options.userSettings.get('defaultStatusFilter');\r\n },\r\n afterHeaderRender: function () {\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.receivable-invoice-status-filter'),\r\n defaultValue: this.getDefaultFilter(),\r\n isIntChoices: true,\r\n isMultiple: true,\r\n noneSelectedText: 'No Filters',\r\n onChange: _.bind(function (value) {\r\n this.setFilter(PJQ.constants.invoicing.filterType.STATUS_FILTER, value);\r\n }, this)\r\n });\r\n this.setFilter(PJQ.constants.invoicing.filterType.STATUS_FILTER, this.getDefaultFilter());\r\n\r\n let currentBillingPeriod = _.find(this.options.billingPeriodSettings.billingPeriods.models, function (period) {\r\n return period.get('isCurrent');\r\n }),\r\n bpId = currentBillingPeriod && !this.options.showAllBillingPeriods ? currentBillingPeriod.id : null;\r\n this.setFilter('billingPeriodId', bpId);\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-billing-period'),\r\n defaultValue: bpId,\r\n isMultiple: false,\r\n isIntChoices: true,\r\n onChange: _.bind(function (value) {\r\n this.setFilter('billingPeriodId', value);\r\n }, this)\r\n });\r\n },\r\n getFilterData: function () {\r\n let statusFilter = this.getFilter(PJQ.constants.invoicing.filterType.STATUS_FILTER),\r\n billingPeriodFilter = this.getFilter('billingPeriodId'),\r\n data = this.options.data;\r\n if (_.size(statusFilter) === 0 && billingPeriodFilter == null) {\r\n return data;\r\n }\r\n\r\n if (billingPeriodFilter != null) {\r\n let fnBPFilter = _.bind(function (data) {\r\n let billingPeriod = this.options.billingPeriodSettings.billingPeriods.get(billingPeriodFilter),\r\n startA = billingPeriod.get('startDate'),\r\n endA = billingPeriod.get('endDate');\r\n return _.filter(data, function (row) {\r\n let startB = row.get('startDate'),\r\n endB = row.get('endDate');\r\n return billingPeriodFilter === row.get('billingPeriodId') || PJQ.helpers.dateHelpers.checkDateRangesOverlap(startA, endA, startB, endB);\r\n });\r\n }, this);\r\n return fnBPFilter(_.filter(data, function (row) {\r\n return _.size(statusFilter) === 0 || _.contains(statusFilter, row.get('statusId'));\r\n }));\r\n } else {\r\n return _.filter(data, function (row) {\r\n return _.contains(statusFilter, row.get('statusId'));\r\n });\r\n }\r\n },\r\n getColumns: function (includeAllColumns = false) {\r\n this.options.canViewPrimeContracts = PJQ.app.session.project.hasPermission('primeContracts.canView');\r\n\r\n let columns = [],\r\n includeColumns = ['number', 'contract', 'billingDate', 'startDate', 'endDate', 'status', 'amount', 'taxAmount', 'grandTotal', 'paymentAmount', 'paid'];\r\n\r\n if (this.options.customFields) {\r\n _.each(this.options.customFields.models, _.bind(function (customField) {\r\n includeColumns.push('fieldValue' + customField.get('fieldNumber'));\r\n }, this));\r\n }\r\n\r\n if (!includeAllColumns) {\r\n if (this.options.settings && _.size(this.options.settings.columns) > 0)\r\n includeColumns = this.options.settings.columns;\r\n else\r\n includeColumns = this.options.settings && this.options.settings.columnsDefault ? this.options.settings.columnsDefault : includeColumns;\r\n\r\n columns.push({\r\n \"columnData\": \"\",\r\n \"data\": null,\r\n \"title\": \"\",\r\n \"width\": \"20px\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"defaultContent\": '',\r\n \"render\": (data, type, row) => {\r\n if(!this.options.isAdmin){\r\n return \"\";\r\n }\r\n\r\n return PJQ.helpers.erp.getERPIcon(row.erpSyncStatus());\r\n }\r\n });\r\n }\r\n\r\n _.each(includeColumns, _.bind(function (columnName) {\r\n switch (columnName) {\r\n case 'status':\r\n columns.push({\r\n \"columnData\": \"status\",\r\n \"data\": \"attributes.statusId\",\r\n \"title\": \"Status\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.constants.invoicing.receivableInvoiceStatusNames[row.get('statusId')]\r\n }, this)\r\n });\r\n break;\r\n case 'number':\r\n columns.push({\r\n \"columnData\": \"number\",\r\n \"data\": \"attributes.number\",\r\n \"title\": \"Number\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return '' + row.get('number') + '';\r\n }, this)\r\n });\r\n break;\r\n case 'contract':\r\n columns.push({\r\n \"columnData\": \"contract\",\r\n \"title\": \"Contract\",\r\n \"data\": \"attributes.primeContractNumber\",\r\n \"orderable\": true,\r\n \"render\": _.bind(function (data, type, row) {\r\n if (this.options.canViewPrimeContracts) {\r\n return '' + row.get('primeContractNumber') + '';\r\n }\r\n return data;\r\n }, this)\r\n },);\r\n break;\r\n case 'notes':\r\n columns.push({\r\n \"columnData\": \"notes\",\r\n \"data\": \"attributes.notes\",\r\n \"title\": \"Notes\"\r\n });\r\n break;\r\n case 'billingDate':\r\n columns.push({\r\n \"columnData\": \"billingDate\",\r\n \"data\": \"attributes.billingDate\",\r\n \"title\": 'Due Date',\r\n \"width\": '90px',\r\n \"render\": _.bind(function (data, type, row) {\r\n if (_.size(data) === 0) {\r\n return '';\r\n }\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }, this)\r\n });\r\n break;\r\n case 'startDate':\r\n columns.push({\r\n \"columnData\": \"startDate\",\r\n \"data\": \"attributes.startDate\",\r\n \"title\": 'Start Date',\r\n \"width\": '90px',\r\n \"render\": _.bind(function (data, type, row) {\r\n if (_.size(data) === 0) {\r\n return '';\r\n }\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }, this)\r\n });\r\n break;\r\n case 'endDate':\r\n columns.push({\r\n \"columnData\": \"endDate\",\r\n \"data\": \"attributes.endDate\",\r\n \"title\": 'End Date',\r\n \"width\": '90px',\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('endDate')), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }, this)\r\n });\r\n break;\r\n case 'createdOn':\r\n columns.push({\r\n \"columnData\": \"createdOn\",\r\n \"data\": \"attributes.createdOn\",\r\n \"title\": 'Created Date',\r\n \"width\": '90px',\r\n \"render\": _.bind(function (data, type, row) {\r\n if (_.size(data) === 0) {\r\n return '';\r\n }\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\r\n }, this)\r\n });\r\n break;\r\n case 'amount':\r\n columns.push({\r\n \"columnData\": \"amount\",\r\n \"data\": \"attributes.amount\",\r\n \"width\": \"10%\",\r\n \"title\": \"Amount\",\r\n \"className\": \"text-align-right\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('amount'));\r\n }, this)\r\n });\r\n break;\r\n case 'taxAmount':\r\n columns.push({\r\n \"columnData\": \"taxAmount\",\r\n \"data\": \"attributes.taxAmount\",\r\n \"title\": \"Tax\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(data);\r\n }, this)\r\n });\r\n break;\r\n case 'grandTotal':\r\n columns.push({\r\n \"columnData\": \"grandTotal\",\r\n \"data\": \"attributes.amount\",\r\n \"title\": \"Grand Total\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(row.getGrandTotal());\r\n }, this)\r\n });\r\n break;\r\n case 'paymentAmount':\r\n columns.push({\r\n \"columnData\": \"paymentAmount\",\r\n \"data\": \"attributes.paymentAmount\",\r\n \"title\": \"Payments\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(data);\r\n }, this)\r\n });\r\n break;\r\n case 'paid':\r\n columns.push({\r\n \"columnData\": \"paid\",\r\n \"data\": \"attributes.paid\",\r\n \"title\": \"Paid\",\r\n \"width\": \"100px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return data ? 'Yes' : 'No';\r\n }, this)\r\n });\r\n break;\r\n default:\r\n if (columnName.startsWith('fieldValue')) {\r\n _.each(this.options.customFields.models, function (customField) {\r\n if (columnName === 'fieldValue' + customField.get('fieldNumber')) {\r\n columns.push({\r\n \"columnData\": 'fieldValue' + customField.get('fieldNumber'),\r\n \"title\": customField.get('name'),\r\n \"render\": function (data, type, row) {\r\n let fieldValue = row.getCustomFieldValue(customField.get('id'));\r\n fieldValue = (fieldValue !== null) ? fieldValue : '';\r\n switch (customField.get('fieldTypeId')) {\r\n case PJQ.constants.commitments.customFieldType.BOOLEAN:\r\n if (fieldValue != null)\r\n fieldValue = fieldValue ? 'Yes' : 'No';\r\n break;\r\n case PJQ.constants.commitments.customFieldType.CHOICE:\r\n let choices = [];\r\n // convert single choice value into array so that the logic below can work for both types.\r\n if (typeof fieldValue === 'number')\r\n fieldValue = [fieldValue];\r\n\r\n _.each(customField.choices.models, _.bind(function (choice) {\r\n if (_.find(fieldValue, function (value) {\r\n return value === choice.get('id');\r\n }))\r\n choices.push(choice.get('name'));\r\n }, this));\r\n\r\n fieldValue = choices.join((', '));\r\n break;\r\n case PJQ.constants.commitments.customFieldType.DATE:\r\n if (fieldValue) {\r\n if (type !== 'sort' && type !== 'type')\r\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }\r\n if (fieldValue === undefined)\r\n fieldValue = '';\r\n\r\n break;\r\n case PJQ.constants.commitments.customFieldType.DATETIME:\r\n if (fieldValue) {\r\n if (type !== 'sort' && type !== 'type')\r\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\r\n }\r\n if (fieldValue === undefined)\r\n fieldValue = '';\r\n\r\n break;\r\n case PJQ.constants.commitments.customFieldType.INTEGER:\r\n if (type !== 'sort' && type !== 'type' && fieldValue) {\r\n fieldValue = parseInt(fieldValue).toLocaleString();\r\n }\r\n break;\r\n case PJQ.constants.commitments.customFieldType.MONEY:\r\n if (type === 'sort' || type === 'type') {\r\n if (fieldValue && fieldValue !== '$')\r\n fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true));\r\n else\r\n fieldValue = 0;\r\n } else {\r\n fieldValue = PJQ.helpers.formatHelpers.formatCurrency(parseInt(PJQ.helpers.formatHelpers.numbersOnly(fieldValue)));\r\n }\r\n break;\r\n case PJQ.constants.commitments.customFieldType.PERCENT:\r\n if (type === 'sort' || type === 'type') {\r\n if (fieldValue && fieldValue !== '$')\r\n fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true)).toFixed(2);\r\n else\r\n fieldValue = 0;\r\n } else {\r\n fieldValue = fieldValue ? fieldValue.toString() + '%' : '';\r\n }\r\n\r\n break;\r\n }\r\n\r\n return fieldValue;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n }, this));\r\n\r\n if (!includeAllColumns) {\r\n columns.push({\r\n \"title\": '',\r\n \"render\": _.bind(function (data, type, row) {\r\n return '
';\r\n }, this),\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": \"90px\",\r\n \"className\": \"text-center\",\r\n \"visible\": true\r\n });\r\n }\r\n\r\n return columns;\r\n },\r\n getRowChildTable: function (childOpts) {\r\n childOpts.costTypes = this.options.costTypes;\r\n childOpts.unitsOfMeasure = this.options.unitsOfMeasure;\r\n childOpts.groups = this.options.groups;\r\n childOpts.parentDataTable = this;\r\n childOpts.dom = 't';\r\n return new PJQ.views.commitments.LineItemDataTable(childOpts);\r\n },\r\n getRowChildData: function (row) {\r\n return new PJQ.collections.commitments.ChangeOrderLineItems(null, {\r\n changeOrderId: row.data().id\r\n });\r\n },\r\n viewInvoiceClicked: function (e){\r\n if(typeof(this.options.onViewInvoice) === 'function'){\r\n let row = this.getRow((e.currentTarget).closest('tr')),\r\n invoice = row.data();\r\n if(invoice != null){\r\n this.options.onViewInvoice(invoice);\r\n }\r\n }\r\n },\r\n viewPrimeContractClicked: function (e) {\r\n let row = this.getRow((e.currentTarget).closest('tr'));\r\n this.viewPrimeContract(row.data().get('primeContractId'));\r\n },\r\n viewPrimeContract: function (primeContractId) {\r\n new PJQ.views.primeContracts.PrimeContractEditModal({\r\n model: new PJQ.models.primeContracts.PrimeContract({\r\n id: primeContractId\r\n })\r\n });\r\n }\r\n});","PJQ.views.invoicing.EditReceivableInvoiceModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'modal-receivable-invoice-edit'),\r\n width: '95%',\r\n maxWidth: 1500,\r\n model: null,\r\n isShowCloseButton: true,\r\n onSave: _.noop(),\r\n onDelete: _.noop()\r\n },\r\n events: {\r\n 'click .btn-view-prime-contract': 'viewPrimeContract',\r\n 'click .btn-view-payment': 'viewPaymentClicked',\r\n 'click .btn-new-payment': 'newPayment',\r\n 'click .btn-add-line-item': 'addLineItem',\r\n 'click .btn-delete': 'delete',\r\n 'click .btn-close': 'close',\r\n 'click .btn-save-email': 'saveEmail',\r\n 'click .btn-save': 'saveInvoice',\r\n 'click .btn-push-erp': 'pushERP',\r\n 'click .erp-sync-payments .btn-pull-erp': 'pullERPPayments',\r\n 'click .btn-undo-push-erp': 'undoPushERP',\r\n 'click .btn-unlink-erp': 'unlinkERP',\r\n 'click .btn-export': 'exportInvoice',\r\n 'click .btn-email': 'email',\r\n 'click .nav-link': 'activeViewChanged',\r\n 'change .cb-paid': 'updatePaid',\r\n 'click .btn-view-history': 'viewHistory'\r\n },\r\n beforeModalCreated: async function () {\r\n this.options.project = PJQ.app.session.project;\r\n this.isFetched = false;\r\n\r\n this.coreFieldSettings = await PJQ.app.session.fetchReceivableInvoiceFieldSettings();\r\n this.settings = await this.options.project.fetchReceivableInvoiceSettings();\r\n this.customFields = await this.options.project.fetchReceivableInvoiceCustomFields();\r\n this.billingPeriodSettings = await this.options.project.fetchBillingPeriodSettings();\r\n this.costCodes = await this.options.project.fetchCostCodes();\r\n this.costTypes = await this.options.project.fetchCostTypes();\r\n this.unitsOfMeasure = await this.options.project.fetchUnitsOfMeasure();\r\n\r\n if (this.model == null) {\r\n let customFieldValues = [];\r\n _.each(this.customFields.models, function (model, index) {\r\n let value = model.get('defaultValue') ? model.get('defaultValue') : '';\r\n if (model.get('fieldType') === 'CHOICE') {\r\n value = parseInt(value);\r\n }\r\n customFieldValues.push({\r\n fieldNumber: model.get('fieldNumber'),\r\n fieldTypeId: model.get('fieldTypeId'),\r\n fieldType: model.get('fieldType'),\r\n isMultiple: model.get('isMultiple'),\r\n value: value,\r\n id: model.get('id')\r\n })\r\n }, this);\r\n\r\n this.model = new PJQ.models.invoicing.ReceivableInvoice({\r\n notes: '',\r\n number: '',\r\n primeContractId: this.options.primeContract.id,\r\n primeContractNumber: this.options.primeContract.get('number'),\r\n projectId: this.options.primeContract.get('projectId'),\r\n companyId: this.options.primeContract.get('companyId'),\r\n client: this.options.primeContract.client,\r\n statusId: PJQ.constants.invoicing.receivableInvoiceStatus.DRAFT,\r\n customFieldValues: customFieldValues\r\n });\r\n\r\n let billingPeriod = _.find(this.billingPeriodSettings.billingPeriods.models, function (billingPeriod) {\r\n return billingPeriod.get('isCurrent');\r\n })\r\n if (billingPeriod != null) {\r\n this.model.set({\r\n billingPeriodId: billingPeriod.id,\r\n startDate: PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('startDate'), false),\r\n endDate: PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('endDate'), false),\r\n billingDate: PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('dueDate'), false)\r\n });\r\n }\r\n }\r\n\r\n if (!this.model.isNew()) {\r\n await this.model.fetch();\r\n }\r\n\r\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\r\n if (this.erpIntegration != null && this.erpIntegration.getSetting('syncProjects')) {\r\n await this.options.project.fetchERPObject();\r\n\r\n if (this.options.primeContract == null) {\r\n this.options.primeContract = new PJQ.models.primeContracts.PrimeContract({\r\n id: this.model.get('primeContractId')\r\n });\r\n await this.options.primeContract.fetch();\r\n }\r\n }\r\n\r\n this.isFetched = true;\r\n this.render();\r\n },\r\n beforeRender: function () {\r\n if (this.model == null) {\r\n return;\r\n }\r\n\r\n this.options.disabledStatuses = null;\r\n this.options.canEdit = PJQ.app.session.project.hasPermission('receivableInvoices.canEdit');\r\n this.options.canEditLineItems = this.options.canEdit;\r\n this.options.canEditBillingDates = PJQ.app.session.project.hasPermission('receivableInvoices.canEdit');\r\n this.options.canViewPrimeContracts = PJQ.app.session.project.hasPermission('primeContracts.canView');\r\n this.options.isAdmin = PJQ.app.session.project.hasPermission('receivableInvoices.isAdmin');\r\n this.options.canAddPayments = this.options.canEdit;\r\n this.options.canDelete = this.options.isAdmin;\r\n this.options.canEditStatus = this.options.isAdmin;\r\n\r\n let status = this.model.get('statusId');\r\n if (this.model.isNew() || status === PJQ.constants.invoicing.receivableInvoiceStatus.DRAFT) {\r\n this.options.canEdit = true;\r\n this.options.canEditStatus = !this.model.isNew();\r\n this.options.canEditBillingDates = true;\r\n this.options.canEditLineItems = true;\r\n this.options.canDelete = !this.model.isNew();\r\n } else if (status === PJQ.constants.invoicing.receivableInvoiceStatus.APPROVED || status === PJQ.constants.invoicing.receivableInvoiceStatus.COMPLETE) {\r\n this.options.canEdit = PJQ.app.session.project.hasPermission('receivableInvoices.canEdit');\r\n this.options.canEditBillingDates = false\r\n this.options.canEditLineItems = false;\r\n this.options.canDelete = false;\r\n } else {\r\n this.options.canEdit = PJQ.app.session.project.hasPermission('receivableInvoices.canEdit');\r\n this.options.canEditBillingDates = PJQ.app.session.project.hasPermission('receivableInvoices.canEdit');\r\n this.options.canEditLineItems = true;\r\n this.options.canDelete = this.options.isAdmin;\r\n }\r\n\r\n if (status !== PJQ.constants.invoicing.receivableInvoiceStatus.APPROVED && status !== PJQ.constants.invoicing.receivableInvoiceStatus.COMPLETE) {\r\n this.options.canAddPayments = false;\r\n }\r\n\r\n if ((status === PJQ.constants.invoicing.receivableInvoiceStatus.APPROVED || status === PJQ.constants.invoicing.receivableInvoiceStatus.COMPLETE)\r\n && (this.model.payments.models.length > 0 || this.model.get('isLatest') === false)) {\r\n this.options.canEditStatus = false;\r\n this.options.canEditLineItems = false;\r\n }\r\n\r\n if (this.model.isNew()) {\r\n this.options.canEditStatus = false;\r\n }\r\n\r\n if (this.erpIntegration != null) {\r\n let syncStatus = this.model.erpSyncStatus();\r\n if (syncStatus === PJQ.constants.integrations.erp.syncStatuses.REVIEWING\r\n || syncStatus === PJQ.constants.integrations.erp.syncStatuses.APPROVED\r\n || syncStatus === PJQ.constants.integrations.erp.syncStatuses.SYNCED\r\n ) {\r\n this.options.canEdit = false;\r\n this.options.canEditLineItems = false;\r\n this.options.canDelete = false;\r\n this.options.isSubmitting = false;\r\n }\r\n }\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model,\r\n erpIntegration: this.erpIntegration,\r\n customFields: this.customFields,\r\n billingPeriods: this.billingPeriodSettings != null ? this.billingPeriodSettings.billingPeriods : null,\r\n canEdit: this.options.canEdit,\r\n canDelete: this.options.canDelete,\r\n isAdmin: this.options.isAdmin,\r\n canViewPrimeContracts: this.options.canViewPrimeContracts,\r\n canAddPayments: this.options.canAddPayments,\r\n isFetched: this.isFetched,\r\n canEditBillingDates: this.options.canEditBillingDates,\r\n settings: this.settings,\r\n invoiceSettings: this.invoiceSettings,\r\n activeView: this.options.activeView,\r\n views: this.views,\r\n checkFieldVisible: _.bind(this.checkFieldVisible, this),\r\n checkFieldRequired: _.bind(this.checkFieldRequired, this)\r\n }\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched)\r\n return;\r\n\r\n this.activateView(this.options.activeView);\r\n\r\n this.stopListening(this.model);\r\n this.listenTo(this.model, 'change:statusId', () => {\r\n this.renderERP();\r\n });\r\n this.stopListening(this.model.lineItems);\r\n this.listenTo(this.model.lineItems, 'update', () => {\r\n this.renderERP();\r\n });\r\n this.renderERP();\r\n\r\n this.renderGeneral();\r\n\r\n if (!this.model.isNew()) {\r\n this.renderLineItems();\r\n this.renderPayments();\r\n }\r\n\r\n this.updateCounts();\r\n },\r\n updateCounts: function () {\r\n this.$('.count-line-items').text(_.size(this.model.lineItems.models));\r\n this.$('.count-payments').text(_.size(this.model.payments.models));\r\n },\r\n views: {\r\n GENERAL: 'RI_General',\r\n LINEITEMS: 'RI_LineItems',\r\n PAYMENTS: 'RI_Payments',\r\n SUMMARY: 'RI_Summary'\r\n },\r\n activeViewChanged: function (e) {\r\n let view = e.target.hash ? e.target.hash.replace('#', '') : null;\r\n this.activateView(view);\r\n },\r\n activateView: function (view) {\r\n if (view == null) {\r\n view = this.views.GENERAL;\r\n }\r\n\r\n this.$('.nav-link[href=\"#' + view + '\"]').tab('show');\r\n this.options.activeView = view;\r\n\r\n if (view === this.views.LINEITEMS) {\r\n // this.lineItemsView.adjustColumns();\r\n } else if (view === this.views.SUMMARY) {\r\n this.renderSummary();\r\n }\r\n },\r\n renderERP: function () {\r\n let $erp = this.$('.erp-sync');\r\n if (!this.options.isAdmin || this.erpIntegration == null || !this.options.project.isERPSynced() || this.model.isNew()) {\r\n $erp.remove();\r\n return;\r\n }\r\n\r\n this.$('.erp-badge').html(PJQ.helpers.erp.getERPBadge(this.model.erpSyncStatus(), this.model.get('externalObject')));\r\n\r\n let canPush = true,\r\n disablePushReason = \"\";\r\n\r\n if (_.size(this.model.lineItems) === 0\r\n || (this.model.get('statusId') !== PJQ.constants.invoicing.receivableInvoiceStatus.APPROVED && this.model.get('statusId') !== PJQ.constants.invoicing.receivableInvoiceStatus.COMPLETE)) {\r\n canPush = false;\r\n disablePushReason = \"Invoice must be approved or complete and have line items\";\r\n }\r\n\r\n if (!this.options.primeContract.isERPSynced() && !this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_RECEIVABLE_INVOICES_WO_SYNCED_CONTRACT)) {\r\n canPush = false;\r\n disablePushReason = \"The contract for this invoice is not synced\";\r\n }\r\n\r\n PJQ.helpers.erp.renderERPButtons($erp, {\r\n pushSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_RECEIVABLE_INVOICES),\r\n canPush: canPush,\r\n disablePushReason: disablePushReason,\r\n status: this.model.erpSyncStatus(),\r\n unlinkSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.UNLINK_RECEIVABLE_INVOICES),\r\n canPushChanges: false\r\n });\r\n\r\n let $erpPayments = this.$('.erp-sync-payments');\r\n PJQ.helpers.erp.renderERPButtons($erpPayments, {\r\n pushSupported: false,\r\n pullSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_RECEIVABLE_PAYMENTS)\r\n });\r\n },\r\n pushERP: function (callback) {\r\n if (!this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_RECEIVABLE_INVOICES)) {\r\n return;\r\n }\r\n\r\n this.save((success) => {\r\n if (success) {\r\n this.erpIntegration.pushReceivableInvoice(this.model, _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice pushed to ERP'\r\n });\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n } else {\r\n this.render();\r\n }\r\n }, this));\r\n }\r\n });\r\n },\r\n undoPushERP: function () {\r\n if (this.model.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.REVIEWING) {\r\n this.erpIntegration.undoPush(this.model, _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice removed from ERP approval'\r\n });\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n\r\n this.render();\r\n }, this));\r\n }\r\n },\r\n unlinkERP: function () {\r\n new PJQ.views.modals.YesNo({\r\n header: \"Unlink from ERP\",\r\n body: \"Are you sure you want to unlink this Receivable Invoice from your ERP system?\",\r\n onYes: () => {\r\n let loader = new PJQ.Loader(this.$('.modal-content'));\r\n this.erpIntegration.unlinkReceivableInvoice(this.model, (success) => {\r\n if (success) {\r\n loader.remove();\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Receivable Invoice unlinked from ERP'\r\n });\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n\r\n this.render();\r\n }\r\n });\r\n }\r\n });\r\n },\r\n renderSummary: function () {\r\n this.summaryView = new PJQ.views.invoicing.InvoiceSummary({\r\n el: this.$('.invoice-summary'),\r\n model: this.model,\r\n export: () => {\r\n this.save(() => {\r\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoices',\r\n value: this.model.get('id')\r\n },\r\n {\r\n endpoint: 'summary'\r\n },\r\n {\r\n endpoint: 'export',\r\n }\r\n ]), {isAPIv2: true});\r\n });\r\n }\r\n })\r\n },\r\n renderGeneral: function () {\r\n new PJQ.Binder(this.$el, this.model, {\r\n canEdit: !this.options.canEdit ? false : null,\r\n useDecimalPercentFields: true,\r\n watchElements: [\r\n 'input',\r\n 'textarea'\r\n ]\r\n });\r\n\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.invoice-client'),\r\n selectedContact: this.model.client,\r\n canViewContacts: this.options.project.hasPermission('projectContacts.canView'),\r\n canEdit: false,\r\n displayContactsBlock: true,\r\n });\r\n\r\n this.statusPicker = new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-status'),\r\n isIntChoices: true,\r\n defaultValue: this.model.get('statusId'),\r\n canEdit: this.options.canEditStatus,\r\n choices: _.map(PJQ.constants.invoicing.receivableInvoiceStatus, (st) => {\r\n return {\r\n id: st,\r\n name: PJQ.constants.invoicing.receivableInvoiceStatusNames[st],\r\n disabled: this.options.disabledStatuses != null && this.options.disabledStatuses.indexOf(st) > -1\r\n }\r\n }),\r\n onChange: (newStatus) => {\r\n let oldStatus = this.model.get('statusId');\r\n if (newStatus === oldStatus) {\r\n return;\r\n }\r\n\r\n this.model.set('statusId', newStatus);\r\n if (!this.model.isNew()) {\r\n this.save((success) => {\r\n if (success) {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice saved successfully'\r\n });\r\n } else {\r\n this.model.set('statusId', oldStatus);\r\n this.statusPicker.setValue(oldStatus);\r\n }\r\n });\r\n } else {\r\n this.render();\r\n }\r\n }\r\n });\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-billing-period'),\r\n defaultValue: this.model.get('billingPeriodId') != null ? this.model.get('billingPeriodId') : _.find(this.billingPeriodSettings.billingPeriods.models, function (billingPeriod) {\r\n return billingPeriod.get('isCurrent');\r\n }),\r\n isMultiple: false,\r\n isIntChoices: true,\r\n canEdit: this.options.canEdit,\r\n onChange: _.bind(function (value) {\r\n let billingPeriod = this.billingPeriodSettings != null && value != null ? this.billingPeriodSettings.billingPeriods.get(value) : null;\r\n this.model.set('billingPeriodId', value);\r\n this.$('.period-start').attr('disabled', billingPeriod != null);\r\n this.$('.period-end').attr('disabled', billingPeriod != null);\r\n if (billingPeriod != null) {\r\n let startDate = PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('startDate'), false),\r\n endDate = PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('endDate'), false),\r\n dueDate = PJQ.helpers.dateHelpers.parseDateString(billingPeriod.get('dueDate'), false);\r\n this.periodStartPicker.setValue(startDate);\r\n this.model.set('startDate', startDate);\r\n\r\n this.periodEndPicker.setValue(endDate);\r\n this.model.set('endDate', endDate);\r\n\r\n this.dueDatePicker.setValue(dueDate);\r\n this.model.set('billingDate', dueDate);\r\n }\r\n }, this)\r\n });\r\n\r\n this.periodStartPicker = new PJQ.inputs.Datepicker({\r\n el: this.$('.period-start'),\r\n canEdit: this.options.canEdit && !(this.model.get('billingPeriodId') > 0),\r\n datepickerOptions: {\r\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\r\n defaultDate: this.model.get('startDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('startDate'), false) : null\r\n },\r\n onChange: _.bind(function (newDate) {\r\n this.model.set('startDate', newDate);\r\n }, this)\r\n });\r\n\r\n this.periodEndPicker = new PJQ.inputs.Datepicker({\r\n el: this.$('.period-end'),\r\n canEdit: this.options.canEdit && !(this.model.get('billingPeriodId') > 0),\r\n datepickerOptions: {\r\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\r\n defaultDate: this.model.get('endDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('endDate'), false) : null\r\n },\r\n onChange: _.bind(function (newDate) {\r\n this.model.set('endDate', newDate);\r\n }, this)\r\n });\r\n\r\n this.dueDatePicker = new PJQ.inputs.Datepicker({\r\n el: this.$('.due-date'),\r\n canEdit: this.options.canEdit,\r\n datepickerOptions: {\r\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\r\n defaultDate: this.model.get('billingDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('billingDate'), false) : null\r\n },\r\n onChange: _.bind(function (newDate) {\r\n this.model.set('billingDate', newDate);\r\n }, this)\r\n });\r\n\r\n if (this.checkFieldVisible('attachments')) {\r\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\r\n el: this.$('.invoice-file-uploader'),\r\n collection: this.model.attachments,\r\n canUpload: this.options.canEdit,\r\n useApiV2: true,\r\n canView: false,\r\n canDelete: this.options.canEdit && this.options.isAdmin,\r\n previewImageDimension: 150,\r\n onSuccess: _.bind(function (file) {\r\n this.model.isDirty = true;\r\n }, this),\r\n onDelete: _.bind(function (attachment, callback) {\r\n if (attachment.id > 0) {\r\n attachment.set('delete', true);\r\n } else {\r\n attachment.destroy();\r\n }\r\n\r\n this.model.isDirty = true;\r\n callback();\r\n }, this)\r\n });\r\n }\r\n\r\n if (this.customFields && _.size(this.customFields.models) > 0) {\r\n this.customFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\r\n el: this.$('.receivable-invoice-custom-fields'),\r\n collection: this.customFields,\r\n fieldValues: this.model.get('customFieldValues'),\r\n isEdit: this.options.canEdit,\r\n isAdmin: this.options.isAdmin,\r\n });\r\n }\r\n },\r\n renderLineItems() {\r\n this.lineItemsView = new PJQ.views.budget.LineItemsView({\r\n el: this.$('.invoice-line-items'),\r\n model: this.model,\r\n collection: this.model.lineItems,\r\n lineItemModel: PJQ.models.invoicing.ReceivableInvoiceLineItem,\r\n canEdit: this.options.canEdit && this.options.canEditLineItems,\r\n canDelete: this.options.canEdit && this.options.canEditLineItems,\r\n canImportBudget: false,\r\n enableStoredMaterials: this.settings.get('enableStoredMaterials'),\r\n enableRetainage: this.settings.get('enableRetainage'),\r\n enableSelection: this.options.canEdit && this.options.canEditLineItems,\r\n enableTax: true,\r\n showSubTotal: true,\r\n showGrandTotal: true,\r\n onLineItemChange: _.bind(function () {\r\n this.model.isDirty = true;\r\n }, this),\r\n onLineItemAdd: _.bind(function () {\r\n this.model.isDirty = true;\r\n this.updateCounts();\r\n }, this),\r\n onLineItemDelete: _.bind(function () {\r\n this.model.isDirty = true;\r\n this.updateCounts();\r\n }, this),\r\n onPrimeContractView: _.bind(function () {\r\n this.removeModal();\r\n }, this),\r\n onChangeOrderView: _.bind(function () {\r\n this.removeModal();\r\n }, this),\r\n });\r\n },\r\n pullERPPayments: function () {\r\n if (this.model.isERPSynced() && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_RECEIVABLE_PAYMENTS)) {\r\n this.erpIntegration.pullReceivableInvoicePayments(this.model, (res) => {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Payments successfully pulled from ERP'\r\n });\r\n\r\n this.model.payments.reset(res);\r\n this.renderPayments();\r\n });\r\n }\r\n },\r\n renderPayments: function () {\r\n if (this.model.isNew()) {\r\n return;\r\n }\r\n\r\n this.paymentsDataTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$('.invoice-payments'),\r\n data: this.model.payments.models,\r\n isHideSearch: true,\r\n language: {\r\n emptyTable: 'No Payments have been created yet',\r\n zeroRecords: \"No Payments matched the search criteria\"\r\n },\r\n paging: false,\r\n order: [],\r\n columns: [{\r\n \"columnData\": \"\",\r\n \"data\": null,\r\n \"title\": \"\",\r\n \"width\": \"20px\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"defaultContent\": '',\r\n \"render\": function (data, type, row) {\r\n if (row.isERPSynced()) {\r\n return PJQ.helpers.erp.getERPIcon(row.erpSyncStatus());\r\n }\r\n return '';\r\n }\r\n }, {\r\n \"title\": \"#\",\r\n \"data\": \"attributes.number\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return '' + data + ''\r\n }, this)\r\n },\r\n {\r\n \"title\": 'Received',\r\n \"data\": \"\",\r\n \"render\": _.bind(function (data, type, row) {\r\n let dateReceived = row.get('dateReceived');\r\n if (_.size(dateReceived) === 0) {\r\n return '';\r\n }\r\n\r\n return PJQ.helpers.dateHelpers.getDateString(new Date(dateReceived), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }, this)\r\n },\r\n {\r\n \"data\": \"attributes.amount\",\r\n \"title\": \"Amount\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('amount'));\r\n }, this)\r\n },\r\n {\r\n \"data\": \"\",\r\n \"title\": \"\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": \"80px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n let html = '
'\r\n if (this.options.canViewInvoices) {\r\n html += ''\r\n }\r\n return html + '
';\r\n }, this)\r\n }],\r\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>',\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'View',\r\n onClick: _.bind(function (row) {\r\n this.viewPayment(row.data());\r\n }, this),\r\n isShown: _.bind(function (row) {\r\n return this.options.canViewInvoices;\r\n }, this)\r\n }\r\n ]\r\n },\r\n onRowDoubleClick: _.bind(function (row) {\r\n this.viewPayment(row.data());\r\n }, this)\r\n });\r\n },\r\n newPayment: function () {\r\n this.viewPayment();\r\n },\r\n viewPaymentClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n row = this.paymentsDataTable.getRow(target.closest('tr'));\r\n this.viewPayment(row.data());\r\n },\r\n viewPayment: function (payment) {\r\n this.removeModal();\r\n new PJQ.views.invoicing.InvoicePaymentModal({\r\n model: payment,\r\n invoice: this.model,\r\n onSave: _.bind(function (payment, isNew) {\r\n if (isNew) {\r\n this.model.payments.add(payment);\r\n this.paymentsDataTable.addRow(payment);\r\n }\r\n this.updateCounts();\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n }, this),\r\n onDelete: _.bind(function () {\r\n this.updateCounts();\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n }, this)\r\n });\r\n },\r\n viewPrimeContract: function () {\r\n this.removeModal();\r\n new PJQ.views.primeContracts.PrimeContractEditModal({\r\n model: new PJQ.models.primeContracts.PrimeContract({\r\n id: this.model.get('primeContractId')\r\n }),\r\n onSave: () => {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n },\r\n onDelete: () => {\r\n if (typeof this.options.onDelete === 'function') {\r\n this.options.onDelete(this.model);\r\n }\r\n }\r\n });\r\n },\r\n checkFieldVisible: function (fieldName) {\r\n if (this.coreFieldSettings) {\r\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\r\n if (fieldSettings != null) {\r\n return fieldSettings.get('isVisible');\r\n }\r\n }\r\n return true;\r\n },\r\n checkFieldRequired: function (fieldName) {\r\n if (this.coreFieldSettings) {\r\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\r\n if (fieldSettings != null) {\r\n return fieldSettings.get('isRequired');\r\n }\r\n }\r\n return false;\r\n },\r\n viewHistory: async function () {\r\n let historyItems = [{\r\n date: this.model.get('createdOn'),\r\n person: this.model.get('createdBy'),\r\n action: 'Invoice Created'\r\n }];\r\n\r\n let history = new PJQ.collections.invoicing.ReceivableInvoiceHistory({}, {\r\n invoiceId: this.model.id\r\n });\r\n new PJQ.views.history.HistoryTimelineModal({\r\n collection: history,\r\n subTitle: 'Receivable Invoice #' + this.model.get('number'),\r\n items: historyItems\r\n });\r\n },\r\n exportInvoice: function () {\r\n let callback = () => {\r\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoices',\r\n value: this.model.get('id')\r\n },\r\n {\r\n endpoint: 'export',\r\n }\r\n ]), {isAPIv2: true});\r\n };\r\n if (this.options.canEdit && this.model.hasChanged()) {\r\n this.save(callback);\r\n } else {\r\n callback();\r\n }\r\n },\r\n delete: function () {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Delete Invoice\",\r\n body: \"Are you sure you want to delete this Invoice?\",\r\n onDelete: _.bind(function () {\r\n if (typeof this.options.onDelete === 'function') {\r\n this.options.onDelete(this.model);\r\n }\r\n this.model.destroy({\r\n success: _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice successfully deleted'\r\n });\r\n this.removeModal();\r\n }, this)\r\n });\r\n }, this)\r\n });\r\n },\r\n validate: function () {\r\n let isValid = true;\r\n this.periodStartPicker.hideError();\r\n this.periodEndPicker.hideError();\r\n this.dueDatePicker.hideError();\r\n\r\n if (this.model.get('startDate') == null) {\r\n isValid = false;\r\n this.periodStartPicker.showError();\r\n }\r\n if (this.model.get('endDate') == null) {\r\n isValid = false;\r\n this.periodEndPicker.showError();\r\n }\r\n if (this.model.get('billingDate') == null) {\r\n isValid = false;\r\n this.dueDatePicker.showError();\r\n }\r\n if (this.customFieldsForm != null && !this.customFieldsForm.validate()) {\r\n isValid = false;\r\n }\r\n\r\n if (this.checkFieldRequired('number')) {\r\n let $number = this.$('.invoice-number');\r\n PJQ.helpers.inputHelpers.setInputError($number, true);\r\n if (_.size(this.model.get('number')) === 0) {\r\n PJQ.helpers.inputHelpers.setInputError($number, false);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (this.checkFieldRequired('notes')) {\r\n let $notes = this.$('.invoice-notes');\r\n PJQ.helpers.inputHelpers.setInputError($notes, true);\r\n if (_.size(this.model.get('notes')) === 0) {\r\n PJQ.helpers.inputHelpers.setInputError($notes, false);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (this.checkFieldRequired('attachments')) {\r\n this.fileUploader.clearError();\r\n let hasValidAttachment = _.find(this.model.attachments.models, function (model) {\r\n return !model.get('delete')\r\n }, this) != null;\r\n\r\n if (!hasValidAttachment) {\r\n this.fileUploader.showError('Missing attachment', 100000);\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (!isValid && this.options.activeView !== 'general') {\r\n this.options.activeView = 'general';\r\n this.$('.nav-tabs a[href=\"#I_General\"]').tab('show');\r\n }\r\n\r\n return isValid;\r\n },\r\n saveEmail: function () {\r\n let isNew = this.model.isNew();\r\n this.save((success) => {\r\n if (success) {\r\n let notifyText = isNew ? 'Invoice created successfully' : 'Invoice saved successfully';\r\n PJQ.notifications.notify.successNotify({\r\n message: notifyText\r\n });\r\n\r\n this.email();\r\n }\r\n });\r\n },\r\n saveInvoice: function () {\r\n let isNew = this.model.isNew();\r\n this.save((success) => {\r\n if (success) {\r\n let notifyText = isNew ? 'Invoice created successfully' : 'Invoice saved successfully';\r\n PJQ.notifications.notify.successNotify({\r\n message: notifyText\r\n });\r\n\r\n if (!isNew) {\r\n this.removeModal()\r\n }\r\n }\r\n });\r\n },\r\n save: function (callback) {\r\n if (!this.validate()) {\r\n this.$('.modal').prevObject.scrollTop(0);\r\n if (typeof callback === 'function') {\r\n callback(false);\r\n }\r\n return;\r\n }\r\n\r\n this.model.save({\r\n customFields: this.customFieldsForm != null ? this.customFieldsForm.getChanged() : null,\r\n lineItems: this.model.lineItems.toJSON()\r\n }, {\r\n success: () => {\r\n this.render();\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n\r\n PJQ.app.session.project.trigger('receivableInvoiceChanged', this.model);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n },\r\n error: () => {\r\n if (typeof callback === 'function') {\r\n callback(false);\r\n }\r\n PJQ.notifications.notify.errorNotify({\r\n message: \"Encountered an error while saving this Invoice. Please contact customer service.\"\r\n });\r\n }\r\n });\r\n },\r\n email: function () {\r\n let projectName = this.options.project?.get('projectName')?.trim();\r\n let subject = `An invoice has been shared with you ${projectName && _.size(projectName) > 0 ? `for ${projectName}` : ''}`;\r\n new PJQ.views.email.ComposeEmailModal({\r\n header: \"Email Invoice\",\r\n project: PJQ.app.session.project,\r\n subject: subject,\r\n onSave: _.bind(function (data) {\r\n this.model.share(data, _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice email sent'\r\n });\r\n }, this));\r\n }, this)\r\n });\r\n },\r\n updatePaid: function (e) {\r\n this.model.set('paid', $(e.currentTarget).prop('checked'));\r\n if (!this.options.canEdit && this.options.isAdmin) {\r\n this.save(() => {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Invoice saved successfully'\r\n });\r\n });\r\n }\r\n },\r\n close: function () {\r\n if (this.model.hasChanged() && this.options.canEdit) {\r\n new PJQ.views.modals.SaveDontSave({\r\n header: \"Unsaved Changes\",\r\n body: \"Do you want to save changes?\",\r\n onSave: _.bind(function () {\r\n this.saveInvoice();\r\n this.removeModal();\r\n }, this),\r\n onDontSave: _.bind(function () {\r\n this.removeModal();\r\n }, this)\r\n });\r\n } else {\r\n this.removeModal();\r\n }\r\n }\r\n});","PJQ.views.invoicing.ReceivableInvoicesList = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'receivable-invoices-list'),\n invoiceId: null\n },\n events: {\n 'click .btn-settings': 'editSettings',\n 'click .btn-create-invoice': 'createInvoice',\n 'click .btn-delete-invoice': 'deleteInvoiceClicked',\n 'click .btn-export': 'exportList'\n },\n beforeFirstRender: async function () {\n this.isFetched = false;\n this.options.canViewCommitments = PJQ.app.session.project.hasPermission('commitments.canView');\n this.options.isAdmin = PJQ.app.session.project.hasPermission('receivableInvoices.isAdmin');\n\n if (this.collection == null) {\n this.collection = new PJQ.collections.invoicing.ReceivableInvoices(null, {\n project: PJQ.app.session.project,\n costCodeId: this.options.costCodeId ? this.options.costCodeId : null,\n costTypeId: this.options.costTypeId ? this.options.costTypeId : null\n });\n }\n\n if (!this.collection.isFetched) {\n await this.collection.fetch();\n }\n\n this.customFields = await this.options.project.fetchReceivableInvoiceCustomFields();\n this.userSettings = await PJQ.app.session.fetchReceivableInvoiceUserSettings();\n this.billingPeriodSettings = await this.options.project.fetchBillingPeriodSettings();\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\n\n this.isFetched = true;\n this.render();\n },\n renderData: function () {\n return {\n collection: this.collection,\n isFetched: this.isFetched\n }\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n this.renderView();\n\n PJQ.app.session.project.off('receivableInvoiceChanged');\n PJQ.app.session.project.on('receivableInvoiceChanged', function (invoice) {\n this.collection.add(invoice);\n this.render();\n }, this);\n\n if (this.options.invoiceId > 0) {\n let initInvoice = this.collection.get(this.options.invoiceId);\n if (initInvoice != null) {\n this.viewInvoice(initInvoice);\n this.options.invoiceId = null;\n }\n } else if (this.options.paymentId > 0) {\n let initPayment = new PJQ.models.invoicing.ReceivableInvoicePayment({\n id: this.options.paymentId\n });\n\n new PJQ.views.invoicing.InvoicePaymentModal({\n model: initPayment\n });\n }\n },\n renderView: function () {\n if (this.dataTable) {\n this.dataTable.remove();\n this.dataTable = null;\n }\n\n this.dataTable = this.getDataTableInstance();\n },\n getDataTableInstance: function () {\n return new PJQ.views.invoicing.ReceivableInvoiceDataTable({\n el: this.$('.invoices-table'),\n rowId: \"cid\",\n data: this.collection.models,\n onPageSizeChange: function (value) {\n // PJQ.helpers.cookieHelpers.setCookie(PJQ.constants.cookies.RFI_PAGE_LENGTH, value);\n },\n isAdmin: this.options.isAdmin,\n statusIds: this.options.statusIds,\n showAllBillingPeriods: this.options.showAllBillingPeriods,\n headerData: _.bind(function () {\n return {\n billingPeriods: this.billingPeriodSettings ? this.billingPeriodSettings.billingPeriods : null,\n project: this.options.project,\n canAdd: this.options.canAdd,\n isAdmin: this.options.isAdmin\n };\n }, this),\n groups: this.groups,\n costTypes: this.costTypes,\n unitsOfMeasure: this.unitsOfMeasure,\n userSettings: this.userSettings,\n billingPeriodSettings: this.billingPeriodSettings,\n canViewCommitments: this.options.canViewCommitments,\n settings: this.userSettings.getSettings(PJQ.constants.invoicing.view.RECEIVABLE_INVOICES),\n order: [[1, 'asc']],\n colReorder: {\n fixedColumnsRight: 1,\n realtime: false\n },\n columnOrderChanged: () => {\n this.userSettings.save();\n },\n onViewInvoice: (invoice) => {\n this.viewInvoice(invoice);\n },\n onRowDoubleClick: (row) => {\n this.viewInvoice(row.data());\n },\n contextMenuOptions: {\n actions: [\n {\n name: 'View',\n onClick: _.bind(function (row) {\n this.viewInvoice(row.data());\n }, this)\n }\n ]\n }\n });\n },\n createInvoice: function () {\n this.viewInvoice();\n },\n viewInvoice: function (invoice) {\n let isNew = invoice == null\n this.invoiceEditor = new PJQ.views.invoicing.EditReceivableInvoiceModal({\n model: invoice,\n primeContract: this.model,\n onSave: (invoice) => {\n if (isNew) {\n this.collection.add(invoice);\n }\n this.renderView();\n },\n onDelete: (invoice) => {\n this.collection.remove(invoice);\n this.renderView();\n }\n });\n },\n deleteInvoiceClicked: function (e) {\n let target = $(e.currentTarget),\n row = this.dataTable.getRow(target.closest('tr'));\n this.deleteInvoice(row);\n },\n deleteInvoice: function (row) {\n if (row != null) {\n let invoice = row.data();\n if (invoice != null) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Invoice\",\n body: \"Are you sure you want to delete this Invoice?\",\n onDelete: _.bind(function () {\n invoice.destroy({\n success: _.bind(function () {\n this.dataTable.removeRow(row);\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(invoice);\n }\n }, this)\n });\n }, this)\n });\n }\n }\n },\n editSettings: function () {\n new PJQ.views.invoicing.ReceivableInvoiceSettingsModal({\n invoicesView: this,\n onSave: _.bind(function () {\n this.renderView();\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n }, this)\n });\n },\n exportList: function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'receivableinvoices'\n },\n {\n endpoint: 'export'\n }\n ], [\n {\n parameter: 'timeZoneOffset',\n value: new Date().getTimezoneOffset()\n }\n ]), {isAPIv2: true});\n }\n});\n\nPJQ.views.invoicing.ModalViewReceivableInvoices = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'modal-view-receivable-invoices'),\n maxWidth: 1000,\n isShowCloseButton: true,\n onSave: _.noop,\n isAdmin: true\n },\n events: {},\n beforeModalCreated: function () {\n\n },\n renderData: function () {\n return {\n model: this.model\n }\n },\n afterRender: function () {\n if (this.model != null) {\n new PJQ.views.invoicing.ReceivableInvoicesList({\n el: this.$('.modal-body'),\n model: this.model,\n costCodeId: this.model.get('costCodeId'),\n costTypeId: this.model.get('costTypeId'),\n statusIds: this.options.statusIds,\n showAllBillingPeriods: this.options.showAllBillingPeriods,\n project: this.options.project\n })\n }\n },\n});","//Models\r\nPJQ.models.invoicing.ReceivableInvoice = PJQ.models.invoicing.Invoice.extend({\r\n endpoint: function () {\r\n let arr = [];\r\n if (this.isNew()) {\r\n arr.push({\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n });\r\n }\r\n return PJQ.helpers.urlHelpers.generateEndpoint([...arr, {\r\n endpoint: 'receivableinvoices',\r\n value: this.id\r\n }]);\r\n },\r\n parse: function (model) {\r\n if (!model)\r\n return model;\r\n\r\n this.lineItems = new PJQ.collections.invoicing.ReceivableInvoiceLineItems(model.lineItems);\r\n this.attachments = new PJQ.collections.invoicing.ReceivableInvoiceAttachments(model.attachments);\r\n this.payments = new PJQ.collections.invoicing.ReceivableInvoicePayments(model.payments);\r\n\r\n if (model.client) {\r\n if (model.client instanceof PJQ.models.BaseModel) {\r\n this.client = model.client;\r\n } else {\r\n this.client = new PJQ.models.contacts.Contact(model.client);\r\n }\r\n }\r\n\r\n return model;\r\n },\r\n syncERP: function(callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/syncerp',\r\n isAPIv2: true,\r\n }).post().done(_.bind(function (res) {\r\n if(res && _.size(res.externalId) > 0){\r\n this.set('externalObject', res);\r\n }\r\n if(typeof callback === 'function'){\r\n callback(res);\r\n }\r\n }, this)).fail(_.bind(function (xhr, err, result) {\r\n if(typeof callback === 'function'){\r\n callback(null);\r\n }\r\n }, this));\r\n },\r\n unlinkERP: function (callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/unlinkerp',\r\n isAPIv2: true,\r\n }).post().done(_.bind(function () {\r\n this.set('externalObject', null);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }, this)).fail(_.bind(function (xhr) {\r\n if (typeof callback === 'function') {\r\n let err;\r\n if (xhr.responseJSON != null) {\r\n err = xhr.responseJSON.type;\r\n } else {\r\n err = null;\r\n }\r\n callback(false, err);\r\n }\r\n }, this));\r\n },\r\n makeERPUrl: function(integration){\r\n let externalId = this.externalId();\r\n if(_.size(externalId) === 0){\r\n return '';\r\n }\r\n\r\n switch(integration.get('name')){\r\n case PJQ.constants.integrations.providers.QBO.name:\r\n return 'https://app.sandbox.qbo.intuit.com/app/invoice?txnId=' + externalId;\r\n default:\r\n return '';\r\n }\r\n },\r\n getAutofillAmounts: function(callback) {\r\n let fnCallback = _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.autofillLineItems);\r\n }\r\n }, this)\r\n if (this.autofillLineItems != null) {\r\n fnCallback();\r\n } else {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/lineitems/autofill',\r\n isAPIv2: true\r\n }).get().done(_.bind(function (response) {\r\n this.autofillLineItems = new PJQ.collections.invoicing.InvoiceLineItems(response);\r\n fnCallback();\r\n }, this)).fail(_.bind(function () {\r\n fnCallback();\r\n }, this));\r\n }\r\n },\r\n share: function (data, callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/email',\r\n isAPIv2: true,\r\n data: {\r\n subject: data != null ? data.subject : null,\r\n body: data != null ? data.body : null,\r\n toEmails: data != null ? data.toEmails : null,\r\n ccEmails: data != null ? data.ccEmails : null,\r\n }\r\n }).post().done(_.bind(function (response) {\r\n callback();\r\n }, this)).fail(_.bind(function (xhr, err, result) {\r\n //todo: error\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.ReceivableInvoiceHistoryItem = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n actionNames: {\r\n 'status': 'Status Changed',\r\n 'email': 'Email Sent'\r\n },\r\n getActionName: function () {\r\n return this.actionNames[this.get('action')] ?? this.get('action');\r\n },\r\n getDescription: function () {\r\n switch (this.get('action')) {\r\n case 'status':\r\n let fromStatus = this.get('data').from,\r\n toStatus = this.get('data').to;\r\n if (fromStatus == null || toStatus == null) {\r\n return '';\r\n }\r\n\r\n return '' + PJQ.constants.invoicing.receivableInvoiceStatusNames[fromStatus] + '' + PJQ.constants.invoicing.receivableInvoiceStatusNames[toStatus];\r\n case 'email':\r\n let to = this.get('data').to;\r\n if (_.size(to) === 0) {\r\n return '';\r\n }\r\n\r\n return 'To: ' + to.join(', ');\r\n default:\r\n return '';\r\n }\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.ReceivableInvoiceLineItem = PJQ.models.invoicing.InvoiceLineItem.extend();\r\n\r\nPJQ.models.invoicing.ReceivableInvoiceAttachment = PJQ.models.files.File.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id'\r\n});\r\n\r\nPJQ.models.invoicing.ReceivableInvoiceCustomField = PJQ.models.customFields.CustomField.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoices'\r\n },\r\n {\r\n endpoint: 'customfields',\r\n value: this.get('id')\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.ReceivableInvoiceSettings = PJQ.models.budget.Settings.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'settingId',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoices'\r\n },\r\n {\r\n endpoint: 'settings'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.ReceivableInvoiceUserSettings = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'settingId',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoices'\r\n },\r\n {\r\n endpoint: 'settings'\r\n },\r\n {\r\n endpoint: 'user'\r\n }\r\n ]);\r\n },\r\n getSettings: function (view) {\r\n return _.find(this.attributes.viewSettings, _.bind(function (setting) {\r\n return setting.view === view;\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.ReceivableInvoiceFieldSetting = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'settingId',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'settings'\r\n },\r\n {\r\n endpoint: 'fields',\r\n value: this.id ? this.id : 'receivableinvoices'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.ReceivableInvoicePayment = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n endpoint: function () {\r\n let arr = [];\r\n if (this.isNew()) {\r\n arr.push({\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n });\r\n }\r\n return PJQ.helpers.urlHelpers.generateEndpoint([...arr, {\r\n endpoint: 'receivableinvoicepayments',\r\n value: this.id\r\n }]);\r\n },\r\n parse: function (model) {\r\n if (!model)\r\n return model;\r\n\r\n this.attachments = new PJQ.collections.invoicing.ReceivableInvoiceAttachments(model.attachments);\r\n\r\n if (model.client) {\r\n if (model.client instanceof PJQ.models.BaseModel) {\r\n this.client = model.client;\r\n } else {\r\n this.client = new PJQ.models.contacts.Contact(model.client);\r\n }\r\n } else {\r\n this.client = null;\r\n }\r\n\r\n return model;\r\n },\r\n beforeSave: function () {\r\n this.set({\r\n attachments: this.attachments.toJSON()\r\n });\r\n },\r\n syncERP: function(callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/syncerp',\r\n isAPIv2: true,\r\n }).post().done(_.bind(function (res) {\r\n if(res && _.size(res.externalId) > 0){\r\n this.set('externalObject', res);\r\n }\r\n if(typeof callback === 'function'){\r\n callback(res);\r\n }\r\n }, this)).fail(_.bind(function (xhr, err, result) {\r\n if(typeof callback === 'function'){\r\n callback(null);\r\n }\r\n }, this));\r\n },\r\n unlinkERP: function (callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/unlinkerp',\r\n isAPIv2: true,\r\n }).post().done(_.bind(function () {\r\n this.set('externalObject', null);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }, this)).fail(_.bind(function (xhr) {\r\n if (typeof callback === 'function') {\r\n let err;\r\n if (xhr.responseJSON != null) {\r\n err = xhr.responseJSON.type;\r\n } else {\r\n err = null;\r\n }\r\n callback(false, err);\r\n }\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.models.invoicing.ReceivableInvoicePaymentAttachment = PJQ.models.files.File.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id'\r\n});\r\n\r\n//Collections\r\nPJQ.collections.invoicing.ReceivableInvoices = PJQ.collections.invoicing.Invoices.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.ReceivableInvoice,\r\n endpoint: function () {\r\n let params = [];\r\n if (this.options.costCodeId && this.options.costTypeId) {\r\n params.push({\r\n parameter: 'costCodeId',\r\n value: this.options.costCodeId\r\n }, {\r\n parameter: 'costTypeId',\r\n value: this.options.costTypeId\r\n });\r\n }\r\n\r\n if (this.options.primeContract != null) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoices',\r\n value: this.options.primeContract.id\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.project.get('projectId')\r\n },\r\n {\r\n endpoint: 'receivableinvoices'\r\n }\r\n ], params);\r\n }\r\n },\r\n getTotalAmountsByStatus: function () {\r\n let result = {};\r\n result[PJQ.constants.invoicing.receivableInvoiceStatus.DRAFT] = 0;\r\n result[PJQ.constants.invoicing.receivableInvoiceStatus.REVIEWING] = 0;\r\n result[PJQ.constants.invoicing.receivableInvoiceStatus.APPROVED] = 0;\r\n result[PJQ.constants.invoicing.receivableInvoiceStatus.COMPLETE] = 0;\r\n result[PJQ.constants.invoicing.receivableInvoiceStatus.REVISE] = 0;\r\n _.each(this.models, function (invoice) {\r\n result[invoice.get('statusId')] += invoice.get('amount');\r\n });\r\n return result;\r\n },\r\n getPayments: function(){\r\n let result = [];\r\n _.each(this.models, function(invoice){\r\n result.push(...invoice.payments.models);\r\n })\r\n return result;\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.ReceivableInvoiceHistory = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.ReceivableInvoiceHistoryItem,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoices',\r\n value: this.options.invoiceId\r\n },\r\n {\r\n endpoint: 'history'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.ReceivableInvoiceLineItems = PJQ.collections.invoicing.InvoiceLineItems.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.ReceivableInvoiceLineItem\r\n});\r\n\r\nPJQ.collections.invoicing.ReceivableInvoiceAttachments = PJQ.collections.files.Files.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.ReceivableInvoiceAttachment,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoices',\r\n value: this.options.invoiceId\r\n },\r\n {\r\n endpoint: 'attachments'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.ReceivableInvoiceCustomFields = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.ReceivableInvoiceCustomField,\r\n endpoint: function () {\r\n let arr = [];\r\n if (this.options.projectId > 0) {\r\n arr.push({\r\n endpoint: 'projects',\r\n value: this.options.projectId\r\n });\r\n }\r\n arr.push(...[\r\n {\r\n endpoint: 'receivableinvoices'\r\n },\r\n {\r\n endpoint: 'customfields'\r\n }\r\n ]);\r\n return PJQ.helpers.urlHelpers.generateEndpoint(arr);\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.ReceivableInvoiceCustomFieldChoices = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.ReceivableInvoiceCustomFieldChoice\r\n});\r\n\r\nPJQ.collections.invoicing.ReceivableInvoiceFieldSettings = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.ReceivableInvoiceFieldSetting,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'settings'\r\n },\r\n {\r\n endpoint: 'fields',\r\n value: 'receivableinvoices'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.invoicing.ReceivableInvoicePayments = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.ReceivableInvoicePayment,\r\n endpoint: function () {\r\n if (this.options.invoiceId > 0) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoices',\r\n value: this.options.invoiceId\r\n },\r\n {\r\n endpoint: 'payments'\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.project.get('projectId')\r\n },\r\n {\r\n endpoint: 'receivableinvoicepayments'\r\n }\r\n ]);\r\n }\r\n },\r\n});\r\n\r\nPJQ.collections.invoicing.ReceivableInvoicePaymentAttachments = PJQ.collections.files.Files.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.invoicing.ReceivableInvoicePaymentAttachment,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'receivableinvoicepayments',\r\n value: this.options.paymentId\r\n },\r\n {\r\n endpoint: 'attachments'\r\n }\r\n ]);\r\n }\r\n});","PJQ.views.invoicing.ReceivableInvoiceSettingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.INVOICING, 'modal-receivable-invoice-settings'),\n minWidth: '600px',\n },\n events: {\n 'change .select-column': 'columnSelected',\n 'click .btn-edit-company-default': 'editCompanySettings',\n 'click button.settings-save': 'onSave'\n },\n beforeModalCreated: function () {\n this.userSettings = this.options.invoicesView.userSettings;\n },\n beforeRender: function () {\n // copy userSettings for our UI; we only update global userSettings object on save.\n this.options.userSettings = [];\n\n this.options.defaultStatusFilter = this.userSettings.get('defaultStatusFilter');\n _.each(this.userSettings.attributes.viewSettings, _.bind(function (setting) {\n let columns = this.options.invoicesView.dataTable.getColumns(true),\n selectedColumns = (_.size(setting.columns) > 0) ? setting.columns : setting.columnsDefault;\n _.each(columns, _.bind(function (column) {\n column.visible = selectedColumns.indexOf(column.columnData) !== -1\n }, this));\n\n this.options.userSettings.push({\n view: setting.view,\n rowsPerPage: setting.rowsPerPage,\n columns: columns\n });\n }, this));\n },\n renderData: function () {\n return {\n userSettings: this.userSettings\n }\n },\n afterRender: function () {\n this.defaultFilterSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-filter-default'),\n isIntChoices: true,\n isMultiple: true,\n defaultValue: this.userSettings.get('defaultStatusFilter'),\n onChange: _.bind(function (value) {\n this.options.defaultStatusFilter = value\n }, this)\n });\n\n this.rowsPerPage = new PJQ.inputs.Selectpicker({\n el: this.$('select.rows-per-page'),\n isIntChoices: true,\n onChange: _.bind(function (value) {\n this.currentView.rowsPerPage = value;\n }, this)\n });\n\n this.selectView(PJQ.constants.invoicing.view.RECEIVABLE_INVOICES);\n },\n editCompanySettings: function () {\n this.userSettings = new PJQ.models.invoicing.ReceivableInvoiceUserSettings(null, {\n forCompany: true\n });\n this.userSettings.fetch({\n success: _.bind(function () {\n this.render();\n }, this)\n });\n },\n selectView: function (view) {\n this.currentView = _.find(this.options.userSettings, _.bind(function (setting) {\n return setting.view === view;\n }, this));\n\n if (view.indexOf('-') === -1) {\n this.rowsPerPage.setValue(this.currentView.rowsPerPage);\n this.$('div.rows-per-page').show();\n }\n else\n this.$('div.rows-per-page').hide();\n\n if (this.dataTable) {\n this.dataTable.undelegateEvents();\n $(this.dataTable.el).empty();\n }\n\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('div.select-columns-datatable'),\n data: this.currentView.columns,\n isHideSearch: true,\n pageLength: 6,\n order: [],\n columns: [\n {\"data\": \"title\", \"title\": \"Column\", \"orderable\": false},\n {\n \"data\": \"visible\",\n \"title\": \"Show\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('
');\n }, this),\n \"width\": '10%'\n }\n ],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n\n },\n columnSelected: function (sender) {\n this.dataTable.dataTable.row($(sender.currentTarget).closest('tr')).data().visible = $(sender.currentTarget).prop('checked');\n },\n onSave: function () {\n let fnOnSave = _.bind(function () {\n if (typeof this.options.onSave === 'function')\n this.options.onSave();\n this.removeModal();\n }, this);\n\n this.userSettings.set('defaultStatusFilter', this.options.defaultStatusFilter);\n\n _.each(this.options.userSettings, _.bind(function (settingTemp) {\n _.each(this.userSettings.get('viewSettings'), _.bind(function (setting) {\n if (settingTemp.view === setting.view) {\n setting.rowsPerPage = settingTemp.rowsPerPage;\n\n let columns = _.size(setting.columns) > 0 ? setting.columns.slice() : setting.columnsDefault.slice();\n\n // update columns\n _.each(settingTemp.columns, _.bind(function (column) {\n if (column.visible) {\n if (columns.indexOf(column.columnData) === -1)\n columns.push(column.columnData);\n }\n else {\n if (columns.indexOf(column.columnData) !== -1)\n columns = _.filter(columns, _.bind(function (columnTemp) {\n return columnTemp != column.columnData;\n }, this));\n }\n }, this));\n\n setting.columns = columns;\n }\n }, this));\n }, this));\n\n this.userSettings.save(null, {\n success: _.bind(function () {\n fnOnSave();\n }, this)\n });\n },\n});"]}