{"version":3,"sources":["1initializers.js","2helpers.js","budgetlineitemviews.js","budgetmodels.js","budgetmodificationviews.js","budgetviewsviews.js","bulkeditlineitemsview.js","changerequests/1initializers.js","changerequests/changerequestdatatables.js","changerequests/changerequesteditviews.js","changerequests/changerequestlistviews.js","changerequests/changerequestmanagementviews.js","changerequests/changerequestmodels.js","changerequests/changerequestsettingsviews.js","costcodeviews.js","costtypeviews.js","erpadmin/1initializers.js","erpadmin/erpadminmodels.js","erpadmin/erpadminviews.js","financialmarkups/financialmarkups.js","forecastviews.js","integrations/1initializers.js","integrations/integrations.js","integrations/settings.js","lineitemviews.js","projectbudgetview.js","rfq/1initializers.js","rfq/rfqbatchviews.js","rfq/rfqdatatables.js","rfq/rfqeditviews.js","rfq/rfqlistviews.js","rfq/rfqmodels.js","rfq/rfqresponseviews.js","settingsmodels.js","subjobviews.js","taxcodeviews.js"],"names":["PJQ","collections","budget","models","views","constants","accountingMethod","AMOUNT","UNIT_QUANTITY","modules","routes","route","name","callback","app","initNavigator","activeItem","projectId","projectWall","initProjectNavigator","parseInt","addRoutes","helpers","costCodes","getDivisionSortValue","division","_","size","toLowerCase","numsOnly","formatHelpers","numbersOnly","num","isNaN","sortDivisions","divisions","sortBy","erp","renderERPButtons","$el","options","_this","this","html","defaults","pushSupported","canPush","canPushChanges","disablePushReason","pullSupported","canPull","disablePullReason","canUnlink","unlinkSupported","canLink","linkSupported","isStale","status","integrations","syncStatuses","STALE","isPending","PENDING","isReviewing","REVIEWING","isApproved","APPROVED","isFailed","FAILED","isSynced","SYNCED","isRejected","REJECTED","templating","TemplateRenderer","parseMarkup","empty","pulling","isPulling","pullingLoader","Loader","find","loadingText","remove","pushing","isPushing","pushingLoader","unlinking","isUnlinking","unlinkLoader","getERPIcon","iconClass","colorClass","syncStatusDescriptions","getERPBadge","externalObject","badgeClass","badgeIcon","text","title","data","externalNumber","rejectReason","error","budgetHelpers","columnTypes","SOURCE","CALCULATED","columnFormats","MONEY","PERCENT","INTEGER","getColumnSources","def","columnSources","session","erpIntegration","union","map","getBudgetColumns","col","extend","isErp","source","canCalculate","format","isSource","AddBudgetLineItemsModal","BaseModal","template","Template","BUDGET","width","maxWidth","isShowCloseButton","onSave","noop","isAdmin","events","click .go-to-cost-codes","click .btn-save","click .btn-cancel","beforeModalCreated","_beforeModalCreated","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","collection","LineItems","project","isFetched","fetchCostCodes","sent","fetchCostTypes","costTypes","fetchUnitsOfMeasure","unitsOfMeasure","render","stop","apply","arguments","renderData","afterRender","renderLineItemsView","lineItemsView","LineItemsView","el","$","lineItemModel","LineItem","canEdit","canDelete","canChangeAccountingMethod","isBudget","onAccountingMethodChanged","bind","value","onLineItemAdd","onLineItemDelete","importLineItems","$uploader","fileUploader","files","FileUploaderGrid","useApiV2","allowedExtensions","maxFiles","style","onSuccess","file","loader","uploadId","processImport","add","renderLineItems","attr","goToCostCodes","router","navigate","id","toString","trigger","removeModal","save","validate","addLineItems","cancel","modals","SaveDontSave","header","body","onDontSave","EditLineItemBudgetModal","keyup .input-quantity, .input-unit-price","fetchSubJobs","subJobs","model","Binder","watchElements","useDecimalPercentFields","inputs","Selectpicker","defaultValue","get","isIntChoices","onChange","setAccountingMethod","unitOfMeasureSelector","hideDisabled","inputHelpers","inputMaskCurrency","inputMaskDecimal","calculateUnitTotal","unitPrice","getMoneyInputValue","parent","quantity","parseFloat","val","formatCurrency","method","set","budgetedCost","unitId","getValue","success","restore","BaseLineItem","BaseModel","isAPIv2","idAttribute","getTaxAmount","taxRate","taxable","Math","round","getUnRoundedTaxAmount","resetMarkup","markupAmount","verticalMarkupAmount","horizontalMarkupAmount","markupValues","getMarkupAmount","financialMarkups","_result","length","undefined","values","markupVals","getMarkups","hAmount","vAmount","each","mVal","cid","amount","isVertical","result","vertical","horizontal","getAmountRemaining","getGrandTotal","getRetainage","getRetainageReleased","getSubTotal","_this$get","_this$get2","changeRequests","ChangeRequestLineItem","costs","totalMarkups","_this$get3","endpoint","urlHelpers","generateEndpoint","parse","erpSyncStatus","exObj","lastSync","Date","ForecastLineItem","budgetId","Budget","lineItems","ajax","Request","post","done","notifications","notify","successNotify","message","merge","fail","errorNotify","fetchForView","viewId","updateLocked","isLocked","startLocked","toJSON","patch","makeERPUrl","integration","externalId","BudgetModification","SubJob","CostCode","getDisplayName","syncERP","res","xhr","err","unlinkERP","responseJSON","type","TaxCode","CostType","UnitOfMeasure","BillingPeriodSettings","params","push","parameter","billingPeriods","BillingPeriods","afterSave","BillingPeriod","BudgetView","columns","ViewColumns","beforeSave","column","sources","calculations","ViewColumn","ViewColumnCalculations","ViewColumnCalculation","TaxCodes","BaseCollection","SubJobs","CostTypes","CostCodes","hasDivisions","costCode","getForDivision","dSearch","filter","c","div","getDivisions","uniq","_costCode$get","endpointArr","saveBulk","subJobId","pushERP","objectHelpers","refinedType","cc","silent","deleteAll","delete","UnitsOfMeasure","BudgetModifications","ForecastLineItems","BudgetViews","Snapshots","AddBudgetModificationsModal","subTemplates","modification","click .btn-add-modification","_beforeModalCreated2","_callee2","_context2","_this2","lineItemChoices","item","costType","choice","addModification","fromLineItemId","toLineItemId","notes","renderModification","renderSubTemplate","fromSelect","choices","noneSelectedText","isLiveSearch","toSelect","fnRender","ViewBudgetModificationsModal","lineItem","fetch","fnLineItemRow","row","filteredData","dataTables","DataTable","rowId","paging","order","language","zeroRecords","minWidth","extraClasses","BudgetsViewsEditorModal","columnEditorEmpty","maxHeight","onDelete","click .btn-create-view","click .budget-view-option","click .btn-return","click .btn-edit-columns","click .budget-view-column","click .btn-delete-column","click .create-source","click .create-calculated","click .edit-view","click .delete-view","click .set-default-view","modes","CREATE","EDIT","VIEW","blankView","description","companyId","budgetViews","mode","budgetView","renderViewMode","renderEditMode","renderCreateMode","renderColumns","renderColumnConfiguration","templateColumnTable","isHideSearch","scrollY","scrollCollapse","dataTable","onRowDoubleClick","editView","contextMenuOptions","actions","isShown","onClick","setViewIsDefault","isDanger","deleteView","orderable","icons","join","searchable","setModalWidth","animate","createView","isDefault","defaultViewClicked","e","target","currentTarget","view","getRow","closest","currentDefault","refresh","editViewClicked","isNew","viewBudgetViews","hasChanged","saveView","changeTemplate","deleteViewClicked","destroy","columnsSorted","cancelColumnEdit","columnsChanged","deleteColumn","stopPropagation","$target","$item","editColumnClicked","removeClass","addClass","editColumn","columnsSortable","Sortable","items","connectWith","onStop","columnEditor","$editor","$menuItem","ViewColumnEditor","onNameChange","createSourceColumn","createCalculatedColumn","isValid","markInvalid","calc","index","BaseView","calculation","keyup .view-name","click .btn-add-calculation","click .btn-remove-calculation","beforeFirstRender","fetchERPIntegration","focus","renderCalculations","colSource","src","nameChanged","isMultiple","statuses","addCalculation","renderCalculation","$calc","deleteCalculation","BulkEditLineItemsModal","enableStoredMaterials","enableRetainage","_this3","attribute","unset","inputMaskPercent","_this4","attributes","key","changeRequestId","rfqId","ChangeRequestDataTable","emptyTable","toggleRowClass","onViewChangeRequest","click .btn-view-change-request","click .btn-view-prime-contract","beforeDataTableRender","pageLength","settings","rowsPerPage","getDefaultFilter","userSettings","afterSearch","afterHeaderRender","setFilter","filterType","STATUS_FILTER","getFilterData","statusFilter","getFilter","contains","getColumns","includeAllColumns","canViewPrimeContracts","hasPermission","includeColumns","customFields","customField","columnsDefault","columnData","defaultContent","columnName","changeRequestStatusNames","dateHelpers","getDateString","dateFormats","DATE_TIME","titleSettings","companyName","className","startsWith","fieldValue","getCustomFieldValue","commitments","customFieldType","BOOLEAN","CHOICE","DATE","DATETIME","toLocaleString","toFixed","visible","viewChangeRequestClicked","invoice","viewPrimeContractClicked","viewPrimeContract","primeContractId","primeContracts","PrimeContractEditModal","PrimeContract","ChangeRequestEditModal","click .btn-add-line-item","click .btn-close","click .btn-submit","click .btn-save-email","click .btn-delete","click .btn-push-erp","click .btn-undo-push-erp","click .btn-unlink-erp","click .btn-export","click .btn-export-costs","click .btn-export-revenue","click .btn-email","click .nav-link","click .btn-view-rfq","_beforeModalCreated3","_callee3","customFieldValues","_context3","fetchChangeRequestSettings","fetchChangeRequestCustomFields","getSetting","fetchERPObject","primeContract","fieldNumber","fieldTypeId","fieldType","ChangeRequest","primeContractNumber","client","clientId","statusId","changeRequestStatus","DRAFT","markupItems","beforeRender","canAdd","canEditLineItems","canViewRFQs","canEditStatus","fnGetGreaterStatuses","st","VOID","some","disabledStatuses","isERPSynced","syncStatus","commitmentStatus","activeView","checkFieldVisible","checkFieldRequired","_this5","activateView","stopListening","listenTo","renderERP","renderGeneral","renderMarkups","updateCounts","GENERAL","LINEITEMS","MARKUPS","RFQ","activeViewChanged","hash","replace","renderRFQ","tab","_this$model$get","_this$model$get2","_this6","disabled","indexOf","statusPicker","newStatus","dirtyAttributes","revenueSource","REVENUE","revenueSourceNames","MANUAL","refreshLineItems","scope","OWNER_CHANGE","scopeNames","INTERNAL","contractCompanyPicker","contacts","ContactsSelectInput","selectedContact","displayContactsBlock","customFieldsForm","CustomFieldsForm","isEdit","fieldValues","isDirty","attachments","canUpload","previewImageDimension","attachment","copyCostToRevenue","showRevenue","renderLineItemsTable","_this7","changeRequest","canApplyChangeRequestCosts","canApplyChangeRequestRevenue","canSendRFQ","enableSelection","showSubTotal","showGrandTotal","onCreateFromLineItems","onLineItemChange","onChangeOrderView","onCommitmentView","onSendRFQ","fnSendRFQ","rfq","RFQBatchModal","projectCommitments","requests","selectedIds","lineItemCt","rfqItemsCt","YesNo","onYes","isShowOkButton","okButtonText","onOk","isShowSecondaryButton","secondaryButtonColorClass","secondaryButtonText","onSecondary","markupsView","FinancialMarkupsList","_this8","fetchRFQs","then","rfqDataTable","_row$contractedContac","_row$contractedContac2","contractedContact","rfqStatusNames","dom","viewRFQ","RFQEditModal","addRow","onRFQAdd","newRFQ","viewRFQClicked","$erp","commitment","hasAvailableAction","PUSH_CHANGE_REQUESTS","pushChangeRequest","undoPushERP","undoPush","unlinkChangeRequest","fieldName","coreFieldSettings","fieldSettings","findWhere","exportRevenue","export","exportCosts","exportClicked","_this9","withRevenue","withCosts","downloadFile","saveEmail","email","savePush","_this10","submitChangeRequest","submit","saveChangeRequest","_this11","setInputError","$description","clearError","showError","getChanged","deleteChangeRequest","hasAssociatedLineItems","DeleteCancel","_this$options$project","_this$options$project2","projectName","trim","subject","concat","ComposeEmailModal","share","close","ChangeRequestsList","totals","click .btn-settings","click .btn-add-change-request","click .btn-delete-change-request","_beforeFirstRender","_callee4","_context4","ChangeRequests","groupId","costTypeId","fetchChangeRequestUserSettings","hideHeader","renderView","off","on","initChangeRequest","viewChangeRequest","renderStats","$totals","getTotalAmountsByStatus","pending","changeRequestStatusBuckets","projected","PROJECTED","approved","getDataTableInstance","_this12","headerData","getSettings","CHANGE_REQUESTS","colReorder","fixedColumnsLeft","fixedColumnsRight","realtime","columnOrderChanged","exportChangeRequestList","parameters","getTimezoneOffset","addChangeRequest","SelectPrimeContractsModal","isSingleChoice","headerSubText","filterStatuses","primeContractStatus","contract","deleteChangeRequestClicked","removeRow","editSettings","ChangeRequestSettingsModal","changeRequestsView","SelectChangeRequestsModal","change .select-change-request","selectedChangeRequests","isArray","includes","isNumber","selectChangeRequest","not","prop","selectedChangeRequest","dtChangeRequest","onChangeRequestSelected","reject","selChangeRequest","onCancel","ChangeRequestManagement","changeRequestTotals","shown.bs.tab .nav-tabs","canViewChangeRequests","rfqs","rfqView","activateTab","renderRFQView","renderChangeRequestsView","isActivating","tabActivated","vw","activeTab","show","hide","_this13","_this14","RFQList","RFQs","getActiveTab","updateTotalsCount","$changeRequestsSpan","$rfqSpan","arr","ChangeRequestLineItems","ChangeRequestAttachments","FinancialMarkups","Contact","_this15","Promise","resolve","Error","providers","QBO","toEmails","ccEmails","response","markups","costOnly","costsOnly","ChangeRequestAttachment","File","CustomField","CustomFieldChoice","Settings","parseNumberFormat","numberFormat","additionalData","token","isText","label","parseDateFormatToken","dateFormatId","parseDateString","counter","padStart","substr","fieldTypes","TEXT","INT","choiceName","replaceAll","input","commitmentNumberTokenDateFormat","DD","getDate","MM","getMonth","YY","getFullYear","YYYY","MMDDYYYY","URL_DATE","ChangeRequestUserSettings","viewSettings","setting","bucket","total","Files","CustomFields","CustomFieldChoices","change .select-column","click .btn-edit-company-default","click button.settings-save","defaultStatusFilter","selectedColumns","defaultFilter","defaultFilterSelectPicker","isGrouped","onHide","currentView","selectView","editCompanySettings","forCompany","setValue","undelegateEvents","columnSelected","sender","fnOnSave","settingTemp","slice","columnTemp","ProjectCostCodeSettings","_beforeFirstRender2","_callee5","_context5","fetchBudget","enableSubJobs","_this16","CostCodeSettings","enableSubJobsChanged","onPullERP","SubJobSettings","CostCodeSettingsModal","pickerOptions","subJob","click .btn-import-cost-codes","click .btn-add-cost-code","click .btn-add-standard","click .btn-edit-cost-code","click .btn-delete-cost-code","click .btn-delete-all","click .btn-pull-erp","change .cb-enable-sub-jobs","_beforeFirstRender3","_callee6","_context6","allCostCodes","where","renderCostCodeTable","divisionNames","sort","sortHelpers","sortAlphaNum","i","guid","sortOrder","getDataTable","afterDataTableRender","getRowChildTable","childOpts","getRowChildData","dtOptions","_this17","parentData","hideColumnHeaders","editCostCode","costCodeId","deleteCostCode","importClicked","UploadCostCodesModal","hasStaleCostCodes","projectSyncStatus","isProjectReviewing","PUSH_PROJECT_COST_CODES","PULL_PROJECT_COST_CODES","PUSH_COMPANY_COST_CODES","erpButtons","badge","_this$erpButtons","_this18","pushCostCodes","_this18$erpButtons","reset","pullERP","_this$erpButtons2","_this19","PULL_COMPANY_COST_CODES","pullCostCodes","newCostCodes","_this19$erpButtons","addStandard","CostCodePickerModal","showDisabledAsSelected","isCostCodeDisabled","pCostCode","savedCostCodes","addClicked","editClicked","EditCostCodeModal","deleteClicked","msg","ct","warningNotify","keydown .input-percent","change .input-percent","_beforeModalCreated4","_callee7","_context7","DISABLE_EDIT_COST_CODE_TYPE_FILTER","disableEditingCostTypeFilter","disableEditingCostCodeName","setDefaultValues","AutocompleteInput","isDisabled","formatPercent","onClose","$code","code","isCodeValid","errorText","click .btn-save-new","click .btn-save-all","isSaving","saveNew","dt","saveAll","_this20","uploadTemplateCallback","onDrop","_this21","selectedCostCodes","CostCodePicker","onSelectionChanged","picker","selectedCostCodeIds","selectecCostCodeCodes","disabledCostCodeIds","keyup .input-search","click .btn-clear-filters","click .cost-codes-all-select","click .division-select","click .cost-code-select","click .division-expand","renderCostCodes","searchFilter","$clearFilters","isCostCodeSelected","setDisabledDivisions","setSelectedDivisions","isRendered","self","getDivisionCostCodesContainer","clearFilters","selectAll","override","checkboxes","selectionChanged","$element","selectDivision","$costCodes","isChecked","is","cb","expandDivisionClicked","expandDivision","container","icon","siblings","hasClass","hideError","errorAlert","Alert","isPrepend","CostTypeSettings","click .btn-add-cost-type","click .btn-edit-cost-type","click .btn-delete-cost-type","_beforeFirstRender4","_callee8","_context8","_this22","renderCostTypeTable","_this23","editCostType","deleteCostType","hasStaleCostTypes","PUSH_COST_TYPES","PULL_COST_TYPES","_this$erpButtons3","_this24","pushCostTypes","_this24$erpButtons","_this$erpButtons4","_this25","pullCostTypes","_this25$erpButtons","EditCostTypeModal","_beforeModalCreated5","_callee9","_context9","inputmask","mask","repeat","placeholder","definitions","a","validator","cardinality","renderIntegrationFields","_externalObj$data","_this26","ACUMATICA","_externalObj$data2","defaultNonStockItem","externalObj","nonStockItem","SelectPickerEditorInput","isFormInput","editButtonText","showSaveButton","defaultDisplayValue","inventoryID","getChoices","_this26$erpIntegratio","fnCallback","settingsData","nonStockItems","fetchSettingsData","setSetting","$name","_this27","updateCostTypeData","erpAdmin","_PJQ$collections$erpA","_PJQ$models$erpAdmin","_PJQ$views$erpAdmin","_PJQ$constants$erpAdm","viewOptions","feature","ERPObject","erpObject","relatedObjects","relatedItem","createNewContactCompany","approve","_this28","pull","linkContactCompany","company","archive","removeFromArchive","ERPObjects","internalModel","statusIds","objects","projects","getFeatureCounts","externalModel","_this29","setInternalModel","setStatusIds","refreshModels","_this30","linkSuggested","objs","_this31","obj","console","log","Object","assign","features","cont_comp","canSuggestMatches","provider","_ref","_data$externalNumber","suggestMatches","erpObj","checkedText","selectedERPItems","internalId","_this32","suggestedId","SAGE300","unshift","enabled","SYNC_PROJECTS","_ref2","_data$externalNumber2","subjob","costcode","isImported","SYNC_PRIME_CONTRACTS","pcco","SYNC_PRIME_CONTRACT_CHANGE_ORDERS","ar_inv","SYNC_RECEIVABLE_INVOICES","SYNC_COMMITMENTS","commitmentTypeNames","cco","SYNC_COMMITMENT_CHANGE_ORDERS","ap_inv","SYNC_PAYABLE_INVOICES","d_cost","SYNC_DIRECT_COSTS","directcosts","directCostTypeNames","ERPAdminManagement","approvalItem","emptyQueue","click .btn-add-project","click .btn-link-project","click .feature-nav-item a","click .filter-nav-item a","click .approve-button, .reject-button, .link-button","click .btn-submit-approve","click .btn-submit-reject","click .btn-add-vendor","click .btn-link-vendor","click .btn-refresh","click .btn-archive","click .btn-remove-from-archive","click .select-erp-item","click .select-all-erp-items","click .btn-import-items","change .cb-suggest-matches","click .btn-link-suggested","click .btn-link-all-suggested","click .btn-link-suggested-selected","_beforeFirstRender5","_callee10","defaultFeature","_context10","fetchSyncData","syncData","getProvider","changeFeature","getFeatures","_this33","ftr","renderFeatureCounts","renderApprovalItems","fetchERPObjects","_fetchERPObjects","_callee12","_this34","_context12","abrupt","_ref3","_callee11","_context11","externalModelName","handleError","_x","_x2","featureChanged","_featureChanged","_callee13","_context13","_x3","_changeFeature","_callee15","_this35","_context15","_ref4","_callee14","filters","_context14","readyToImport","readyToExport","CACHED","catch","counts","_x5","_x4","readyToExportCount","readyToImportCount","failedToExportCount","archivedCount","filterChanged","_filterChanged","_callee16","_context16","t0","_x6","_this36","$featurePane","filteredModels","featureName","displayName","filterName","providerName","append","fnRenderEmptyQueue","groupedModels","groupBy","$approvalItemOuter","renderApprovalItem","match","ARCHIVED","itemTable","addProject","addCostCode","addVendor","linkVendor","approvalInputs","field","Datepicker","datepickerOptions","datePicker","defaultDate","prefix","#","handleApprovalAction","$approvalItem","slideDown","SelectImportVendorModal","erpVendor","_this37","contactCompany","successText","onNo","approveItem","_this38","approveContainer","inputEl","inputValue","required","rejectItem","_this39","cols","erpItemSelected","sCid","handleSelectedERPItemsButtons","selectAllERPItems","checkbox","alteredModel","m","addVendorClicked","actionButtonContainer","linkVendorClicked","SelectContactsModal","context","contexts","COMPANIES","selectedCompany","suggestMatchesChanged","linkSuggestedSelectedClicked","linkSuggestedClicked","$row","linkAllSuggestedClicked","toggleLoader","_this40","linkObjs","linkedCount","refreshRow","archiveClicked","rowEl","removeFromArchiveClicked","addProjectClicked","_this41","Project","linkProjectClicked","linkProject","addCostCodeClicked","_this42","createNewCostCodes","addCostCodes","_this43","costCodesExternalIds","externalIds","_refresh","_callee17","date","_this44","_context17","internalModelName","projectsSyncedOn","toISOString","vendorsSyncedOn","costCodesSyncedOn","change .select-vendor","selectedVendors","vendors","selectVendor","vendor","selectedVendor","dtVendor","onVendorSelected","selVendor","FinancialMarkup","calculate","compoundAmt","amt","_lineItem$get","_lineItem$get2","sortedMarkups","markup","amts","liMarkup","tMarkup","click .btn-add-markup","click .btn-edit-markup","click .btn-delete-markup","_beforeFirstRender6","_callee18","_context18","_this45","tableData","editMarkup","sortableOptions","b","deleteMarkup","formatDecimal","addMarkup","percent","isCompounding","costCodeIds","costTypeIds","editMarkupClicked","EditFinancialMarkupModal","hasBeenAdded","makeSortable","deleteMarkupClicked","_this46","markupModel","focus .input-percent","_beforeModalCreated6","_callee19","_context19","costCodePicker","populateCostCodePicker","costTypePicker","selectInput","focusInput","setTimeout","select","groupedCostCodes","updateChoices","enable","disable","AddBudgetLineItemForecastModal","click .btn-delete-line-item","click .btn-switch-method","validateForm","valid","$manual","$calculated","resetAddForm","deleteLineItem","calculateSubTotal","addLineItem","newLineItem","groups","subtotal","switchMethod","put","SYNC_VENDORS","SYNC_SUB_JOBS","SYNC_BUDGET","PUSH_VENDORS","UNLINK_VENDOR","PUSH_PROJECT","LINK_PROJECT","UNLINK_PROJECT","PROJECT_SPECIFIC_COST_CODES","PUSH_SUB_JOBS","PULL_SUB_JOBS","PUSH_COMPANY_TAX_CODES","PULL_COMPANY_TAX_CODES","PUSH_BUDGET","PULL_BUDGET","PUSH_COMMITMENTS","PUSH_COMMITMENTS_WITH_VENDOR","PULL_COMMITMENTS","UNLINK_COMMITMENTS","PUSH_COMMITMENT_CHANGE_ORDERS","PULL_COMMITMENT_CHANGE_ORDERS","COMMITMENT_CO_SOV_FILTER_TO_COMMITMENT_SOV","UNLINK_COMMITMENT_CHANGE_ORDERS","PUSH_PRIME_CONTRACTS","PUSH_PRIME_CONTRACTS_WITH_CLIENT","PULL_PRIME_CONTRACTS","PRIME_CONTRACT_SOV_BUDGET_CODE_NOT_REQUIRED","UNLINK_PRIME_CONTRACTS","PUSH_PRIME_CONTRACT_CHANGE_ORDERS","PUSH_CONTRACT_CO_WITHOUT_PRIME_CONTRACT","PRIME_CONTRACT_CO_SOV_REQUIRE_LINKED_CONTRACT_CO","PRIME_CONTRACT_CO_SOV_BUDGET_CODE_NOT_REQUIRED","UNLINK_PRIME_CONTRACT_CHANGE_ORDERS","PUSH_DIRECT_COSTS","PULL_DIRECT_COSTS","UNLINK_DIRECT_COSTS","PUSH_PAYABLE_INVOICES","PUSH_PAYABLE_INVOICES_WO_SYNCED_COMMMITMENT","PULL_PAYABLE_INVOICES","PULL_RECEIVABLE_PAYMENTS","PULL_PAYABLE_PAYMENTS","UNLINK_PAYABLE_INVOICES","REQUIRE_SYNCED_COST_TYPES","REQUIRE_SYNCED_COST_CODES","PUSH_RECEIVABLE_INVOICES","PUSH_RECEIVABLE_INVOICES_WO_SYNCED_CONTRACT","PULL_RECEIVABLE_INVOICES","UNLINK_RECEIVABLE_INVOICES","CREATE_TAX_CODES","logoURL","shortName","supportedVersions","availableActions","linkProjectAlert","budgetColumns","failedToExport","archived","buttonClass","buttonText","SAGE100","INTACCT","-2","0","1","2","3","4","5","6","Integration","_this47","_this48","pushVendor","contact","companyExternalObject","unlinkVendor","contactCompanyId","fetchUnlinkedProjects","_fetchUnlinkedProjects","_callee20","_context20","fetchProjects","fetchLinkedProjects","_fetchLinkedProjects","_callee21","_context21","_fetchProjects","_callee22","synced","_this49","_args22","_context22","erpProjects","pushProject","_this50","_this51","unlinkProject","_this52","pushSubJobs","_this53","pullSubJobs","_this54","_this55","_this56","_this57","_this58","dryRun","_this59","_this60","forLinking","pullTaxCodes","_this61","pushBudget","_this62","pullBudget","_this63","pushCommitment","_this64","pullCommitments","_this65","unlinkCommitment","_this66","_this67","_this68","pushCommitmentChangeOrder","changeOrder","_this69","pullCommitmentChangeOrders","_this70","unlinkCommitmentChangeOrder","_this71","pushPrimeContract","_this72","pullPrimeContracts","_this73","unlinkPrimeContract","_this74","pushPrimeContractChangeOrder","_this75","pullPrimeContractChangeOrders","_this76","unlinkPrimeContractChangeOrder","_this77","pushDirectCost","directcost","_this78","pullDirectCosts","_this79","unlinkDirectCost","directCost","_this80","pushPayableInvoice","_this81","pullPayableInvoicePayments","_this82","unlinkPayableInvoice","_this83","pushReceivableInvoice","_this84","pullReceivableInvoicePayments","_this85","unlinkReceivableInvoice","_this86","getShortName","pvd","action","authorize","_this87","isAgave","linkToken","window","AgaveLink","openLink","sourceSystem","agaveSourceSystem","showSandboxSourceSystems","publicToken","document","location","url","_this88","Integrations","LinkERPProjectModal","change .select-project","_beforeModalCreated7","_callee23","_context23","_this89","selectedProject","_row$data$name","_row$data$city","city","_row$data$state","state","deferRender","selectProject","isSelected","parents","_this90","IntegrationsList","click .btn-connect","click .btn-disconnect","fetchIntegrations","getIntegration","initOptions","integrationName","handleIntegrationType","ig","toUpperCase","integrationClicked","integrationType","QBOIntegrationSettings","SageHH2IntegrationSettings","navigator","refreshCommands","AcumaticaIntegrationSettings","SageIntacctIntegrationSettings","authorizeIntegration","_this91","authorized","disconnectIntegration","change .input-projects","change .input-import-single-item","change .input-export-single-item","change .input-sync-costs","click .btn-re-auth","click .btn-unlink","_beforeModalCreated8","_callee24","_context24","newAuth","_this92","incomeAccount","requiredAst","fetchAccounts","incomeAccounts","account","expenseAccount","expenseAccounts","paymentAccount","paymentAccounts","incomeDefaultItem","fetchProducts","products","product","forIncome","expenseDefaultItem","forExpense","costDefaultGroupId","costDefaultCostTypeId","_this93","_data$expenseAccounts","_data$incomeAccounts","_data$paymentAccounts","_this94","_data$products","reAuthorize","_this95","exportSingleItem","syncProjects","syncCosts","importSingleItem","setSettings","afterChange","renderAlerts","_this96","click .btn-save, .btn-authorize","click .btn-edit-auth","click .btn-cancel-auth","_this97","isAuthorized","editingAuthorization","_this98","version","renderCustomizationLink","defaultIncomeAccountGroup","accountGroupID","accountGroups","defaultSalesSubaccount","subaccountID","subaccounts","subaccount","defaultCreditTerms","termsID","creditTerms","cls","primeContractCOClass","classID","primeContractCOClasses","commitmentCOClass","commitmentCOClasses","vendorClass","vendorClasses","ver","fileName","$pkg","apiV2Url","editAuthorization","cancelEditingAuthorization","_this99","VistaIntegrationSettings","_this100","_this101","fnGetAccounts","accounts","glAccounts","glAccount","normalBalance","accountNo","defaultPayableAccount","defaultReceivableAccount","selectPickerOptions","recordNo","defaultItem","itemId","defaultEntity","locationId","entities","entity","_this102","invoiceHeader","changeRequestHeader","isSubmitting","isCostCodeRequired","isCostTypeRequired","filterToPrimeContractItems","canImportBudget","onTotalsChanged","enableTax","billedToDate","approvedChanges","showMarkup","showBilling","click .btn-view-commitment","click .btn-view-change-order","click .btn-import-budget","click .btn-import-file","click .btn-import-contracts","click .btn-add-all-line-items","click .btn-autofill-amounts","click .btn-save-line-item","focus .input-dollars-full,.input-percent","change .input-progress-percent","click .btn-add-from-change-requests","click .btn-add-from-commitments","click .select-cr-li","click .btn-new-commitment","click .btn-existing-commitment","click .btn-new-pcco","click .btn-existing-pcco","click .btn-new-cco","click .btn-existing-cco","click .btn-total-fn","click .btn-edit-bulk","click .btn-delete-bulk","click .select-all-line-items","click .btn-edit-line-item-vendor","click .btn-send-rfq","addStandardCostCodes","$btn","getLineItemForInput","sendRFQClicked","selectedLineItems","_beforeFirstRender7","_callee25","_context25","addingNewContractLineItems","isReceivableInvoices","invoicing","ReceivableInvoiceLineItem","isInvoices","PayableInvoiceLineItem","isDirectCosts","isChangeRequests","isPCCO","ChangeOrderLineItem","isCCO","isCommitments","CommitmentLineItem","filterToCommitmentCostCodes","commitmentId","fetchTaxCodes","taxCodes","Commitments","withLineItems","canAddCommitments","canAddCommitmentChangeOrders","canAddContractChangeOrders","accountingMethodPicker","getVisibleLineItems","renderActions","updateAccountingMethodSelector","renderTotals","minimumProgressPercent","$input","totalProgressPercent","importBudget","newLineItems","number","importFile","renderUploader","importContracts","_this103","_this104","downloadImportTemplate","billed","renderTableFooter","_this105","fnBudgetCodeCols","opt","_toConsumableArray","renderFooter","max","getMaterialsStored","taxAmount","getTotalCompleteAndStored","getBalanceToFinish","getWorkRetainageRemaining","getMaterialRetainageRemaining","pccoId","_row$get","getContactAnchor","useCompanyName","ccoId","unitOfMeasure","taxCode","$dataTable","autoWidth","fixedHeader","footer","hasFooter","renderInputs","first","prepend","onRowRemoved","totalButtonClicked","fnName","fn","_this106","$footer","visibleCols","totalRows","sTotal","vMarkup","rtTotal","rrTotal","tTotal","grandTotal","clickFn","onApprovedChangesClicked","bold","onBilledToDateClicked","$totalRow","colOffset","txt","updateCommitmentForChangeRequestLineItem","_commitment$contracte","_commitment$contracte2","budgetCodes","bcSplit","split","vendorId","commitmentNumber","_this107","addListeners","binder","delegate","modelSelectorAttribute","fnCommitmentToChoice","_commitment$contracte3","_commitment$contracte4","subtext","commitmentPickerCollection","SelectPickerCollection","pickerSelector","valueAttribute","isBlockSubtext","suggested","others","fnVendorToChoice","_commitment$contracte5","vendorPickerCollection","foundIds","matchCommitments","currentCommitment","nextInput","possibleLineItems","lineItemPickerCollection","getPossibleLineItemOptions","selectedItem","primeContractLineItemPickerCollection","getPrimeContractItemChoices","toggleInput","subJobPickerCollection","costCodeSelectorCollection","pickers","getCostCodeOptions","allowedCostTypeIds","costTypeSelectorCollection","getCostTypeOptions","hasSubJobs","budgetLineItem","li","$line","getLineItemElement","change","taxCodeSelectorCollection","taxCodeId","unit","focusLineItem","updateLineItemRow","_this108","subTotal","progress","amtRemain","prevInput","_this109","_a$get","_b$get","lineItemPicker","getPickerForId","toggle","pcLineItemPicker","subJobPicker","vendorPicker","commitmentPicker","_this110","opts","percentUpdate","stored","nem","committed","totalProgress","billableNow","progressAmount","materialRetainage","workRetainagePercent","workRetainage","materialRetainagePercent","getWorkRetainageTotal","workRetainageReleasedPercent","retainage","workRetainageReleased","getMaterialRetainageTotal","materialRetainageReleasedPercent","materialRetainageReleased","cost","revenue","getPossibleLineItems","pLineItem","_contractNumber","contractNumber","contractLines","changes","changeOrderId","_this111","budgeted","unBudgeted","filteredCostCodes","c1","c2","_this112","allowedCostTypes","filteredCostTypes","filterUnsyncedCostTypes","erpObjectFetched","getLineItemRow","node","_this113","amountRemaining","fnAdd","fetchPossibleLineItems","pLineItems","timeout","Commitment","addFromChangeRequests","changeRequestIds","availableLineItems","costLineItemId","revenueLineItemId","changeRequestLineItemId","progressQuantity","progressPercent","addFromCommitments","_this114","SelectCommitmentsModal","commitmentIds","addAllPossibleLineItems","changed","existingLineItem","autofillAmounts","_this115","getAutofillAmounts","autoFillItem","invoiceItem","materialsNew","validateLineItem","updateCell","$cell","costCodeCol","costTypeCol","uomCol","contractItemCol","nodes","wasValidated","saveLineItem","deleteLineItemClicked","bulkDeleteLineItems","_this116","_this117","bulkEditLineItems","_this118","viewCommitment","CommitmentEditModal","viewChangeOrder","ChangeOrderEditModal","ChangeOrder","lineItemSelected","selectAllLineItems","_this119","disableCommitmentsButtons","disableContractsButtons","addLineItemsToCommitment","_this120","_onSave","getSelectedCommitmentIds","selCommitmentId","selectedCommitmentId","PURCHASE_ORDER_PROCESSING","SUBCONTRACT_OUT_FOR_BID","OUT_FOR_SIGNATURE","SUBMITTED","PURCHASE_ORDER_PARTIALLY_RECEIVED","PURCHASE_ORDER_RECEIVED","_callee26","selLineItems","_context26","_x7","createCommitmentFromLineItems","commitmentType","PURCHASE_ORDER","SUBCONTRACT","vendorIds","liVendor","fromChangeRequest","addLineItemsToPCCO","_onSave2","_this121","SelectChangeOrdersModal","changeOrderStatus","NO_CHARGE","IN_REVIEW","NOT_PRICING","PRICING","NOT_PROCEEDING","PROCEEDING","REVISED","_callee27","_context27","_x8","createPCCOFromLineItems","_createPCCOFromLineItems","_callee28","_context28","addLineItemsToCCO","_onSave3","_this122","SelectCommitmentChangeOrdersModal","_callee29","_context29","_x9","_this123","liCid","createCCOFromLineItems","_this124","_onSave4","_callee30","_context30","_x10","DataTableTest","childRowToggle","rowOverride","selector","rows","tr","child","childDataTables","childDt","parentId","renderChildRow","toggleChildRow","$icon","childClass","$childTable","class","childData","childTable","isBackboneCollection","isBackboneModel","ProjectBudget","groupByCookie","click .btn-link-erp","click .btn-add-line-items","click .btn-edit-budget","click .btn-edit-forecast","click .btn-view-modifications","click .btn-view-prime-contracts","click .btn-view-commitments","click .btn-view-cco","click .btn-view-pcco","click .btn-view-receivable-invoices","click .btn-view-payable-invoices","click .btn-view-direct-costs","click .btn-lock-budget","click .btn-unlock-budget","keyup .budget-search","click .expand-all-items","_beforeFirstRender8","_callee31","gbCookie","_context31","cookieHelpers","getCookie","expandedItems","force","currentBudget","fetchBudgetSnapshots","snapshots","fetchBudgetViews","setActiveView","canUnlock","without","fetchBudgetForActiveView","getDataForLevel","renderDatatable","hasUnsynced","budgetStatus","reviewing","level","groupByLevel","groupByCostCode","lineItemIds","budgetCode","_lineItem$columnData$","liVal","Array","_this125","parentTable","contextMenuActions","isLastLevel","addLineItemToBudget","editLineItemBudget","viewLineItemModifications","editLineItemForecast","rowCallback","isUnBudgeted","drawCallback","nTableWrapper","css","snapshotSelect","createSnapshot","groupBySelector","setGroupBy","viewSelector","manageViews","erpStatus","erpReviewing","isSnapshot","expandChildTables","renderChildTable","setCookie","eq","minutes","getMinutesFromHoursDecimal","cVal","$footerCol","timecards","getFormattedTime","lockBudget","linkERP","erpProject","_this$erpButtons5","_this$erpButtons6","_this$erpButtons7","_this126","_this126$erpButtons","exportBudget","searchBudget","searchVal","filteredIds","search","draw","unlockBudget","canClickColumnData","sValue","numOnly","classes","reduce","timeValue","timeDecimal","floor","hours","_val","_val2","createdOn","expand","every","$tr","$expandIcon","expandAllClicked","editLineItemBudgetClicked","editLineItemForecastClicked","lineItemId","viewLineItemReceivableInvoicesClicked","viewLineItemReceivableInvoices","ModalViewReceivableInvoices","showAllBillingPeriods","viewLineItemPayableInvoicesClicked","viewLineItemPayableInvoices","ModalViewPayableInvoices","viewLineItemPrimeContractsClicked","viewLineItemPrimeContracts","ModalViewPrimeContracts","viewLineItemPrimeContractChangeOrdersClicked","viewLineItemPrimeContractChangeOrders","ModalViewChangeOrders","viewLineItemCommitmentChangeOrdersClicked","viewLineItemCommitmentChangeOrders","viewLineItemCommitmentsClicked","viewLineItemCommitments","ModalViewCommitments","viewLineItemDirectCostsClicked","viewLineItemDirectCosts","ModalViewDirectCosts","filterLineItems","filterText","wait","itm","addBudgetModifications","modifications","_this127","fromLine","toLine","viewLineItemModificationsClicked","bv","click .cb-send-all","_beforeModalCreated9","_callee32","_this$options$changeR","_this$options$changeR2","_this$options$changeR3","_this$options$lineIte","_context32","batch","dueDate","Attachments","contractedContactId","assignees","assigneeIds","send","renderForm","renderDataTable","sendAllChanged","_this128","checked","request","_this129","newDate","_this130","lineBinder","_commitment$contracte6","_commitment$contracte7","_model$commitment","_model$contractedCont","_commitment$contracte8","companyPickerCollection","_model$commitment2","_model$contractedCont2","_matchCommitments$0$c","invoiceContact","_this131","_this132","req","batchRes","_this133","RFQDataTable","onViewRFQ","click .btn-send-request","click .btn-update-response","click .impact-response>button","_beforeModalCreated10","_callee33","_context33","changeRequestNumber","rfqStatus","_this$model$contracte","pContactId","isAssignee","CLOSED","canRespond","REVISE","canSendRequest","renderResponse","_this134","fnSave","sendRequest","oldStatus","companyPicker","PROJECTCONTACTS","hideUsers","canViewContacts","assigneePicker","selectedContacts","_selectedContacts$plu","pluck","distributeToPicker","distributeTo","_selectedContacts$plu2","hasOwnProperty","responseAttachments","updateResponseClicked","updateResponse","_this135","hasCostImpact","RFQResponseModal","onSubmit","submitResponse","impactResponseChanged","_this136","_this137","respond","_this138","sendQuoteRequest","saveRFQ","_this139","quoteAmount","deleteRFQ","click .btn-add-rfq","click .btn-delete-rfq","_beforeFirstRender9","_callee34","_context34","initRFQ","_this140","addRFQ","deleteRFQClicked","SelectRFQModal","change .select-rfq","selectedRFQs","selectRFQ","selectedRFQ","dtRFQ","onRFQSelected","selRFQ","responseBy","Contacts","_this$contractedConta","_this141","Attachment","_beforeModalCreated11","_callee35","_this$options$hasCost","_this$model$get3","_this$model$get4","_context35","comment","clone","_this142","_this143","click .btn-add-sub-job","click .btn-edit-sub-job","click .btn-delete-sub-job","click .btn-edit-cost-codes","renderSubJobTable","_this144","newSubJobsCount","_this145","editSubJob","editCostCodes","deleteSubJob","EditSubJobModal","editCostCodesClicked","isNameValid","sj","TaxCodeSettings","click .btn-add-tax-code","click .btn-edit-tax-code","click .btn-delete-tax-code","renderTaxCodeTable","_this146","editTaxCode","deleteTaxCode","EditTaxCodeModal","_this147","newTaxCodes","rate"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.collections.budget = PJQ.collections.budget ? PJQ.collections.budget : {};\r\nPJQ.models.budget = PJQ.models.budget ? PJQ.models.budget : {};\r\nPJQ.views.budget = PJQ.views.budget ? PJQ.views.budget : {};\r\n\r\nPJQ.constants.budget = {\r\n\taccountingMethod: {\r\n\t\tAMOUNT: 0,\r\n\t\tUNIT_QUANTITY: 1\r\n\t},\r\n};\r\n\r\nPJQ.modules.budget = {\r\n\troutes: [\r\n\t\t{\r\n\t\t\troute: \"budget\",\r\n\t\t\tname: 'budget',\r\n\t\t\tcallback: function () {\r\n\t\t\t\tPJQ.app.initNavigator({\r\n\t\t\t\t\tactiveItem: \"budget\"\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\troute: 'projects/:projectId/budget',\r\n\t\t\tname: 'budget',\r\n\t\t\tcallback: function (projectId) {\r\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"budget\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\troute: 'projects/:projectId/costcodes',\r\n\t\t\tname: 'budget',\r\n\t\t\tcallback: function (projectId) {\r\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"costcodes\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\troute: 'projects/:projectId/subjobs',\r\n\t\t\tname: 'budget',\r\n\t\t\tcallback: function (projectId) {\r\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"subjobs\");\r\n\t\t\t}\r\n\t\t}\r\n\t]\r\n};\r\n\r\nPJQ.app.addRoutes(PJQ.modules.budget.routes);\r\n","PJQ.collections.budget = PJQ.collections.budget ? PJQ.collections.budget : {};\nPJQ.models.budget = PJQ.models.budget ? PJQ.models.budget : {};\nPJQ.views.budget = PJQ.views.budget ? PJQ.views.budget : {};\n\nPJQ.helpers.costCodes = {\n getDivisionSortValue: function (division) {\n if (_.size(division) === 0 || division.toLowerCase() === 'no division') {\n return -1;\n }\n\n let numsOnly = PJQ.helpers.formatHelpers.numbersOnly(division);\n if (_.size(numsOnly) > 0) {\n let num = parseInt(numsOnly);\n if (!isNaN(num)) {\n return num;\n }\n }\n return division;\n },\n sortDivisions: function (divisions) {\n return _.sortBy(divisions, function (division) {\n return PJQ.helpers.costCodes.getDivisionSortValue(division.name);\n })\n }\n}\n\nPJQ.helpers.erp = {\n renderERPButtons: function ($el, options) {\n options = _.defaults(options, {\n pushSupported: false,\n canPush: options.pushSupported === true,\n canPushChanges: options.pushSupported === true,\n disablePushReason: null,\n pullSupported: false,\n canPull: options.pullSupported === true,\n disablePullReason: null,\n canUnlink: options.unlinkSupported === true,\n canLink: options.linkSupported === true\n });\n\n let html = '';\n options.isStale = options.status === PJQ.constants.integrations.erp.syncStatuses.STALE;\n options.isPending = options.status === PJQ.constants.integrations.erp.syncStatuses.PENDING;\n options.isReviewing = options.status === PJQ.constants.integrations.erp.syncStatuses.REVIEWING;\n options.isApproved = options.status === PJQ.constants.integrations.erp.syncStatuses.APPROVED;\n options.isFailed = options.status === PJQ.constants.integrations.erp.syncStatuses.FAILED;\n options.isSynced = options.status === PJQ.constants.integrations.erp.syncStatuses.SYNCED;\n options.isRejected = options.status === PJQ.constants.integrations.erp.syncStatuses.REJECTED;\n if (options.isSynced) {\n options.canPush = false;\n options.disablePushReason = \"No changes to sync\";\n } else if (options.isApproved) {\n options.canPush = false;\n options.canPull = false;\n options.disablePushReason = \"Approved - Sync to ERP system in process\";\n options.disablePullReason = \"Approved - Sync to ERP system in process\";\n }\n\n if (options.pushSupported) {\n if (options.isReviewing) {\n html += ``;\n } else if ((options.canPushChanges && (options.isSynced || options.isStale)) || ((options.isRejected || options.isFailed || options.isPending) && options.pushSupported)) {\n html += ``;\n }\n }\n\n if (options.pullSupported && (options.canPull || options.status == null || options.isSynced)) {\n html += ``;\n }\n\n if (options.canLink && options.isPending) {\n html += ``;\n } else if (options.canUnlink && options.isSynced) {\n html += ``;\n }\n\n if (_.size(html) > 0) {\n $el.html(PJQ.templating.TemplateRenderer.parseMarkup(html, options));\n } else {\n $el.empty();\n }\n\n return {\n pulling: (isPulling) => {\n if (isPulling) {\n this.pullingLoader = new PJQ.Loader($el.find('.btn-pull-erp'), {\n loadingText: null\n });\n } else if (this.pullingLoader) {\n this.pullingLoader.remove();\n this.pullingLoader = null;\n }\n },\n pushing: (isPushing) => {\n if (isPushing) {\n this.pushingLoader = new PJQ.Loader($el.find('.btn-push-erp'), {\n loadingText: null\n });\n } else if (this.pushingLoader) {\n this.pushingLoader.remove();\n this.pushingLoader = null;\n }\n },\n unlinking: (isUnlinking) => {\n if (isUnlinking) {\n this.unlinkLoader = new PJQ.Loader($el.find('.btn-unlinking-erp'), {\n loadingText: null\n });\n } else if (this.unlinkLoader) {\n this.unlinkLoader.remove();\n this.unlinkLoader = null;\n }\n }\n };\n },\n getERPIcon: function (status) {\n let iconClass = '',\n colorClass = '';\n switch (status) {\n case PJQ.constants.integrations.erp.syncStatuses.REVIEWING:\n iconClass = 'fa-clock';\n colorClass = 'text-primary';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.REJECTED:\n iconClass = 'fa-triangle-exclamation';\n colorClass = 'text-warning';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.APPROVED:\n iconClass = 'fa-link-simple';\n colorClass = 'text-purple';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.SYNCED:\n iconClass = 'fa-link-simple';\n colorClass = 'text-success';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.FAILED:\n iconClass = 'fa-link-simple-slash';\n colorClass = 'text-danger';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.STALE:\n iconClass = 'fa-link-simple';\n colorClass = 'text-secondary';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.PENDING:\n default:\n return '';\n }\n return '';\n },\n getERPBadge: function (status, externalObject, options) {\n let badgeClass = '',\n badgeIcon = '';\n switch (status) {\n case PJQ.constants.integrations.erp.syncStatuses.REVIEWING:\n badgeIcon = 'fa-clock';\n badgeClass = 'badge-primary';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.REJECTED:\n badgeIcon = 'fa-triangle-exclamation';\n badgeClass = 'badge-danger';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.APPROVED:\n badgeIcon = 'fa-link-simple';\n badgeClass = 'badge-purple';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.SYNCED:\n badgeIcon = 'fa-link-simple';\n badgeClass = 'badge-success';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.FAILED:\n badgeIcon = 'fa-link-simple-slash';\n badgeClass = 'badge-danger';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.STALE:\n badgeIcon = 'fa-link-simple';\n badgeClass = 'badge-secondary';\n break;\n case PJQ.constants.integrations.erp.syncStatuses.PENDING:\n default:\n return '';\n }\n\n let text = '',\n appendText = '',\n title = PJQ.constants.integrations.erp.syncStatusDescriptions[status];\n if (externalObject != null) {\n if (externalObject.data != null && _.size(externalObject.data.externalNumber) > 0) {\n text = '' + externalObject.data.externalNumber + ''\n }\n\n if (externalObject.status === PJQ.constants.integrations.erp.syncStatuses.REJECTED && _.size(externalObject.rejectReason) > 0) {\n title = externalObject.rejectReason;\n } else if (externalObject.status === PJQ.constants.integrations.erp.syncStatuses.FAILED && _.size(externalObject.error) > 0) {\n title = externalObject.error;\n }\n }\n return '' + text + '' + appendText;\n }\n};\n\nPJQ.modules.budget = {\n routes: [\n {\n route: \"budget\",\n name: 'budget',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"budget\"\n });\n }\n },\n {\n route: 'projects/:projectId/budget',\n name: 'budget',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"budget\");\n }\n },\n {\n route: 'projects/:projectId/costcodes',\n name: 'budget',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"costcodes\");\n }\n },\n {\n route: 'projects/:projectId/subjobs',\n name: 'budget',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"subjobs\");\n }\n }\n ]\n};\n\nPJQ.constants.budgetHelpers = {\n columnTypes: {\n SOURCE: 'source',\n CALCULATED: 'calculated'\n },\n columnFormats: {\n MONEY: 'money',\n PERCENT: 'percent',\n INTEGER: 'int'\n },\n getColumnSources: function () {\n let def = PJQ.constants.budgetHelpers.columnSources;\n if (PJQ.app.session.erpIntegration != null) {\n return _.union(def, _.map(PJQ.app.session.erpIntegration.getBudgetColumns(), function (col) {\n return _.extend(col, {isErp: true});\n }));\n }\n return def;\n },\n columnSources: [\n {\n name: 'Description',\n source: 'Description',\n canCalculate: false,\n format: 'string'\n },\n {\n name: 'Original Budget',\n source: 'BudgetedCost',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Budget Modifications',\n source: 'BudgetModification',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Revised Budget',\n source: 'RevisedBudget',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Pending Budget Changes',\n source: 'PendingBudgetChanges',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Projected Budget',\n source: 'ProjectedBudget',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Contracts',\n source: 'PrimeContractValues',\n canCalculate: true,\n isSource: true,\n format: 'money'\n },\n {\n name: 'Contract Change Orders',\n source: 'PrimeContractChangeOrderValues',\n canCalculate: true,\n isSource: true,\n format: 'money'\n },\n {\n name: 'Committed Costs',\n source: 'CommittedCosts',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Pending Cost Changes',\n source: 'PendingCosts',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Commitments',\n source: 'CommitmentValues',\n canCalculate: true,\n isSource: true,\n format: 'money'\n },\n {\n name: 'Commitment Change Orders',\n source: 'CommitmentChangeOrderValues',\n canCalculate: true,\n isSource: true,\n format: 'money'\n },\n {\n name: 'Direct Costs',\n source: 'DirectCostValues',\n canCalculate: true,\n isSource: true,\n format: 'money'\n },\n {\n name: 'Payable Invoices',\n source: 'PayableInvoiceValues',\n canCalculate: true,\n isSource: true,\n format: 'money'\n },\n {\n name: 'Payable Invoice Payments',\n source: 'PayablePayments',\n canCalculate: true,\n isSource: true,\n format: 'money'\n },\n {\n name: 'Receivable Invoices',\n source: 'ReceivableInvoiceValues',\n canCalculate: true,\n isSource: true,\n format: 'money'\n },\n {\n name: 'Receivable Invoice Payments',\n source: 'ReceivablePayments',\n canCalculate: true,\n isSource: true,\n format: 'money'\n },\n {\n name: 'Time Cards',\n source: 'TimeCardValues',\n canCalculate: true,\n isSource: true,\n format: 'decimal'\n },\n {\n name: 'Projected Costs',\n source: 'ProjectedCosts',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Forecast To Complete',\n source: 'ForecastToComplete',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Notes',\n source: 'Notes',\n canCalculate: false,\n format: 'string'\n },\n {\n name: 'Unit Price',\n source: 'UnitPrice',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Quantity',\n source: 'Quantity',\n canCalculate: true,\n format: 'integer',\n }\n ]\n}\n\nPJQ.app.addRoutes(PJQ.modules.budget.routes);\n","PJQ.views.budget.AddBudgetLineItemsModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-add-line-items'),\r\n width: '90%',\r\n maxWidth: 1200,\r\n isShowCloseButton: true,\r\n onSave: _.noop,\r\n isAdmin: true\r\n },\r\n events: {\r\n 'click .go-to-cost-codes': 'goToCostCodes',\r\n 'click .btn-save': 'save',\r\n 'click .btn-cancel': 'cancel'\r\n },\r\n beforeModalCreated: async function () {\r\n this.collection = new PJQ.collections.budget.LineItems();\r\n this.accountingMethod = 0;\r\n this.options.project = PJQ.app.session.project;\r\n\r\n this.isFetched = false;\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 this.isFetched = true;\r\n this.render();\r\n },\r\n renderData: function () {\r\n return {\r\n collection: this.collection,\r\n costCodes: this.costCodes != null ? this.costCodes.models : [],\r\n costTypes: this.costTypes != null ? this.costTypes.models : [],\r\n unitsOfMeasure: this.unitsOfMeasure != null ? this.unitsOfMeasure.models : [],\r\n accountingMethod: this.accountingMethod\r\n }\r\n },\r\n afterRender: function () {\r\n this.renderLineItemsView();\r\n },\r\n renderLineItemsView: function () {\r\n this.lineItemsView = new PJQ.views.budget.LineItemsView({\r\n el: this.$('.line-items-view'),\r\n collection: this.collection,\r\n lineItemModel: PJQ.models.budget.LineItem,\r\n accountingMethod: 0,\r\n canEdit: true,\r\n canDelete: true,\r\n canChangeAccountingMethod: true,\r\n isBudget: true,\r\n onAccountingMethodChanged: _.bind(function (value) {\r\n\r\n }, this),\r\n onLineItemAdd: _.bind(function () {\r\n\r\n }, this),\r\n onLineItemDelete: _.bind(function () {\r\n\r\n }, this)\r\n });\r\n },\r\n importLineItems: function () {\r\n let $uploader = this.$('.import-uploader');\r\n if (this.fileUploader == null) {\r\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\r\n el: $uploader,\r\n useApiV2: true,\r\n allowedExtensions: ['xls', 'xlsx', 'csv'],\r\n maxFiles: 1,\r\n style: 'grid',\r\n onSuccess: _.bind(function (file) {\r\n let loader = new PJQ.Loader($uploader);\r\n if (this.options.budget != null && _.size(file.uploadId) > 0) {\r\n this.options.budget.processImport(file.uploadId, _.bind(function (data) {\r\n this.fileUploader.remove();\r\n loader.remove();\r\n this.fileUploader = null;\r\n this.collection.add(data);\r\n this.renderLineItems();\r\n }, this));\r\n }\r\n }, this)\r\n });\r\n } else {\r\n // Hide file uploader if button is clicked again\r\n $uploader.attr('hidden', !$uploader.attr('hidden'));\r\n }\r\n },\r\n goToCostCodes: function () {\r\n PJQ.app.router.navigate(\"#projects/\" + (this.options.project.id).toString() + \"/costcodes\", {\r\n trigger: true\r\n });\r\n this.removeModal();\r\n },\r\n save: function () {\r\n if (this.lineItemsView.validate()) {\r\n this.options.budget.addLineItems(this.collection.models, _.bind(function () {\r\n this.options.onSave(this.collection.models);\r\n this.removeModal();\r\n }, this));\r\n }\r\n },\r\n cancel: function () {\r\n if (_.size(this.collection.models) > 0) {\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.save();\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});\r\n\r\n\r\nPJQ.views.budget.EditLineItemBudgetModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-edit-line-item-budget'),\r\n maxWidth: 600,\r\n isShowCloseButton: true,\r\n onSave: _.noop,\r\n isAdmin: true\r\n },\r\n events: {\r\n 'keyup .input-quantity, .input-unit-price': 'calculateUnitTotal',\r\n 'click .btn-save': 'save',\r\n 'click .btn-cancel': 'cancel'\r\n },\r\n beforeModalCreated: function () {\r\n this.isFetched = false;\r\n PJQ.app.session.project.fetchSubJobs(_.bind(function (subJobs) {\r\n this.subJobs = subJobs;\r\n PJQ.app.session.project.fetchCostCodes(_.bind(function (costCodes) {\r\n this.costCodes = costCodes;\r\n PJQ.app.session.project.fetchCostTypes(_.bind(function (costTypes) {\r\n this.costTypes = costTypes;\r\n PJQ.app.session.project.fetchUnitsOfMeasure(_.bind(function (unitsOfMeasure) {\r\n this.unitsOfMeasure = unitsOfMeasure;\r\n\r\n this.isFetched = true;\r\n this.render();\r\n }, this));\r\n }, this));\r\n }, this));\r\n }, this));\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model,\r\n budget: this.options.budget,\r\n subJobs: this.subJobs != null ? this.subJobs : [],\r\n costCodes: this.costCodes != null ? this.costCodes : [],\r\n costTypes: this.costTypes != null ? this.costTypes : [],\r\n unitsOfMeasure: this.unitsOfMeasure != null ? this.unitsOfMeasure.models : [],\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 new PJQ.Binder(this.$el, this.model, {\r\n watchElements: [\r\n 'input'\r\n ],\r\n useDecimalPercentFields: true,\r\n });\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-accounting-method'),\r\n defaultValue: this.model.get('accountingMethod'),\r\n isIntChoices: true,\r\n onChange: _.bind(function (value) {\r\n this.setAccountingMethod(value);\r\n }, this)\r\n });\r\n\r\n this.unitOfMeasureSelector = new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-unit-of-measure'),\r\n defaultValue: this.unitsOfMeasure != null && _.size(this.unitsOfMeasure.models) > 0 ? this.unitsOfMeasure.models[0].id : null,\r\n isIntChoices: true,\r\n hideDisabled: true\r\n });\r\n\r\n PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.input-dollars-full'), 2, true);\r\n PJQ.helpers.inputHelpers.inputMaskDecimal(this.$('.input-quantity'), 2);\r\n this.calculateUnitTotal();\r\n },\r\n\r\n calculateUnitTotal: function () {\r\n let unitPrice = PJQ.helpers.inputHelpers.getMoneyInputValue(this.$('.input-unit-price').parent()),\r\n quantity = parseFloat(this.$('.input-quantity').val());\r\n this.$('.unit-total').html(PJQ.helpers.formatHelpers.formatCurrency(quantity * unitPrice));\r\n },\r\n setAccountingMethod: function (method) {\r\n this.model.set('accountingMethod', method);\r\n this.render();\r\n },\r\n save: function () {\r\n if (this.model.get('accountingMethod') === 0) {\r\n let budgetedCost = PJQ.helpers.inputHelpers.getMoneyInputValue(this.$('.input-budgeted-cost'));\r\n this.model.set('budgetedCost', budgetedCost != null ? budgetedCost : 0);\r\n } else {\r\n let quantity = this.$('.input-quantity').val(),\r\n unitPrice = PJQ.helpers.inputHelpers.getMoneyInputValue(this.$('.input-unit-price'));\r\n this.model.set({\r\n unitId: this.unitOfMeasureSelector.getValue(),\r\n quantity: _.size(quantity) > 0 ? parseFloat(quantity) : 0,\r\n unitPrice: unitPrice != null ? unitPrice : 0\r\n })\r\n }\r\n\r\n this.model.save(null, {\r\n success: _.bind(function () {\r\n this.options.onSave(this.model);\r\n this.removeModal();\r\n }, this)\r\n }, this);\r\n },\r\n cancel: function () {\r\n this.model.restore();\r\n this.removeModal();\r\n }\r\n});\r\n","// Models\r\nPJQ.models.budget.BaseLineItem = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id',\r\n getTaxAmount: function () {\r\n let taxRate = this.get('taxRate'),\r\n taxable = this.get('amount') + this.get('markupAmount');\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('amount') + this.get('markupAmount');\r\n return taxable * (taxRate / 10000);\r\n },\r\n resetMarkup: function () {\r\n this.set({\r\n markupAmount: 0,\r\n verticalMarkupAmount: 0,\r\n horizontalMarkupAmount: 0,\r\n markupValues: null\r\n });\r\n },\r\n getMarkupAmount: function (financialMarkups, options = {}) {\r\n let values = this.get('markupValues');\r\n if (financialMarkups != null) {\r\n values = {};\r\n\r\n let markupVals = financialMarkups.getMarkups([this]),\r\n hAmount = 0,\r\n vAmount = 0;\r\n _.each(markupVals, (mVal) => {\r\n values[mVal.cid] = {\r\n amount: mVal.amount,\r\n isVertical: mVal.isVertical\r\n };\r\n\r\n if (mVal.isVertical) {\r\n vAmount += mVal.amount\r\n } else {\r\n hAmount += mVal.amount;\r\n }\r\n });\r\n if(vAmount < 0){\r\n vAmount = 0;\r\n }\r\n if(hAmount < 0){\r\n hAmount = 0;\r\n }\r\n\r\n this.set({\r\n markupAmount: vAmount + hAmount,\r\n verticalMarkupAmount: vAmount,\r\n horizontalMarkupAmount: hAmount,\r\n markupValues: values\r\n });\r\n } else if (this.get('markupAmount') == null) {\r\n this.set({\r\n markupAmount: 0,\r\n verticalMarkupAmount: 0,\r\n horizontalMarkupAmount: 0\r\n });\r\n }\r\n\r\n if (options.cid != null) {\r\n let val = values[options.cid];\r\n if (val == null) {\r\n return 0;\r\n }\r\n return val.amount;\r\n }\r\n\r\n let result = null;\r\n if (options.vertical) {\r\n result = this.get('verticalMarkupAmount');\r\n } else if (options.horizontal) {\r\n result = this.get('horizontalMarkupAmount');\r\n }\r\n return result ?? this.get('markupAmount');\r\n },\r\n getAmountRemaining: function (financialMarkups, options = {}) {\r\n return this.getGrandTotal(financialMarkups, options) - this.get('progressAmount') - this.get('progressTaxAmount')\r\n - this.get('materialsStored') + this.getRetainage() - this.getRetainageReleased();\r\n },\r\n getSubTotal: function (financialMarkups, options = {}) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n\r\n let amount;\r\n if (this instanceof PJQ.models.changeRequests.ChangeRequestLineItem && !options.costs) {\r\n amount = this.get('revenue') ?? 0;\r\n } else {\r\n amount = this.get('amount') ?? 0;\r\n }\r\n\r\n let markupAmount = this.getMarkupAmount(financialMarkups, {horizontal: options.totalMarkups !== true});\r\n return amount + markupAmount;\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 (financialMarkups, options = {}) {\r\n return this.getSubTotal(financialMarkups, options) + (this.get('taxAmount') ?? 0);\r\n }\r\n});\r\n\r\nPJQ.models.budget.LineItem = PJQ.models.BaseModel.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: 'budgets',\r\n value: this.get('budgetId')\r\n },\r\n {\r\n endpoint: 'lineitems',\r\n value: this.id\r\n }\r\n ]);\r\n },\r\n parse: function (model) {\r\n if (model) {\r\n if (model.amount != null && model.budgetedCost == null) {\r\n model.budgetedCost = model.amount;\r\n }\r\n }\r\n return model;\r\n },\r\n erpSyncStatus: function () {\r\n let exObj = this.get('externalObject'),\r\n status = exObj != null && typeof exObj.status === 'number' ? exObj.status : 0;\r\n if (status !== PJQ.constants.integrations.erp.syncStatuses.SYNCED) {\r\n return status;\r\n }\r\n\r\n return _.size(exObj.lastSync) === 0 || new Date(this.get('modifiedOn')) > new Date(exObj.lastSync) ? PJQ.constants.integrations.erp.syncStatuses.STALE : status;\r\n },\r\n});\r\n\r\nPJQ.models.budget.ForecastLineItem = PJQ.models.BaseModel.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: 'budgets',\r\n value: this.options.budgetId\r\n },\r\n {\r\n endpoint: 'lineitems',\r\n value: this.get('lineItemId')\r\n },\r\n {\r\n endpoint: 'forecast'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.budget.Budget = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id',\r\n endpoint: function () {\r\n if (this.id > 0) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'budgets',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n },\r\n {\r\n endpoint: 'budgets'\r\n }\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.budget.LineItems(model.lineItems, {\r\n budgetId: model.id\r\n });\r\n return model;\r\n },\r\n addLineItems: function (lineItems, callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'budgets',\r\n value: this.id\r\n },\r\n {\r\n endpoint: 'lineitems'\r\n }\r\n ]),\r\n isAPIv2: true,\r\n data: lineItems\r\n }).post().done(_.bind(function (data) {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Budget line items added'\r\n });\r\n this.lineItems.add(data, {merge: true});\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }, this)).fail(function () {\r\n PJQ.notifications.notify.errorNotify({\r\n message: 'Failed to add budget line items'\r\n });\r\n if (typeof callback === 'function') {\r\n callback(false);\r\n }\r\n });\r\n },\r\n processImport: function (uploadId, callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: 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: 'budgets'\r\n },\r\n {\r\n endpoint: 'lineitems'\r\n },\r\n {\r\n endpoint: 'import',\r\n value: uploadId\r\n }\r\n ]),\r\n isAPIv2: true\r\n }).post().done(_.bind(function (data) {\r\n if (typeof callback === 'function') {\r\n callback(data);\r\n }\r\n }, this)).fail(function () {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n });\r\n },\r\n fetchForView: function (viewId, callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'budgets',\r\n value: this.id\r\n },\r\n {\r\n endpoint: 'views',\r\n value: viewId\r\n }\r\n ]),\r\n isAPIv2: true\r\n }).get().done(_.bind(function (data) {\r\n if (typeof callback === 'function') {\r\n callback(data);\r\n }\r\n }, this)).fail(function () {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n });\r\n },\r\n updateLocked: function (isLocked, callback) {\r\n let startLocked = this.get('isLocked');\r\n if (startLocked !== isLocked) {\r\n this.set('isLocked', isLocked);\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'budgets',\r\n value: this.get('id')\r\n }\r\n ]),\r\n isAPIv2: true,\r\n data: this.toJSON()\r\n }).patch().done(_.bind(_.bind(function (data) {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Budget locked'\r\n });\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }, this))).fail(_.bind(function () {\r\n this.set('isLocked', startLocked);\r\n PJQ.notifications.notify.errorNotify({\r\n message: 'Failed to lock budget'\r\n });\r\n if (typeof callback === 'function') {\r\n callback(false);\r\n }\r\n }, this));\r\n }\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 default:\r\n return '';\r\n }\r\n },\r\n});\r\n\r\nPJQ.models.budget.BudgetModification = PJQ.models.BaseModel.extend({\r\n idAttribute: 'id',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'budgets',\r\n value: this.get('budgetId')\r\n },\r\n {\r\n endpoint: 'modifications'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.budget.SubJob = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id',\r\n endpoint: function () {\r\n if (this.id > 0) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'subjobs',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n },\r\n {\r\n endpoint: 'subjobs',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.budget.CostCode = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'id',\r\n endpoint: function () {\r\n if (this.get('projectId') > 0 && !(this.id > 0)) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n },\r\n {\r\n endpoint: 'costcodes',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'costcodes',\r\n value: this.id\r\n }\r\n ]);\r\n },\r\n getDisplayName: function () {\r\n let name = this.get('name');\r\n if (_.size(name) > 0) {\r\n return this.get('code') + ' - ' + name\r\n }\r\n return this.get('code');\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 callback(null, err);\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('externalId', 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.budget.TaxCode = PJQ.models.BaseModel.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: 'taxcodes',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.budget.CostType = PJQ.models.BaseModel.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: 'costtypes',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.budget.UnitOfMeasure = PJQ.models.BaseModel.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: 'unitsofmeasure',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.budget.BillingPeriodSettings = PJQ.models.BaseModel.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n idAttribute: 'projectId',\r\n endpoint: function () {\r\n let params = []\r\n if (this.get('allowAutomate')) {\r\n params.push({\r\n parameter: 'allowAutomate',\r\n value: true\r\n });\r\n }\r\n\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n },\r\n {\r\n endpoint: 'billingperiods'\r\n },\r\n {\r\n endpoint: 'settings'\r\n }\r\n ], params);\r\n },\r\n parse: function (model) {\r\n if (model) {\r\n this.billingPeriods = new PJQ.collections.budget.BillingPeriods(model.billingPeriods);\r\n }\r\n return model;\r\n },\r\n afterSave: function () {\r\n this.isFetched = false;\r\n }\r\n});\r\n\r\nPJQ.models.budget.BillingPeriod = PJQ.models.BaseModel.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: 'projects',\r\n value: this.get('projectId') ? this.get('projectId') : this.options.projectId\r\n },\r\n {\r\n endpoint: 'billingperiods',\r\n value: this.id\r\n }\r\n ]);\r\n },\r\n // openPeriod: function (callback) {\r\n // new PJQ.ajax.Request({\r\n // endpoint: this.endpoint() + '/open',\r\n // isAPIv2: true\r\n // }).put().done(_.bind(function (res) {\r\n // PJQ.notifications.notify.successNotify({\r\n // message: 'Billing period opened'\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 // PJQ.notifications.notify.errorNotify({\r\n // message: 'Failed to open billing period'\r\n // });\r\n // }, this));\r\n // },\r\n // closePeriod: function (callback) {\r\n // new PJQ.ajax.Request({\r\n // endpoint: this.endpoint() + '/close',\r\n // isAPIv2: true\r\n // }).put().done(_.bind(function (res) {\r\n // PJQ.notifications.notify.successNotify({\r\n // message: 'Billing period closed'\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 // PJQ.notifications.notify.errorNotify({\r\n // message: 'Failed to close billing period'\r\n // });\r\n // }, this));\r\n // }\r\n});\r\n\r\nPJQ.models.budget.BudgetView = PJQ.models.BaseModel.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: 'settings',\r\n value: 'budgets'\r\n },\r\n {\r\n endpoint: 'views',\r\n value: this.id\r\n }\r\n ]);\r\n },\r\n parse: function (model) {\r\n if (!model)\r\n return model;\r\n\r\n if (model.columns) {\r\n this.columns = new PJQ.collections.budget.ViewColumns(model.columns);\r\n }\r\n\r\n return model;\r\n },\r\n beforeSave: function () {\r\n _.each(this.columns.models, function (column) {\r\n if (column.get('type') === PJQ.constants.budgetHelpers.columnTypes.CALCULATED) {\r\n let options = {\r\n sources: column.calculations.toJSON()\r\n }\r\n column.set('options', options);\r\n }\r\n })\r\n this.set('columns', this.columns.toJSON());\r\n }\r\n});\r\n\r\nPJQ.models.budget.ViewColumn = PJQ.models.BaseModel.extend({\r\n parse: function (model) {\r\n if (!model)\r\n return;\r\n\r\n if (model.options) {\r\n if (model.options.sources && model.type === PJQ.constants.budgetHelpers.columnTypes.CALCULATED) {\r\n this.calculations = new PJQ.collections.budget.ViewColumnCalculations(model.options.sources);\r\n } else {\r\n this.calculations = new PJQ.collections.budget.ViewColumnCalculations();\r\n }\r\n }\r\n\r\n return model;\r\n }\r\n});\r\n\r\nPJQ.models.budget.ViewColumnCalculation = PJQ.models.BaseModel.extend();\r\n\r\n// Collections\r\nPJQ.collections.budget.TaxCodes = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.budget.TaxCode,\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: 'taxcodes'\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'taxcodes'\r\n }\r\n ]);\r\n }\r\n }\r\n});\r\n\r\nPJQ.collections.budget.SubJobs = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.budget.SubJob,\r\n endpoint: function () {\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: 'subjobs'\r\n }\r\n ]);\r\n },\r\n});\r\n\r\nPJQ.collections.budget.CostTypes = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.budget.CostType,\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: 'costtypes'\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'costtypes'\r\n }\r\n ]);\r\n }\r\n }\r\n});\r\n\r\nPJQ.collections.budget.CostCodes = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.budget.CostCode,\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: 'costcodes'\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'costcodes'\r\n }\r\n ]);\r\n }\r\n },\r\n hasDivisions: function () {\r\n return null != _.find(this.models, function (costCode) {\r\n return _.size(costCode.get('division')) > 0;\r\n })\r\n },\r\n getForDivision: function (division) {\r\n let dSearch = (_.size(division) === 0 || division.toLowerCase() === 'no division') ? '' : division,\r\n empty = _.size(dSearch) === 0;\r\n return _.filter(this.models, (c) => {\r\n let div = c.get('division');\r\n return (empty && _.size(div) === 0) || div === dSearch;\r\n });\r\n },\r\n getDivisions: function () {\r\n return _.uniq(_.map(this.models, function (costCode) {\r\n return costCode.get('division') ?? '';\r\n }));\r\n },\r\n processImport: function (uploadId, projectId, callback) {\r\n let endpointArr = [];\r\n if (projectId > 0) {\r\n endpointArr.push({\r\n endpoint: 'projects',\r\n value: projectId\r\n });\r\n }\r\n\r\n endpointArr.push(...[\r\n {\r\n endpoint: 'costcodes'\r\n },\r\n {\r\n endpoint: 'import',\r\n value: uploadId\r\n }\r\n ]);\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpointArr),\r\n isAPIv2: true\r\n }).post().done(_.bind(function (data) {\r\n if (typeof callback === 'function') {\r\n callback(data);\r\n }\r\n }, this)).fail(function () {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n });\r\n },\r\n saveBulk: function (costCodes, subJobId, callback) {\r\n if (_.size(costCodes) > 0) {\r\n let params = [];\r\n if (subJobId > 0) {\r\n params.push({\r\n parameter: 'subJobId',\r\n value: subJobId\r\n })\r\n }\r\n\r\n let endpointArr = [];\r\n if (this.options.projectId > 0) {\r\n endpointArr.push({\r\n endpoint: 'projects',\r\n value: this.options.projectId\r\n });\r\n }\r\n\r\n endpointArr.push(...[\r\n {\r\n endpoint: 'costcodes'\r\n },\r\n {\r\n endpoint: 'bulk'\r\n }\r\n ]);\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpointArr, params),\r\n isAPIv2: true,\r\n data: {\r\n costCodes: costCodes\r\n }\r\n }).post().done(_.bind(function (data) {\r\n this.add(data);\r\n if (typeof callback === 'function') {\r\n callback(data);\r\n }\r\n }, this)).fail(function () {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n });\r\n }\r\n },\r\n pushERP: 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 (PJQ.helpers.objectHelpers.refinedType(res) === 'array') {\r\n _.each(res, function (cc) {\r\n let model = this.get(cc.id);\r\n if (model != null) {\r\n model.set('externalObject', cc.externalObject, {silent: true});\r\n }\r\n }, this)\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(false, err);\r\n }\r\n }, this));\r\n },\r\n deleteAll: function (callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint(),\r\n isAPIv2: true\r\n }).delete().done(_.bind(function (res) {\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(false, err);\r\n }\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.collections.budget.UnitsOfMeasure = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.budget.UnitOfMeasure,\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: 'unitsofmeasure'\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'unitsofmeasure'\r\n }\r\n ]);\r\n }\r\n }\r\n});\r\n\r\nPJQ.collections.budget.BillingPeriods = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.budget.BillingPeriod\r\n});\r\n\r\nPJQ.collections.budget.LineItems = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.budget.LineItem\r\n});\r\n\r\nPJQ.collections.budget.BudgetModifications = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n model: PJQ.models.budget.BudgetModification,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'budgets',\r\n value: this.options.budgetId\r\n },\r\n {\r\n endpoint: 'modifications'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.budget.ViewColumns = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.budget.ViewColumn\r\n});\r\n\r\nPJQ.collections.budget.ViewColumnCalculations = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.budget.ViewColumnCalculation\r\n});\r\n\r\nPJQ.collections.budget.ForecastLineItems = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.budget.ForecastLineItem\r\n});\r\n\r\nPJQ.collections.budget.BudgetViews = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.budget.BudgetView,\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'settings',\r\n value: 'budgets'\r\n },\r\n {\r\n endpoint: 'views'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.budget.Snapshots = PJQ.collections.BaseCollection.extend({\r\n defaults: {\r\n isAPIv2: true\r\n },\r\n endpoint: function () {\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: 'budgets'\r\n },\r\n {\r\n endpoint: 'snapshots'\r\n }\r\n ]);\r\n }\r\n});\r\n","PJQ.views.budget.AddBudgetModificationsModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-add-budget-modifications'),\r\n subTemplates: {\r\n modification: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'add-budget-modification')\r\n },\r\n maxWidth: 800,\r\n isShowCloseButton: true,\r\n onSave: _.noop\r\n },\r\n events: {\r\n 'click .btn-save': 'save',\r\n 'click .btn-add-modification': 'addModification'\r\n },\r\n beforeModalCreated: async function () {\r\n this.isFetched = false;\r\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\r\n this.budget = this.options.budget;\r\n\r\n this.costCodes = await this.options.project.fetchCostCodes();\r\n this.costTypes = await this.options.project.fetchCostTypes();\r\n\r\n this.collection = new PJQ.collections.budget.BudgetModifications();\r\n this.isFetched = true;\r\n this.render();\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n this.lineItemChoices = _.sortBy(_.map(this.budget.lineItems.models, (item) => {\r\n let costCode = this.costCodes.get(item.get('costCodeId')),\r\n costType = this.costTypes.get(item.get('costTypeId'));\r\n return {\r\n id: item.id,\r\n costCode: costCode,\r\n costType: costType,\r\n name: '' + costCode.getDisplayName() + ' - ' + costType.get('name')\r\n };\r\n }), (choice) => {\r\n return choice.costCode.getDisplayName() + ' ' + choice.costType.get('name');\r\n });\r\n\r\n if (_.size(this.collection.models) === 0) {\r\n this.addModification();\r\n }\r\n },\r\n addModification: function () {\r\n let model = new PJQ.models.budget.BudgetModification({\r\n budgetId: this.budget.id,\r\n fromLineItemId: null,\r\n toLineItemId: null,\r\n amount: 0,\r\n notes: ''\r\n });\r\n\r\n this.collection.add(model);\r\n this.renderModification(model);\r\n },\r\n renderModification: function (model) {\r\n this.renderSubTemplate(true, this.options.subTemplates.modification, this.$('.budget-modifications'), {\r\n model: model,\r\n costCodes: this.costCodes,\r\n costTypes: this.costTypes,\r\n lineItems: this.budget.lineItems.models\r\n }, _.bind(function (el) {\r\n PJQ.helpers.inputHelpers.inputMaskCurrency(el.find('.input-dollars-full'), 2);\r\n new PJQ.Binder(el, model, {\r\n watchElements: [\r\n 'input'\r\n ]\r\n });\r\n\r\n model.fromSelect = new PJQ.inputs.Selectpicker({\r\n el: el.find('.line-item-from'),\r\n choices: this.lineItemChoices,\r\n noneSelectedText: 'Select Line Item',\r\n isLiveSearch: true,\r\n onChange: _.bind(function (value) {\r\n model.set('fromLineItemId', value);\r\n }, this),\r\n defaultValue: null\r\n });\r\n\r\n model.toSelect = new PJQ.inputs.Selectpicker({\r\n el: el.find('.line-item-to'),\r\n choices: this.lineItemChoices,\r\n isLiveSearch: true,\r\n noneSelectedText: 'Select Line Item',\r\n onChange: _.bind(function (value) {\r\n model.set('toLineItemId', value);\r\n }, this),\r\n defaultValue: null\r\n });\r\n }, this));\r\n },\r\n save: function () {\r\n let fnRender = _.bind(function () {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.collection.models);\r\n }\r\n this.removeModal();\r\n }, this)\r\n\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'budgets',\r\n value: this.budget.id\r\n },\r\n {\r\n endpoint: 'modifications'\r\n }\r\n ]),\r\n isAPIv2: true,\r\n data: this.collection.models\r\n }).post().done(_.bind(_.bind(function () {\r\n fnRender();\r\n }, this)));\r\n }\r\n});\r\n\r\nPJQ.views.budget.ViewBudgetModificationsModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-view-budget-modifications'),\r\n maxWidth: 1000,\r\n isShowCloseButton: true,\r\n onSave: _.noop,\r\n lineItem: null\r\n },\r\n events: {},\r\n beforeModalCreated: function () {\r\n this.collection = new PJQ.collections.budget.BudgetModifications(null, {\r\n budgetId: this.options.budget.id\r\n });\r\n this.collection.fetch({\r\n success: _.bind(function () {\r\n PJQ.app.session.project.fetchCostTypes(_.bind(function (costTypes) {\r\n this.costTypes = costTypes;\r\n PJQ.app.session.project.fetchCostCodes(_.bind(function (costCodes) {\r\n this.costCodes = costCodes;\r\n this.render();\r\n }, this));\r\n }, this));\r\n }, this)\r\n });\r\n },\r\n renderData: function () {\r\n return {}\r\n },\r\n afterRender: function () {\r\n if (this.collection != null && this.collection.isFetched) {\r\n let fnLineItemRow = _.bind(function (data, type, row) {\r\n let lineItem = this.options.budget.lineItems.get(data);\r\n if (lineItem != null) {\r\n let costCode = this.costCodes.get(lineItem.get('costCodeId'));\r\n let costType = this.costTypes.get(lineItem.get('costTypeId'));\r\n\r\n return costCode.get('name') + ' - ' + costType.get('code');\r\n }\r\n return 'N/A';\r\n }, this);\r\n\r\n let filteredData = this.options.lineItem != null ? _.filter(this.collection.models, function (model) {\r\n return model.get('fromLineItemId') === this.options.lineItem.id || model.get('toLineItemId') === this.options.lineItem.id\r\n }, this) : this.collection.models;\r\n new PJQ.views.dataTables.DataTable({\r\n el: this.$('.modifications-table'),\r\n data: filteredData,\r\n rowId: \"id\",\r\n paging: _.size(filteredData) > 10,\r\n order: [0, 'asc'],\r\n language: {\r\n zeroRecords: 'This line item has no budget modifications'\r\n },\r\n columns: [\r\n {\r\n \"data\": \"attributes.fromLineItemId\",\r\n \"title\": \"From\",\r\n \"minWidth\": 200,\r\n \"render\": fnLineItemRow\r\n },\r\n {\r\n \"data\": \"attributes.toLineItemId\",\r\n \"title\": \"To\",\r\n \"minWidth\": 200,\r\n \"render\": fnLineItemRow\r\n },\r\n {\r\n \"data\": \"attributes.amount\",\r\n \"title\": \"Amount\",\r\n \"width\": 150,\r\n \"render\": _.bind(function (data, type, row) {\r\n let extraClasses = '';\r\n if (this.options.lineItem != null) {\r\n if ((row.get('fromLineItemId') === this.options.lineItem.id && row.get('amount') < 0)\r\n || (row.get('toLineItemId') === this.options.lineItem.id && row.get('amount') > 0)) {\r\n extraClasses = 'text-success';\r\n } else {\r\n extraClasses = 'text-danger';\r\n }\r\n }\r\n return '' + PJQ.helpers.formatHelpers.formatCurrency(data) + '';\r\n }, this)\r\n },\r\n {\r\n \"data\": \"attributes.notes\",\r\n \"title\": \"Notes\"\r\n }\r\n ]\r\n })\r\n }\r\n }\r\n});","PJQ.views.budget.BudgetsViewsEditorModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-view-editor'),\r\n subTemplates: {\r\n columns: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'column-editor-columns'),\r\n columnEditorEmpty: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'view-column-editor-empty')\r\n },\r\n maxWidth: '900',\r\n maxHeight: '600',\r\n onSave: null,\r\n onDelete: null\r\n },\r\n events: {\r\n 'click .btn-create-view': 'createView',\r\n 'click .budget-view-option': 'changeTemplate',\r\n 'click .btn-return': 'viewBudgetViews',\r\n 'click .btn-save': 'saveView',\r\n 'click .btn-edit-columns': 'configureColumns',\r\n 'click .btn-cancel': 'cancelColumnEdit',\r\n 'click .budget-view-column': 'editColumnClicked',\r\n 'click .btn-delete-column': 'deleteColumn',\r\n 'click .create-source': 'createSourceColumn',\r\n 'click .create-calculated': 'createCalculatedColumn',\r\n 'click .edit-view': 'editViewClicked',\r\n 'click .delete-view': 'deleteViewClicked',\r\n 'click .set-default-view': 'defaultViewClicked'\r\n },\r\n modes: {\r\n CREATE: 'CREATE',\r\n EDIT: 'EDIT',\r\n VIEW: 'VIEW'\r\n },\r\n beforeModalCreated: function () {\r\n let blankView = new PJQ.models.budget.BudgetView({\r\n name: \"Blank View\",\r\n description: 'Blank view with minimum amount of columns.',\r\n companyId: -1,\r\n columns: []\r\n });\r\n\r\n this.budgetViews = new PJQ.collections.budget.BudgetViews();\r\n this.mode = this.options.mode ? this.options.mode : this.modes.VIEW;\r\n if (!this.budgetViews.isFetched) {\r\n this.budgetViews.fetch({\r\n success: _.bind(function () {\r\n this.budgetViews.add(blankView);\r\n this.render();\r\n }, this)\r\n })\r\n } else {\r\n this.render();\r\n }\r\n },\r\n renderData: function () {\r\n return {\r\n budgetViews: this.budgetViews,\r\n budgetView: this.budgetView,\r\n mode: this.mode,\r\n modes: this.modes,\r\n template: this.template\r\n }\r\n },\r\n afterRender: function () {\r\n new PJQ.Binder(this.$el, this.budgetView, {\r\n watchElements: [\r\n 'input'\r\n ]\r\n });\r\n\r\n if (this.mode === this.modes.VIEW) {\r\n this.renderViewMode();\r\n } else if (this.mode === this.modes.EDIT) {\r\n this.renderEditMode();\r\n } else if (this.mode === this.modes.CREATE) {\r\n this.renderCreateMode();\r\n }\r\n },\r\n renderEditMode: function () {\r\n this.renderColumns();\r\n this.renderColumnConfiguration()\r\n },\r\n renderCreateMode: function () {\r\n this.templateColumnTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$('.views-columns-table'),\r\n data: this.template.get('columns'),\r\n rowId: \"cid\",\r\n isHideSearch: true,\r\n paging: false,\r\n order: [0, 'asc'],\r\n language: {\r\n zeroRecords: 'No columns'\r\n },\r\n scrollY: \"40vh\",\r\n scrollCollapse: true,\r\n columns: [\r\n {\r\n \"data\": \"name\",\r\n \"title\": \"Column Name\",\r\n \"width\": \"50%\"\r\n },\r\n {\r\n \"data\": \"type\",\r\n \"title\": \"Type\",\r\n \"width\": \"50%\"\r\n }\r\n ]\r\n })\r\n },\r\n renderViewMode: function () {\r\n this.dataTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$('.views-table'),\r\n data: _.filter(this.budgetViews.models, function (model) {\r\n if (model.get('companyId') !== -1) {\r\n return model;\r\n }\r\n }),\r\n rowId: \"cid\",\r\n isHideSearch: true,\r\n paging: false,\r\n order: [1, 'asc'],\r\n language: {\r\n zeroRecords: 'No custom views exist. Press \"Create View\" to get started.'\r\n },\r\n scrollY: \"40vh\",\r\n scrollCollapse: true,\r\n onRowDoubleClick: _.bind(function (row) {\r\n this.editView(row.data());\r\n }, this),\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'Edit View',\r\n isShown: _.bind(function (row) {\r\n return true;\r\n }, this),\r\n onClick: _.bind(function (row) {\r\n this.editView(row.data());\r\n }, this)\r\n },\r\n {\r\n name: 'Set as Default View',\r\n isShown: _.bind(function (row) {\r\n return !row.get('isDefault');\r\n }, this),\r\n onClick: _.bind(function (row) {\r\n this.setViewIsDefault(row.data());\r\n }, this)\r\n },\r\n {\r\n name: 'Delete View',\r\n isDanger: true,\r\n isShown: _.bind(function (row) {\r\n return !row.get('isDefault');\r\n }, this),\r\n onClick: _.bind(function (row) {\r\n this.deleteView(row.data());\r\n }, this)\r\n }\r\n ]\r\n },\r\n columns: [\r\n {\r\n \"data\": null,\r\n \"title\": '',\r\n \"orderable\": false,\r\n \"render\": _.bind(function (data, type, row) {\r\n let icons = [];\r\n\r\n if (row.get('isDefault')) {\r\n icons.push(\"\");\r\n }\r\n\r\n return '
' + icons.join('') + '
';\r\n }, this)\r\n },\r\n {\r\n \"data\": \"attributes.name\",\r\n \"title\": \"View Name\"\r\n },\r\n {\r\n \"data\": \"attributes.description\",\r\n \"title\": \"View Description\"\r\n },\r\n {\r\n \"data\": \"\",\r\n \"title\": \"\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": \"160px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n let html = '
';\r\n if (!row.get('isDefault')) {\r\n html += '' +\r\n '' +\r\n '
';\r\n } else {\r\n html += ''\r\n }\r\n return html;\r\n }, this)\r\n }\r\n ]\r\n });\r\n },\r\n setModalWidth: function (width) {\r\n this.options.maxWidth = width;\r\n this.$('.modal-dialog').animate({\r\n maxWidth: width\r\n }, 200);\r\n },\r\n createView: function () {\r\n this.budgetView = new PJQ.models.budget.BudgetView({\r\n name: \"\",\r\n description: \"\",\r\n isDefault: false\r\n });\r\n this.mode = this.modes.CREATE;\r\n this.template = this.budgetViews.models[0];\r\n this.render();\r\n this.setModalWidth(1000);\r\n },\r\n defaultViewClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n view = this.dataTable.getRow(target.closest('tr')).data();\r\n this.setViewIsDefault(view);\r\n },\r\n setViewIsDefault: function (view, isDefault = true) {\r\n let currentDefault = _.find(this.budgetViews.models, function (model) {\r\n return model.get('isDefault');\r\n }, this)\r\n\r\n if (currentDefault != null) {\r\n currentDefault.set('isDefault', false);\r\n }\r\n view.set('isDefault', isDefault);\r\n view.save(null, {\r\n success: _.bind(function () {\r\n this.dataTable.refresh();\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Default View Changed'\r\n });\r\n }, this)\r\n })\r\n },\r\n editViewClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n view = this.dataTable.getRow(target.closest('tr')).data();\r\n this.editView(view);\r\n },\r\n editView: function (view) {\r\n this.mode = this.modes.EDIT;\r\n this.budgetView = view;\r\n let fnRender = _.bind(function () {\r\n this.render();\r\n this.setModalWidth(1000);\r\n }, this)\r\n if (!this.budgetView.isNew() && !this.budgetView.isFetched) {\r\n this.budgetView.fetch({\r\n success: _.bind(function () {\r\n fnRender();\r\n }, this)\r\n })\r\n } else {\r\n fnRender();\r\n }\r\n },\r\n viewBudgetViews: function () {\r\n if (this.budgetView != null && this.budgetView.hasChanged()) {\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.saveView()\r\n }, this),\r\n onDontSave: _.bind(function () {\r\n this.budgetView.restore();\r\n this.budgetView = null;\r\n this.mode = this.modes.VIEW;\r\n this.render();\r\n this.setModalWidth(900);\r\n }, this)\r\n });\r\n } else {\r\n this.mode = this.modes.VIEW;\r\n this.render();\r\n this.setModalWidth(900);\r\n }\r\n\r\n },\r\n changeTemplate: function (e) {\r\n let $target = $(e.currentTarget),\r\n cid = $target.data('cid');\r\n this.template = this.budgetViews.get(cid);\r\n this.render();\r\n },\r\n saveView: function () {\r\n if (this.validate()) {\r\n if (this.mode === this.modes.CREATE && this.template != null) {\r\n this.budgetView.columns = new PJQ.collections.budget.ViewColumns(this.template.columns.models);\r\n this.mode = this.modes.EDIT;\r\n this.render();\r\n } else {\r\n let isNew = this.budgetView.isNew();\r\n this.budgetView.save(null, {\r\n success: _.bind(function () {\r\n if (isNew) {\r\n this.budgetViews.add(this.budgetView);\r\n }\r\n this.mode = this.modes.VIEW;\r\n this.render();\r\n this.setModalWidth(900);\r\n PJQ.notifications.notify.successNotify({\r\n message: \"View successfully saved\"\r\n });\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.budgetView, this.budgetViews);\r\n }\r\n }, this)\r\n })\r\n }\r\n }\r\n },\r\n deleteViewClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n view = this.dataTable.getRow(target.closest('tr')).data();\r\n this.deleteView(view);\r\n },\r\n deleteView: function (view) {\r\n this.budgetViews.remove(view);\r\n view.destroy({\r\n success: _.bind(function () {\r\n if (typeof this.options.onDelete === 'function') {\r\n this.options.onDelete(view, this.budgetViews);\r\n }\r\n }, this)\r\n });\r\n this.render();\r\n },\r\n columnsSorted: function () {\r\n this.budgetView.columns.models = _.map(this.$('.budget-view-column'), function (el) {\r\n return this.budgetView.columns.get($(el).data('cid'));\r\n }, this);\r\n\r\n this.render();\r\n },\r\n cancelColumnEdit: function () {\r\n let columnsChanged = false;\r\n _.each(this.budgetView.columns.models, function (model) {\r\n if (model.hasChanged()) {\r\n columnsChanged = true;\r\n }\r\n }, this)\r\n if (columnsChanged) {\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.saveView()\r\n }, this),\r\n onDontSave: _.bind(function () {\r\n this.mode = this.modes.EDIT;\r\n _.each(this.budgetView.columns.models, function (model) {\r\n if (model.hasChanged()) {\r\n model.restore();\r\n }\r\n }, this)\r\n this.render();\r\n }, this)\r\n });\r\n } else {\r\n this.mode = this.modes.EDIT;\r\n this.render();\r\n }\r\n },\r\n deleteColumn: function (e) {\r\n e.stopPropagation();\r\n\r\n let $target = $(e.currentTarget),\r\n $item = $target.closest('.budget-list-item'),\r\n cid = $target.closest('.budget-list-item').data('cid');\r\n this.budgetView.columns.remove(cid);\r\n $item.remove();\r\n },\r\n editColumnClicked: function (e) {\r\n let $target = $(e.currentTarget),\r\n cid = $target.data('cid'),\r\n column = this.budgetView.columns.get(cid);\r\n\r\n this.$('.selected-list-item').removeClass('selected-list-item');\r\n $target.addClass('selected-list-item');\r\n\r\n this.editColumn(column);\r\n },\r\n editColumn: function (column) {\r\n // this.$('.selected-list-item').removeClass('selected-list-item');\r\n // $target.addClass('selected-list-item');\r\n this.renderColumnConfiguration(column);\r\n },\r\n renderColumns: function () {\r\n this.renderSubTemplate(false, this.options.subTemplates.columns, this.$('.select-budget-columns'), {\r\n budgetView: this.budgetView\r\n }, _.bind(function (el) {\r\n this.columnsSortable = new PJQ.Sortable(this.$('.modal-content'), {\r\n items: '.budget-view-column',\r\n connectWith: '.budget-view-column',\r\n onStop: _.bind(function () {\r\n this.columnsSorted();\r\n }, this)\r\n });\r\n }, this));\r\n },\r\n renderColumnConfiguration: function (column) {\r\n if (this.columnEditor) {\r\n this.columnEditor.remove()\r\n }\r\n\r\n let $editor = this.$('.column-config');\r\n if (column == null) {\r\n this.renderSubTemplate(true, this.options.subTemplates.columnEditorEmpty, $editor);\r\n return;\r\n }\r\n\r\n let $menuItem = $('.budget-list-item[data-cid=\"' + column.cid + '\"] .column-name');\r\n this.columnEditor = new PJQ.views.budget.ViewColumnEditor({\r\n el: $editor,\r\n column: column,\r\n budgetView: this.budgetView,\r\n onNameChange: function () {\r\n $menuItem.text(column.get('name'));\r\n }\r\n })\r\n },\r\n createSourceColumn: function () {\r\n let column = new PJQ.models.budget.ViewColumn({\r\n type: PJQ.constants.budgetHelpers.columnTypes.SOURCE,\r\n name: '',\r\n format: null,\r\n options: {}\r\n });\r\n this.budgetView.columns.add(column);\r\n this.editColumn(column);\r\n this.renderColumns();\r\n },\r\n createCalculatedColumn: function () {\r\n let column = new PJQ.models.budget.ViewColumn({\r\n type: PJQ.constants.budgetHelpers.columnTypes.CALCULATED,\r\n name: '',\r\n format: PJQ.constants.budgetHelpers.columnFormats.MONEY,\r\n options: {}\r\n })\r\n this.budgetView.columns.add(column);\r\n this.editColumn(column);\r\n this.renderColumns();\r\n },\r\n validate: function () {\r\n let isValid = true;\r\n if (this.mode === this.modes.EDIT) {\r\n _.each(this.budgetView.columns.models, function (model) {\r\n let $menuItem = $('.budget-list-item[data-cid=\"' + model.cid + '\"]');\r\n $menuItem.removeClass('budget-list-item-error')\r\n let markInvalid = _.bind(function (model) {\r\n $menuItem.addClass('budget-list-item-error')\r\n }, this)\r\n if (model.get('type') === PJQ.constants.budgetHelpers.columnTypes.CALCULATED) {\r\n _.each(model.calculations.models, function (calc, index) {\r\n if (calc.get('source') == null) {\r\n isValid = false;\r\n markInvalid(model);\r\n }\r\n\r\n if (index > 0 && calc.get('operator') == null) {\r\n isValid = false;\r\n markInvalid(model);\r\n }\r\n }, this)\r\n } else if (model.get('source') == null) {\r\n isValid = false;\r\n markInvalid(model);\r\n }\r\n\r\n if (_.size(model.get('format')) === 0 &&\r\n model.get('source') !== \"GroupName\" &&\r\n model.get('source') !== \"CostTypeId\" &&\r\n model.get('source') !== \"Notes\") {\r\n isValid = false;\r\n markInvalid(model);\r\n }\r\n }, this)\r\n }\r\n return isValid;\r\n }\r\n});\r\n\r\nPJQ.views.budget.ViewColumnEditor = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'view-column-editor'),\r\n subTemplates: {\r\n calculation: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'view-calculation')\r\n },\r\n onNameChange: null\r\n },\r\n events: {\r\n 'keyup .view-name': 'nameChanged',\r\n 'click .btn-add-calculation': 'addCalculation',\r\n 'click .btn-remove-calculation': 'deleteCalculation'\r\n },\r\n beforeFirstRender: function () {\r\n this.column = this.options.column;\r\n this.budgetView = this.options.budgetView;\r\n\r\n this.isFetched = false;\r\n PJQ.app.session.fetchERPIntegration(_.bind(function (erp) {\r\n this.erpIntegration = erp;\r\n this.isFetched = true;\r\n this.render();\r\n }, this));\r\n },\r\n renderData: function () {\r\n return {\r\n column: this.column,\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 new PJQ.Binder(this.$el, this.column, {\r\n watchElements: [\r\n 'input'\r\n ]\r\n });\r\n\r\n if (_.size(this.column.get('name')) === 0) {\r\n this.$('.view-name').focus();\r\n }\r\n\r\n if (_.size(this.column.get('format')) === 0) {\r\n this.column.set('format', 'money');\r\n }\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-format'),\r\n defaultValue: this.column.get('format'),\r\n onChange: _.bind(function (value) {\r\n this.column.set('format', value);\r\n }, this)\r\n });\r\n\r\n if (this.column.get('type') === PJQ.constants.budgetHelpers.columnTypes.CALCULATED) {\r\n this.renderCalculations();\r\n } else if (this.column.get('type') === PJQ.constants.budgetHelpers.columnTypes.SOURCE) {\r\n let source = this.column.get('source'),\r\n choices = _.map(PJQ.constants.budgetHelpers.getColumnSources(), function (source) {\r\n return {\r\n id: source.source,\r\n name: source.name + (source.isErp ? ('ERP') : '')\r\n };\r\n });\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-source'),\r\n defaultValue: source,\r\n choices: choices,\r\n onChange: _.bind(function (value) {\r\n let colSource = _.find(PJQ.constants.budgetHelpers.getColumnSources(), function (src) {\r\n return src.source === value;\r\n });\r\n if (_.size(this.column.get('name')) === 0) {\r\n this.column.set('name', colSource.name);\r\n this.$('.view-name', colSource.name);\r\n this.nameChanged();\r\n }\r\n\r\n this.column.set({\r\n source: value,\r\n format: colSource.format,\r\n options: {}\r\n });\r\n this.render();\r\n }, this)\r\n });\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.source-status-filter'),\r\n noneSelectedText: 'No Status Filters',\r\n isMultiple: true,\r\n defaultValue: this.column.get('options') != null ? _.map(this.column.get('options').statuses, function (value) {\r\n return value.toString();\r\n }) : null,\r\n onChange: _.bind(function (value) {\r\n let statuses = _.map(value, function (id) {\r\n return parseInt(id);\r\n }, this),\r\n options = {\r\n \"statuses\": statuses\r\n }\r\n this.column.set('options', options);\r\n }, this),\r\n title: 'No Filters'\r\n });\r\n }\r\n },\r\n nameChanged: function () {\r\n if (typeof this.options.onNameChange === 'function') {\r\n this.options.onNameChange(this.column);\r\n }\r\n },\r\n renderCalculations: function () {\r\n this.$('.calculation-container').empty();\r\n\r\n if (_.size(this.column.calculations.models) === 0) {\r\n this.addCalculation();\r\n } else {\r\n _.each(this.column.calculations.models, function (model) {\r\n this.renderCalculation(model);\r\n }, this)\r\n }\r\n },\r\n renderCalculation: function (calculation) {\r\n this.renderSubTemplate(true, this.options.subTemplates.calculation, this.$('.calculation-container'), {\r\n model: calculation\r\n }, _.bind(function (el) {\r\n let $calc = $(el);\r\n new PJQ.Binder($calc, calculation, {\r\n watchElements: [\r\n 'input'\r\n ]\r\n });\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: $calc.find('.operator'),\r\n noneSelectedText: null,\r\n defaultValue: calculation.get('operator'),\r\n onChange: _.bind(function (value) {\r\n calculation.set('operator', value);\r\n }, this),\r\n title: 'Select Operator'\r\n });\r\n\r\n let choices = _.map(PJQ.constants.budgetHelpers.getColumnSources(), function (source) {\r\n return {\r\n id: source.source,\r\n name: source.name + (source.isErp ? ('ERP') : '')\r\n };\r\n });\r\n new PJQ.inputs.Selectpicker({\r\n el: $calc.find('.select-source'),\r\n noneSelectedText: null,\r\n choices: choices,\r\n defaultValue: calculation.get('source'),\r\n onChange: _.bind(function (value) {\r\n calculation.set('source', value);\r\n this.render();\r\n }, this),\r\n title: 'Select Column'\r\n });\r\n\r\n if (calculation.get('source') === \"PrimeContractValues\" || calculation.get('source') === \"PrimeContractChangeOrderValues\"\r\n || calculation.get('source') === \"CommitmentValues\" || calculation.get('source') === \"CommitmentChangeOrderValues\"\r\n || calculation.get('source') === \"DirectCostValues\" || calculation.get('source') === \"PayableInvoiceValues\"\r\n || calculation.get('source') === \"ReceivableInvoiceValues\") {\r\n new PJQ.inputs.Selectpicker({\r\n el: $calc.find('.select-source-filter'),\r\n noneSelectedText: 'No Status Filters',\r\n isMultiple: true,\r\n defaultValue: calculation.get('options') != null ? _.map(calculation.get('options').statuses, function (value) {\r\n return value.toString();\r\n }) : null,\r\n onChange: _.bind(function (value) {\r\n let statuses = _.map(value, function (id) {\r\n return parseInt(id);\r\n }, this),\r\n options = {\r\n \"statuses\": statuses\r\n }\r\n calculation.set('options', options);\r\n }, this),\r\n title: 'No Filters'\r\n });\r\n }\r\n\r\n }, this));\r\n },\r\n addCalculation: function () {\r\n let calculation = new PJQ.models.budget.ViewColumnCalculation({\r\n source: null\r\n });\r\n if (_.size(this.column.calculations.models) === 0) {\r\n let calculations = [calculation];\r\n calculations.push(new PJQ.models.budget.ViewColumnCalculation({\r\n source: null\r\n }));\r\n\r\n this.column.calculations.add(calculations);\r\n this.renderCalculations();\r\n } else {\r\n this.column.calculations.add(calculation);\r\n this.renderCalculations();\r\n }\r\n },\r\n deleteCalculation: function (e) {\r\n let $target = $(e.currentTarget),\r\n cid = $target.data('cid'),\r\n calculation = this.column.calculations.get(cid);\r\n\r\n this.column.calculations.remove(calculation);\r\n this.renderCalculations();\r\n }\r\n});\r\n","PJQ.views.budget.BulkEditLineItemsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-bulk-edit-line-items'),\n maxWidth: 400,\n onSave: null\n },\n events: {\n 'click .btn-save': 'save'\n },\n beforeModalCreated: function () {\n if(_.size(this.options.lineItems) === 0){\n return;\n }\n\n this.model = new PJQ.models.BaseModel();\n },\n renderData: function () {\n return {\n lineItems: this.options.lineItems,\n model: this.model,\n enableStoredMaterials: this.options.enableStoredMaterials,\n enableRetainage: this.options.enableRetainage\n }\n },\n afterRender: function() {\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input'\n ],\n onChange: ($el, attribute, value) => {\n if(_.size($el.val()) > 0){\n this.model.set(attribute, value);\n }\n else{\n this.model.unset(attribute);\n }\n }\n });\n\n PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.input-dollars-full'), 2, true);\n PJQ.helpers.inputHelpers.inputMaskPercent(this.$('.input-percent'), 2, true);\n },\n save: function() {\n _.each(this.options.lineItems, (lineItem) => {\n _.each(this.model.attributes, (value, key) => {\n lineItem.set(key, value/100)\n });\n });\n\n if(typeof this.options.onSave === 'function'){\n this.options.onSave();\n }\n this.removeModal();\n }\n});","PJQ.collections.changeRequests = PJQ.collections.changeRequests ? PJQ.collections.changeRequests : {};\nPJQ.models.changeRequests = PJQ.models.changeRequests ? PJQ.models.changeRequests : {};\nPJQ.views.changeRequests = PJQ.views.changeRequests ? PJQ.views.changeRequests : {};\n\nPJQ.modules.changeRequests = {\n routes: [\n {\n route: 'projects/:projectId/changerequests',\n name: 'changerequests',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"changerequests\");\n }\n },\n {\n route: 'projects/:projectId/changerequests/:changeRequestId',\n name: 'changerequest',\n callback: function (projectId, changeRequestId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"changerequests\", {\n changeRequestId: parseInt(changeRequestId)\n });\n }\n },\n {\n route: 'projects/:projectId/changerequests/rfq',\n name: 'rfq1',\n callback: function (projectId, changeRequestId, rfqId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"changerequests\", {\n view: 'rfq'\n });\n }\n },\n {\n route: 'projects/:projectId/rfq/:rfqId',\n name: 'rfq2',\n callback: function (projectId, rfqId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"changerequests\", {\n view: 'rfq',\n rfqId: parseInt(rfqId),\n });\n }\n },\n {\n route: 'projects/:projectId/changerequests/rfq/:rfqId',\n name: 'rfq3',\n callback: function (projectId, rfqId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"changerequests\", {\n rfqId: parseInt(rfqId),\n view: 'rfq'\n });\n }\n },\n {\n route: 'projects/:projectId/changerequests/:changeRequestId/rfq/:rfqId',\n name: 'rfq4',\n callback: function (projectId, changeRequestId, rfqId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"changerequests\", {\n changeRequestId: parseInt(changeRequestId),\n rfqId: parseInt(rfqId),\n view: 'rfq'\n });\n }\n }\n ]\n};\n\nPJQ.app.addRoutes(PJQ.modules.changeRequests.routes);","PJQ.views.changeRequests.ChangeRequestDataTable = PJQ.views.dataTables.DataTable.extend({\n defaults: {\n language: {\n emptyTable: 'No Change Requests have been created yet',\n zeroRecords: \"No Change Requests matched the search criteria\"\n },\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'data-table-header-change-requests')\n },\n toggleRowClass: '.change-request-toggle-row',\n onViewChangeRequest: null\n },\n events: {\n 'click .btn-view-change-request': 'viewChangeRequestClicked',\n 'click .btn-view-prime-contract': 'viewPrimeContractClicked'\n },\n beforeDataTableRender: function () {\n this.options.pageLength = this.options.settings ? this.options.settings.rowsPerPage : 10;\n },\n getDefaultFilter: function () {\n let defaultFilter = {};\n defaultFilter = this.options.userSettings.get('defaultStatusFilter');\n return defaultFilter;\n },\n afterSearch: function () {\n if(typeof this.options.afterSearch === 'function'){\n this.options.afterSearch();\n }\n },\n afterHeaderRender: function (){\n new PJQ.inputs.Selectpicker({\n el: this.$('.change-requests-status-filter'),\n defaultValue: this.getDefaultFilter(),\n isIntChoices: true,\n isMultiple: true,\n noneSelectedText: 'No Filters',\n onChange: _.bind(function (value) {\n this.setFilter(PJQ.constants.changeRequests.filterType.STATUS_FILTER, value);\n }, this)\n });\n this.setFilter(PJQ.constants.changeRequests.filterType.STATUS_FILTER, this.getDefaultFilter());\n },\n getFilterData: function () {\n let statusFilter = this.getFilter(PJQ.constants.changeRequests.filterType.STATUS_FILTER);\n if (_.size(statusFilter) === 0) {\n return this.options.data;\n }\n\n return _.filter(this.options.data, function (row) {\n return (_.size(statusFilter) === 0 || _.contains(statusFilter, row.get('statusId')));\n });\n },\n getColumns: function (includeAllColumns = false) {\n this.options.canViewPrimeContracts = PJQ.app.session.project.hasPermission('primeContracts.canView');\n\n let columns = [],\n includeColumns = ['status', 'primeContract', 'client.companyName', 'number', 'title', 'description', 'createdOn', 'amount', 'revenue', 'markupAmount', 'taxAmount', 'grandTotal'];\n\n if (this.options.customFields) {\n _.each(this.options.customFields.models, _.bind(function(customField) {\n includeColumns.push('fieldValue'+customField.get('fieldNumber'));\n }, this));\n }\n\n if (!includeAllColumns) {\n if (this.options.settings && _.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings && this.options.settings.columnsDefault ? this.options.settings.columnsDefault : includeColumns;\n\n columns.push({\n \"columnData\": \"childData\",\n \"data\": null,\n \"title\": \"\",\n \"width\": \"20px\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return PJQ.helpers.erp.getERPIcon(row.erpSyncStatus());\n }\n });\n }\n\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'status':\n columns.push({\n \"columnData\": \"status\",\n \"data\": \"attributes.statusId\",\n \"title\": \"Status\",\n \"width\": \"100px\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.constants.changeRequests.changeRequestStatusNames[row.get('statusId')]\n }, this)\n });\n break;\n case 'primeContract':\n columns.push({\n \"columnData\": \"primeContract\",\n \"title\": \"Contract\",\n \"data\": \"attributes.primeContractNumber\",\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n if(this.options.canViewPrimeContracts){\n return '' + row.get('primeContractNumber') + '';\n }\n return data;\n }, this)\n },);\n break;\n case 'number':\n columns.push({\n \"columnData\": \"number\",\n \"data\": \"attributes.number\",\n \"title\": \"Number\",\n \"render\": _.bind(function (data, type, row) {\n return '' + row.get('number') + '';\n }, this)\n });\n break;\n case 'title':\n columns.push({\n \"columnData\": \"title\",\n \"data\": \"attributes.title\",\n \"title\": \"Title\"\n });\n break;\n case 'description':\n columns.push({\n \"columnData\": \"description\",\n \"data\": \"attributes.description\",\n \"title\": \"Description\"\n });\n break;\n case 'createdOn':\n columns.push({\n \"columnData\": \"createdOn\",\n \"data\": \"attributes.createdOn\",\n \"title\": 'Created',\n \"width\": '90px',\n \"render\": _.bind(function (data, type, row) {\n if(_.size(data) === 0){\n return '';\n }\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }, this)\n });\n break;\n case 'client.companyName':\n columns.push({\n \"columnData\": \"client.companyName\",\n \"title\": \"Client\",\n \"titleSettings\": \"Client\",\n \"render\": _.bind(function (data, type, row) {\n return row.get('client') ? row.get('client').companyName : 'N/A';\n }, this)\n });\n break;\n case 'amount':\n columns.push({\n \"columnData\": \"amount\",\n \"data\": \"attributes.amount\",\n \"width\": \"10%\",\n \"title\": \"Cost\",\n \"className\": \"text-align-right\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('amount'));\n }, this)\n });\n break;\n case 'revenue':\n columns.push({\n \"columnData\": \"revenue\",\n \"data\": \"attributes.revenue\",\n \"width\": \"10%\",\n \"title\": \"Revenue\",\n \"className\": \"text-align-right\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('revenue'));\n }, this)\n });\n break;\n case 'taxAmount':\n columns.push({\n \"columnData\": \"taxAmount\",\n \"data\": \"attributes.taxAmount\",\n \"title\": \"Tax\",\n \"width\": \"100px\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this)\n });\n break;\n case 'markupAmount':\n columns.push({\n \"columnData\": \"markupAmount\",\n \"data\": \"attributes.markupAmount\",\n \"title\": \"Markup\",\n \"width\": \"100px\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this)\n });\n break;\n case 'grandTotal':\n columns.push({\n \"columnData\": \"grandTotal\",\n \"data\": \"attributes.amount\",\n \"title\": \"Grand Total\",\n \"width\": \"100px\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(row.getGrandTotal());\n }, this)\n });\n break;\n default:\n if (columnName.startsWith('fieldValue')) {\n _.each(this.options.customFields.models, function(customField) {\n if (columnName === 'fieldValue' + customField.get('fieldNumber')) {\n columns.push({\n \"columnData\": 'fieldValue' + customField.get('fieldNumber'),\n \"title\": customField.get('name'),\n \"render\": function (data, type, row) {\n let fieldValue = row.getCustomFieldValue(customField.get('id'));\n fieldValue = (fieldValue !== null) ? fieldValue : '';\n switch(customField.get('fieldTypeId')) {\n case PJQ.constants.commitments.customFieldType.BOOLEAN:\n if (fieldValue != null)\n fieldValue = fieldValue ? 'Yes' : 'No';\n break;\n case PJQ.constants.commitments.customFieldType.CHOICE:\n let choices = [];\n // convert single choice value into array so that the logic below can work for both types.\n if (typeof fieldValue === 'number')\n fieldValue = [fieldValue];\n\n _.each(customField.choices.models, _.bind(function (choice) {\n if (_.find(fieldValue, function (value) {\n return value === choice.get('id');\n }))\n choices.push(choice.get('name'));\n }, this));\n\n fieldValue = choices.join((', '));\n break;\n case PJQ.constants.commitments.customFieldType.DATE:\n if (fieldValue) {\n if (type !== 'sort' && type !== 'type')\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n if (fieldValue === undefined)\n fieldValue = '';\n\n break;\n case PJQ.constants.commitments.customFieldType.DATETIME:\n if (fieldValue) {\n if (type !== 'sort' && type !== 'type')\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true);\n }\n if (fieldValue === undefined)\n fieldValue = '';\n\n break;\n case PJQ.constants.commitments.customFieldType.INTEGER:\n if (type !== 'sort' && type !== 'type' && fieldValue) {\n fieldValue = parseInt(fieldValue).toLocaleString();\n }\n break;\n case PJQ.constants.commitments.customFieldType.MONEY:\n if (type === 'sort' || type === 'type') {\n if (fieldValue && fieldValue !== '$')\n fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true));\n else\n fieldValue = 0;\n }\n else {\n fieldValue = PJQ.helpers.formatHelpers.formatCurrency(parseInt(PJQ.helpers.formatHelpers.numbersOnly(fieldValue)));\n }\n break;\n case PJQ.constants.commitments.customFieldType.PERCENT:\n if (type === 'sort' || type === 'type') {\n if (fieldValue && fieldValue !== '$')\n fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true)).toFixed(2);\n else\n fieldValue = 0;\n }\n else {\n fieldValue = fieldValue ? fieldValue.toString() + '%' : '';\n }\n\n break;\n }\n\n return fieldValue;\n }\n });\n }\n });\n }\n break;\n }\n }, this));\n\n if (!includeAllColumns) {\n columns.push({\n \"title\": '',\n \"render\": _.bind(function (data, type, row) {\n return '
';\n }, this),\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"90px\",\n \"className\": \"text-center\",\n \"visible\": true\n });\n }\n\n return columns;\n },\n viewChangeRequestClicked: function (e){\n if(typeof(this.options.onViewChangeRequest) === 'function'){\n let row = this.getRow((e.currentTarget).closest('tr')),\n invoice = row.data();\n if(invoice != null){\n this.options.onViewChangeRequest(invoice);\n }\n }\n },\n viewPrimeContractClicked: function (e) {\n let row = this.getRow((e.currentTarget).closest('tr'));\n this.viewPrimeContract(row.data().get('primeContractId'));\n },\n viewPrimeContract: function(primeContractId) {\n new PJQ.views.primeContracts.PrimeContractEditModal({\n model: new PJQ.models.primeContracts.PrimeContract({\n id: primeContractId\n })\n });\n }\n});","PJQ.views.changeRequests.ChangeRequestEditModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-change-request-edit'),\n width: '95%',\n maxWidth: 1500,\n model: null,\n isShowCloseButton: true,\n onSave: _.noop(),\n onDelete: _.noop()\n },\n events: {\n 'click .btn-view-prime-contract': 'viewPrimeContract',\n 'click .btn-add-line-item': 'addLineItem',\n 'click .btn-close': 'close',\n 'click .btn-submit': 'submitChangeRequest',\n 'click .btn-save-email': 'saveEmail',\n 'click .btn-save': 'saveChangeRequest',\n 'click .btn-delete': 'deleteChangeRequest',\n 'click .btn-push-erp': 'pushERP',\n 'click .btn-undo-push-erp': 'undoPushERP',\n 'click .btn-unlink-erp': 'unlinkERP',\n 'click .btn-export': 'exportClicked',\n 'click .btn-export-costs': 'exportCosts',\n 'click .btn-export-revenue': 'exportRevenue',\n 'click .btn-email': 'email',\n 'click .nav-link': 'activeViewChanged',\n 'click .btn-view-rfq': 'viewRFQClicked'\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n\n this.settings = await PJQ.app.session.fetchChangeRequestSettings();\n this.customFields = await this.options.project.fetchChangeRequestCustomFields();\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\n\n if (this.erpIntegration != null && this.erpIntegration.getSetting('syncProjects')) {\n await this.options.project.fetchERPObject();\n }\n\n if (this.options.primeContract == null) {\n this.options.primeContract = new PJQ.models.primeContracts.PrimeContract({\n id: this.model.get('primeContractId')\n });\n }\n\n if (!this.options.primeContract.isFetched) {\n await this.options.primeContract.fetch();\n }\n\n if (this.model == null) {\n let customFieldValues = [];\n _.each(this.customFields.models, function (model, index) {\n let value = model.get('defaultValue') ? model.get('defaultValue') : '';\n if (model.get('fieldType') === 'CHOICE') {\n value = parseInt(value);\n }\n customFieldValues.push({\n fieldNumber: model.get('fieldNumber'),\n fieldTypeId: model.get('fieldTypeId'),\n fieldType: model.get('fieldType'),\n isMultiple: model.get('isMultiple'),\n value: value,\n id: model.get('id')\n })\n }, this);\n\n this.model = new PJQ.models.changeRequests.ChangeRequest({\n description: '',\n primeContractId: this.options.primeContract.id,\n primeContractNumber: this.options.primeContract.get('number'),\n client: this.options.primeContract.client,\n clientId: this.options.primeContract.get('clientId'),\n accountingMethod: this.options.primeContract.get('accountingMethod'),\n projectId: this.options.primeContract.get('projectId'),\n statusId: PJQ.constants.changeRequests.changeRequestStatus.DRAFT,\n customFieldValues: customFieldValues,\n markupItems: this.options.primeContract.markupItems.toJSON()\n });\n }\n\n if (!this.model.isNew()) {\n await this.model.fetch();\n }\n\n this.isFetched = true;\n this.render();\n },\n beforeRender: function () {\n this.options.canAdd = this.options.project.hasPermission('changeRequests.canAdd');\n this.options.canEdit = this.options.project.hasPermission('changeRequests.canEdit');\n this.options.canEditLineItems = this.options.canEdit;\n this.options.canViewPrimeContracts = this.options.project.hasPermission('primeContracts.canView');\n this.options.canViewRFQs = this.options.project.hasPermission('changeRequests.canViewRFQs');\n this.options.isAdmin = this.options.project.hasPermission('changeRequests.isAdmin');\n this.options.canDelete = this.options.isAdmin;\n this.options.canEditStatus = this.options.isAdmin;\n\n if (!this.isFetched || this.model.isNew()) {\n return;\n }\n\n let fnGetGreaterStatuses = (statusId) => {\n return _.filter(PJQ.constants.changeRequests.changeRequestStatus, (st) => {\n return st < statusId;\n });\n },\n status = this.model.get('statusId');\n if (status === PJQ.constants.changeRequests.changeRequestStatus.APPROVED\n || status === PJQ.constants.changeRequests.changeRequestStatus.VOID) {\n this.options.canEditLineItems = false;\n this.options.canEdit = PJQ.app.session.project.hasPermission('changeRequests.canEdit');\n this.options.canDelete = false;\n } else {\n this.options.canEdit = PJQ.app.session.project.hasPermission('changeRequests.canEdit');\n this.options.canEditLineItems = this.options.canEdit;\n this.options.canDelete = this.options.isAdmin;\n }\n\n let hasAssignedItems = _.some(this.model.lineItems.models, (lineItem) => {\n return lineItem.get('revenueLineItemId') > 0;\n });\n if (hasAssignedItems) {\n this.options.disabledStatuses = fnGetGreaterStatuses(PJQ.constants.changeRequests.changeRequestStatus.APPROVED);\n this.options.canEditLineItems = false;\n }\n\n if (this.model.isERPSynced()) {\n let syncStatus = this.model.erpSyncStatus();\n if (syncStatus === PJQ.constants.integrations.erp.syncStatuses.REVIEWING\n || syncStatus === PJQ.constants.integrations.erp.syncStatuses.APPROVED\n || syncStatus === PJQ.constants.integrations.erp.syncStatuses.FAILED\n || syncStatus === PJQ.constants.integrations.erp.syncStatuses.SYNCED\n ) {\n this.options.disabledStatuses = fnGetGreaterStatuses(PJQ.constants.commitments.commitmentStatus.APPROVED);\n this.options.canEdit = false;\n this.options.canEditLineItems = false;\n this.options.canDelete = false;\n }\n }\n },\n renderData: function () {\n return {\n model: this.model,\n customFields: this.customFields,\n erpIntegration: this.erpIntegration,\n canAdd: this.options.canAdd,\n canEditLineItems: this.options.canEditLineItems,\n canEdit: this.options.canEdit,\n canDelete: this.options.canDelete,\n isAdmin: this.options.isAdmin,\n canViewPrimeContracts: this.options.canViewPrimeContracts,\n canViewRFQs: this.options.canViewRFQs,\n isFetched: this.isFetched,\n activeView: this.options.activeView,\n views: this.views,\n checkFieldVisible: _.bind(this.checkFieldVisible, this),\n checkFieldRequired: _.bind(this.checkFieldRequired, this)\n }\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n this.activateView(this.options.activeView);\n\n this.stopListening(this.model);\n this.listenTo(this.model, 'change:statusId', () => {\n this.renderERP();\n });\n this.stopListening(this.model.lineItems);\n this.listenTo(this.model.lineItems, 'update', () => {\n this.renderERP();\n });\n this.renderERP();\n\n this.renderGeneral();\n this.renderLineItems();\n this.renderMarkups();\n this.updateCounts();\n },\n updateCounts: function () {\n this.$('.count-line-items').text(_.size(this.model.lineItems.models));\n this.$('.count-markups').text(_.size(_.filter(this.model.markupItems.models, function (item) {\n return !item.get('delete');\n })));\n },\n views: {\n GENERAL: 'CR_General',\n LINEITEMS: 'CR_LineItems',\n MARKUPS: 'CR_Markups',\n RFQ: 'CR_RFQ'\n },\n activeViewChanged: function (e) {\n let view = e.target.hash ? e.target.hash.replace('#', '') : null;\n this.activateView(view);\n },\n activateView: function (view) {\n switch (view) {\n case this.views.GENERAL:\n case this.views.LINEITEMS:\n case this.views.MARKUPS:\n break;\n case this.views.RFQ:\n this.renderRFQ();\n break;\n default:\n view = this.views.GENERAL;\n break;\n }\n\n this.$('.nav-link[href=\"#' + view + '\"]').tab('show');\n this.options.activeView = view;\n },\n renderGeneral: function () {\n new PJQ.Binder(this.$el, this.model, {\n canEdit: !this.options.canEdit ? false : null,\n useDecimalPercentFields: true,\n watchElements: [\n 'input',\n 'textarea'\n ]\n });\n\n let choices = _.map(PJQ.constants.changeRequests.changeRequestStatus, (st) => {\n return {\n id: st,\n name: PJQ.constants.changeRequests.changeRequestStatusNames[st],\n disabled: this.options.disabledStatuses != null && this.options.disabledStatuses.indexOf(st) > -1\n }\n });\n this.statusPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-status'),\n choices: choices,\n isIntChoices: true,\n defaultValue: this.model.get('statusId'),\n canEdit: this.options.canEditStatus,\n onChange: _.bind(function (value) {\n let newStatus = value,\n oldStatus = this.model.get('statusId');\n this.model.set('statusId', newStatus);\n if (!this.model.isNew()) {\n this.model.save(null, {\n success: _.bind(function () {\n this.model.dirtyAttributes = {};\n if (typeof this.options.onSave === 'function')\n this.options.onSave(this.model, false);\n this.render();\n PJQ.notifications.notify.successNotify({\n message: 'Change Request saved successfully'\n });\n }, this)\n })\n }\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-revenue-source'),\n choices: [\n {\n id: PJQ.constants.changeRequests.revenueSource.REVENUE,\n name: PJQ.constants.changeRequests.revenueSourceNames[PJQ.constants.changeRequests.revenueSource.REVENUE]\n },\n {\n id: PJQ.constants.changeRequests.revenueSource.MANUAL,\n name: PJQ.constants.changeRequests.revenueSourceNames[PJQ.constants.changeRequests.revenueSource.MANUAL]\n }\n ],\n isIntChoices: true,\n defaultValue: this.model.get('revenueSource') ?? PJQ.constants.changeRequests.revenueSource.REVENUE,\n canEdit: this.options.canEdit,\n onChange: (value) => {\n this.model.set({\n revenueSource: value\n });\n this.refreshLineItems()\n }\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-scope'),\n choices: [\n {\n id: PJQ.constants.changeRequests.scope.OWNER_CHANGE,\n name: PJQ.constants.changeRequests.scopeNames[PJQ.constants.changeRequests.scope.OWNER_CHANGE]\n },\n {\n id: PJQ.constants.changeRequests.scope.INTERNAL,\n name: PJQ.constants.changeRequests.scopeNames[PJQ.constants.changeRequests.scope.INTERNAL]\n }\n ],\n isIntChoices: true,\n defaultValue: this.model.get('scope') ?? PJQ.constants.changeRequests.scope.OWNER_CHANGE,\n canEdit: this.options.canEdit,\n onChange: (value) => {\n this.model.set({\n revenueSource: PJQ.constants.changeRequests.revenueSource.MANUAL,\n scope: value\n });\n this.model.set('scope', value);\n this.refreshLineItems()\n }\n });\n\n this.contractCompanyPicker = new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.client'),\n selectedContact: this.model.client,\n canEdit: false,\n displayContactsBlock: true\n });\n\n if (_.size(this.customFields) > 0) {\n this.customFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\n el: this.$('.change-request-custom-fields'),\n isEdit: this.options.canEdit,\n isAdmin: this.options.isAdmin,\n collection: this.customFields,\n fieldValues: this.model.get('customFieldValues'),\n onChange: _.bind(function () {\n this.model.isDirty = true;\n }, this)\n });\n }\n\n if (this.checkFieldVisible('attachments')) {\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.cr-file-uploader'),\n collection: this.model.attachments,\n canUpload: this.options.canEdit,\n useApiV2: true,\n canDelete: this.options.canEdit && this.options.isAdmin,\n previewImageDimension: 150,\n onSuccess: _.bind(function (file) {\n this.model.isDirty = true;\n }, this),\n onDelete: _.bind(function (attachment, callback) {\n if (attachment.get('id') > 0) {\n attachment.set('delete', true);\n } else {\n attachment.destroy();\n }\n\n this.model.isDirty = true;\n callback();\n }, this)\n });\n }\n },\n refreshLineItems: function () {\n if (this.lineItemsView != null) {\n this.lineItemsView.options.copyCostToRevenue = this.model.get('revenueSource') !== PJQ.constants.changeRequests.revenueSource.MANUAL;\n this.lineItemsView.options.showRevenue = this.model.get('scope') !== PJQ.constants.changeRequests.scope.INTERNAL;\n this.lineItemsView.renderLineItemsTable();\n }\n },\n renderLineItems() {\n let showRevenue = this.model.get('scope') !== PJQ.constants.changeRequests.scope.INTERNAL;\n this.lineItemsView = new PJQ.views.budget.LineItemsView({\n el: this.$('.cr-line-items'),\n model: this.model,\n collection: this.model.lineItems,\n lineItemModel: PJQ.models.changeRequests.ChangeRequestLineItem,\n changeRequest: this.model,\n canEdit: this.options.canEditLineItems,\n canApplyChangeRequestCosts: this.options.isAdmin,\n canApplyChangeRequestRevenue: this.options.isAdmin && this.model.get('statusId') === PJQ.constants.changeRequests.changeRequestStatus.APPROVED,\n canSendRFQ: this.model.get('statusId') !== PJQ.constants.changeRequests.changeRequestStatus.APPROVED\n && this.model.get('statusId') !== PJQ.constants.changeRequests.changeRequestStatus.REJECTED\n && this.model.get('statusId') !== PJQ.constants.changeRequests.changeRequestStatus.VOID,\n canDelete: this.options.canEditLineItems,\n primeContract: this.options.primeContract,\n accountingMethod: this.model.get('accountingMethod'),\n showRevenue: showRevenue,\n copyCostToRevenue: showRevenue && this.model.get('revenueSource') !== PJQ.constants.changeRequests.revenueSource.MANUAL,\n canChangeAccountingMethod: this.options.canEditLineItems,\n financialMarkups: this.model.markupItems,\n enableSelection: true,\n showSubTotal: true,\n showGrandTotal: true,\n onCreateFromLineItems: () => {\n this.removeModal();\n },\n onLineItemChange: () => {\n this.model.isDirty = true;\n },\n onLineItemAdd: () => {\n this.model.isDirty = true;\n this.updateCounts();\n },\n onLineItemDelete: () => {\n this.model.isDirty = true;\n this.updateCounts();\n },\n onChangeOrderView: () => {\n this.removeModal();\n },\n onCommitmentView: () => {\n this.removeModal();\n },\n onSendRFQ: (data) => {\n let fnSendRFQ = (lineItems) => {\n new PJQ.views.rfq.RFQBatchModal({\n changeRequest: this.model,\n project: this.options.project,\n lineItems: lineItems,\n projectCommitments: data.projectCommitments,\n onSave: (res) => {\n this.model.rfq.add(res.requests);\n this.activateView(this.views.RFQ);\n }\n });\n },\n lineItems = this.model.lineItems.get(data.selectedIds);\n\n let lineItemCt = _.size(lineItems),\n rfqItemsCt = _.filter(lineItems, (lineItem) => {\n return lineItem.get('rfqId') > 0;\n }).length;\n if (rfqItemsCt > 0) {\n if (rfqItemsCt === lineItemCt) {\n new PJQ.views.modals.YesNo({\n header: \"Send New RFQs?\",\n body: \"All of the selected line items are already associated with RFQs. Would you like to create them again?\",\n onYes: () => {\n fnSendRFQ(lineItems);\n }\n });\n } else {\n new PJQ.views.BaseModal({\n header: \"Send RFQs\",\n body: \"Some of the selected line items are already associated with RFQs. Please choose from the options below.\",\n isShowOkButton: true,\n okButtonText: \"Create All (\" + lineItemCt + \")\",\n onOk: () => {\n fnSendRFQ(lineItems);\n },\n isShowSecondaryButton: true,\n secondaryButtonColorClass: 'primary',\n secondaryButtonText: \"Create Missing (\" + rfqItemsCt + \")\",\n onSecondary: () => {\n fnSendRFQ(_.filter(lineItems, (lineItem) => {\n return !(lineItem.get('rfqId') > 0);\n }));\n }\n });\n }\n } else {\n fnSendRFQ(lineItems);\n }\n }\n });\n },\n viewPrimeContract: function () {\n this.removeModal();\n new PJQ.views.primeContracts.PrimeContractEditModal({\n model: new PJQ.models.primeContracts.PrimeContract({\n id: this.model.get('primeContractId')\n })\n });\n },\n renderMarkups: function () {\n if (!this.options.isAdmin) {\n return;\n }\n\n this.markupsView = new PJQ.financialMarkups.views.FinancialMarkupsList({\n el: this.$('.cr-markups'),\n collection: this.model.markupItems,\n canEdit: false\n });\n },\n renderRFQ: function () {\n if (this.model.isNew() || !this.options.canViewRFQs) {\n return;\n }\n\n this.model.fetchRFQs().then(() => {\n this.rfqDataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.cco-rfq'),\n data: this.model.rfq.models,\n isHideSearch: true,\n language: {\n emptyTable: 'No RFQs have been created yet',\n zeroRecords: \"No RFQs matched the search criteria\"\n },\n paging: false,\n order: [],\n columns: [\n {\n \"columnData\": \"\",\n \"data\": null,\n \"title\": \"\",\n \"width\": \"20px\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return PJQ.helpers.erp.getERPIcon(row.erpSyncStatus());\n }\n },\n {\n \"columnData\": \"number\",\n \"data\": \"attributes.number\",\n \"title\": \"Number\",\n \"width\": \"100px\",\n \"render\": (data, type, row) => {\n return '' + row.get('number') + '';\n }\n },\n {\n \"columnData\": \"title\",\n \"data\": \"attributes.title\",\n \"title\": \"Title\"\n },\n {\n \"columnData\": \"scope\",\n \"data\": \"attributes.scope\",\n \"title\": \"Scope\"\n },\n {\n \"columnData\": \"lastSentOn\",\n \"data\": \"attributes.lastSentOn\",\n \"title\": 'Sent On',\n \"width\": '90px',\n \"render\": (data, type, row) => {\n if (_.size(data) === 0) {\n return '';\n }\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE);\n }\n },\n {\n \"columnData\": \"dueDate\",\n \"data\": \"attributes.dueDate\",\n \"title\": 'Due',\n \"width\": '90px',\n \"render\": (data, type, row) => {\n if (_.size(data) === 0) {\n return '';\n }\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE);\n }\n },\n {\n \"columnData\": \"contractedContact\",\n \"title\": \"Company\",\n \"titleSettings\": \"Company\",\n \"render\": (data, type, row) => {\n return row.contractedContact?.get('companyName') ?? '';\n }\n },\n {\n \"columnData\": \"amount\",\n \"data\": \"attributes.amount\",\n \"width\": \"10%\",\n \"title\": \"Quote\",\n \"className\": \"text-align-right\",\n \"render\": (data, type, row) => {\n if (row.get('responseOn') == null) {\n return '';\n } else if (row.get('hasCostImpact') === false) {\n return 'No Impact';\n }\n\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('amount'));\n }\n },\n {\n \"columnData\": \"status\",\n \"data\": \"attributes.statusId\",\n \"title\": \"Status\",\n \"width\": \"100px\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.constants.rfq.rfqStatusNames[row.get('statusId')]\n }, this)\n },\n {\n \"title\": '',\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"90px\",\n \"className\": \"text-center\",\n \"visible\": true,\n \"render\": _.bind(function (data, type, row) {\n return '
';\n }, this)\n }],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>',\n contextMenuOptions: {\n actions: [\n {\n name: 'View',\n onClick: _.bind(function (row) {\n this.viewRFQ(row.data());\n }, this),\n isShown: _.bind(function (row) {\n return true;\n }, this)\n }\n ]\n },\n onRowDoubleClick: _.bind(function (row) {\n let rfq = row.data();\n if (rfq != null) {\n rfq.fetch({\n success: _.bind(function () {\n this.viewRFQ(rfq);\n }, this)\n });\n }\n }, this)\n });\n })\n },\n viewRFQ: function (rfq) {\n isNew = rfq == null;\n new PJQ.views.rfq.RFQEditModal({\n model: rfq,\n changeRequest: this.model,\n onSave: _.bind(function (rfq) {\n if (isNew) {\n this.model.rfq.add(rfq);\n this.rfqDataTable.addRow(rfq);\n isNew = false;\n\n if (typeof this.options.onRFQAdd === 'function') {\n this.options.onRFQAdd(rfq);\n }\n }\n this.updateCounts();\n\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n }, this),\n onDelete: _.bind(function (rfq) {\n this.model.rfq.remove(rfq);\n this.rfqDataTable.render();\n this.updateCounts();\n\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n }, this)\n });\n },\n newRFQ: function () {\n this.viewRFQ();\n },\n viewRFQClicked: function (e) {\n let target = $(e.currentTarget),\n row = this.rfqDataTable.getRow(target.closest('tr'));\n this.viewRFQ(row.data());\n },\n renderERP: function () {\n let $erp = this.$('.erp-sync');\n if (!this.options.isAdmin || this.erpIntegration == null || !this.options.project.isERPSynced()\n || (this.model.get('statusId') !== PJQ.constants.changeRequests.changeRequestStatus.APPROVED)) {\n $erp.remove();\n return;\n }\n\n let canPush = this.commitment != null && this.commitment.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.SYNCED && this.model && _.size(this.model.lineItems) > 0;\n PJQ.helpers.erp.renderERPButtons($erp, {\n pushSupported: !this.model.isERPSynced() && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_CHANGE_REQUESTS),\n canPush: canPush,\n disablePushReason: canPush ? '' : this.model && _.size(this.model.lineItems) === 0 ? 'No line items exist for this change request' : 'The contract for this change request is not synced',\n status: this.model.erpSyncStatus()\n });\n },\n pushERP: function (callback) {\n if (this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_CHANGE_REQUESTS)) {\n this.erpIntegration.pushChangeRequest(this.model, _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Change Request pushed to ERP'\n });\n\n if (callback && typeof callback === 'function') {\n callback();\n } else {\n this.render();\n }\n }, this));\n }\n },\n undoPushERP: function () {\n if (this.model.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.REVIEWING) {\n this.erpIntegration.undoPush(this.model, _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Change Request removed from ERP approval'\n });\n this.render();\n }, this));\n }\n },\n unlinkERP: function () {\n if (this.erpIntegration != null) {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.erpIntegration.unlinkChangeRequest(this.model, _.bind(function (success) {\n if (success) {\n loader.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Change Request unlinked from ERP'\n });\n this.render();\n }\n }, this));\n }\n },\n checkFieldVisible: function (fieldName) {\n if (this.coreFieldSettings) {\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\n if (fieldSettings != null) {\n return fieldSettings.get('isVisible');\n }\n }\n return true;\n },\n checkFieldRequired: function (fieldName) {\n if (this.coreFieldSettings) {\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\n if (fieldSettings != null) {\n return fieldSettings.get('isRequired');\n }\n }\n return false;\n },\n exportRevenue: function () {\n this.export(true, false);\n },\n exportCosts: function () {\n this.export(false, true);\n },\n exportClicked: function () {\n this.export();\n },\n export: function (withRevenue = true, withCosts = true) {\n let callback = () => {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'changerequests',\n value: this.model.get('id')\n },\n {\n endpoint: 'export',\n }\n ], [{\n parameter: 'showCosts',\n value: withCosts\n }, {\n parameter: 'showRevenue',\n value: withRevenue\n }]), {isAPIv2: true});\n };\n\n if (this.options.canEdit) {\n this.save(callback);\n } else {\n callback();\n }\n },\n saveEmail: function () {\n this.save(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Change Request saved successfully'\n });\n\n this.email();\n }, this));\n },\n savePush: function () {\n this.save(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Change Request saved successfully'\n });\n\n this.pushERP(() => {\n this.removeModal()\n });\n }, this));\n },\n submitChangeRequest: function () {\n this.model.submit(null, _.bind(function (result) {\n if (result) {\n PJQ.notifications.notify.successNotify({\n message: 'Change Request submitted successfully'\n });\n\n this.removeModal();\n }\n }, this));\n },\n saveChangeRequest: function () {\n this.save(() => {\n PJQ.notifications.notify.successNotify({\n message: 'Change Request saved successfully'\n });\n\n this.removeModal();\n });\n },\n validate: function () {\n let isValid = true;\n\n if (this.customFieldsForm != null && !this.customFieldsForm.validate())\n isValid = false;\n\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-number'), true);\n if ((!this.model.isNew() || this.checkFieldRequired('number')) && _.size(this.model.get('number')) === 0) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-number'), false);\n }\n\n if (this.checkFieldRequired('description')) {\n let $description = this.$('.change-request-description');\n PJQ.helpers.inputHelpers.setInputError($description, true);\n if (_.size(this.model.get('description')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($description, false);\n isValid = false;\n }\n }\n\n if (this.checkFieldRequired('attachments')) {\n this.fileUploader.clearError();\n let hasValidAttachment = _.find(this.model.attachments.models, function (model) {\n return !model.get('delete')\n }, this) != null;\n\n if (!hasValidAttachment) {\n this.fileUploader.showError('Missing attachment', 100000);\n isValid = false;\n }\n }\n\n if (!isValid) {\n this.activateView(this.views.GENERAL);\n return isValid;\n }\n\n if (!this.lineItemsView.validate()) {\n isValid = false;\n\n this.activateView(this.views.LINEITEMS);\n return isValid;\n }\n\n return isValid;\n },\n save: function (callback) {\n if (!this.validate())\n return;\n\n this.model.save({\n customFields: this.customFieldsForm != null ? this.customFieldsForm.getChanged() : null,\n lineItems: this.model.lineItems.toJSON()\n }, {\n success: _.bind(function () {\n this.render();\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n\n PJQ.app.session.project.trigger('changeRequestChanged', this.model);\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)\n });\n },\n deleteChangeRequest: function () {\n let changeRequestId = this.model.id,\n hasAssociatedLineItems = _.size(_.filter(this.model.lineItems.models, function (lineItem) {\n return lineItem.get('ccoId') || lineItem.get('pccoId') || lineItem.get('commitmentId');\n }, this)) > 0;\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Delete\",\n body: hasAssociatedLineItems ? \"This Change Request has line items that are associated with other line items. Deleting it will also delete all associated line items. Are you sure you want to delete this Change Request?\" : \"Are you sure you want to delete this Change Request?\",\n onDelete: _.bind(function () {\n this.model.destroy({\n success: _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Change Request deleted successfully'\n });\n\n if (typeof this.options.onDelete === 'function')\n this.options.onDelete(changeRequestId);\n\n this.removeModal();\n }, this)\n });\n }, this)\n });\n },\n email: function () {\n let projectName = this.options.project?.get('projectName')?.trim();\n let subject = `A Change Request has been shared with you ${projectName && _.size(projectName) > 0 ? `for ${projectName}` : ''}`;\n new PJQ.views.email.ComposeEmailModal({\n header: \"Email Change Request\",\n project: PJQ.app.session.project,\n subject: subject,\n onSave: _.bind(function (data) {\n this.model.share(data, _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Change Request email sent'\n });\n }, this));\n }, this)\n });\n },\n close: function () {\n if (this.model.hasChanged() && this.options.canEdit) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.saveChangeRequest();\n this.removeModal();\n }, this),\n onDontSave: _.bind(function () {\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n }\n});","PJQ.views.changeRequests.ChangeRequestsList = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'change-requests-list'),\n subTemplates: {\n totals: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'change-requests-totals')\n },\n changeRequestId: null\n },\n events: {\n 'click .btn-settings': 'editSettings',\n 'click .btn-add-change-request': 'addChangeRequest',\n 'click .btn-delete-change-request': 'deleteChangeRequestClicked',\n 'click .btn-export': 'exportChangeRequestList'\n },\n beforeFirstRender: async function () {\n this.isFetched = false;\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n\n if (this.collection == null) {\n this.collection = new PJQ.collections.changeRequests.ChangeRequests(null, {\n projectId: this.options.project.get('projectId'),\n groupId: this.options.groupId ? this.options.groupId : 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.fetchChangeRequestCustomFields();\n this.userSettings = await PJQ.app.session.fetchChangeRequestUserSettings();\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\n\n this.isFetched = true;\n this.render();\n },\n beforeRender: function(){\n if (!this.isFetched) {\n return;\n }\n\n this.options.isAdmin = PJQ.app.session.project.hasPermission('changeRequests.isAdmin');\n this.options.canAdd = PJQ.app.session.project.hasPermission('changeRequests.canAdd');\n },\n renderData: function () {\n return {\n collection: this.collection,\n isFetched: this.isFetched,\n isAdmin: this.options.isAdmin,\n hideHeader: this.options.hideHeader,\n canAdd: this.options.canAdd\n }\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n this.renderView();\n\n PJQ.app.session.project.off('changeRequestChanged');\n PJQ.app.session.project.on('changeRequestChanged', function (changeRequest) {\n this.collection.add(changeRequest);\n this.render();\n }, this);\n\n if(this.options.rfqId > 0) {\n let rfq = new PJQ.models.rfq.RFQ({\n id: this.options.rfqId\n });\n\n rfq.fetch({\n success: _.bind(function () {\n this.viewRFQ(rfq);\n }, this)\n });\n } else if (this.options.changeRequestId > 0) {\n let initChangeRequest = this.collection.get(this.options.changeRequestId);\n if (initChangeRequest != null) {\n this.viewChangeRequest(initChangeRequest);\n this.options.changeRequestId = null;\n }\n }\n this.renderStats();\n },\n renderStats: function () {\n let totals,\n $totals = this.$('.totals-outer');\n if (this.collection == null || !this.collection.isFetched) {\n $totals.empty();\n return;\n }\n\n totals = this.collection.getTotalAmountsByStatus();\n this.renderSubTemplate(false, this.options.subTemplates.totals, $totals, {\n pending: totals[PJQ.constants.changeRequests.changeRequestStatusBuckets.PENDING.name],\n projected: totals[PJQ.constants.changeRequests.changeRequestStatusBuckets.PROJECTED.name],\n approved: totals[PJQ.constants.changeRequests.changeRequestStatusBuckets.APPROVED.name]\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.changeRequests.ChangeRequestDataTable({\n el: this.$('.change-requests-data'),\n rowId: \"cid\",\n data: this.collection.models,\n isAdmin: this.options.isAdmin,\n headerData: _.bind(function () {\n return {\n project: this.options.project,\n isAdmin: this.options.isAdmin,\n canAdd: this.options.canAdd\n };\n }, this),\n userSettings: this.userSettings,\n settings: this.userSettings.getSettings(PJQ.constants.changeRequests.view.CHANGE_REQUESTS),\n order: [[1, 'asc']],\n colReorder: {\n fixedColumnsLeft: 1,\n fixedColumnsRight: 1,\n realtime: false\n },\n columnOrderChanged: () => {\n this.userSettings.save();\n },\n onViewChangeRequest: (changeRequest) => {\n this.viewChangeRequest(changeRequest);\n },\n onRowDoubleClick: (row) => {\n this.viewChangeRequest(row.data());\n },\n contextMenuOptions: {\n actions: [\n {\n name: 'View',\n onClick: _.bind(function (row) {\n this.viewChangeRequest(row.data());\n }, this)\n }\n ]\n }\n });\n },\n exportChangeRequestList: function () {\n let parameters = [\n {\n parameter: 'timeZoneOffset',\n value: new Date().getTimezoneOffset()\n }\n ];\n\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'changerequests'\n },\n {\n endpoint: 'export'\n }\n ], parameters), {isAPIv2: true});\n },\n viewChangeRequestClicked: function (e) {\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr'));\n this.viewChangeRequest(row.data());\n },\n viewRFQ(rfq) {\n new PJQ.views.rfq.RFQEditModal({\n model: rfq,\n project: this.options.project\n });\n },\n viewChangeRequest: function (changeRequest, primeContract) {\n let isNew = primeContract != null;\n new PJQ.views.changeRequests.ChangeRequestEditModal({\n model: changeRequest,\n primeContract: primeContract,\n onSave: _.bind(function (changeRequest) {\n if (isNew) {\n this.collection.add(changeRequest);\n }\n this.renderView();\n }, this),\n onDelete: _.bind(function (changeRequest) {\n this.collection.remove(changeRequest);\n this.renderView();\n }, this)\n });\n },\n addChangeRequest: function() {\n new PJQ.views.primeContracts.SelectPrimeContractsModal({\n isSingleChoice: true,\n project: this.options.project,\n headerSubText: 'Select the Contract you would like to create a Change Request for.',\n filterStatuses: PJQ.constants.primeContracts.primeContractStatus.APPROVED,\n onSave: _.bind(function (contract) {\n this.viewChangeRequest(null, contract);\n }, this)\n });\n },\n deleteChangeRequestClicked: function (e) {\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr'));\n this.deleteChangeRequest(row);\n },\n deleteChangeRequest: function (row) {\n if (row != null) {\n let changeRequest = row.data();\n if (changeRequest != null) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Change Request\",\n body: \"Are you sure you want to delete this Change Request?\",\n onDelete: _.bind(function () {\n changeRequest.destroy({\n success: _.bind(function () {\n this.dataTable.removeRow(row);\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(changeRequest);\n }\n }, this)\n });\n }, this)\n });\n }\n }\n },\n editSettings: function () {\n new PJQ.views.changeRequests.ChangeRequestSettingsModal({\n changeRequestsView: this,\n onSave: _.bind(function () {\n this.renderView();\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n }, this)\n });\n }\n});\n\nPJQ.views.changeRequests.SelectChangeRequestsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-select-change-requests'),\n width: '50%',\n maxWidth: 700,\n onSave: _.noop\n },\n events: {\n \"change .select-change-request\": \"selectChangeRequest\",\n \"click .btn-save\": \"save\",\n \"click .btn-cancel\": \"cancel\"\n },\n beforeModalCreated: function () {\n this.options.isAdmin = PJQ.app.session.project.hasPermission('changeRequests.isAdmin');\n this.selectedChangeRequests = [];\n\n if (this.collection == null) {\n this.collection = new PJQ.collections.changeRequests.ChangeRequests(null, {\n projectId: this.options.project.get('projectId')\n });\n }\n\n if (this.collection.isFetched) {\n this.render();\n } else {\n this.collection.fetch({\n success: _.bind(function () {\n this.changeRequests = this.collection.models;\n\n if (this.options.primeContractId) {\n this.changeRequests = _.filter(this.changeRequests, function (model) {\n return model.get('primeContractId') === this.options.primeContractId\n }, this);\n }\n\n if (this.options.filterStatuses){\n this.changeRequests = _.filter(this.changeRequests, function (model) {\n let statusId = model.get('statusId');\n\n if (_.isArray(this.options.filterStatuses)) {\n return _.includes(this.options.filterStatuses, statusId);\n } else if (_.isNumber(this.options.filterStatuses)) {\n return this.options.filterStatuses === statusId;\n }\n\n return false;\n\n }, this);\n }\n this.render();\n }, this)\n });\n }\n\n },\n renderData: function() {\n return {\n headerSubText: this.options.headerSubText,\n isSingleChoice: this.options.isSingleChoice\n }\n },\n afterRender: function () {\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.change-requests-table'),\n data: this.changeRequests,\n isHideSearch: true,\n order: [],\n columns: [{\n \"data\": \"attributes.isSelected\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('
');\n }, this)\n },\n {\n \"data\": \"attributes.number\",\n \"title\": \"Number\",\n \"orderable\": true\n },\n {\n \"data\": \"attributes.client.companyName\",\n \"title\": \"Client\",\n \"orderable\": true\n },\n {\n \"data\": \"attributes.description\",\n \"title\": \"Description\",\n \"orderable\": false\n },\n {\n \"data\": \"attributes.amount\",\n \"title\": \"Amount\",\n \"orderable\": false,\n \"className\": \"text-align-right\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this)\n }],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n },\n selectChangeRequest: function (e) {\n let target = $(e.currentTarget),\n changeRequest = this.dataTable.getRow(target.closest('tr')).data();\n\n if (this.options.isSingleChoice) {\n this.$('.select-change-request').not(target).text('Select').prop('checked', false);\n if (changeRequest.get('isSelected')) {\n changeRequest.set('isSelected', false);\n this.selectedChangeRequest = null;\n } else {\n changeRequest.set('isSelected', true);\n this.selectedChangeRequest = changeRequest;\n this.collection.get(changeRequest.id);\n _.each(this.collection.models, _.bind(function (dtChangeRequest) {\n if (changeRequest.id !== dtChangeRequest.id)\n dtChangeRequest.set('isSelected', false);\n }, this));\n }\n this.$('.btn-save').attr('disabled', this.selectedChangeRequest == null);\n\n if(typeof this.options.onChangeRequestSelected === 'function') {\n this.options.onChangeRequestSelected(this.selectedChangeRequest);\n }\n } else {\n if (changeRequest.get('isSelected')) {\n target.text('Select').addClass('btn-primary').removeClass('btn-secondary');\n changeRequest.set('isSelected', false);\n this.selectedChangeRequests = _.reject(this.selectedChangeRequests, function (selChangeRequest) {\n return selChangeRequest.id === changeRequest.id;\n });\n } else {\n target.text('Deselect').addClass('btn-secondary').removeClass('btn-primary');\n changeRequest.set('isSelected', true);\n this.selectedChangeRequests.push(changeRequest);\n }\n this.$('.btn-save').attr('disabled', this.selectedChangeRequests == null);\n\n if(typeof this.options.onChangeRequestSelected === 'function') {\n this.options.onChangeRequestSelected(this.selectedChangeRequests);\n }\n }\n },\n cancel: function () {\n if (this.options.onCancel) {\n this.options.onCancel();\n }\n this.removeModal();\n },\n save: function () {\n if (this.options.onSave) {\n this.options.onSave(this.selectedChangeRequest ? this.selectedChangeRequest : this.selectedChangeRequests);\n this.removeModal();\n }\n }\n});","PJQ.views.changeRequests.ChangeRequestManagement = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'change-request-management'),\n subTemplates: {\n changeRequestTotals: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'change-requests-totals')\n },\n changeRequestId: null,\n rfqId: null,\n view: null\n },\n events: {\n 'shown.bs.tab .nav-tabs': 'tabActivated',\n 'click .btn-settings': 'settings'\n },\n beforeFirstRender: function () {\n this.options.canViewChangeRequests = PJQ.app.session.project.hasPermission('changeRequests.canView');\n this.options.canViewRFQs = PJQ.app.session.project.hasPermission('changeRequests.canViewRFQs');\n this.options.isAdmin = PJQ.app.session.project.hasPermission('changeRequests.isAdmin');\n },\n renderData: function () {\n return {\n isFetched: this.isFetched,\n changeRequests: this.changeRequests,\n rfqs: this.rfqs,\n canViewChangeRequests: this.options.canViewChangeRequests,\n canViewRFQs: this.options.canViewRFQs,\n isAdmin: this.options.isAdmin\n }\n },\n afterRender: function () {\n this.changeRequestsView = null;\n this.rfqView = null;\n\n if (this.options.view != null) {\n this.activateTab(this.options.view);\n } else if (this.options.changeRequestId > 0 && this.options.canViewChangeRequests) {\n this.activateTab('changerequests');\n } else if (this.options.rfqId > 0 && this.options.canViewRFQs) {\n this.activateTab('rfq');\n } else if (this.options.canViewChangeRequests) {\n this.activateTab('changerequests');\n } else {\n this.activateTab('rfq');\n }\n },\n renderStats: function () {\n let totals,\n $totals = this.$('.totals-outer');\n switch (this.activeView) {\n case 'changerequests':\n if (this.changeRequestsView == null || this.changeRequestsView.collection == null || !this.changeRequestsView.collection.isFetched) {\n $totals.empty();\n return;\n }\n\n totals = this.changeRequestsView.collection.getTotalAmountsByStatus();\n this.renderSubTemplate(false, this.options.subTemplates.changeRequestTotals, $totals, {\n pending: totals[PJQ.constants.changeRequests.changeRequestStatusBuckets.PENDING.name],\n projected: totals[PJQ.constants.changeRequests.changeRequestStatusBuckets.PROJECTED.name],\n approved: totals[PJQ.constants.changeRequests.changeRequestStatusBuckets.APPROVED.name]\n });\n break;\n default:\n $totals.empty();\n return;\n }\n },\n activateTab: function (tab) {\n this.activeView = tab;\n switch (tab ? tab.toLowerCase() : null) {\n case 'rfq':\n tab = 'RFQ_List';\n this.renderRFQView();\n break;\n default:\n tab = 'CR_List';\n this.renderChangeRequestsView();\n break;\n }\n\n this.isActivating = true;\n this.$('.nav-link[href=\"#' + tab + '\"]').tab('show');\n this.isActivating = false;\n\n this.renderStats();\n },\n tabActivated: function (e) {\n if (this.isActivating) {\n return;\n }\n\n this.activeTab = $(e.target).attr('href');\n\n let vw;\n switch (this.activeTab) {\n case '#CR_List':\n vw = 'changerequests';\n this.$('.btn-settings').show();\n break;\n case '#RFQ_List':\n vw = 'rfq';\n this.$('.btn-settings').hide();\n break;\n }\n this.activateTab(vw);\n },\n renderChangeRequestsView: function () {\n PJQ.app.router.navigate('projects/' + this.options.project.id.toString() + '/changerequests', {\n trigger: false\n });\n if (this.changeRequestsView == null && this.options.canViewChangeRequests) {\n let fnRender = () => {\n this.changeRequestsView = new PJQ.views.changeRequests.ChangeRequestsList({\n el: this.$('.change-requests-pane'),\n project: PJQ.app.session.project,\n changeRequestId: this.options.changeRequestId,\n collection: this.changeRequests,\n hideHeader: true,\n afterRender: _.bind(this.renderStats, this),\n });\n this.options.changeRequestId = null;\n };\n\n if (this.changeRequests == null) {\n this.changeRequests = new PJQ.collections.changeRequests.ChangeRequests(null, {\n projectId: this.options.project.get('projectId')\n });\n this.changeRequests.fetch({\n success: _.bind(function () {\n fnRender();\n }, this)\n });\n } else {\n fnRender();\n }\n }\n },\n renderRFQView: function () {\n PJQ.app.router.navigate('projects/' + this.options.project.id.toString() + '/changerequests/rfq', {\n trigger: false\n });\n if (this.rfqView == null) {\n let fnRender = () => {\n this.rfqView = new PJQ.views.rfq.RFQList({\n el: this.$('.rfq-pane'),\n project: PJQ.app.session.project,\n rfqId: this.options.rfqId,\n collection: this.rfqs,\n afterRender: _.bind(this.renderStats, this),\n });\n this.options.rfqId = null;\n };\n\n if (this.rfqs == null) {\n this.rfqs = new PJQ.collections.rfq.RFQs(null, {\n projectId: this.options.project.get('projectId')\n });\n this.rfqs.fetch({\n success: () => {\n fnRender();\n }\n });\n } else {\n fnRender();\n }\n }\n },\n getActiveTab: function () {\n return this.$('.nav-item>.nav-link.active').attr('href');\n },\n settings: function () {\n switch (this.getActiveTab()) {\n case '#CR_List':\n if (this.changeRequestsView != null) {\n this.changeRequestsView.editSettings();\n }\n break;\n }\n },\n updateTotalsCount: function () {\n let $changeRequestsSpan = this.$('.commitments-total'),\n $rfqSpan = this.$('.rfq-total');\n\n $changeRequestsSpan.text(_.size(this.changeRequests.models));\n $rfqSpan.text(_.size(this.rfq.models));\n }\n});","//Models\nPJQ.models.changeRequests.ChangeRequest = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id',\n endpoint: function () {\n let arr = [];\n if (this.isNew()) {\n arr.push({\n endpoint: 'projects',\n value: this.get('projectId')\n });\n }\n arr.push({\n endpoint: 'changerequests',\n value: this.id\n });\n return PJQ.helpers.urlHelpers.generateEndpoint(arr);\n },\n parse: function (model) {\n if (!model)\n return model;\n\n if (model.primeContract) {\n this.primeContract = model.primeContract;\n }\n\n this.lineItems = new PJQ.collections.changeRequests.ChangeRequestLineItems(model.lineItems);\n this.attachments = new PJQ.collections.changeRequests.ChangeRequestAttachments(model.attachments);\n this.rfq = new PJQ.collections.rfq.RFQs(model.rfq, {\n projectId: model.projectId,\n changeRequestId: model.id\n });\n\n this.markupItems = new PJQ.financialMarkups.collections.FinancialMarkups(model ? model.markupItems : null);\n\n if (model && model.client) {\n if (model.client instanceof PJQ.models.BaseModel) {\n this.client = model.client;\n } else {\n this.client = new PJQ.models.contacts.Contact(model.client);\n }\n } else {\n this.client = null;\n }\n\n return model;\n },\n fetchRFQs(callback) {\n return new Promise((resolve, reject) => {\n if (this.rfq != null && this.rfq.isFetched) {\n if (typeof callback === 'function') {\n callback(this.rfq);\n }\n resolve(this.rfq);\n return;\n }\n\n this.rfq = new PJQ.collections.rfq.RFQs([], {\n projectId: this.get('projectId'),\n changeRequestId: this.id\n });\n this.rfq.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.rfq);\n }\n resolve(this.rfq);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(this.rfq);\n }\n reject(new Error(\"Failed to fetch change request rfqs\"));\n }\n })\n });\n },\n beforeSave: function () {\n this.set({\n lineItems: this.lineItems.toJSON(),\n attachments: this.attachments.toJSON()\n });\n },\n syncERP: function (callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/syncerp',\n isAPIv2: true,\n }).post().done(_.bind(function (res) {\n if (res && _.size(res.externalId) > 0) {\n this.set('externalObject', res);\n }\n if (typeof callback === 'function') {\n callback(res);\n }\n }, this)).fail(_.bind(function (xhr, err, result) {\n if (typeof callback === 'function') {\n callback(null);\n }\n }, this));\n },\n unlinkERP: function (callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/unlinkerp',\n isAPIv2: true,\n }).post().done(_.bind(function () {\n this.set('externalObject', null);\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)).fail(_.bind(function (xhr) {\n if (typeof callback === 'function') {\n let err;\n if (xhr.responseJSON != null) {\n err = xhr.responseJSON.type;\n } else {\n err = null;\n }\n callback(false, err);\n }\n }, this));\n },\n makeERPUrl: function (integration) {\n let externalId = this.externalId();\n if (_.size(externalId) === 0) {\n return '';\n }\n\n switch (integration.get('name')) {\n case PJQ.constants.integrations.providers.QBO.name:\n // TODO: QBO Integration URL\n return 'https://app.sandbox.qbo.intuit.com/app/purchaseorder?txnId=' + externalId;\n default:\n return '';\n }\n },\n share: function (data, callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/email',\n isAPIv2: true,\n data: {\n subject: data != null ? data.subject : null,\n body: data != null ? data.body : null,\n toEmails: data != null ? data.toEmails : null,\n ccEmails: data != null ? data.ccEmails : null,\n }\n }).post().done(_.bind(function (response) {\n callback();\n }, this)).fail(_.bind(function (xhr, err, result) {\n //todo: error\n }, this));\n },\n getSubTotal: function (markups, costOnly) {\n if (costOnly) {\n return this.get('amount') + this.get('markupAmount');\n }\n\n return this.get('revenue') + this.get('markupAmount');\n },\n getGrandTotal: function () {\n let costsOnly = this.get('scope') === PJQ.constants.changeRequests.scope.INTERNAL;\n return this.getSubTotal(null, costsOnly) + this.get('taxAmount');\n }\n});\n\nPJQ.models.changeRequests.ChangeRequestLineItem = PJQ.models.budget.BaseLineItem.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id'\n});\n\nPJQ.models.changeRequests.ChangeRequestAttachment = PJQ.models.files.File.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id'\n});\n\nPJQ.models.changeRequests.CustomField = PJQ.models.customFields.CustomField.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'changerequests'\n },\n {\n endpoint: 'customfields',\n value: this.get('id')\n }\n ]);\n }\n});\n\nPJQ.models.changeRequests.CustomFieldChoice = 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: 'changerequests'\n },\n {\n endpoint: 'customfields',\n value: this.get('customFieldId')\n },\n {\n endpoint: 'choices',\n value: this.get('id')\n }\n ]);\n }\n});\n\nPJQ.models.changeRequests.Settings = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'settingId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'changerequests'\n },\n {\n endpoint: 'settings'\n }\n ]);\n },\n parseNumberFormat: function (numberFormat, project, additionalData) {\n let result = '';\n\n _.each(numberFormat, _.bind(function (token) {\n if (token.isText)\n result += token.label;\n else if (token.token === 'today')\n result += this.parseDateFormatToken(new Date(), token.dateFormatId);\n else if (token.token === 'project.projectId')\n result += project.get('projectId').toString();\n else if (token.token === 'project.startDate')\n result += this.parseDateFormatToken(PJQ.helpers.dateHelpers.parseDateString(project.get('startDate'), false), token.dateFormatId);\n else if (token.token === 'counter')\n result += additionalData.counter.toString().padStart(4, '0');\n else if (token.token.startsWith('fieldValue')) {\n let fieldNumber = parseInt(token.token.substr(10));\n _.each(PJQ.app.session.project.customFields.models, _.bind(function (customField) {\n if (customField.get('fieldNumber') === fieldNumber) {\n _.each(PJQ.app.session.project.get('customFields'), _.bind(function (fieldValue) {\n if (fieldValue.fieldNumber === fieldNumber) {\n switch (customField.get('fieldType')) {\n case PJQ.constants.customFields.fieldTypes.TEXT:\n case PJQ.constants.customFields.fieldTypes.INT:\n result += fieldValue.value.toString();\n break;\n case PJQ.constants.customFields.fieldTypes.CHOICE:\n _.each(customField.get('choices'), _.bind(function (choice) {\n if (choice.id === fieldValue.value)\n result += choice.choiceName;\n }, this));\n break;\n case PJQ.constants.customFields.fieldTypes.DATE:\n result += this.parseDateFormatToken(PJQ.helpers.dateHelpers.parseDateString(fieldValue.value, false), token.dateFormatId);\n break;\n case PJQ.constants.customFields.fieldTypes.DATETIME:\n result += this.parseDateFormatToken(PJQ.helpers.dateHelpers.parseDateString(fieldValue.value, true), token.dateFormatId);\n break;\n }\n }\n }, this));\n }\n }, this));\n }\n }, this));\n\n return result.replaceAll(' ', '');\n },\n parseDateFormatToken: function (input, dateFormatId) {\n let result = null;\n\n switch (dateFormatId) {\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.DD:\n result = input.getDate().toString().padStart(2, '0');\n break;\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.MM:\n result = (input.getMonth() + 1).toString().padStart(2, '0');\n break;\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.YY:\n result = input.getFullYear().toString().substr(2);\n break;\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.YYYY:\n result = input.getFullYear().toString();\n break;\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.MMDDYYYY:\n result = PJQ.helpers.dateHelpers.getDateString(input, PJQ.helpers.dateHelpers.dateFormats.URL_DATE, false).replaceAll('-', '');\n break;\n }\n\n return result;\n }\n});\n\nPJQ.models.changeRequests.ChangeRequestUserSettings = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'settingId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'changerequests'\n },\n {\n endpoint: 'settings'\n },\n {\n endpoint: 'user'\n }\n ]);\n },\n getSettings: function (view) {\n return _.find(this.attributes.viewSettings, _.bind(function (setting) {\n return setting.view === view;\n }, this));\n }\n});\n\n//Collections\nPJQ.collections.changeRequests.ChangeRequests = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.changeRequests.ChangeRequest,\n endpoint: function () {\n let params = [];\n if (this.options.groupId && this.options.costTypeId) {\n params.push({\n parameter: 'groupId',\n value: this.options.groupId\n }, {\n parameter: 'costTypeId',\n value: this.options.costTypeId\n });\n }\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.projectId\n },\n {\n endpoint: 'changerequests'\n }\n ], params);\n },\n getTotalAmountsByStatus: function () {\n let result = {};\n _.each(PJQ.constants.changeRequests.changeRequestStatusBuckets, function (bucket) {\n let total = 0;\n _.each(this.models, function (changeRequest) {\n if (bucket.statuses.indexOf(changeRequest.get('statusId')) !== -1) {\n total += changeRequest.get('amount');\n }\n });\n result[bucket.name] = total;\n }, this);\n return result;\n }\n});\n\nPJQ.collections.changeRequests.ChangeRequestLineItems = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.changeRequests.ChangeRequestLineItem,\n endpoint: function () {\n let params = [];\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'changerequests',\n value: this.options.changeRequestId\n },\n {\n endpoint: 'lineitems'\n }\n ], params);\n }\n});\n\nPJQ.collections.changeRequests.ChangeRequestAttachments = PJQ.collections.files.Files.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.changeRequests.ChangeRequestAttachment,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'changerequests',\n value: this.options.changeRequestId\n },\n {\n endpoint: 'attachments'\n }\n ]);\n }\n});\n\nPJQ.collections.changeRequests.CustomFields = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.changeRequests.CustomField,\n endpoint: function () {\n let params = [];\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'changerequests'\n },\n {\n endpoint: 'customfields'\n }\n ], params);\n }\n});\n\nPJQ.collections.changeRequests.CustomFieldChoices = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.changeRequests.CustomFieldChoice\n});","PJQ.views.changeRequests.ChangeRequestSettingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-change-request-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.changeRequestsView.userSettings;\n this.customFields = this.options.changeRequestsView.customFields;\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.changeRequestsView.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 let defaultFilter = {};\n defaultFilter = this.userSettings.get('defaultStatusFilter');\n\n this.defaultFilterSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-filter-default'),\n isIntChoices: true,\n isMultiple: true,\n isGrouped: false,\n defaultValue: defaultFilter,\n onHide: _.bind(function () {\n this.options.defaultStatusFilter = this.defaultFilterSelectPicker.getValue();\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.changeRequests.view.CHANGE_REQUESTS);\n },\n editCompanySettings: function () {\n this.userSettings = new PJQ.models.changeRequests.ChangeRequestUserSettings(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 this.rowsPerPage.setValue(this.currentView.rowsPerPage);\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.budget.ProjectCostCodeSettings = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'project-cost-code-settings')\r\n },\r\n events: {},\r\n beforeFirstRender: async function () {\r\n this.isFetched = false;\r\n\r\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\r\n if (this.options.project != null) {\r\n this.budget = await this.options.project.fetchBudget();\r\n this.subJobs = await this.options.project.fetchSubJobs();\r\n this.costCodes = await this.options.project.fetchCostCodes();\r\n\r\n await this.options.project.fetchERPObject();\r\n } else {\r\n this.costCodes = await PJQ.app.session.fetchCostCodes();\r\n }\r\n\r\n this.isFetched = true;\r\n this.render();\r\n },\r\n renderData: function () {\r\n return {\r\n budget: this.budget,\r\n isFetched: this.isFetched,\r\n enableSubJobs: _.size(this.subJobs) > 0 || this.options.enableSubJobs\r\n };\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n new PJQ.views.budget.CostCodeSettings({\r\n el: this.$('.cost-codes-outer'),\r\n project: this.options.project,\r\n enableSubJobs: this.options.enableSubJobs,\r\n enableSubJobsChanged: (enableSubJobs) => {\r\n this.options.enableSubJobs = enableSubJobs;\r\n this.render();\r\n },\r\n onPullERP: () => {\r\n this.render();\r\n }\r\n });\r\n\r\n if (_.size(this.subJobs) > 0 || this.options.enableSubJobs) {\r\n new PJQ.views.budget.SubJobSettings({\r\n el: this.$('.sub-jobs-outer'),\r\n project: this.options.project\r\n });\r\n }\r\n }\r\n});\r\n\r\nPJQ.views.budget.CostCodeSettingsModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-cost-code-settings'),\r\n maxWidth: 800,\r\n pickerOptions: {},\r\n onPullERP: null\r\n },\r\n events: {\r\n 'click .btn-close': 'close'\r\n },\r\n renderData: function () {\r\n return {\r\n project: this.options.project,\r\n subJob: this.options.subJob\r\n };\r\n },\r\n afterRender: function () {\r\n new PJQ.views.budget.CostCodeSettings({\r\n el: this.$('.cost-code-settings'),\r\n project: this.options.project,\r\n subJob: this.options.subJob,\r\n onPullERP: this.options.onPullERP\r\n });\r\n },\r\n close: function () {\r\n this.removeModal();\r\n }\r\n});\r\n\r\nPJQ.views.budget.CostCodeSettings = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'cost-code-settings'),\r\n enableSubJobsChanged: null,\r\n onPullERP: null\r\n },\r\n events: {\r\n 'click .btn-import-cost-codes': 'importClicked',\r\n 'click .btn-add-cost-code': 'addClicked',\r\n 'click .btn-add-standard': 'addStandard',\r\n 'click .btn-edit-cost-code': 'editClicked',\r\n 'click .btn-delete-cost-code': 'deleteClicked',\r\n 'click .btn-delete-all': 'deleteAll',\r\n 'click .btn-push-erp': 'pushERP',\r\n 'click .btn-undo-push-erp': 'undoPushERP',\r\n 'click .btn-pull-erp': 'pullERP',\r\n 'change .cb-enable-sub-jobs': 'enableSubJobsChanged'\r\n },\r\n beforeFirstRender: async function () {\r\n this.isFetched = false;\r\n this.options.project = this.options.project != null ? this.options.project : PJQ.app.session.project;\r\n\r\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\r\n if (this.options.project != null) {\r\n this.budget = await this.options.project.fetchBudget();\r\n this.subJobs = await this.options.project.fetchSubJobs();\r\n this.allCostCodes = await this.options.project.fetchCostCodes();\r\n\r\n if (this.erpIntegration != null && this.erpIntegration.getSetting('syncProjects')) {\r\n await this.options.project.fetchERPObject();\r\n }\r\n } else {\r\n this.allCostCodes = await PJQ.app.session.fetchCostCodes();\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 false;\r\n }\r\n\r\n if (this.costCodes == null) {\r\n let cc;\r\n if (this.options.subJob != null) {\r\n cc = this.allCostCodes.where({subJobId: this.options.subJob.id});\r\n } else {\r\n cc = this.allCostCodes.where({subJobId: null});\r\n }\r\n this.costCodes = new PJQ.collections.budget.CostCodes(cc, {\r\n projectId: this.options.project ? this.options.project.id : null,\r\n subJobId: this.options.subJob ? this.options.subJob.id : null\r\n });\r\n }\r\n },\r\n renderData: function () {\r\n return {\r\n project: this.options.project,\r\n subJobs: this.subJobs,\r\n subJob: this.options.subJob,\r\n costCodes: this.costCodes,\r\n isFetched: this.isFetched,\r\n erpIntegration: this.erpIntegration,\r\n enableSubJobs: this.options.enableSubJobs,\r\n budget: this.budget\r\n };\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n this.renderCostCodeTable();\r\n this.renderERP();\r\n },\r\n renderCostCodeTable: function () {\r\n let hasDivisions = this.costCodes.hasDivisions(),\r\n data;\r\n if (hasDivisions) {\r\n let divisionNames = this.costCodes.getDivisions().sort(PJQ.helpers.sortHelpers.sortAlphaNum);\r\n data = _.map(divisionNames, (division, i) => {\r\n return {\r\n cid: PJQ.helpers.guid(),\r\n division: _.size(division) > 0 ? division : 'No Division',\r\n isFetched: true,\r\n sortOrder: i\r\n };\r\n })\r\n } else {\r\n data = this.costCodes.models;\r\n }\r\n\r\n if (this.dataTable && this.dataTable.dataTable) {\r\n this.dataTable.dataTable.destroy();\r\n this.dataTable = null;\r\n }\r\n\r\n this.dataTable = this.getDataTable({\r\n el: this.$(\".cost-codes-table\"),\r\n data: data,\r\n afterDataTableRender: _.bind(function () {\r\n // if (hasDivisions && this.dataTable && this.dataTable.dataTable) {\r\n // let self = this;\r\n // this.dataTable.dataTable.row().$('.toggle-row').each(function () {\r\n // self.dataTable.childRowToggle({currentTarget: this});\r\n // });\r\n // }\r\n }, this),\r\n getRowChildTable: _.bind(function (childOpts) {\r\n if (!hasDivisions) {\r\n return null;\r\n }\r\n return this.getDataTable(childOpts)\r\n }, this),\r\n getRowChildData: _.bind(function (row) {\r\n if (!hasDivisions) {\r\n return null;\r\n }\r\n\r\n let costCode = row.data();\r\n return _.sortBy(this.costCodes.getForDivision(costCode.division), function (costCode) {\r\n return costCode.get('code');\r\n });\r\n }, this),\r\n language: {\r\n zeroRecords: 'Click \"Add Cost Code\" to create a new Cost Code'\r\n }\r\n });\r\n },\r\n getDataTable: function (dtOptions) {\r\n let columns,\r\n hasDivisions = this.costCodes.hasDivisions();\r\n if (dtOptions.parentData == null && hasDivisions) {\r\n dtOptions = _.defaults(dtOptions, {\r\n order: [1, 'asc'],\r\n });\r\n columns = [\r\n {\r\n \"width\": \"15px\",\r\n \"columnData\": \"division\",\r\n \"data\": null,\r\n \"title\": \"\",\r\n \"className\": \"dt-center\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"defaultContent\": '',\r\n \"render\": function (data, type, row) {\r\n return '';\r\n }\r\n },\r\n {\r\n \"title\": \"Division\",\r\n \"data\": \"division\",\r\n \"orderable\": true,\r\n \"render\": function (data, type, row) {\r\n if (type === 'sort' || type === 'type') {\r\n return row.sortOrder;\r\n }\r\n return data;\r\n }\r\n }\r\n ];\r\n } else {\r\n dtOptions = _.defaults(dtOptions, {\r\n order: [1, 'asc'],\r\n hideColumnHeaders: hasDivisions,\r\n onRowDoubleClick: _.bind(function (row) {\r\n this.editCostCode(row.data());\r\n }, this),\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'Edit',\r\n onClick: (row) => {\r\n this.editCostCode(row.data());\r\n }\r\n },\r\n {\r\n name: 'Delete',\r\n isDanger: true,\r\n isShown: (row) => {\r\n return null == this.budget.lineItems.findWhere({costCodeId: row.data().id});\r\n },\r\n onClick: (row) => {\r\n this.deleteCostCode(row.data());\r\n }\r\n }\r\n ]\r\n },\r\n });\r\n columns = [\r\n {\r\n \"width\": \"15px\",\r\n \"columnData\": \"division\",\r\n \"data\": null,\r\n \"title\": \"\",\r\n \"className\": \"dt-center\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"defaultContent\": '',\r\n \"render\": (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 {\r\n \"title\": \"Code\",\r\n \"data\": \"attributes.code\",\r\n \"width\": \"100px\",\r\n \"render\": (data, type, model) => {\r\n if (type === 'sort' || type === 'type') {\r\n return PJQ.helpers.costCodes.getDivisionSortValue(data);\r\n }\r\n return '' + data + '';\r\n }\r\n },\r\n {\r\n \"title\": \"Name\",\r\n \"data\": \"attributes.name\"\r\n },\r\n {\r\n \"data\": \"\",\r\n \"title\": \"\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"p-2\",\r\n \"width\": \"80px\",\r\n \"render\": (data, type, model) => {\r\n let canDelete = null == this.budget || null == this.budget.lineItems.findWhere({costCodeId: model.id}),\r\n res = '
';\r\n if (canDelete) {\r\n res += '';\r\n } else {\r\n res += '';\r\n }\r\n return res + '
';\r\n }\r\n }\r\n ];\r\n }\r\n\r\n dtOptions.rowId = \"cid\";\r\n dtOptions.paging = false;\r\n dtOptions.columns = columns;\r\n return new PJQ.views.dataTables.DataTable(dtOptions);\r\n },\r\n importClicked: function () {\r\n new PJQ.views.budget.UploadCostCodesModal({\r\n costCodes: this.costCodes,\r\n project: this.options.project,\r\n subJob: this.options.subJob,\r\n onSave: _.bind(function (costCodes) {\r\n this.costCodes.add(costCodes);\r\n this.render();\r\n }, this)\r\n });\r\n },\r\n enableSubJobsChanged: function (e) {\r\n this.options.enableSubJobs = $(e.currentTarget).prop('checked');\r\n if (typeof this.options.enableSubJobsChanged === 'function') {\r\n this.options.enableSubJobsChanged(this.options.enableSubJobs);\r\n }\r\n },\r\n renderERP: function () {\r\n if (this.erpIntegration == null || (this.options.project != null && !this.options.project.isERPSynced())) {\r\n return;\r\n }\r\n\r\n let hasStaleCostCodes = null != _.find(this.costCodes.models, function (costCode) {\r\n return costCode.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.PENDING\r\n || costCode.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.STALE;\r\n }),\r\n pushSupported,\r\n pullSupported,\r\n status;\r\n if (this.options.project) {\r\n let projectSyncStatus = this.options.project.erpSyncStatus(),\r\n isProjectReviewing = projectSyncStatus === PJQ.constants.integrations.erp.syncStatuses.REVIEWING;\r\n status = hasStaleCostCodes && !isProjectReviewing ? PJQ.constants.integrations.erp.syncStatuses.STALE : projectSyncStatus;\r\n pushSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PROJECT_COST_CODES);\r\n pullSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_PROJECT_COST_CODES);\r\n } else {\r\n pushSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_COMPANY_COST_CODES);\r\n status = pushSupported && hasStaleCostCodes ? PJQ.constants.integrations.erp.syncStatuses.STALE : PJQ.constants.integrations.erp.syncStatuses.SYNCED;\r\n // We've changed how cost codes are handled. You now pull cost codes from ERP Admin.\r\n pullSupported = false;\r\n }\r\n this.erpButtons = PJQ.helpers.erp.renderERPButtons(this.$('.erp-sync'), {\r\n pushSupported: pushSupported,\r\n canPush: hasStaleCostCodes,\r\n disablePushReason: !hasStaleCostCodes ? 'All cost code changes have been pushed to ERP' : '',\r\n pullSupported: pullSupported,\r\n status: status\r\n });\r\n\r\n let badge = PJQ.helpers.erp.getERPBadge(status);\r\n this.$('.erp-badge').html('' + badge + '');\r\n },\r\n pushERP: function () {\r\n if ((this.options.project != null && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PROJECT_COST_CODES))\r\n || (this.options.project == null && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_COMPANY_COST_CODES))) {\r\n this.erpButtons?.pushing(true);\r\n this.erpIntegration.pushCostCodes({\r\n project: this.options.project\r\n }, (res, err) => {\r\n this.erpButtons?.pushing(false);\r\n if (res == null) {\r\n return;\r\n }\r\n this.allCostCodes.reset(res);\r\n this.costCodes = null;\r\n PJQ.notifications.notify.successNotify({\r\n message: this.options.project ? 'Project Cost Codes pushed for ERP approval' : 'Cost Codes successfully pushed to ERP'\r\n });\r\n this.render();\r\n });\r\n }\r\n },\r\n undoPushERP: function () {\r\n if (this.options.project.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.REVIEWING) {\r\n this.erpIntegration.undoPush(this.options.project, _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Project Cost Codes successfully removed from ERP approval'\r\n });\r\n this.render();\r\n }, this));\r\n }\r\n },\r\n pullERP: function () {\r\n if ((this.options.project != null && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_PROJECT_COST_CODES))\r\n || (this.options.project == null && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_COMPANY_COST_CODES))) {\r\n this.erpButtons?.pulling(true);\r\n this.erpIntegration.pullCostCodes(this.options.project, (newCostCodes, err) => {\r\n this.erpButtons?.pulling(false);\r\n if (newCostCodes == null) {\r\n return;\r\n }\r\n\r\n this.allCostCodes.reset(newCostCodes);\r\n this.costCodes = null;\r\n PJQ.notifications.notify.successNotify({\r\n message: _.size(newCostCodes).toString() + ' Cost Codes pulled from ERP'\r\n });\r\n if (typeof this.options.onPullERP === 'function') {\r\n this.options.onPullERP();\r\n } else {\r\n this.render();\r\n }\r\n });\r\n }\r\n },\r\n addStandard: function () {\r\n new PJQ.views.budget.CostCodePickerModal({\r\n title: 'Add Cost Codes To Project',\r\n pickerOptions: {\r\n showDisabledAsSelected: true,\r\n isCostCodeDisabled: _.bind(function (costCode) {\r\n return null != _.find(this.costCodes.models, function (pCostCode) {\r\n return pCostCode.get('code').toLowerCase() === costCode.get('code').toLowerCase();\r\n })\r\n }, this)\r\n },\r\n onSave: _.bind(function (newCostCodes) {\r\n if (_.size(newCostCodes) > 0) {\r\n this.costCodes.saveBulk(newCostCodes, this.options.subJob ? this.options.subJob.id : null, _.bind(function (savedCostCodes) {\r\n if (savedCostCodes) {\r\n if (this.options.project) {\r\n this.options.project.costCodes.add(savedCostCodes);\r\n }\r\n this.render();\r\n PJQ.notifications.notify.successNotify({\r\n message: _.size(savedCostCodes).toString() + ' Company Cost Codes added to project'\r\n });\r\n } else {\r\n // todo: error\r\n }\r\n }, this));\r\n }\r\n }, this)\r\n });\r\n },\r\n addClicked: function () {\r\n this.editCostCode(null);\r\n },\r\n editClicked: function (e) {\r\n let id = $(e.currentTarget).closest('tr').attr('id');\r\n if (_.size(id) > 0) {\r\n let costCode = this.costCodes.get(id);\r\n if (costCode != null) {\r\n this.editCostCode(costCode);\r\n }\r\n }\r\n },\r\n editCostCode: function (costCode) {\r\n new PJQ.views.budget.EditCostCodeModal({\r\n model: costCode,\r\n project: this.options.project,\r\n subJob: this.options.subJob,\r\n onSave: _.bind(function (costCode) {\r\n this.costCodes.add(costCode);\r\n if (this.options.project) {\r\n this.options.project.costCodes.add(costCode);\r\n }\r\n this.render();\r\n }, this),\r\n // onClose: _.bind(function (costCode) {\r\n // this.dataTable.refresh();\r\n // }, this),\r\n onDelete: _.bind(function (costCode) {\r\n if (costCode.id > 0) {\r\n this.deleteCostCode(costCode);\r\n }\r\n }, this)\r\n });\r\n },\r\n deleteClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n cid = target.closest('tr').attr('id'),\r\n costCode = this.costCodes.get(cid);\r\n this.deleteCostCode(costCode);\r\n },\r\n deleteAll: function () {\r\n let msg,\r\n ct = _.size(this.costCodes.models);\r\n if (ct === 0) {\r\n return;\r\n }\r\n\r\n if (this.options.project != null) {\r\n msg = 'Are you sure you want to delete all Cost Codes from this project? This will only delete cost codes which are not on the budget.';\r\n } else {\r\n msg = 'Are you sure you want to delete all ' + ct + ' Company Cost Codes?';\r\n }\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: msg,\r\n onDelete: _.bind(function () {\r\n this.costCodes.deleteAll(_.bind(function (result) {\r\n if (this.options.project != null) {\r\n this.options.project.costCodes.reset(result);\r\n this.costCodes.reset(result);\r\n } else {\r\n this.costCodes.reset([]);\r\n }\r\n PJQ.notifications.notify.successNotify({\r\n message: (ct - _.size(this.costCodes.models)).toString() + ' Cost Codes deleted'\r\n });\r\n this.render();\r\n }, this));\r\n }, this)\r\n });\r\n },\r\n deleteCostCode: function (costCode) {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"Are you sure you want to delete this Cost Code?\",\r\n onDelete: _.bind(function () {\r\n costCode.destroy({\r\n notify: false,\r\n success: _.bind(function () {\r\n if (this.options.project) {\r\n this.options.project.costCodes.remove(costCode);\r\n }\r\n this.costCodes.remove(costCode);\r\n this.render();\r\n }, this),\r\n error: function (model, xhr) {\r\n if (xhr.responseJSON != null && xhr.responseJSON.type === 'delete_code_with_line_item') {\r\n PJQ.notifications.notify.warningNotify({\r\n message: 'This cost code cannot be deleted because it is being used on budget line items.'\r\n });\r\n }\r\n }\r\n });\r\n }, this)\r\n });\r\n }\r\n});\r\n\r\nPJQ.views.budget.EditCostCodeModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-edit-cost-code'),\r\n maxWidth: 600\r\n },\r\n events: {\r\n 'click .btn-save': 'save',\r\n 'click .btn-close': 'close',\r\n 'click .btn-delete': 'delete',\r\n 'keydown .input-percent': 'numbersOnly',\r\n 'change .input-percent': 'formatPercent'\r\n },\r\n beforeModalCreated: async function () {\r\n if (this.model == null) {\r\n this.model = new PJQ.models.budget.CostCode({\r\n projectId: this.options.project ? this.options.project.id : null,\r\n subJobId: this.options.subJob ? this.options.subJob.id : null\r\n });\r\n }\r\n\r\n let fnRender = _.bind(function () {\r\n PJQ.app.session.fetchCostTypes(_.bind(function (costTypes) {\r\n this.costTypes = costTypes;\r\n this.isFetched = true;\r\n this.render();\r\n }, this));\r\n }, this);\r\n\r\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\r\n\r\n if(this.erpIntegration != null && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.DISABLE_EDIT_COST_CODE_TYPE_FILTER)) {\r\n this.options.disableEditingCostTypeFilter = true;\r\n }\r\n\r\n if (this.options.project != null) {\r\n if(this.erpIntegration != null && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_PROJECT_COST_CODES) && !this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PROJECT_COST_CODES)) {\r\n this.options.disableEditingCostCodeName = true;\r\n }\r\n\r\n this.options.project.fetchCostCodes(_.bind(function (costCodes) {\r\n this.costCodes = costCodes;\r\n fnRender();\r\n }, this));\r\n } else {\r\n if(this.erpIntegration != null && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_COMPANY_COST_CODES) && !this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_COMPANY_COST_CODES)) {\r\n this.options.disableEditingCostCodeName = true;\r\n }\r\n\r\n PJQ.app.session.fetchCostCodes(_.bind(function (costCodes) {\r\n this.costCodes = costCodes;\r\n fnRender();\r\n }, this));\r\n }\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model,\r\n costTypes: this.costTypes,\r\n isFetched: this.isFetched,\r\n disableEditingCostCodeName: this.options.disableEditingCostCodeName\r\n };\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n new PJQ.Binder(this.$el, this.model, {\r\n setDefaultValues: true,\r\n useDecimalPercentFields: true,\r\n watchElements: [\r\n 'input',\r\n 'select'\r\n ]\r\n });\r\n\r\n let divisions = this.costCodes.getDivisions();\r\n new PJQ.inputs.AutocompleteInput({\r\n el: this.$('.input-division'),\r\n source: divisions\r\n });\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-cost-types'),\r\n isIntChoices: true,\r\n isMultiple: true,\r\n noneSelectedText: 'All Cost Types',\r\n isDisabled: this.options.disableEditingCostTypeFilter,\r\n defaultValue: this.model.get('costTypeIds')\r\n });\r\n },\r\n formatPercent: function (e) {\r\n let val = $(e.currentTarget).val();\r\n if (val !== \"\") {\r\n $(e.currentTarget).val(PJQ.helpers.formatHelpers.formatPercent(val));\r\n }\r\n },\r\n numbersOnly: function (e) {\r\n return PJQ.helpers.inputHelpers.numbersOnly(e, true, true);\r\n },\r\n close: function () {\r\n if (this.model.hasChanged()) {\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.save();\r\n }, this),\r\n onDontSave: _.bind(function () {\r\n if (this.options.onClose) {\r\n this.options.onClose(this.model);\r\n }\r\n this.removeModal();\r\n }, this)\r\n });\r\n } else if (this.options.onClose) {\r\n this.options.onClose(this.model);\r\n this.removeModal();\r\n }\r\n },\r\n validate: function () {\r\n let $code = this.$('.input-code'),\r\n code = $code.val(),\r\n subJobId = this.model.get('subJobId'),\r\n isCodeValid = true,\r\n errorText = '';\r\n if (_.size(code) === 0) {\r\n isCodeValid = false;\r\n } else if (null != _.find(this.costCodes.models, _.bind(function (cc) {\r\n return cc.id !== this.model.id && (subJobId == null || subJobId === cc.get('subJobId')) && cc.get('code').toLowerCase() === code.toLowerCase();\r\n }, this))) {\r\n isCodeValid = false;\r\n errorText = 'This code already exists'\r\n }\r\n PJQ.helpers.inputHelpers.setInputError($code, isCodeValid, {\r\n errorText: errorText\r\n });\r\n return isCodeValid;\r\n },\r\n save: function () {\r\n if (this.validate()) {\r\n this.model.save(null, {\r\n success: _.bind(function () {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n this.costCodes.add(this.model);\r\n this.removeModal();\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Cost Code saved'\r\n });\r\n }, this)\r\n });\r\n }\r\n },\r\n delete: function () {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"Are you sure you want to delete this Cost Code?\",\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.removeModal();\r\n }, this)\r\n });\r\n }\r\n});\r\n\r\nPJQ.views.budget.UploadCostCodesModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-upload-cost-codes'),\r\n maxWidth: 500,\r\n onSave: null\r\n },\r\n events: {\r\n 'click .btn-save-new': 'saveNew',\r\n 'click .btn-save-all': 'saveAll'\r\n },\r\n renderData: function () {\r\n return {\r\n data: this.data,\r\n isSaving: this.isSaving\r\n };\r\n },\r\n saveNew: function () {\r\n this.save(_.filter(this.data, function (dt) {\r\n return !(dt.id > 0);\r\n }))\r\n },\r\n saveAll: function () {\r\n this.save(this.data);\r\n },\r\n save: function (costCodes) {\r\n this.isSaving = true;\r\n this.render();\r\n this.$('.import-loading').removeClass('hidden');\r\n this.options.costCodes.saveBulk(costCodes, this.options.subJob ? this.options.subJob.id : null, (savedCostCodes) => {\r\n this.isSaving = false;\r\n if (savedCostCodes) {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(savedCostCodes);\r\n }\r\n this.removeModal();\r\n PJQ.notifications.notify.successNotify({\r\n message: _.size(savedCostCodes).toString() + ' Cost Codes imported'\r\n });\r\n } else {\r\n // todo: error\r\n }\r\n });\r\n },\r\n afterRender: function () {\r\n if (this.data == null) {\r\n let $uploader = this.$('.template-uploader');\r\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\r\n el: $uploader,\r\n useApiV2: true,\r\n allowedExtensions: ['xls', 'xlsx', 'csv'],\r\n uploadTemplateCallback: () => {\r\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'costcodes'\r\n },\r\n {\r\n endpoint: 'import'\r\n },\r\n {\r\n endpoint: 'template'\r\n }\r\n ]), {isAPIv2: true});\r\n },\r\n maxFiles: 1,\r\n style: 'grid',\r\n onDrop: _.bind(function () {\r\n this.$('.import-processing').removeClass('hidden');\r\n this.$('.btn-close').prop('disabled', true);\r\n }, this),\r\n onSuccess: _.bind(function (file) {\r\n let loader = new PJQ.Loader($uploader);\r\n if (this.options.costCodes != null && _.size(file.uploadId) > 0) {\r\n this.options.costCodes.processImport(file.uploadId, this.options.project ? this.options.project.id : null, (data) => {\r\n this.fileUploader.remove();\r\n loader.remove();\r\n this.fileUploader = null;\r\n this.data = data;\r\n this.render();\r\n });\r\n }\r\n }, this)\r\n });\r\n }\r\n }\r\n});\r\n\r\nPJQ.views.budget.CostCodePickerModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-cost-code-picker'),\r\n maxWidth: 600,\r\n pickerOptions: {}\r\n },\r\n events: {\r\n 'click .btn-save': 'save',\r\n 'click .btn-close': 'close'\r\n },\r\n renderData: function () {\r\n return {\r\n options: this.options\r\n };\r\n },\r\n beforeModalCreated: function () {\r\n this.selectedCostCodes = [];\r\n },\r\n afterRender: function () {\r\n new PJQ.views.budget.CostCodePicker(_.defaults(this.options.pickerOptions, {\r\n el: this.$('.cc-picker'),\r\n costCodes: this.options.costCodes,\r\n onSelectionChanged: _.bind(function (costCodes) {\r\n this.selectedCostCodes = costCodes;\r\n }, this)\r\n }));\r\n },\r\n close: function () {\r\n if (typeof this.options.onClose === 'function') {\r\n this.options.onClose();\r\n }\r\n this.removeModal();\r\n },\r\n save: function () {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.selectedCostCodes);\r\n }\r\n this.removeModal();\r\n }\r\n});\r\n\r\nPJQ.views.budget.CostCodePicker = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'cost-code-picker-container'),\r\n subTemplates: {\r\n picker: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'cost-code-picker')\r\n },\r\n costCodes: null,\r\n selectedCostCodeIds: null,\r\n selectecCostCodeCodes: null,\r\n disabledCostCodeIds: null,\r\n onSelectionChanged: null,\r\n isCostCodeDisabled: null,\r\n showDisabledAsSelected: false\r\n },\r\n events: {\r\n \"keyup .input-search\": \"renderCostCodes\",\r\n \"click .btn-clear-filters\": \"clearFilters\",\r\n \"click .cost-codes-all-select\": \"selectAll\",\r\n \"click .division-select\": \"selectDivision\",\r\n \"click .cost-code-select\": \"selectionChanged\",\r\n \"click .division-expand\": \"expandDivisionClicked\"\r\n },\r\n beforeFirstRender: function () {\r\n this.selectedCostCodeIds = [];\r\n if (_.size(this.options.selectedCostCodeIds) > 0) {\r\n this.selectedCostCodeIds = this.options.selectedCostCodeIds;\r\n }\r\n\r\n this.isFetched = false;\r\n if (this.options.costCodes == null) {\r\n PJQ.app.session.fetchCostCodes(_.bind(function (costCodes) {\r\n this.costCodes = costCodes;\r\n this.isFetched = true;\r\n this.render();\r\n }, this));\r\n } else {\r\n this.costCodes = this.options.costCodes;\r\n this.isFetched = true;\r\n }\r\n },\r\n renderData: function () {\r\n return {\r\n costCodes: this.costCodes,\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 this.renderCostCodes();\r\n },\r\n renderCostCodes: function () {\r\n let searchFilter = this.$('.input-search').val().toLowerCase(),\r\n costCodes = [],\r\n $clearFilters = this.$('.btn-clear-filters');\r\n if (_.size(searchFilter) > 0) {\r\n $clearFilters.prop('disabled', false);\r\n _.each(this.costCodes.models, _.bind(function (costCode) {\r\n if (costCode.getDisplayName().toLowerCase().indexOf(searchFilter) > -1) {\r\n costCodes.push(costCode);\r\n }\r\n }, this));\r\n } else {\r\n $clearFilters.prop('disabled', true);\r\n costCodes = this.costCodes.models;\r\n }\r\n\r\n let divisions = null;\r\n if (this.costCodes.hasDivisions()) {\r\n divisions = {};\r\n _.each(costCodes, function (costCode) {\r\n let division = _.size(costCode.get('division')) > 0 ? costCode.get('division') : 'No Division';\r\n if (divisions[division] != null) {\r\n divisions[division].costCodes.push(costCode);\r\n } else {\r\n divisions[division] = {\r\n name: division,\r\n costCodes: [costCode]\r\n }\r\n }\r\n });\r\n }\r\n this.renderSubTemplate(false, this.options.subTemplates.picker, this.$('.cost-codes-container'), {\r\n isCostCodeDisabled: this.isCostCodeDisabled,\r\n isCostCodeSelected: this.isCostCodeSelected,\r\n costCodes: costCodes,\r\n divisions: divisions,\r\n selectedCostCodeIds: this.selectedCostCodeIds,\r\n isFetched: this.isFetched,\r\n options: this.options\r\n }, _.bind(function () {\r\n this.setDisabledDivisions();\r\n this.setSelectedDivisions();\r\n this.isRendered = true;\r\n }, this));\r\n },\r\n setSelectedDivisions: function () {\r\n let self = this;\r\n this.$('.division-select').each(function () {\r\n $(this).prop('checked', _.size(self.getDivisionCostCodesContainer($(this)).find('.cost-code-select').not(':checked')) === 0);\r\n });\r\n this.$('.cost-codes-all-select').prop('checked', !(this.$('.cost-code-select:not(:checked)').length > 0));\r\n },\r\n setDisabledDivisions: function () {\r\n let self = this;\r\n this.$('.division-select').each(function () {\r\n $(this).prop('disabled', _.size(self.getDivisionCostCodesContainer($(this)).find('.cost-code-select').not(':disabled')) === 0);\r\n });\r\n this.$('.cost-codes-all-select').prop('disabled', !(this.$('.cost-code-select:not(:disabled)').length > 0));\r\n },\r\n clearFilters: function () {\r\n this.$('.input-search').val('');\r\n this.renderCostCodes();\r\n },\r\n selectAll: function (override) {\r\n if (typeof override === 'boolean')\r\n this.$('.cost-codes-all-select').prop('checked', override);\r\n\r\n let checkboxes = this.$('.cost-code-select:not(:disabled)');\r\n if (this.$('.cost-codes-all-select').prop('checked')) {\r\n checkboxes.prop('checked', true);\r\n } else {\r\n checkboxes.prop('checked', false);\r\n }\r\n this.selectionChanged();\r\n },\r\n getDivisionCostCodesContainer: function ($element) {\r\n return $element.closest('.division-outer').find('.division-cost-codes');\r\n },\r\n selectDivision: function (e) {\r\n let $costCodes = this.getDivisionCostCodesContainer($(e.currentTarget)),\r\n isChecked = $(e.currentTarget).is(':checked');\r\n $costCodes.find('.cost-code-select,.division-select').not(':disabled').prop('checked', isChecked);\r\n this.selectionChanged();\r\n },\r\n selectionChanged: function () {\r\n let checkboxes = this.$('.cost-code-select:checked').not(':disabled');\r\n this.selectedCostCodeIds = _.map(checkboxes, function (cb) {\r\n return $(cb).data('id');\r\n });\r\n\r\n this.setSelectedDivisions();\r\n if (typeof this.options.onSelectionChanged === 'function') {\r\n this.options.onSelectionChanged(this.costCodes.get(this.selectedCostCodeIds));\r\n }\r\n },\r\n expandDivisionClicked: function (e) {\r\n this.expandDivision(this.getDivisionCostCodesContainer($(e.currentTarget)));\r\n },\r\n expandDivision: function (container) {\r\n let icon = container.siblings('i.division-expand');\r\n if (container.hasClass('hidden')) {\r\n container.removeClass('hidden');\r\n icon.removeClass('fa-chevron-right text-primary').addClass('fa-chevron-down text-muted');\r\n } else {\r\n container.addClass('hidden');\r\n icon.removeClass('fa-chevron-down text-muted').addClass('fa-chevron-right text-primary');\r\n }\r\n },\r\n isCostCodeSelected: function (costCode) {\r\n return this.selectedCostCodeIds.indexOf(costCode.id) !== -1;\r\n },\r\n isCostCodeDisabled: function (costCode) {\r\n if (typeof this.options.isCostCodeDisabled === 'function') {\r\n return this.options.isCostCodeDisabled(costCode);\r\n }\r\n return false;\r\n },\r\n showError: function (errorText) {\r\n this.hideError();\r\n this.errorAlert = new PJQ.Alert(this.$el, {\r\n type: 'danger',\r\n extraClasses: ['mt-1, mb-1'],\r\n text: errorText,\r\n isPrepend: true\r\n });\r\n },\r\n hideError: function () {\r\n if (this.errorAlert) {\r\n this.errorAlert.destroy();\r\n }\r\n }\r\n});","PJQ.views.budget.CostTypeSettings = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'cost-type-settings')\n },\n events: {\n 'click .btn-add-cost-type': 'addClicked',\n 'click .btn-edit-cost-type': 'editClicked',\n 'click .btn-delete-cost-type': 'deleteClicked',\n 'click .btn-delete-all': 'deleteAll',\n 'click .btn-push-erp': 'pushERP',\n 'click .btn-pull-erp': 'pullERP',\n },\n beforeFirstRender: async function () {\n this.isFetched = false;\n\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\n if (this.options.project != null) {\n this.budget = await this.options.project.fetchBudget();\n this.costTypes = await this.options.project.fetchCostTypes();\n\n if (this.erpIntegration != null && this.erpIntegration.getSetting('syncProjects')) {\n await this.options.project.fetchERPObject();\n }\n } else {\n this.costTypes = await PJQ.app.session.fetchCostTypes();\n }\n\n this.isFetched = true;\n this.render();\n },\n renderData: function () {\n return {\n project: this.options.project,\n costTypes: this.costTypes,\n isFetched: this.isFetched,\n erpIntegration: this.erpIntegration,\n budget: this.budget\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n this.stopListening(this.costTypes);\n this.listenTo(this.costTypes, 'update', () => {\n this.renderERP();\n });\n this.renderERP();\n\n this.renderCostTypeTable();\n },\n renderCostTypeTable: function () {\n if (this.dataTable && this.dataTable.dataTable) {\n this.dataTable.dataTable.destroy();\n this.dataTable = null;\n }\n\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$(\".cost-types-table\"),\n data: this.costTypes.models,\n order: [1, 'asc'],\n onRowDoubleClick: _.bind(function (row) {\n this.editCostType(row.data());\n }, this),\n rowId: 'cid',\n paging: false,\n contextMenuOptions: {\n actions: [\n {\n name: 'Edit',\n onClick: (row) => {\n this.editCostType(row.data());\n }\n },\n {\n name: 'Delete',\n isDanger: true,\n isShown: (row) => {\n if (this.budget) {\n return null == this.budget.lineItems.findWhere({costTypeId: row.data().id});\n } else {\n return true;\n }\n },\n onClick: (row) => {\n this.deleteCostType(row.data());\n }\n }\n ]\n },\n columns: [\n {\n \"title\": \"\",\n \"data\": \"attributes.externalObject\",\n \"width\": \"5%\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": (data, type, row) => {\n if (data) {\n return '';\n }\n return '';\n }\n },\n {\n \"data\": \"attributes.code\",\n \"title\": \"Code\",\n \"width\": \"15%\"\n },\n {\n \"data\": \"attributes.name\",\n \"title\": \"Name\"\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"className\": \"p-2\",\n \"width\": \"80px\",\n \"render\": (data, type, model) => {\n let canDelete = null == this.budget || null == this.budget.lineItems.findWhere({costTypeId: model.id}),\n res = '
';\n if (canDelete) {\n res += '';\n } else {\n res += '';\n }\n return res + '
';\n }\n }\n ],\n language: {\n zeroRecords: 'Click \"Add Cost Type\" to create a new Cost Type'\n }\n });\n },\n renderERP: function () {\n if (this.erpIntegration == null) {\n return;\n }\n\n let hasStaleCostTypes = null != _.find(this.costTypes.models, function (costType) {\n return costType.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.PENDING\n || costType.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.STALE;\n }),\n pushSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_COST_TYPES),\n status = pushSupported && hasStaleCostTypes ? PJQ.constants.integrations.erp.syncStatuses.STALE : PJQ.constants.integrations.erp.syncStatuses.SYNCED,\n pullSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_COST_TYPES);\n this.erpButtons = PJQ.helpers.erp.renderERPButtons(this.$('.erp-sync'), {\n pushSupported: pushSupported,\n canPush: hasStaleCostTypes,\n disablePushReason: !hasStaleCostTypes ? 'All cost type changes have been pushed to ERP' : '',\n pullSupported: pullSupported,\n status: status\n });\n\n let badge = PJQ.helpers.erp.getERPBadge(status);\n this.$('.erp-badge').html('' + badge + '');\n },\n pushERP: function () {\n if (this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_COST_TYPES)) {\n this.erpButtons?.pushing(true);\n this.erpIntegration.pushCostTypes((res, err) => {\n this.erpButtons?.pushing(false);\n if (res == null) {\n return;\n }\n\n this.costTypes.reset(res);\n PJQ.notifications.notify.successNotify({\n message: 'Cost Types successfully pushed to ERP'\n });\n this.render();\n });\n }\n },\n pullERP: function () {\n if (this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_COST_TYPES)) {\n this.erpButtons?.pulling(true);\n this.erpIntegration.pullCostTypes((res, err) => {\n this.erpButtons?.pulling(false);\n if (res == null) {\n return;\n }\n\n this.costTypes.reset(res);\n PJQ.notifications.notify.successNotify({\n message: _.size(res).toString() + ' Cost Types pulled from ERP'\n });\n if (typeof this.options.onPullERP === 'function') {\n this.options.onPullERP();\n } else {\n this.render();\n }\n });\n }\n },\n addClicked: function () {\n this.editCostType(null);\n },\n editClicked: function (e) {\n let id = $(e.currentTarget).closest('tr').attr('id');\n if (_.size(id) > 0) {\n let costType = this.costTypes.get(id);\n if (costType != null) {\n this.editCostType(costType);\n }\n }\n },\n editCostType: function (costType) {\n new PJQ.views.budget.EditCostTypeModal({\n model: costType,\n project: this.options.project,\n onSave: _.bind(function (costType) {\n this.costTypes.add(costType);\n if (this.options.project) {\n this.options.project.costTypes.add(costType);\n }\n this.render();\n }, this),\n onDelete: _.bind(function (costType) {\n if (costType.id > 0) {\n this.deleteCostType(costType, false);\n }\n }, this)\n });\n },\n deleteClicked: function (e) {\n let target = $(e.currentTarget),\n cid = target.closest('tr').attr('id'),\n costCode = this.costTypes.get(cid);\n this.deleteCostType(costCode);\n },\n deleteAll: function () {\n let ct = _.size(this.costTypes.models);\n if (ct === 0) {\n return;\n }\n\n let msg = 'Are you sure you want to delete all ' + ct + ' Company Cost Types?';\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: msg,\n onDelete: _.bind(function () {\n\n }, this)\n });\n },\n deleteCostType: function (costType, showDialogue = true) {\n if (showDialogue) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this Cost Type?\",\n onDelete: _.bind(function () {\n costType.destroy({\n notify: false,\n success: _.bind(function () {\n this.costTypes.remove(costType);\n this.render();\n }, this),\n error: function (model, xhr) {\n if (xhr.responseJSON != null && xhr.responseJSON.type === 'delete_type_with_line_item') {\n PJQ.notifications.notify.warningNotify({\n message: 'This cost type cannot be deleted because it is being used on budget line items.'\n });\n }\n }\n });\n }, this)\n });\n } else {\n costType.destroy({\n notify: false,\n success: _.bind(function () {\n this.costTypes.remove(costType);\n this.render();\n }, this)\n });\n }\n }\n});\n\nPJQ.views.budget.EditCostTypeModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-edit-cost-type'),\n maxWidth: 600\n },\n events: {\n 'click .btn-save': 'save',\n 'click .btn-close': 'close',\n 'click .btn-delete': 'delete'\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n\n if (this.model == null) {\n this.model = new PJQ.models.budget.CostType();\n }\n\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\n\n this.costTypes = await PJQ.app.session.fetchCostTypes();\n\n this.isFetched = true;\n this.render();\n },\n renderData: function () {\n return {\n model: this.model,\n costTypes: this.costTypes,\n erpIntegration: this.erpIntegration,\n externalObject: this.model.get('externalObject'),\n isFetched: this.isFetched\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n new PJQ.Binder(this.$el, this.model, {\n setDefaultValues: true,\n watchElements: [\n 'input',\n 'select'\n ]\n });\n\n this.$(\".input-name\").inputmask({\n \"mask\": \"a\".repeat(50),\n placeholder: \"\",\n definitions: {\n 'a': {\n validator: \".\",\n cardinality: 1\n }\n }\n });\n\n this.$(\".input-code\").inputmask({\n \"mask\": \"a\".repeat(20),\n placeholder: \"\",\n definitions: {\n 'a': {\n validator: \"[0-9a-zA-Z]\",\n cardinality: 1\n }\n }\n });\n\n if (this.erpIntegration != null) {\n this.renderIntegrationFields();\n }\n },\n renderIntegrationFields: function () {\n if (this.erpIntegration == null) {\n return;\n }\n\n switch (this.erpIntegration.get('name')) {\n case PJQ.constants.integrations.providers.ACUMATICA.name:\n let defaultNonStockItem = this.erpIntegration.getSetting('defaultNonStockItem'),\n externalObj = this.model.get('externalObject');\n\n let nonStockItem = defaultNonStockItem;\n if (externalObj != null && externalObj.data?.nonStockItem != null) {\n nonStockItem = externalObj.data?.nonStockItem;\n }\n\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-non-stock'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Non-Stock Item',\n title: 'The Non-Stock Item used when syncing Commitments to Acumatica Subcontract and Purchase Order lines which use this cost type',\n showSaveButton: false,\n defaultDisplayValue: nonStockItem != null ? nonStockItem.inventoryID : null,\n value: nonStockItem != null ? nonStockItem.id : null,\n getChoices: (cb) => {\n let fnCallback = () => {\n cb(_.map(this.erpIntegration.settingsData.nonStockItems, function (item) {\n return {\n id: item.id,\n name: item.inventoryID\n };\n }));\n };\n if (this.erpIntegration.settingsData?.nonStockItems != null) {\n fnCallback();\n return;\n }\n\n this.erpIntegration.fetchSettingsData((data) => {\n fnCallback();\n }, {\n type: 'non_stock_items'\n });\n },\n onChange: (value) => {\n let item = this.erpIntegration.settingsData.nonStockItems.find((item) => item.id === value);\n if (item != null) {\n this.erpIntegration.setSetting('nonStockItem', item);\n }\n\n let exObj = this.model.get('externalObject');\n if (defaultNonStockItem?.id === item.id) {\n delete exObj.data.nonStockItem;\n } else {\n exObj.data.nonStockItem = item;\n }\n exObj.isDirty = true;\n this.model.set('externalObject', exObj);\n }\n });\n break;\n }\n },\n close: function () {\n if (this.model.hasChanged()) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.save();\n }, this),\n onDontSave: _.bind(function () {\n if (this.options.onClose) {\n this.options.onClose(this.model);\n }\n this.removeModal();\n }, this)\n });\n } else if (this.options.onClose) {\n this.options.onClose(this.model);\n this.removeModal();\n }\n },\n validate: function () {\n let isValid = true;\n\n let $name = this.$('.input-name');\n PJQ.helpers.inputHelpers.setInputError($name, true);\n if (this.model.get('name') == null || this.model.get('name').length === 0) {\n PJQ.helpers.inputHelpers.setInputError($name, false);\n isValid = false;\n }\n\n let $code = this.$('.input-code');\n PJQ.helpers.inputHelpers.setInputError($code, true);\n if (this.model.get('code') == null || this.model.get('code').length === 0) {\n PJQ.helpers.inputHelpers.setInputError($code, false);\n isValid = false;\n }\n\n return isValid;\n },\n save: function () {\n if (!this.validate()) {\n return;\n }\n\n let fnSaveERPObj = (cb) => {\n let exObj = this.model.get('externalObject');\n if (this.erpIntegration == null || exObj == null || !exObj.isDirty) {\n cb();\n return;\n }\n\n this.erpIntegration.updateCostTypeData(exObj, (res, err) => {\n cb();\n });\n }\n\n fnSaveERPObj(() => {\n this.model.save(null, {\n success: () => {\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n this.costTypes.add(this.model);\n\n this.removeModal();\n PJQ.notifications.notify.successNotify({\n message: 'Cost Type saved'\n });\n }\n });\n });\n },\n delete: function () {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this Cost Type?\",\n onDelete: _.bind(function () {\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(this.model);\n }\n this.removeModal();\n }, this)\n });\n }\n});","PJQ.collections.erpAdmin = PJQ.collections.erpAdmin ?? {};\nPJQ.models.erpAdmin = PJQ.models.erpAdmin ?? {};\nPJQ.views.erpAdmin = PJQ.views.erpAdmin ?? {};\nPJQ.constants.erpAdmin = PJQ.constants.erpAdmin ?? {};\n\nPJQ.modules.erpAdmin = {\n routes: [\n {\n route: \"erpadmin\",\n name: 'erpadmin',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\"\n });\n }\n },\n {\n route: \"erpadmin/project\",\n name: 'erpadmin-project',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'project'\n }\n });\n }\n },\n {\n route: \"erpadmin/costcode\",\n name: 'erpadmin-costcode',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'costcode'\n }\n });\n }\n },\n {\n route: \"erpadmin/subjob\",\n name: 'erpadmin-subjob',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'subjob'\n }\n });\n }\n },\n {\n route: \"erpadmin/cont_comp\",\n name: 'erpadmin-company',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'cont_comp'\n }\n });\n }\n },\n {\n route: \"erpadmin/budget\",\n name: 'erpadmin-budget',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'budget'\n }\n });\n }\n },\n {\n route: \"erpadmin/commitment\",\n name: 'erpadmin-commitment',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'commitment'\n }\n });\n }\n },\n {\n route: \"erpadmin/cco\",\n name: 'erpadmin-cco',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'cco'\n }\n });\n }\n },\n {\n route: \"erpadmin/ap_inv\",\n name: 'erpadmin-payableinvoices',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'ap_inv'\n }\n });\n }\n },\n {\n route: \"erpadmin/ar_inv\",\n name: 'erpadmin-receivableinvoices',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'ar_inv'\n }\n });\n }\n },\n {\n route: \"erpadmin/contract\",\n name: 'erpadmin-contract',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'contract'\n }\n });\n }\n },\n {\n route: \"erpadmin/pcco\",\n name: 'erpadmin-pcco',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'pcco'\n }\n });\n }\n },\n {\n route: \"erpadmin/d_cost\",\n name: 'erpadmin-directcosts',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"erpadmin\",\n viewOptions: {\n feature: 'd_cost'\n }\n });\n }\n },\n ]\n};\n\nPJQ.app.addRoutes(PJQ.modules.erpAdmin.routes);\n","// Models\nPJQ.models.erpAdmin.ERPObject = 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: 'erp'\n },\n {\n endpoint: 'objects',\n value: this.erpObject.id\n }\n ]);\n },\n parse: function (model) {\n model = model ? model : {};\n\n model.id = model.erpObject.id;\n this.erpObject = model.erpObject;\n if (model.relatedObjects) {\n this.relatedItem = model.relatedObjects.relatedItem;\n this.project = model.relatedObjects.project;\n }\n\n return model;\n },\n createNewContactCompany: function (externalId, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'vendors'\n },\n {\n endpoint: 'pull',\n value: externalId\n }]),\n isAPIv2: true,\n }).post().done(_.bind(function (res) {\n if (typeof callback === 'function') {\n callback(res);\n }\n }, this)).fail(_.bind(function (error) {\n if (typeof callback === 'function') {\n callback(false, error);\n }\n }, this));\n },\n approve: function (data, callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/approve',\n data: data,\n isAPIv2: true\n }).post().done((res) => {\n if (res && !res.error) {\n this.erpObject = res;\n }\n\n if (typeof callback === 'function') {\n callback(res);\n }\n }).fail((err) => {\n callback(null, err);\n });\n },\n reject: function (rejectReason, callback) {\n this.erpObject.rejectReason = rejectReason;\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/reject',\n data: this.erpObject,\n isAPIv2: true\n }).post().done(_.bind(function (res) {\n if (res && !res.error) {\n this.erpObject = res;\n }\n\n if (typeof callback === 'function') {\n callback(res);\n }\n }, this));\n },\n pull: function (callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/pull',\n isAPIv2: true\n }).post().done(_.bind(function (res) {\n if (typeof callback === 'function') {\n callback(res);\n }\n }, this));\n },\n linkContactCompany: function (company, externalId, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'vendors'\n },\n {\n endpoint: 'link',\n value: externalId\n }]),\n data: company,\n isAPIv2: true,\n }).post().done(_.bind(function (res) {\n if (typeof callback === 'function') {\n callback(res);\n }\n }, this)).fail(_.bind(function (error) {\n if (typeof callback === 'function') {\n callback(false, error);\n }\n }, this));\n },\n archive: function (callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/archive',\n data: this.erpObject,\n isAPIv2: true\n }).post().done(_.bind(function (res) {\n if (res && !res.error) {\n this.erpObject = res;\n }\n\n if (typeof callback === 'function') {\n callback(res);\n }\n }, this));\n },\n removeFromArchive: function (callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/unarchive',\n data: this.erpObject,\n isAPIv2: true\n }).post().done(_.bind(function (res) {\n if (res && !res.error) {\n this.erpObject = res;\n }\n\n if (typeof callback === 'function') {\n callback(res);\n }\n }, this));\n }\n});\n\n//Collections\nPJQ.collections.erpAdmin.ERPObjects = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.erpAdmin.ERPObject,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'objects',\n value: this.options.internalModel\n }\n ], [\n {\n parameter: 'statusIds',\n value: this.options.statusIds\n }\n ]);\n },\n parse: function (models) {\n if (models == null || models.objects == null) {\n return models;\n }\n\n _.each(models.objects, function (model) {\n model.id = model.erpObject.id;\n if (models.projects != null && model.erpObject && model.erpObject.projectId > 0 && model.relatedObjects != null) {\n model.relatedObjects.project = _.findWhere(models.projects, {id: model.erpObject.projectId});\n }\n });\n\n return models.objects;\n },\n getFeatureCounts: function (externalModel, callback) {\n return new Promise((resolve, reject) => {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'objects',\n value: this.options.internalModel\n },\n {\n endpoint: 'count'\n }], [\n {\n parameter: 'externalModel',\n value: externalModel\n }\n ]),\n isAPIv2: true,\n }).get().done(_.bind(function (res) {\n if (typeof callback === 'function') {\n callback(res);\n }\n resolve(res);\n }, this)).fail(_.bind(function (error) {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch erp integration sync data\"));\n }, this));\n });\n },\n setInternalModel: function (internalModel) {\n this.options.internalModel = internalModel;\n },\n setStatusIds: function (statusIds) {\n this.options.statusIds = statusIds;\n },\n refreshModels: function (type, callback) {\n return new Promise((resolve, reject) => {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: type\n },\n {\n endpoint: 'refresh'\n }]),\n isAPIv2: true,\n }).post().done(_.bind(function () {\n if (typeof callback === 'function') {\n callback(true);\n }\n resolve(true);\n }, this)).fail(_.bind(function (error) {\n if (typeof callback === 'function') {\n callback(false);\n }\n reject(error);\n }, this));\n });\n },\n linkSuggested: function (externalModel, objs, callback) {\n return new Promise((resolve, reject) => {\n if (objs != null && _.size(objs) === 0) {\n if (typeof callback === 'function') {\n callback([]);\n }\n resolve([]);\n return;\n }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: externalModel + 's'\n },\n {\n endpoint: 'linksuggested'\n }\n ]),\n data: _.size(objs) > 0 ? _.map(objs, (obj) => {\n console.log(obj);\n return {\n id: obj.erpObject.id\n };\n }) : null,\n isAPIv2: true\n }).post().done((res) => {\n if (res && !res.error) {\n let objs = [];\n _.each(res, (model) => {\n objs.push({\n id: model.id,\n erpObject: model,\n relatedObjects: {\n relatedItem: Object.assign({}, model.data)\n }\n });\n });\n\n this.add(objs, {merge: true});\n }\n\n if (typeof callback === 'function') {\n callback(res);\n }\n resolve(res);\n }).fail((error) => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(error);\n });\n });\n },\n});","PJQ.constants.erpAdmin.features = {\n cont_comp: {\n canSuggestMatches: true,\n columns: (filter, provider, options) => {\n let columns;\n if (filter === 'readyToImport' || filter === 'archived') {\n columns = [\n {\n \"data\": \"attributes.erpObject.data\",\n \"title\": \"Number\",\n \"width\": \"100px\",\n \"render\": (data, a, row) => {\n return data?.externalNumber ?? data?.id ?? \"\";\n }\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.companyName\",\n \"title\": \"Company\",\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.address1\",\n \"title\": \"Address\",\n \"width\": \"20%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.city\",\n \"title\": \"City\",\n \"width\": \"10%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.state\",\n \"title\": \"State\",\n \"width\": \"5%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.zip\",\n \"title\": \"Zip\",\n \"width\": \"10%\"\n }\n ];\n\n if (options.suggestMatches) {\n columns = _.union([{\n \"title\": '
',\n \"orderable\": false,\n \"searchable\": false,\n \"data\": \"attributes.erpObject\",\n \"visible\": filter !== 'archived',\n \"render\": _.bind(function (erpObj, type, row) {\n let checkedText = _.contains(options.selectedERPItems, row.cid) ? \"checked\" : \"\";\n\n if (erpObj.internalId > 0) {\n return \"\";\n }\n\n return ('
');\n }, this),\n \"width\": '2%'\n },], columns, [{\n \"data\": \"attributes.erpObject.data\",\n \"title\": \"Address Book Company\",\n // \"width\": \"10%\",\n \"render\": (data, a, row) => {\n if (data.suggestedId > 0) {\n return '' + data.companyName + ' (' + data.suggestedId.toString() + ')' + '';\n }\n return '';\n }\n }])\n }\n\n columns.push({\n \"data\": \"attributes\",\n \"title\": \"\",\n \"orderable\": false,\n \"width\": \"10%\",\n \"render\": (attr, a, row) => {\n if (attr.erpObject.internalId > 0) {\n return \"
Linked!
\";\n } else if (options.suggestMatches) {\n return '
';\n } else if (filter === 'archived') {\n return '
';\n } else {\n return '
' +\n '
' +\n ' ' +\n '' +\n '
' +\n '
' +\n ' ' +\n '
' +\n 'Archive ' +\n '
' +\n '
' +\n '
';\n }\n },\n });\n if (provider === PJQ.constants.integrations.providers.SAGE300) {\n columns.unshift(\n {\n \"data\": \"attributes.relatedObjects.relatedItem.code\",\n \"title\": \"Code\",\n \"width\": \"10%\"\n },\n );\n }\n } else {\n columns = [\n {\n \"data\": \"attributes.relatedObjects.relatedItem.companyName\",\n \"title\": \"Company\",\n \"width\": \"20%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.address1\",\n \"title\": \"Address\",\n \"width\": \"20%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.city\",\n \"title\": \"City\",\n \"width\": \"10%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.state\",\n \"title\": \"State\",\n \"width\": \"5%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.zip\",\n \"title\": \"Zip\",\n \"width\": \"10%\"\n }\n ]\n }\n return columns;\n }\n },\n project: {\n enabled: function (integration) {\n if (integration == null) {\n return false;\n }\n\n return integration.getSetting(PJQ.constants.integrations.settings.SYNC_PROJECTS) !== false;\n },\n columns: (filter, provider) => {\n let columns;\n if (filter === 'readyToImport' || filter === 'archived') {\n columns = [\n {\n \"data\": \"attributes.erpObject.data\",\n \"title\": \"Number\",\n \"width\": \"100px\",\n \"render\": (data, a, row) => {\n return data?.externalNumber ?? data?.id ?? \"\";\n }\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.name\",\n \"title\": \"Project Name\",\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.city\",\n \"title\": \"City\",\n \"width\": \"25%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.state\",\n \"title\": \"State\",\n \"width\": \"10%\"\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"width\": \"10%\",\n \"render\": (data, a, row) => {\n if (filter === 'archived') {\n return '
';\n } else {\n return '
' +\n '
' +\n '' +\n '
' +\n '
' +\n ' ' +\n '
' +\n 'Archive ' +\n '
' +\n '
' +\n '
';\n }\n },\n },\n ]\n\n if (provider === PJQ.constants.integrations.providers.SAGE300) {\n columns.unshift(\n {\n \"data\": \"attributes.relatedObjects.relatedItem.code\",\n \"title\": \"Code\",\n \"width\": \"10%\"\n },\n );\n }\n } else {\n columns = [\n {\n \"data\": \"attributes.relatedObjects.project.projectName\",\n \"title\": \"Project\",\n \"width\": \"25%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.project.city\",\n \"title\": \"City\",\n \"width\": \"25%\"\n },\n {\n \"data\": \"attributes.relatedObjects.project.state\",\n \"title\": \"State\",\n \"width\": \"25%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.costCodeCount\",\n \"title\": \"Cost Codes\",\n \"width\": \"25%\"\n },\n ]\n }\n return columns;\n }\n },\n subjob: {\n columns: [\n {\n \"data\": \"attributes.relatedObjects.relatedItem.code\",\n \"title\": \"Code\",\n \"width\": \"20%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.name\",\n \"title\": \"Name\",\n \"width\": \"30%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.description\",\n \"title\": \"Description\",\n \"width\": \"50%\"\n }\n ]\n },\n costcode: {\n columns: (filter, provider, options) => {\n return [\n {\n \"title\": '
',\n \"orderable\": false,\n \"searchable\": false,\n \"visible\": filter !== 'archived',\n \"render\": _.bind(function (data, type, row) {\n let checkedText = _.contains(options.selectedERPItems, row.cid) ? \"checked\" : \"\";\n\n if (row.isImported) {\n return \"\";\n }\n\n return ('
');\n }, this),\n \"width\": '2%'\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.code\",\n \"title\": \"Code\",\n \"width\": \"20%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.name\",\n \"title\": \"Name\",\n \"width\": \"30%\"\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"width\": \"10%\",\n \"render\": _.bind(function (data, a, row) {\n if (filter === 'archived') {\n return '
';\n } else {\n if (row.isImported) {\n return \"
Cost Code Created!
\"\n }\n\n return '
' +\n '
' +\n '' +\n '
' +\n '
' +\n ' ' +\n '
' +\n 'Archive ' +\n '
' +\n '
' +\n '
';\n }\n }, this),\n }\n ];\n }\n },\n budget: {\n columns: [\n {\n \"data\": \"attributes.relatedObjects.relatedItem.projectId\",\n \"title\": \"\",\n \"width\": \"10%\",\n \"render\": _.bind(function (data, a, row) {\n return ' View Budget ';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.project.projectName\",\n \"title\": \"Project\",\n \"width\": \"25%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.estimateAmount\",\n \"title\": \"Total Estimate\",\n \"width\": \"20%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this),\n }\n ]\n },\n contract: {\n enabled: function (integration) {\n if (integration == null) {\n return false;\n }\n\n return integration.getSetting(PJQ.constants.integrations.settings.SYNC_PRIME_CONTRACTS) !== false;\n },\n columns: [\n {\n \"data\": \"attributes.relatedObjects.project.projectName\",\n \"title\": \"Project\",\n \"width\": \"20%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.number\",\n \"title\": \"Contract Number\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.description\",\n \"title\": \"Description\",\n \"width\": \"20%\",\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.totalAmount\",\n \"title\": \"Amount\",\n \"width\": \"10%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this),\n }\n ]\n },\n pcco: {\n enabled: function (integration) {\n if (integration == null) {\n return false;\n }\n\n return integration.getSetting(PJQ.constants.integrations.settings.SYNC_PRIME_CONTRACT_CHANGE_ORDERS) !== false;\n },\n columns: [\n {\n \"data\": \"attributes.relatedObjects.project.projectName\",\n \"title\": \"Project\",\n \"width\": \"20%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.number\",\n \"title\": \"Number\",\n \"width\": \"10%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.description\",\n \"title\": \"Description\",\n \"width\": \"20%\",\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.changeReason\",\n \"title\": \"Change Reason\",\n \"width\": \"20%\",\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.totalAmount\",\n \"title\": \"Amount\",\n \"width\": \"10%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this),\n }\n ]\n },\n ar_inv: {\n enabled: function (integration) {\n if (integration == null) {\n return false;\n }\n\n return integration.getSetting(PJQ.constants.integrations.settings.SYNC_RECEIVABLE_INVOICES) !== false;\n },\n columns: [\n {\n \"data\": \"attributes.relatedObjects.project.projectName\",\n \"title\": \"Project\",\n \"width\": \"20%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.number\",\n \"title\": \"Number\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.billingDate\",\n \"title\": \"Due Date\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE);\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.totalAmount\",\n \"title\": \"Amount\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this),\n }\n ]\n },\n commitment: {\n enabled: function (integration) {\n if (integration == null) {\n return false;\n }\n\n return integration.getSetting(PJQ.constants.integrations.settings.SYNC_COMMITMENTS) !== false;\n },\n columns: [\n {\n \"data\": \"attributes.relatedObjects.project.projectName\",\n \"title\": \"Project\",\n \"width\": \"20%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.number\",\n \"title\": \"Commitment Number\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.description\",\n \"title\": \"Description\",\n \"width\": \"20%\",\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.commitmentType\",\n \"title\": \"Type\",\n \"width\": \"10%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.constants.commitments.commitmentTypeNames[data];\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.totalAmount\",\n \"title\": \"Amount\",\n \"width\": \"10%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this),\n }\n ]\n },\n cco: {\n enabled: function (integration) {\n if (integration == null) {\n return false;\n }\n\n return integration.getSetting(PJQ.constants.integrations.settings.SYNC_COMMITMENT_CHANGE_ORDERS) !== false;\n },\n columns: [\n {\n \"data\": \"attributes.relatedObjects.project.projectName\",\n \"title\": \"Project\",\n \"width\": \"20%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.number\",\n \"title\": \"Number\",\n \"width\": \"10%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.description\",\n \"title\": \"Description\",\n \"width\": \"20%\",\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.changeReason\",\n \"title\": \"Change Reason\",\n \"width\": \"20%\",\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.totalAmount\",\n \"title\": \"Amount\",\n \"width\": \"10%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this),\n }\n ]\n },\n ap_inv: {\n enabled: function (integration) {\n if (integration == null) {\n return false;\n }\n\n return integration.getSetting(PJQ.constants.integrations.settings.SYNC_PAYABLE_INVOICES) !== false;\n },\n columns: [\n {\n \"data\": \"attributes.relatedObjects.project.projectName\",\n \"title\": \"Project\",\n \"width\": \"20%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.number\",\n \"title\": \"Number\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.billingDate\",\n \"title\": \"Due Date\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE);\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.totalAmount\",\n \"title\": \"Amount\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this),\n }\n ]\n },\n d_cost: {\n enabled: function (integration) {\n if (integration == null) {\n return false;\n }\n\n return integration.getSetting(PJQ.constants.integrations.settings.SYNC_DIRECT_COSTS) !== false;\n },\n columns: [\n {\n \"data\": \"attributes.relatedObjects.project.projectName\",\n \"title\": \"Project\",\n \"width\": \"20%\",\n \"render\": _.bind(function (data, a, row) {\n return '' + data + '';\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.type\",\n \"title\": \"Type\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.constants.directcosts.directCostTypeNames[data]\n }, this),\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.description\",\n \"title\": \"Description\",\n \"width\": \"15%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.amount\",\n \"title\": \"Amount\",\n \"width\": \"15%\",\n \"render\": _.bind(function (data, a, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this),\n }\n ]\n }\n}\n\nPJQ.views.erpAdmin.ERPAdminManagement = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'erp-admin-management'),\n subTemplates: {\n approvalItem: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'erp-approval-item'),\n emptyQueue: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'empty-erp-queue'),\n },\n },\n events: {\n 'click .btn-add-project': 'addProjectClicked',\n 'click .btn-link-project': 'linkProjectClicked',\n 'click .feature-nav-item a': 'featureChanged',\n 'click .filter-nav-item a': 'filterChanged',\n 'click .approve-button, .reject-button, .link-button': 'handleApprovalAction',\n 'click .btn-submit-approve': 'approveItem',\n 'click .btn-submit-reject': 'rejectItem',\n 'click .btn-add-vendor': 'addVendorClicked',\n 'click .btn-link-vendor': 'linkVendorClicked',\n 'click .btn-refresh': 'refresh',\n 'click .btn-archive': 'archiveClicked',\n 'click .btn-remove-from-archive': 'removeFromArchiveClicked',\n 'click .select-erp-item': 'erpItemSelected',\n 'click .select-all-erp-items': 'selectAllERPItems',\n 'click .btn-add-cost-code': 'addCostCodeClicked',\n 'click .btn-import-items': 'addCostCodes',\n 'change .cb-suggest-matches': 'suggestMatchesChanged',\n 'click .btn-link-suggested': 'linkSuggestedClicked',\n 'click .btn-link-all-suggested': 'linkAllSuggestedClicked',\n 'click .btn-link-suggested-selected': 'linkSuggestedSelectedClicked',\n },\n beforeFirstRender: async function () {\n this.isFetched = false;\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\n\n this.syncData = await this.erpIntegration.fetchSyncData();\n\n let defaultFeature = 'project',\n feature = this.options.feature ? this.options.feature : defaultFeature;\n this.provider = this.erpIntegration.getProvider();\n if (this.provider == null) {\n this.isFetched = true;\n this.render();\n }\n\n if (this.provider.erpAdmin.features[feature] == null) {\n feature = defaultFeature;\n }\n await this.changeFeature(feature);\n\n this.isFetched = true;\n this.render();\n },\n renderData: function () {\n return {\n isFetched: this.isFetched,\n features: this.getFeatures(),\n feature: this.feature,\n filter: this.filter,\n provider: this.provider\n }\n },\n getFeatures: function () {\n if (this.provider == null) {\n return {};\n } else {\n let res = {};\n _.each(this.provider.erpAdmin.features, (ftr, key) => {\n let feature = PJQ.constants.erpAdmin.features[key];\n if (feature == null) {\n return;\n }\n\n if (typeof feature.enabled !== 'function' || feature.enabled(this.erpIntegration)) {\n res[key] = ftr;\n }\n });\n return res;\n }\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n this.renderFeatureCounts();\n this.renderApprovalItems();\n },\n fetchERPObjects: async function () {\n return new Promise(async (resolve, reject) => {\n if (this.collection == null) {\n this.collection = new PJQ.collections.erpAdmin.ERPObjects();\n }\n this.collection.setInternalModel(this.feature);\n this.collection.setStatusIds(this.statusIds);\n\n await this.collection.fetch({\n data: {\n externalModel: this.provider.erpAdmin.features[this.feature].externalModelName\n }\n }).fail((err) => {\n this.erpIntegration.handleError(err);\n reject(err);\n });\n resolve(true);\n });\n },\n featureChanged: async function (e) {\n let feature = $(e.currentTarget).data('feature');\n await this.changeFeature(feature);\n this.render();\n },\n changeFeature: async function (feature) {\n return new Promise(async (resolve) => {\n if (this.feature !== feature) {\n this.options.suggestMatches = false;\n\n let filters = this.provider.erpAdmin.features[feature].filters;\n this.feature = feature;\n this.filter = filters.readyToImport ? filters.readyToImport.name : filters.readyToExport.name;\n this.statusIds = filters.readyToImport ? [PJQ.constants.integrations.erp.syncStatuses.CACHED] : [PJQ.constants.integrations.erp.syncStatuses.REVIEWING]\n\n PJQ.app.router.navigate('erpadmin/' + this.feature, {\n trigger: false\n });\n\n await this.fetchERPObjects().catch((err) => {\n return;\n });\n\n let externalModel = this.provider.erpAdmin.features[this.feature].externalModelName;\n this.counts = await this.collection.getFeatureCounts(externalModel);\n }\n resolve(true);\n });\n },\n renderFeatureCounts: function () {\n _.each(this.provider.erpAdmin.features[this.feature].filters, function (filter) {\n let $el = this.$('.filter-count[data-filter=\"' + filter.name + '\"]');\n\n switch (filter.name) {\n case 'readyToExport':\n $el.text('(' + this.counts.readyToExportCount + ')');\n break;\n case 'readyToImport':\n $el.text('(' + this.counts.readyToImportCount + ')');\n break;\n case 'failedToExport':\n $el.text('(' + this.counts.failedToExportCount + ')');\n break;\n case 'archived':\n $el.text('(' + this.counts.archivedCount + ')');\n break;\n default:\n $el.text('(0)');\n }\n }, this)\n },\n filterChanged: async function (e) {\n let filter = $(e.currentTarget).data('filter'),\n statusIds = [];\n\n if (this.filter !== filter) {\n switch (filter) {\n case 'readyToImport':\n this.filter = 'readyToImport';\n break;\n case 'readyToExport':\n this.filter = 'readyToExport';\n statusIds.push(PJQ.constants.integrations.erp.syncStatuses.REVIEWING)\n break;\n case 'failedToExport':\n this.filter = 'failedToExport';\n statusIds.push(PJQ.constants.integrations.erp.syncStatuses.FAILED)\n break;\n case 'synced':\n this.filter = 'synced';\n statusIds.push(PJQ.constants.integrations.erp.syncStatuses.SYNCED)\n break;\n case 'archived':\n this.filter = 'archived';\n break;\n default:\n this.filter = 'readyToExport';\n statusIds.push(PJQ.constants.integrations.erp.syncStatuses.REVIEWING)\n break;\n }\n this.statusIds = statusIds;\n await this.fetchERPObjects();\n this.render();\n }\n },\n renderApprovalItems: function () {\n let $featurePane = this.$('.' + this.feature + '-pane');\n\n $featurePane.empty();\n\n this.options.selectedERPItems = [];\n this.filteredModels = [];\n\n // Add View Header\n if (_.size(this.collection.models) > 0) {\n let featureName = this.provider.erpAdmin.features[this.feature].displayName,\n filterName = this.provider.erpAdmin.features[this.feature].filters[this.filter].displayName,\n providerName = this.provider.displayName;\n $featurePane.append($('
').addClass('fs-14 font-italic border-bottom border-light view-header mb-2').text(providerName + ': ' + featureName + ' ' + filterName));\n }\n\n let fnRenderEmptyQueue = () => {\n this.renderSubTemplate(true, this.options.subTemplates.emptyQueue, $featurePane, {\n feature: this.feature,\n filter: this.filter,\n provider: this.provider\n }, () => {\n });\n }\n\n // Render View\n if (this.filter !== 'readyToImport' && this.filter !== 'archived' && _.size(this.collection.models) > 0) {\n // Group Models. Currently only supports grouping by project\n let groupedModels = _.groupBy(this.collection.models, model => {\n return model.project ? model.project.id : null;\n });\n\n _.each(groupedModels, (models, projectId) => {\n if (projectId !== 'null') {\n let project = models[0].project;\n\n $featurePane.append($('
').addClass('fs-18 font-weight-bold mt-3').text(project.projectName));\n }\n\n _.each(models, (model) => {\n let $approvalItemOuter = $('
').addClass('approval-item-outer mb-2').attr('data-cid', model.cid);\n\n $featurePane.append($approvalItemOuter);\n this.renderApprovalItem(model);\n });\n });\n } else if (_.size(this.collection.models) > 0) {\n this.filteredModels = _.filter(this.collection.models, function (model) {\n let match = false,\n statusId = model.get('erpObject').status;\n if (this.filter === 'archived') {\n match = statusId === PJQ.constants.integrations.erp.syncStatuses.ARCHIVED;\n } else if (this.filter === 'readyToImport') {\n match = statusId === PJQ.constants.integrations.erp.syncStatuses.CACHED;\n }\n\n if (this.options.suggestMatches) {\n match = model.attributes.erpObject.data.suggestedId > 0;\n }\n\n return match;\n }, this);\n\n if (_.size(this.filteredModels) > 0 || this.options.suggestMatches) {\n this.renderSubTemplate(true, this.options.subTemplates.approvalItem, $featurePane, {\n provider: this.provider,\n feature: this.feature,\n model: null,\n relatedItem: null,\n filter: this.filter,\n inputs: null,\n syncData: this.syncData,\n options: this.options\n }, (item) => {\n let columns = this.getColumns(),\n ftr = this.provider.erpAdmin.features[this.feature];\n this.itemTable = new PJQ.views.dataTables.DataTable({\n el: this.$(item).find('.item-table'),\n data: this.filteredModels,\n rowId: \"cid\",\n language: {\n emptyTable: 'No ' + ftr.displayName + ' were found',\n zeroRecords: 'No ' + ftr.displayName + ' matched the search criteria'\n },\n isHideSearch: false,\n paging: true,\n order: [1, 'asc'],\n columns: columns,\n contextMenuOptions: {\n actions: this.filter !== 'archived' ? [\n {\n name: 'Import',\n isShown: () => {\n return this.feature !== 'cont_comp' && this.filter !== 'archived';\n },\n onClick: (row) => {\n switch (this.feature) {\n case 'project':\n this.addProject(row.data());\n break;\n case 'costcode':\n this.addCostCode(row.data());\n break;\n }\n }\n },\n {\n name: 'Create New Company',\n isShown: () => {\n return this.feature === 'cont_comp' && this.filter !== 'archived';\n },\n onClick: (row) => {\n this.addVendor(row.data());\n }\n },\n {\n name: 'Link to Existing Company',\n isShown: () => {\n return this.feature === 'cont_comp' && this.filter !== 'archived';\n },\n onClick: (row) => {\n this.linkVendor(row.data());\n }\n },\n {\n name: 'Archive',\n isDanger: true,\n isShown: (row) => {\n return this.filter !== 'archived';\n },\n onClick: (row) => {\n this.archive(row.data());\n }\n }\n ] : [\n {\n name: 'Restore',\n isShown: (row) => {\n return this.filter === 'archived';\n },\n onClick: (row) => {\n this.removeFromArchive(row.data());\n }\n }\n ]\n },\n });\n });\n } else {\n fnRenderEmptyQueue();\n }\n } else {\n fnRenderEmptyQueue();\n }\n },\n renderApprovalItem: function (model) {\n // Find the existing approval-item-outer div using the cid\n let $approvalItemOuter = this.$('.approval-item-outer[data-cid=\"' + model.cid + '\"]');\n\n // If the div was found, proceed to render the item\n if ($approvalItemOuter.length > 0) {\n let inputs = this.provider.erpAdmin.features[this.feature].approvalInputs\n this.renderSubTemplate(false, this.options.subTemplates.approvalItem, $approvalItemOuter, {\n provider: this.provider,\n feature: this.feature,\n model: model,\n relatedItem: model.relatedItem,\n project: model.project,\n filter: this.filter,\n inputs: inputs,\n syncData: this.syncData,\n }, _.bind(function (item) {\n let columns = this.getColumns();\n item.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$(item).find('.item-table'),\n data: [model],\n rowId: \"cid\",\n isHideSearch: true,\n paging: false,\n order: [0, 'asc'],\n columns: columns\n });\n\n _.each(inputs, function (input) {\n let field = this.$(item).find('.' + input.className);\n if (input.type === 'date') {\n new PJQ.inputs.Datepicker({\n el: field,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: null\n }\n });\n } else {\n if (input.format) {\n let mask = '';\n if (input.prefix)\n mask += \"\\\\\" + input.prefix;\n\n if (input.format)\n mask += input.format;\n\n field.inputmask({\n definitions: {\n '#': {\n validator: \"[^]\"\n }\n },\n mask: mask,\n placeholder: ''\n });\n }\n }\n }, this)\n }, this));\n }\n },\n handleApprovalAction: function (e) {\n let $target = $(e.currentTarget),\n value = $target.text().trim().toLowerCase(),\n $approvalItem = $target.closest('.approval-item'),\n cid = $approvalItem.data('cid'),\n model = this.collection.get(cid);\n\n // hide all context containers\n $approvalItem.find('.approve-context-container, .reject-context-container').hide().removeClass('d-flex');\n $approvalItem.find('.approve-button, .reject-button').addClass('inactive');\n\n // show the one that corresponds to the clicked button\n if (value === 'approve') {\n $target.removeClass('inactive');\n $approvalItem.find('.reject-button').addClass('inactive');\n $approvalItem.find('.link-button').addClass('inactive');\n let $approveContainer = $approvalItem.find('.approve-context-container');\n $approveContainer.addClass('d-flex').slideDown(200);\n } else if (value === 'reject') {\n $target.removeClass('inactive')\n $approvalItem.find('.approve-button').addClass('inactive');\n $approvalItem.find('.link-button').addClass('inactive');\n $approvalItem.find('.reject-context-container').slideDown(200);\n } else {\n $target.removeClass('inactive')\n $approvalItem.find('.approve-button').addClass('inactive');\n $approvalItem.find('.reject-button').addClass('inactive');\n\n new PJQ.views.erpAdmin.SelectImportVendorModal({\n isSingleChoice: true,\n provider: this.provider,\n onSave: _.bind(function (erpVendor) {\n new PJQ.views.modals.YesNo({\n header: \"Link Vendor\",\n body: \"Are you sure you would like to link this vendor to \" + erpVendor.relatedItem.companyName + \"?\",\n onYes: () => {\n model.linkContactCompany(model.relatedItem, erpVendor.erpObject.externalId, _.bind(function (contactCompany, err) {\n if (contactCompany && contactCompany.externalObject && contactCompany.externalObject.status === PJQ.constants.integrations.erp.syncStatuses.SYNCED) {\n contactCompany.erpObject = contactCompany.externalObject;\n model.set({\n isApproved: true\n });\n model.erpObject = contactCompany.externalObject;\n model.erpObject.successText = \"Company Linked!\";\n this.renderApprovalItem(model);\n } else {\n model.erpObject.error = err ? err : contactCompany.error;\n }\n this.renderApprovalItem(model);\n }, this));\n },\n onNo: () => {\n $target.addClass('inactive')\n },\n });\n }, this)\n });\n }\n },\n approveItem: function (e) {\n let $target = $(e.currentTarget),\n approveContainer = $(e.target).closest('.approve-context-container'),\n cid = $target.closest('.approval-item').data('cid'),\n model = this.collection.get(cid),\n isValid = true,\n data = {};\n\n if (_.size(model.erpObject.externalId) === 0) {\n _.each(this.provider.erpAdmin.features[this.feature].approvalInputs, function (input) {\n let inputEl = approveContainer.find('.' + input.className),\n inputValue = inputEl.val();\n if (_.size(inputValue) > 0) {\n data[input.value] = inputValue\n } else if (input.required) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(inputEl, false);\n }\n }, this);\n } else {\n data = model.erpObject.data;\n }\n\n if (isValid) {\n let loader = new PJQ.Loader($target.closest('.approval-item'));\n model.approve(data, (res, err) => {\n loader.remove();\n if (res == null) {\n this.erpIntegration.handleError(err);\n return;\n }\n\n if (res && !res.error) {\n model.set('isApproved', true);\n this.renderApprovalItem(model);\n } else {\n model.erpObject.error = res ? res.error : 'Something went wrong'\n this.renderApprovalItem(model);\n }\n });\n }\n },\n rejectItem: function (e) {\n let $target = $(e.currentTarget),\n $approvalItem = $target.closest('.approval-item'),\n cid = $approvalItem.data('cid'),\n model = this.collection.get(cid),\n isValid = true,\n rejectReason = $approvalItem.find('.reject-reason').val();\n\n if (isValid) {\n let loader = new PJQ.Loader($approvalItem);\n model.reject(rejectReason, (res) => {\n loader.remove();\n this.renderApprovalItem(model);\n });\n }\n },\n getColumns: function () {\n let ftr = this.feature.toLowerCase(),\n cols = PJQ.constants.erpAdmin.features[ftr].columns;\n return typeof cols === 'function' ? cols(this.filter, this.provider, this.options) : cols;\n },\n erpItemSelected: function (e) {\n if (this.options.selectedERPItems == null) {\n this.options.selectedERPItems = [];\n }\n\n let $target = $(e.currentTarget),\n cid = $target.data('cid'),\n isChecked = $target.prop('checked');\n if (_.size(cid) > 0) {\n if (isChecked) {\n this.options.selectedERPItems.push(cid);\n } else {\n this.options.selectedERPItems = _.reject(this.options.selectedERPItems, function (sCid) {\n return sCid === cid;\n });\n }\n }\n\n this.$('.select-all-erp-items').prop('checked', _.size(this.options.selectedERPItems) === _.size(this.filteredModels) && _.size(this.filteredModels) > 0);\n\n this.handleSelectedERPItemsButtons();\n },\n selectAllERPItems: function (e) {\n let $target = $(e.currentTarget),\n isChecked = $target.prop('checked');\n\n if (!isChecked || this.options.selectedERPItems == null) {\n this.options.selectedERPItems = [];\n }\n\n _.each(this.filteredModels, function (model) {\n let checkbox = this.$('.select-erp-item[data-cid=\"' + model.cid + '\"]');\n\n if (!isChecked) {\n checkbox.prop('checked', false);\n } else {\n checkbox.prop('checked', true);\n\n if (!_.contains(this.options.selectedERPItems, model.cid)) {\n this.options.selectedERPItems.push(model.cid);\n }\n }\n }, this);\n\n this.handleSelectedERPItemsButtons();\n },\n handleSelectedERPItemsButtons: function (alteredModel) {\n // if a model was passed in, it was archived, or imported, so remove it from the filtered models and selected items if it exists there.\n if (alteredModel) {\n this.filteredModels = _.reject(this.filteredModels, function (m) {\n return m === alteredModel;\n });\n this.options.selectedERPItems = _.reject(this.options.selectedERPItems, function (cid) {\n return cid === alteredModel.cid;\n });\n }\n\n this.$('.select-all-erp-items').prop('checked', _.size(this.options.selectedERPItems) === _.size(this.filteredModels) && _.size(this.filteredModels) > 0);\n this.$('.btn-for-selected').attr('disabled', _.size(this.options.selectedERPItems) === 0);\n this.$('.selected-items-count').text(_.size(this.options.selectedERPItems));\n },\n addVendorClicked: function (e) {\n let target = $(e.currentTarget),\n row = target.closest('tr'),\n cid = row[0].id,\n model = this.collection.get(cid);\n\n this.addVendor(model);\n },\n addVendor: function (model) {\n let rowEl = this.$('tr#' + model.cid),\n actionButtonContainer = rowEl.find('.action-button-container'),\n loader = new PJQ.Loader(actionButtonContainer),\n externalId = model.relatedItem.id;\n\n model.createNewContactCompany(externalId, _.bind(function (contactCompany, err) {\n loader.remove();\n if (contactCompany) {\n if (!contactCompany.error) {\n actionButtonContainer.html(\"Company Created!\");\n this.counts.readyToImportCount--;\n this.renderFeatureCounts();\n } else {\n actionButtonContainer.html(\"\" + err ? err : contactCompany.error + \"\");\n }\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to Import Contact'\n });\n }\n }, this));\n },\n linkVendorClicked: function (e) {\n let target = $(e.currentTarget),\n row = target.closest('tr'),\n cid = row[0].id,\n model = this.collection.get(cid);\n\n this.linkVendor(model);\n },\n linkVendor: function (model) {\n let rowEl = this.$('tr#' + model.cid),\n actionButtonContainer = rowEl.find('.action-button-container');\n\n new PJQ.views.contacts.SelectContactsModal({\n context: PJQ.constants.contacts.contexts.COMPANIES,\n isSingleChoice: true,\n displayContactsBlock: true,\n onSave: _.bind(function (selectedCompany) {\n let loader = new PJQ.Loader(actionButtonContainer);\n selectedCompany.set('companyId', selectedCompany.get('contactCompanyId'));\n model.linkContactCompany(selectedCompany, model.erpObject.externalId, _.bind(function (contactCompany, err) {\n loader.remove();\n if (contactCompany) {\n if (!contactCompany.error) {\n actionButtonContainer.html(\"Company Linked!\");\n this.counts.readyToImportCount--;\n this.renderFeatureCounts();\n } else {\n actionButtonContainer.html(\"\" + err ? err : contactCompany.error + \"\");\n }\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to Import Contact'\n });\n }\n }, this));\n }, this)\n });\n },\n suggestMatchesChanged: function (e) {\n this.options.suggestMatches = $(e.currentTarget).prop('checked');\n this.render();\n },\n linkSuggestedSelectedClicked: function () {\n this.linkSuggested(null, this.collection.get(this.options.selectedERPItems));\n },\n linkSuggestedClicked: function (e) {\n let target = $(e.currentTarget),\n $row = target.closest('tr'),\n row = this.itemTable.getRow($row[0].id);\n this.linkSuggested(row);\n },\n linkAllSuggestedClicked: function () {\n if (null == _.find(this.collection.models, (obj) => {\n return obj.erpObject.data.suggestedId > 0 && !(obj.erpObject.internalId > 0);\n })) {\n return;\n }\n this.linkSuggested();\n },\n toggleLoader: function (show) {\n if (show == null) {\n show = this.loader != null;\n }\n\n if (show && this.loader == null) {\n this.loader = new PJQ.Loader(this.$('.erp-admin-nav'));\n } else if (!show && this.loader != null) {\n this.loader.remove();\n this.loader = null;\n }\n },\n linkSuggested: function (row, objs) {\n let linkObjs = null;\n if (row != null) {\n linkObjs = [row.data()];\n } else if (objs != null) {\n linkObjs = objs;\n }\n\n this.toggleLoader(true);\n\n let externalModel = this.provider.erpAdmin.features[this.feature].externalModelName;\n this.collection.linkSuggested(externalModel, linkObjs, (res) => {\n if (res) {\n if (res.error) {\n return;\n }\n\n this.toggleLoader(false);\n\n let linkedCount = _.size(res);\n this.counts.readyToImportCount = this.counts.readyToImportCount - linkedCount;\n this.renderFeatureCounts();\n\n PJQ.notifications.notify.successNotify({\n message: linkedCount.toString() + ' Contacts Linked to ERP'\n });\n\n if (row != null) {\n // Remove from filtered models and selected items\n this.handleSelectedERPItemsButtons(row.data());\n this.itemTable.refreshRow(row);\n } else {\n this.render();\n }\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to Archive'\n });\n }\n });\n },\n archiveClicked: function (e) {\n let target = $(e.currentTarget),\n row = target.closest('tr'),\n cid = row[0].id,\n model = this.collection.get(cid);\n this.archive(model);\n },\n archive: function (model) {\n let rowEl = this.$('tr#' + model.cid),\n actionButtonContainer = rowEl.find('.action-button-container');\n\n model.archive(_.bind(function (res) {\n if (res) {\n if (!res.error) {\n actionButtonContainer.html(\"Archived!\");\n this.counts.readyToImportCount--;\n this.counts.archivedCount++;\n this.renderFeatureCounts();\n // Remove from filtered models and selected items\n this.handleSelectedERPItemsButtons(model);\n } else {\n actionButtonContainer.html(\"\" + res.error + \"\");\n }\n rowEl.find('.select-erp-item').closest('.text-align-center').remove();\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to Archive'\n });\n }\n }, this));\n },\n removeFromArchiveClicked: function (e) {\n let target = $(e.currentTarget),\n row = target.closest('tr'),\n cid = row[0].id,\n model = this.collection.get(cid);\n\n this.removeFromArchive(model);\n },\n removeFromArchive: function (model) {\n let rowEl = this.$('tr#' + model.cid),\n actionButtonContainer = rowEl.find('.action-button-container');\n\n model.removeFromArchive(_.bind(function (res) {\n if (res) {\n if (!res.error) {\n actionButtonContainer.html(\"Restored!\");\n this.counts.readyToImportCount++;\n this.counts.archivedCount--;\n this.renderFeatureCounts();\n } else {\n actionButtonContainer.html(\"\" + res.error + \"\");\n }\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to Restore'\n });\n }\n }, this));\n },\n addProjectClicked: function (e) {\n let target = $(e.currentTarget),\n row = target.closest('tr'),\n cid = row[0].id,\n model = this.collection.get(cid);\n\n this.addProject(model);\n },\n addProject: function (model) {\n let rowEl = this.$('tr#' + model.cid),\n actionButtonContainer = rowEl.find('.action-button-container');\n\n let loader = new PJQ.Loader(actionButtonContainer);\n\n model.pull((res) => {\n loader.remove();\n if (res) {\n let project = new PJQ.models.projects.Project(res);\n if (project.id > 0) {\n project.save(null, {\n success: () => {\n actionButtonContainer.html(\"
Project Created!
\" +\n \"
\");\n this.counts.readyToImportCount--;\n this.renderFeatureCounts();\n }\n })\n } else {\n actionButtonContainer.html(\"\" + res.error + \"\");\n }\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to Import Project'\n });\n }\n });\n },\n linkProjectClicked: function (e) {\n let target = $(e.currentTarget),\n row = target.closest('tr'),\n cid = row[0].id,\n model = this.collection.get(cid);\n\n this.linkProject(model);\n },\n linkProject: function (model) {\n let rowEl = this.$('tr#' + model.cid),\n actionButtonContainer = rowEl.find('.action-button-container');\n\n\n // new PJQ.views.contacts.SelectContactsModal({\n // context: PJQ.constants.contacts.contexts.COMPANIES,\n // isSingleChoice: true,\n // displayContactsBlock: true,\n // onSave: _.bind(function (selectedCompany) {\n // let loader = new PJQ.Loader(actionButtonContainer);\n // selectedCompany.set('companyId', selectedCompany.get('contactCompanyId'));\n // model.linkContactCompany(selectedCompany, model.erpObject.externalId, _.bind(function (contactCompany, err) {\n // loader.remove();\n // if (contactCompany) {\n // if (!contactCompany.error) {\n // actionButtonContainer.html(\"Company Linked!\");\n // this.counts.readyToImportCount--;\n // this.renderFeatureCounts();\n // } else {\n // actionButtonContainer.html(\"\" + err ? err : contactCompany.error + \"\");\n // }\n // } else {\n // PJQ.notifications.notify.errorNotify({\n // message: 'Failed to Import Contact'\n // });\n // }\n // }, this));\n // }, this)\n // });\n },\n addCostCodeClicked: function (e) {\n let target = $(e.currentTarget),\n row = target.closest('tr'),\n cid = row[0].id,\n model = this.collection.get(cid);\n\n this.addCostCode(model);\n },\n addCostCode: function (model) {\n let rowEl = this.$('tr#' + model.cid),\n actionButtonContainer = rowEl.find('.action-button-container'),\n loader = new PJQ.Loader(actionButtonContainer);\n\n this.createNewCostCodes([model.get('erpObject').externalId], (res) => {\n loader.remove();\n if (res) {\n actionButtonContainer.html(\"Cost Code Created!\");\n this.counts.readyToImportCount--;\n\n this.renderFeatureCounts();\n this.handleSelectedERPItemsButtons(model);\n rowEl.find('.select-erp-item').closest('.text-align-center').remove();\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to Import Cost Code'\n });\n }\n });\n },\n addCostCodes: function () {\n let loader = new PJQ.Loader(this.$('.costcode-pane')),\n costCodes = [],\n costCodesExternalIds = [];\n\n _.each(this.options.selectedERPItems, _.bind(function (cid) {\n let model = this.collection.get(cid);\n costCodes.push(model);\n costCodesExternalIds.push(model.get('erpObject').externalId)\n }, this));\n\n\n this.createNewCostCodes(costCodesExternalIds, (res) => {\n _.each(costCodes, function (costCode) {\n this.filteredModels = _.reject(this.filteredModels, function (m) {\n return m === costCode;\n });\n this.options.selectedERPItems = _.reject(this.options.selectedERPItems, function (cid) {\n return cid === costCode.cid;\n });\n costCode.isImported = true;\n\n let rowEl = this.$('tr#' + costCode.cid);\n rowEl.find('.action-button-container').html(\"Cost Code Created!\");\n rowEl.find('.select-erp-item').closest('.text-align-center').remove();\n }, this);\n loader.remove();\n this.handleSelectedERPItemsButtons();\n });\n\n },\n createNewCostCodes: function (externalIds, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'costcodes'\n },\n {\n endpoint: 'pull'\n }]),\n data: externalIds,\n isAPIv2: true,\n }).post().done(_.bind(function (res) {\n if (typeof callback === 'function') {\n callback(res);\n }\n }, this)).fail(_.bind(function (error) {\n if (typeof callback === 'function') {\n callback(false, error);\n }\n }, this));\n },\n refresh: async function () {\n this.toggleLoader(true);\n await this.collection.refreshModels(this.provider.erpAdmin.features[this.feature].externalModelName + 's').catch((err) => {\n this.erpIntegration.handleError(err);\n this.toggleLoader(false);\n return;\n });\n\n let date = new Date();\n if (this.feature === this.provider.erpAdmin.features.project.internalModelName) {\n this.syncData.projectsSyncedOn = date.toISOString();\n } else if (this.feature === this.provider.erpAdmin.features.cont_comp.internalModelName) {\n this.syncData.vendorsSyncedOn = date.toISOString();\n } else if (this.feature === this.provider.erpAdmin.features.costcode.internalModelName) {\n this.syncData.costCodesSyncedOn = date.toISOString();\n }\n\n this.toggleLoader(false);\n await this.fetchERPObjects().catch((err) => {\n return;\n });\n this.render();\n }\n});\n\nPJQ.views.erpAdmin.SelectImportVendorModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-select-import-vendor'),\n width: '60%',\n maxWidth: 700,\n onSave: _.noop,\n headerSubText: null\n },\n events: {\n \"change .select-vendor\": \"selectVendor\",\n \"click .btn-save\": \"save\",\n \"click .btn-cancel\": \"cancel\"\n },\n beforeModalCreated: function () {\n this.options.isAdmin = PJQ.app.session.hasPermission('settings.canManageERPAdmin');\n this.selectedVendors = [];\n\n if (this.collection == null) {\n this.collection = new PJQ.collections.erpAdmin.ERPObjects(null, {\n internalModel: this.options.provider.erpAdmin.features.cont_comp.internalModelName,\n statusIds: []\n });\n }\n\n if (this.collection.isFetched) {\n this.render();\n } else {\n this.collection.fetch({\n data: {\n externalModel: this.options.provider.erpAdmin.features.cont_comp.externalModelName\n },\n success: _.bind(function () {\n this.vendors = this.collection.models\n this.render();\n }, this)\n });\n }\n },\n renderData: function () {\n return {\n headerSubText: this.options.headerSubText,\n isSingleChoice: this.options.isSingleChoice\n }\n },\n afterRender: function () {\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.vendors-table'),\n data: this.vendors,\n order: [],\n columns: [{\n \"data\": \"attributes.isSelected\",\n \"title\": \"\",\n \"orderable\": false,\n \"width\": \"7%\",\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('
');\n }, this)\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.companyName\",\n \"title\": \"Company\",\n \"width\": \"20%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.address1\",\n \"title\": \"Address\",\n \"width\": \"20%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.city\",\n \"title\": \"City\",\n \"width\": \"10%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.state\",\n \"title\": \"State\",\n \"width\": \"5%\"\n },\n {\n \"data\": \"attributes.relatedObjects.relatedItem.zip\",\n \"title\": \"Zip\",\n \"width\": \"10%\"\n }\n ],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n },\n selectVendor: function (e) {\n let target = $(e.currentTarget),\n vendor = this.dataTable.getRow(target.closest('tr')).data();\n\n if (this.options.isSingleChoice) {\n this.$('.select-vendor').not(target).text('Select').prop('checked', false);\n if (vendor.get('isSelected')) {\n vendor.set('isSelected', false);\n this.selectedVendor = null;\n } else {\n vendor.set('isSelected', true);\n this.selectedVendor = vendor;\n this.collection.get(vendor.id);\n _.each(this.collection.models, _.bind(function (dtVendor) {\n if (vendor.id !== dtVendor.id)\n dtVendor.set('isSelected', false);\n }, this));\n }\n this.$('.btn-save').attr('disabled', this.selectedVendor == null);\n\n if (typeof this.options.onVendorSelected === 'function') {\n this.options.onVendorSelected(this.selectedVendor);\n }\n } else {\n if (vendor.get('isSelected')) {\n target.text('Select').addClass('btn-primary').removeClass('btn-secondary');\n vendor.set('isSelected', false);\n this.selectedVendors = _.reject(this.selectedVendors, function (selVendor) {\n return selVendor.id === vendor.id;\n });\n } else {\n target.text('Deselect').addClass('btn-secondary').removeClass('btn-primary');\n vendor.set('isSelected', true);\n this.selectedVendors.push(vendor);\n }\n this.$('.btn-save').attr('disabled', this.selectedVendors == null);\n\n if (typeof this.options.onVendorSelected === 'function') {\n this.options.onVendorSelected(this.selectedVendors);\n }\n }\n },\n cancel: function () {\n if (this.options.onCancel) {\n this.options.onCancel();\n }\n this.removeModal();\n },\n save: function () {\n if (this.options.onSave) {\n this.options.onSave(this.selectedVendor ? this.selectedVendor : this.selectedVendors);\n this.removeModal();\n }\n }\n});","// Initialize\nPJQ.financialMarkups = {\n models: {},\n collections: {},\n views: {}\n};\n\n// Models\nPJQ.financialMarkups.models.FinancialMarkup = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id',\n endpoint: function () {\n\n },\n calculate: function (lineItem, compoundAmt) {\n let amt;\n if (lineItem instanceof PJQ.models.changeRequests.ChangeRequestLineItem) {\n amt = lineItem.get('revenue') ?? 0;\n } else {\n amt = lineItem.get('amount') ?? 0;\n }\n\n if (_.size(this.get('costCodeIds')) > 0) {\n if (!_.contains(this.get('costCodeIds'), lineItem.get('costCodeId'))) {\n return 0;\n }\n }\n\n if (_.size(this.get('costTypeIds')) > 0) {\n if (!_.contains(this.get('costTypeIds'), lineItem.get('costTypeId'))) {\n return 0;\n }\n }\n\n if (this.get('isCompounding')) {\n amt += compoundAmt > 0 ? compoundAmt : 0\n }\n return amt * (this.get('percent') / 10000);\n }\n});\n\n// Collections\nPJQ.financialMarkups.collections.FinancialMarkups = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.financialMarkups.models.FinancialMarkup,\n endpoint: function () {\n\n },\n getMarkups: function (lineItems) {\n let result = [],\n sortedMarkups = _.sortBy(_.filter(this.models, (markup) => {\n return !markup.get('delete');\n }), (model) => {\n return model.get('sortOrder');\n });\n\n let amts = {};\n _.each(lineItems.filter((lineItem) => {\n return !lineItem.get('delete');\n }), (lineItem) => {\n let liMarkup = 0;\n _.each(sortedMarkups, (markup) => {\n let amt = amts[markup.cid];\n if (amt == null) {\n amt = 0;\n }\n let tMarkup = markup.calculate(lineItem, liMarkup);\n amts[markup.cid] = amt + tMarkup;\n liMarkup += tMarkup\n });\n });\n\n _.each(sortedMarkups, (markup) => {\n let amt = amts[markup.cid];\n if (amt == null) {\n amt = 0;\n }\n result.push({\n cid: markup.cid,\n model: markup,\n name: markup.get('name'),\n amount: amt,\n isVertical: markup.get('isVertical'),\n sortOrder: markup.get('sortOrder')\n });\n });\n return result;\n }\n});\n\n// Views\nPJQ.financialMarkups.views.FinancialMarkupsList = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'financial-markups-list'),\n canEdit: true\n },\n events: {\n 'click .btn-add-markup': 'addMarkup',\n 'click .btn-edit-markup': 'editMarkupClicked',\n 'click .btn-delete-markup': 'deleteMarkupClicked'\n },\n beforeFirstRender: async function () {\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n this.isFetched = false;\n\n this.subJobs = await this.options.project.fetchSubJobs();\n this.costCodes = await this.options.project.fetchCostCodes();\n this.costTypes = await this.options.project.fetchCostTypes();\n\n this.isFetched = true;\n this.render();\n },\n renderData: function () {\n return {\n canEdit: this.options.canEdit\n };\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n let tableData = _.map(this.collection.models, function (markup) {\n if (!markup.get('delete')) {\n return markup;\n }\n }, this)\n\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.markup-items-table'),\n data: tableData,\n rowId: \"cid\",\n language: {\n zeroRecords: this.options.canEdit ? 'Click \"Add\" to create a new Markup Item' : 'No markups have been added'\n },\n paging: false,\n isHideSearch: true,\n onRowDoubleClick: (row) => {\n if (this.options.canEdit) {\n this.editMarkup(row.data());\n }\n },\n sortableOptions: this.options.canEdit ? {\n data: this.collection,\n stop: (a, b) => {\n if (this.options.canEdit) {\n let self = this;\n self.$('tr').filter('.odd, .even').each(function (index, html) {\n let row = $(html)[0].id,\n rowData = self.collection.get(row);\n rowData.set('sortOrder', index + 1);\n });\n }\n }\n } : null,\n contextMenuOptions: {\n actions: [\n {\n name: 'Edit',\n onClick: (row) => {\n this.editMarkup(row.data());\n },\n isShown: (row) => {\n return this.options.canEdit;\n },\n },\n {\n name: 'Delete',\n isDanger: true,\n onClick: (row) => {\n this.deleteMarkup(row);\n },\n isShown: (row) => {\n return this.options.canEdit;\n },\n }\n ]\n },\n order: [0, 'asc'],\n columns: [\n {\n \"data\": \"attributes.sortOrder\",\n \"title\": \"\",\n \"searchable\": false,\n \"orderable\": false\n },\n {\n \"title\": \"Name\",\n \"data\": \"attributes.name\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n return '' + data + ''\n }, this)\n },\n {\n \"title\": \"Percent\",\n \"data\": \"attributes.percent\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.formatHelpers.formatDecimal(data / 100, 2) + \"%\";\n }, this)\n },\n {\n \"title\": \"Compounding\",\n \"data\": \"attributes.isCompounding\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n return data ? \"Yes\" : \"No\";\n }, this)\n },\n {\n \"title\": \"Vertical\",\n \"data\": \"attributes.isVertical\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n return data ? \"Yes\" : \"No\";\n }, this)\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"visible\": this.options.canEdit,\n \"orderable\": false,\n \"searchable\": false,\n \"render\": () => {\n if (!this.options.canEdit) {\n return '';\n }\n return '
'\n },\n \"width\": \"80px\"\n }\n ]\n });\n },\n addMarkup: function () {\n let markup = new PJQ.financialMarkups.models.FinancialMarkup({\n name: \"\",\n percent: 0,\n isCompounding: false,\n isVertical: false,\n sortOrder: this.collection.length + 1,\n costCodeIds: [],\n costTypeIds: []\n });\n\n this.editMarkup(markup);\n },\n editMarkupClicked: function (e) {\n let $target = $(e.currentTarget).closest('tr'),\n row = this.dataTable.getRow($target),\n markup = row.data();\n\n this.editMarkup(markup);\n },\n editMarkup: function (markup) {\n new PJQ.financialMarkups.views.EditFinancialMarkupModal({\n model: markup,\n canEdit: this.options.canEdit,\n onSave: _.bind(function (markup) {\n if (markup.isNew() && !markup.hasBeenAdded) {\n let makeSortable = _.size(_.filter(this.collection.models, (model) => {\n return !model.get('delete')\n })) === 0;\n this.collection.add(markup);\n this.dataTable.addRow(markup);\n markup.hasBeenAdded = true;\n\n if (makeSortable) {\n this.dataTable.makeSortable(this.dataTable.options.sortableOptions);\n }\n } else {\n this.collection.trigger('update');\n this.dataTable.refresh();\n }\n }, this)\n });\n },\n deleteMarkupClicked: function (e) {\n let $target = $(e.currentTarget).closest('tr'),\n row = this.dataTable.getRow($target);\n\n this.deleteMarkup(row);\n },\n deleteMarkup: function (row) {\n let markup = row.data();\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this markup?\",\n onDelete: () => {\n markup.set('delete', true);\n this.dataTable.removeRow(row);\n this.collection.trigger('update');\n _.each(this.collection.models, function (markupModel) {\n if (!markupModel.get('delete') && markupModel.get('sortOrder') > markup.get('sortOrder')) {\n markupModel.set('sortOrder', markupModel.get('sortOrder') - 1);\n }\n }, this);\n\n }\n });\n }\n});\n\nPJQ.financialMarkups.views.EditFinancialMarkupModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-edit-financial-markup'),\n maxWidth: 600\n },\n events: {\n 'focus .input-percent': 'selectInput',\n 'click .btn-save': 'save'\n },\n beforeModalCreated: async function () {\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n this.isFetched = false;\n\n this.subJobs = await this.options.project.fetchSubJobs();\n this.costCodes = await this.options.project.fetchCostCodes();\n this.costTypes = await this.options.project.fetchCostTypes();\n\n this.isFetched = true;\n this.render();\n },\n renderData: function () {\n return {\n model: this.model,\n canEdit: this.options.canEdit\n }\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input',\n 'textarea'\n ]\n });\n\n if(_.size(this.model.get('name')) === 0) {\n this.$('.input-name').focus();\n }\n\n this.costCodePicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-cost-codes'),\n defaultValue: this.model.get('costCodeIds') ? this.model.get('costCodeIds') : [],\n noneSelectedText: _.size(this.costCodes.models) > 0 ? 'Select Cost Codes (Optional)' : 'No Cost Codes exist on this project',\n isDisabled: _.size(this.costCodes.models) === 0,\n isMultiple: true,\n isIntChoices: true,\n isLiveSearch: true,\n onChange: _.bind(function (value) {\n value = _.size(value) > 0 ? value : null;\n this.model.set('costCodeIds', value);\n }, this)\n });\n this.populateCostCodePicker();\n\n this.costTypePicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-cost-types'),\n isLiveSearch: true,\n isIntChoices: true,\n isDisabled: _.size(this.costTypes.models) === 0,\n noneSelectedText: _.size(this.costCodes.models) > 0 ? 'Select Cost Types (Optional)' : 'No Cost Types exist',\n isMultiple: true,\n choices: _.map(this.costTypes.models, function (costType) {\n return {\n id: costType.id,\n name: costType.get('name')\n };\n }),\n defaultValue: this.model.get('costTypeIds') ? this.model.get('costTypeIds') : [],\n onChange: _.bind(function (value) {\n value = _.size(value) > 0 ? value : null;\n this.model.set('costTypeIds', value);\n }, this)\n });\n\n PJQ.helpers.inputHelpers.inputMaskPercent(this.$('.input-percent'), 2, true);\n },\n selectInput: function (e) {\n let el = $(e.currentTarget)[0];\n if (this.focusInput !== el) {\n this.focusInput = el;\n setTimeout(_.bind(function () {\n this.focusInput.select();\n }, this), 100);\n }\n },\n populateCostCodePicker: function () {\n // Group the cost codes by their Sub Job\n let groupedCostCodes = _.groupBy(this.costCodes.models, function (costCode) {\n return costCode.get('subJobId');\n });\n\n // Convert groupedCostCodes to the format that updateChoices expects\n let choices = _.map(groupedCostCodes, function (costCodes, subJobId) {\n let subJob = _.find(this.subJobs.models, function (subJob) {\n return subJob.id === parseInt(subJobId);\n }, this);\n return {\n name: subJob != null ? subJob.get('name') : 'No Sub Job',\n choices: _.map(costCodes, function (costCode) {\n return {\n id: costCode.id,\n name: costCode.get('name')\n };\n })\n };\n }, this);\n\n if (this.costCodePicker != null) {\n this.costCodePicker.updateChoices(choices);\n this.costCodePicker.setValue(this.model.get('costCodeIds') ? this.model.get('costCodeIds') : []);\n if (_.size(this.costCodes.models) > 0 && this.options.canEdit) {\n this.costCodePicker.enable();\n } else {\n this.costCodePicker.disable();\n }\n this.costCodePicker.render();\n }\n },\n validate: function () {\n let isValid = true;\n\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-name'), true);\n if (this.model.get('name') == null || this.model.get('name').trim().length === 0) {\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-name'), false);\n isValid = false;\n }\n\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-percent'), true);\n if (this.model.get('percent') == null) {\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-percent'), false);\n isValid = false;\n }\n\n return isValid;\n },\n save: function () {\n if (!this.validate()) {\n return;\n }\n\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n this.removeModal();\n }\n }\n});","PJQ.views.budget.AddBudgetLineItemForecastModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-add-forecast'),\n\t\tsubTemplates: {\n\t\t\tlineItems: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'add-forecast-line-item')\n\t\t},\n\t\tmaxWidth: 900,\n\t\tisShowCloseButton: true,\n\t\tonSave: _.noop,\n\t\tcanEdit: true,\n\t\tisAdmin: true\n\t},\n\tevents: {\n\t\t'keyup .input-quantity, .input-unit-price': 'calculateUnitTotal',\n\t\t'click .btn-add-line-item': 'addLineItem',\n\t\t'click .btn-delete-line-item': 'deleteLineItem',\n\t\t'click .btn-save': 'save',\n\t\t'click .btn-cancel': 'cancel',\n\t\t'click .btn-switch-method': 'switchMethod'\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.options.canEdit = PJQ.app.session.project.hasPermission('budget.canEdit');\n\t\tthis.options.isAdmin = PJQ.app.session.project.hasPermission('budget.isAdmin');\n\n\t\tthis.model.fetch({\n\t\t\tsuccess: _.bind(function(){\n\t\t\t\tPJQ.app.session.project.fetchCostTypes(_.bind(function (costTypes) {\n\t\t\t\t\tthis.costTypes = costTypes;\n\t\t\t\t\tPJQ.app.session.project.fetchUnitsOfMeasure(_.bind(function (unitsOfMeasure) {\n\t\t\t\t\t\tthis.unitsOfMeasure = unitsOfMeasure\n\t\t\t\t\t\tthis.collection = new PJQ.collections.budget.ForecastLineItems(this.model.get('forecastLineItems'));\n\t\t\t\t\t\tthis.render();\n\t\t\t\t\t}, this));\n\t\t\t\t}, this));\n\t\t\t}, this)\n\t\t})\n\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tcollection: this.collection,\n\t\t\tcostTypes: this.costTypes != null ? this.costTypes.models : [],\n\t\t\tunitsOfMeasure: this.unitsOfMeasure != null ? this.unitsOfMeasure.models : [],\n\t\t\taccountingMethod: this.accountingMethod,\n\t\t\tmodel: this.model,\n\t\t\tcanEdit: this.options.canEdit,\n\t\t\tisAdmin: this.options.isAdmin\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tthis.unitOfMeasureSelector = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.select-unit-of-measure'),\n\t\t\tdefaultValue: this.unitsOfMeasure != null && _.size(this.unitsOfMeasure.models) > 0 ? this.unitsOfMeasure.models[0].id : null,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.validateForm();\n\t\t\t}, this),\n\t\t\tisIntChoices: true,\n\t\t\thideDisabled: true\n\t\t});\n\n\t\tPJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.input-dollars-full'), 2, true);\n\n\t\tthis.renderLineItems();\n\t},\n\tvalidateForm: function () {\n\t\tlet quantity = this.$('.input-quantity').val(),\n\t\t\tunitPrice = PJQ.helpers.inputHelpers.getMoneyInputValue(this.$('.input-unit-price')),\n\t\t\tvalid = quantity > 0 && unitPrice > 0;\n\t\tthis.$('.btn-add-line-item').prop('disabled', !valid);\n\t},\n\tcalculateUnitTotal: function () {\n\t\tlet quantity = parseInt(this.$('.input-quantity').val()),\n\t\t\tunitPrice = PJQ.helpers.formatHelpers.numbersOnly(this.$('.input-unit-price').val(), false, true);\n\t\tthis.$('.unit-total').html(PJQ.helpers.formatHelpers.formatCurrency(quantity * unitPrice));\n\t\tthis.validateForm();\n\t},\n\tsetAccountingMethod: function (method) {\n\t\tthis.accountingMethod = method;\n\n\t\tlet $manual = this.$('.method-manual'),\n\t\t\t$calculated = this.$('.method-calculated');\n\t\tif (this.accountingMethod === 0) {\n\t\t\t$manual.removeClass('hidden');\n\t\t\t$calculated.addClass('hidden');\n\t\t}\n\t\telse if (this.accountingMethod === 1) {\n\t\t\t$manual.addClass('hidden');\n\t\t\t$calculated.removeClass('hidden');\n\t\t}\n\t},\n\tresetAddForm: function () {\n\t\tthis.$('.input-budgeted-cost').val('');\n\t\tthis.$('.description').val('');\n\t\tthis.$('.input-unit-price').val('');\n\t\tthis.$('.input-quantity').val('');\n\t\tthis.validateForm();\n\t},\n\tdeleteLineItem: function (e) {\n\t\tlet $target = $(e.currentTarget).closest('.line-item'),\n\t\t\tcid = $target.data('cid'),\n\t\t\titem = this.collection.get(cid);\n\n\t\titem.set('delete', true);\n\t\t$target.closest('.line-item').remove();\n\t\tthis.calculateSubTotal();\n\t},\n\taddLineItem: function () {\n\t\tlet newLineItem = new PJQ.models.budget.ForecastLineItem({\n\t\t\tbudgetId: this.options.budget.id,\n\t\t\taccountingMethod: this.accountingMethod\n\t\t});\n\t\t\tlet quantity = this.$('.input-quantity').val(),\n\t\t\t\tunitPrice = PJQ.helpers.inputHelpers.getMoneyInputValue(this.$('.input-unit-price')),\n\t\t\t\tdescription = this.$('.description').val();\n\t\t\tnewLineItem.set({\n\t\t\t\tunitId: this.unitOfMeasureSelector.getValue(),\n\t\t\t\tquantity: _.size(quantity) > 0 ? parseInt(quantity) : 0,\n\t\t\t\tunitPrice: unitPrice != null ? unitPrice : 0,\n\t\t\t\tdescription: description\n\t\t\t})\n\n\t\tthis.$('.alert').prop('hidden', true);\n\t\tthis.model.set('forecastMethod', 1);\n\t\tthis.collection.add(newLineItem);\n\t\tthis.renderLineItems();\n\t\tthis.resetAddForm();\n\t},\n\trenderLineItems: function ($el, lineItem) {\n\t\tif(this.collection) {\n\t\t\tthis.$('.no-items').addClass('hidden');\n\t\t\tthis.renderSubTemplate(false, this.options.subTemplates.lineItems, this.$('.line-items'), {\n\t\t\t\tlineItems: this.collection.models,\n\t\t\t\tgroups: this.groups,\n\t\t\t\tcostTypes: this.costTypes,\n\t\t\t\tunitsOfMeasure: this.unitsOfMeasure\n\t\t\t}, _.bind(function (el) {\n\t\t\t}, this));\n\n\t\t\tthis.calculateSubTotal();\n\t\t}\n\t},\n\tcalculateSubTotal: function() {\n\t\tlet subtotal = 0;\n\t\t_.each(this.collection.models, function (item) {\n\t\t\tsubtotal += item.get('quantity') * item.get('unitPrice')\n\t\t}, this)\n\t\tthis.$('.subtotal').html(PJQ.helpers.formatHelpers.formatCurrency(subtotal));\n\t},\n\tswitchMethod: function() {\n\t\tif(this.model.get('forecastMethod') === 1) {\n\t\t\tnew PJQ.views.modals.YesNo({\n\t\t\t\theader: \"Set to Automatic Calculation?\",\n\t\t\t\tbody: \"Forecast to Complete will no longer be manually calculated, however any existing line items will still be saved. Would you like to continue?\",\n\t\t\t\tonYes: _.bind(function () {\n\t\t\t\t\tthis.model.set('forecastMethod', 0);\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse{\n\t\t\tnew PJQ.views.modals.YesNo({\n\t\t\t\theader: \"Switch to Manual Calculation?\",\n\t\t\t\tbody: \"Forecast to Complete will no longer be automatically calculated. Would you like to continue?\",\n\t\t\t\tonYes: _.bind(function () {\n\t\t\t\t\tthis.model.set('forecastMethod', 1);\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t},\n\tsave: function () {\n\t\tthis.model.set('forecastLineItems', this.collection.toJSON());\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'budgets',\n\t\t\t\t\tvalue: this.options.budget.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'lineitems',\n\t\t\t\t\tvalue: this.model.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'forecast'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tisAPIv2: true,\n\t\t\tdata: this.model\n\t\t}).put().done(_.bind(function (data) {\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: 'Forecast Successfully Changed'\n\t\t\t});\n\t\t\tif(typeof this.options.onSave === 'function'){\n\t\t\t\tthis.options.onSave(false);\n\t\t\t}\n\t\t\tthis.removeModal();\n\t\t}, this)).fail(function() {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Failed to modify Forecast'\n\t\t\t});\n\t\t\tif(typeof this.options.onSave === 'function'){\n\t\t\t\tthis.options.onSave(false);\n\t\t\t}\n\t\t});\n\t},\n\tcancel: function () {\n\t\tif(this.model.hasChanged()){\n\t\t\tnew PJQ.views.modals.SaveDontSave({\n\t\t\t\theader: \"Unsaved Changes\",\n\t\t\t\tbody: \"Do you want to save changes?\",\n\t\t\t\tonSave: _.bind(function () {\n\t\t\t\t\tthis.save();\n\t\t\t\t}, this),\n\t\t\t\tonDontSave: _.bind(function () {\n\t\t\t\t\tthis.model.restore();\n\t\t\t\t\tthis.removeModal();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse{\n\t\t\tthis.removeModal();\n\t\t}\n\t}\n});\n","PJQ.integrations = {\n views: {},\n models: {},\n collections: {}\n}\n\nPJQ.modules.budget = {\n routes: [\n {\n route: \"budget\",\n name: 'budget',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"budget\"\n });\n }\n },\n {\n route: 'projects/:projectId/budget',\n name: 'budget',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"budget\");\n }\n },\n {\n route: 'projects/:projectId/costcodes',\n name: 'budget',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"costcodes\");\n }\n },\n {\n route: 'projects/:projectId/subjobs',\n name: 'budget',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"subjobs\");\n }\n }\n ]\n};\n\nPJQ.app.addRoutes(PJQ.modules.budget.routes);\n","PJQ.constants.integrations = {\n settings: {\n SYNC_PROJECTS: 'syncProjects',\n SYNC_VENDORS: 'syncVendors',\n SYNC_SUB_JOBS: 'syncSubJobs',\n SYNC_BUDGET: 'syncBudget',\n SYNC_DIRECT_COSTS: 'syncDirectCosts',\n SYNC_COMMITMENTS: 'syncCommitments',\n SYNC_COMMITMENT_CHANGE_ORDERS: 'syncCommitmentChangeOrders',\n SYNC_PRIME_CONTRACTS: 'syncPrimeContracts',\n SYNC_PRIME_CONTRACT_CHANGE_ORDERS: 'syncPrimeContractChangeOrders',\n SYNC_PAYABLE_INVOICES: 'syncPayableInvoices',\n SYNC_RECEIVABLE_INVOICES: 'syncReceivableInvoices'\n },\n actions: {\n PUSH_VENDORS: 'PUSH_VENDORS',\n UNLINK_VENDOR: 'UNLINK_VENDOR',\n PUSH_PROJECT: 'PUSH_PROJECT',\n LINK_PROJECT: 'LINK_PROJECT',\n UNLINK_PROJECT: 'UNLINK_PROJECT',\n PROJECT_SPECIFIC_COST_CODES: 'PROJECT_SPECIFIC_COST_CODES',\n PUSH_SUB_JOBS: 'PUSH_SUB_JOBS',\n PULL_SUB_JOBS: 'PULL_SUB_JOBS',\n PUSH_COMPANY_COST_CODES: 'PUSH_COMPANY_COST_CODES',\n PULL_COMPANY_COST_CODES: 'PULL_COMPANY_COST_CODES',\n PUSH_PROJECT_COST_CODES: 'PUSH_PROJECT_COST_CODES',\n PULL_PROJECT_COST_CODES: 'PULL_PROJECT_COST_CODES',\n PUSH_COMPANY_TAX_CODES: 'PUSH_COMPANY_TAX_CODES',\n PULL_COMPANY_TAX_CODES: 'PULL_COMPANY_TAX_CODES',\n PUSH_COST_TYPES: 'PUSH_COST_TYPES',\n PULL_COST_TYPES: 'PULL_COST_TYPES',\n PUSH_BUDGET: 'PUSH_BUDGET',\n PULL_BUDGET: 'PULL_BUDGET',\n PUSH_COMMITMENTS: 'PUSH_COMMITMENTS',\n PUSH_COMMITMENTS_WITH_VENDOR: 'PUSH_COMMITMENTS_WITH_VENDOR',\n PULL_COMMITMENTS: 'PULL_COMMITMENTS',\n UNLINK_COMMITMENTS: 'UNLINK_COMMITMENTS',\n PUSH_COMMITMENT_CHANGE_ORDERS: 'PUSH_COMMITMENT_CHANGE_ORDERS',\n PULL_COMMITMENT_CHANGE_ORDERS: 'PULL_COMMITMENT_CHANGE_ORDERS',\n COMMITMENT_CO_SOV_FILTER_TO_COMMITMENT_SOV: 'COMMITMENT_CO_SOV_FILTER_TO_COMMITMENT_SOV',\n UNLINK_COMMITMENT_CHANGE_ORDERS: 'UNLINK_COMMITMENT_CHANGE_ORDERS',\n PUSH_CHANGE_REQUESTS: 'PUSH_CHANGE_REQUESTS',\n PUSH_PRIME_CONTRACTS: 'PUSH_PRIME_CONTRACTS',\n PUSH_PRIME_CONTRACTS_WITH_CLIENT: 'PUSH_PRIME_CONTRACTS_WITH_CLIENT',\n PULL_PRIME_CONTRACTS: 'PULL_PRIME_CONTRACTS',\n PRIME_CONTRACT_SOV_BUDGET_CODE_NOT_REQUIRED: 'PRIME_CONTRACT_SOV_BUDGET_CODE_NOT_REQUIRED',\n UNLINK_PRIME_CONTRACTS: 'UNLINK_PRIME_CONTRACTS',\n PUSH_PRIME_CONTRACT_CHANGE_ORDERS: 'PUSH_PRIME_CONTRACT_CHANGE_ORDERS',\n PUSH_CONTRACT_CO_WITHOUT_PRIME_CONTRACT: 'PUSH_CONTRACT_CO_WITHOUT_PRIME_CONTRACT',\n PRIME_CONTRACT_CO_SOV_REQUIRE_LINKED_CONTRACT_CO: 'PRIME_CONTRACT_CO_SOV_REQUIRE_LINKED_CONTRACT_CO',\n PRIME_CONTRACT_CO_SOV_BUDGET_CODE_NOT_REQUIRED: 'PRIME_CONTRACT_CO_SOV_BUDGET_CODE_NOT_REQUIRED',\n UNLINK_PRIME_CONTRACT_CHANGE_ORDERS: 'UNLINK_PRIME_CONTRACT_CHANGE_ORDERS',\n PUSH_DIRECT_COSTS: 'PUSH_DIRECT_COSTS',\n PULL_DIRECT_COSTS: 'PULL_DIRECT_COSTS',\n UNLINK_DIRECT_COSTS: 'UNLINK_DIRECT_COSTS',\n PUSH_PAYABLE_INVOICES: 'PUSH_PAYABLE_INVOICES',\n PUSH_PAYABLE_INVOICES_WO_SYNCED_COMMMITMENT: 'PUSH_PAYABLE_INVOICES_WO_SYNCED_COMMMITMENT',\n PULL_PAYABLE_INVOICES: 'PULL_PAYABLE_INVOICES',\n PULL_RECEIVABLE_PAYMENTS: 'PULL_RECEIVABLE_PAYMENTS',\n PULL_PAYABLE_PAYMENTS: 'PULL_PAYABLE_PAYMENTS',\n UNLINK_PAYABLE_INVOICES: 'UNLINK_PAYABLE_INVOICES',\n REQUIRE_SYNCED_COST_TYPES: 'REQUIRE_SYNCED_COST_TYPES',\n REQUIRE_SYNCED_COST_CODES: 'REQUIRE_SYNCED_COST_CODES',\n PUSH_RECEIVABLE_INVOICES: 'PUSH_RECEIVABLE_INVOICES',\n PUSH_RECEIVABLE_INVOICES_WO_SYNCED_CONTRACT: 'PUSH_RECEIVABLE_INVOICES_WO_SYNCED_CONTRACT',\n PULL_RECEIVABLE_INVOICES: 'PULL_RECEIVABLE_INVOICES',\n UNLINK_RECEIVABLE_INVOICES: 'UNLINK_RECEIVABLE_INVOICES',\n CREATE_TAX_CODES: 'CREATE_TAX_CODES',\n DISABLE_EDIT_COST_CODE_TYPE_FILTER: 'DISABLE_EDIT_COST_CODE_TYPE_FILTER'\n },\n providers: {\n ACUMATICA: {\n logoURL: '/assets/modules2/global/images/acumatica.png',\n name: 'ACUMATICA',\n shortName: 'Acumatica',\n displayName: 'Acumatica Cloud ERP',\n description: 'Integrate Acumatica Cloud ERP to work with your job costing tools',\n supportedVersions: [\n '23.200.001',\n '22.200.001',\n ],\n availableActions: [\n 'PUSH_VENDORS',\n 'UNLINK_VENDOR',\n 'PUSH_PROJECT',\n 'LINK_PROJECT',\n 'UNLINK_PROJECT',\n 'PULL_COMPANY_COST_CODES',\n 'PULL_PROJECT_COST_CODES',\n 'PUSH_SUB_JOBS',\n 'PULL_SUB_JOBS',\n 'PUSH_BUDGET',\n 'PULL_BUDGET',\n 'PUSH_PRIME_CONTRACTS',\n 'PUSH_PRIME_CONTRACTS_WITH_CLIENT',\n 'UNLINK_PRIME_CONTRACTS',\n 'PUSH_PRIME_CONTRACT_CHANGE_ORDERS',\n 'UNLINK_PRIME_CONTRACT_CHANGE_ORDERS',\n 'PULL_DIRECT_COSTS',\n 'UNLINK_DIRECT_COSTS',\n 'PUSH_COMMITMENTS',\n 'UNLINK_COMMITMENTS',\n 'PUSH_COMMITMENT_CHANGE_ORDERS',\n 'UNLINK_COMMITMENT_CHANGE_ORDERS',\n 'PUSH_PAYABLE_INVOICES',\n 'UNLINK_PAYABLE_INVOICES',\n 'CREATE_TAX_CODES',\n 'PRIME_CONTRACT_SOV_BUDGET_CODE_NOT_REQUIRED',\n 'PRIME_CONTRACT_CO_SOV_BUDGET_CODE_NOT_REQUIRED',\n 'PUSH_CONTRACT_CO_WITHOUT_PRIME_CONTRACT'\n ],\n options: {\n linkProjectAlert: 'Linking to existing Jobs within Acumatica that have existing transactions is not supported. This may cause discrepancies in your Job Costing data.'\n },\n budgetColumns: [\n {\n name: 'Revised Budgeted Amount',\n source: 'erp:rev_b_amt',\n canCalculate: true,\n format: 'money',\n isErp: true\n },\n {\n name: 'Revised Budgeted Quantity',\n source: 'erp:rev_b_qty',\n canCalculate: true,\n format: 'decimal',\n isErp: true\n },\n {\n name: 'Budgeted CO Amount',\n source: 'erp:b_co_amt',\n canCalculate: true,\n format: 'money',\n isErp: true\n },\n {\n name: 'Budgeted CO Quantity',\n source: 'erp:b_co_qty',\n canCalculate: true,\n format: 'decimal',\n isErp: true\n },\n {\n name: 'Pending Invoice Amount',\n source: 'erp:pnd_inv_amt',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Committed Invoiced Amount',\n source: 'erp:cm_inv_amt',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Actual Amount',\n source: 'erp:act_amt',\n canCalculate: true,\n format: 'money'\n },\n ],\n erpAdmin: {\n features: {\n project: {\n internalModelName: 'project',\n externalModelName: 'project',\n displayName: \"Projects\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Project ID',\n value: 'projectID',\n required: true,\n className: 'input-project-id'\n }\n ]\n },\n subjob: {\n internalModelName: 'subjob',\n externalModelName: 'subjob',\n displayName: \"Sub Jobs\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n }\n },\n cont_comp: {\n internalModelName: 'cont_comp',\n externalModelName: 'vendor',\n displayName: \"Vendors\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Vendor ID',\n value: 'externalNumber',\n required: true,\n format: '#{0,10}',\n className: 'input-vendor-number'\n }\n ]\n },\n costcode: {\n internalModelName: 'costcode',\n externalModelName: 'costcode',\n displayName: \"Cost Codes\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n }\n },\n budget: {\n internalModelName: 'budget',\n displayName: \"Budget\",\n externalModelName: 'estimate',\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n contract: {\n internalModelName: 'contract',\n externalModelName: 'contract',\n displayName: \"Contracts\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n pcco: {\n internalModelName: 'pcco',\n externalModelName: 'pcco',\n displayName: \"Contract Change Orders\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n }\n },\n commitment: {\n internalModelName: 'commitment',\n externalModelName: 'commitment',\n displayName: \"Commitments\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n cco: {\n internalModelName: 'cco',\n externalModelName: 'cco',\n displayName: \"Commitment Change Orders\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n ap_inv: {\n internalModelName: 'ap_inv',\n externalModelName: 'ap_inv',\n displayName: \"Payable Invoices\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n }\n }\n }\n },\n QBO: {\n logoURL: '/assets/modules2/global/images/QBO_logo.svg',\n buttonClass: 'btn-qbo-connect',\n name: 'QBO',\n shortName: 'QuickBooks',\n buttonText: 'Connect to QuickBooks',\n displayName: 'QuickBooks Online',\n description: 'Integrate QuickBooks Online to work with your job costing tools',\n availableActions: [\n 'UNLINK_PROJECT',\n 'PUSH_VENDORS',\n 'PROJECT_SPECIFIC_COST_CODES',\n 'PUSH_COMPANY_COST_CODES',\n 'PUSH_PROJECT_COST_CODES',\n 'PUSH_COST_TYPES',\n 'PULL_COST_TYPES',\n 'PUSH_COMMITMENTS',\n 'PUSH_COMMITMENTS_WITH_VENDOR',\n 'UNLINK_COMMITMENTS',\n 'PUSH_COMMITMENT_CHANGE_ORDERS',\n 'UNLINK_COMMITMENT_CHANGE_ORDERS',\n 'PUSH_PRIME_CONTRACTS',\n 'PUSH_PRIME_CONTRACTS_WITH_CLIENT',\n 'UNLINK_PRIME_CONTRACTS',\n 'PUSH_PRIME_CONTRACT_CHANGE_ORDERS',\n 'UNLINK_PRIME_CONTRACT_CHANGE_ORDERS',\n 'PULL_BUDGET',\n 'PULL_DIRECT_COSTS',\n 'PUSH_DIRECT_COSTS',\n 'UNLINK_DIRECT_COSTS',\n 'PUSH_PAYABLE_INVOICES',\n 'PUSH_PAYABLE_INVOICES_WO_SYNCED_COMMMITMENT',\n 'UNLINK_PAYABLE_INVOICES',\n 'PUSH_RECEIVABLE_INVOICES',\n 'PUSH_RECEIVABLE_INVOICES_WO_SYNCED_CONTRACT',\n 'UNLINK_RECEIVABLE_INVOICES',\n 'PULL_COMPANY_TAX_CODES',\n 'LINK_PROJECT'\n ],\n options: {\n linkProjectAlert: 'QuickBooks Online limits 3rd party visibility to the last 30 days of expenses. It is strongly recommended that you do not link to a project which has expenses older than this to avoid inconsistencies.'\n },\n erpAdmin: {\n features: {\n project: {\n internalModelName: 'project',\n externalModelName: 'project',\n displayName: \"Projects\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: []\n },\n cont_comp: {\n internalModelName: 'cont_comp',\n externalModelName: 'vendor',\n displayName: \"Vendors\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: []\n },\n contract: {\n internalModelName: 'contract',\n externalModelName: 'contract',\n displayName: \"Contracts\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n pcco: {\n internalModelName: 'pcco',\n externalModelName: 'pcco',\n displayName: \"Contract Change Orders\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n ar_inv: {\n internalModelName: 'ar_inv',\n externalModelName: 'ar_inv',\n displayName: \"Receivable Invoices\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n commitment: {\n internalModelName: 'commitment',\n externalModelName: 'commitment',\n displayName: \"Commitments\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n cco: {\n internalModelName: 'cco',\n externalModelName: 'cco',\n displayName: \"Commitment Change Orders\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n ap_inv: {\n internalModelName: 'ap_inv',\n externalModelName: 'ap_inv',\n displayName: \"Payable Invoices\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n d_cost: {\n internalModelName: 'd_cost',\n externalModelName: 'd_cost',\n displayName: \"Direct Costs\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n }\n }\n }\n },\n SAGE100: {\n logoURL: '/assets/modules2/global/images/sage100.png',\n name: 'SAGE100',\n shortName: 'Sage 100',\n displayName: 'Sage 100 Contractor',\n description: 'Integrate Sage 100 Contractor to work with your job costing tools',\n availableActions: [\n 'PUSH_VENDORS',\n 'PUSH_PROJECT',\n 'PULL_COMPANY_COST_CODES',\n 'PUSH_PROJECT_COST_CODES',\n 'PULL_PROJECT_COST_CODES',\n 'PULL_COMPANY_TAX_CODES',\n 'PULL_SUB_JOBS',\n 'PUSH_BUDGET',\n 'PULL_BUDGET',\n 'PUSH_COMMITMENTS',\n 'PUSH_COMMITMENT_CHANGE_ORDERS',\n 'PULL_DIRECT_COSTS',\n 'PUSH_PAYABLE_INVOICES',\n 'REQUIRE_SYNCED_COST_TYPES'\n ],\n erpAdmin: {\n features: {\n project: {\n internalModelName: 'project',\n externalModelName: 'job',\n displayName: \"Jobs\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n format: '9{0,8}',\n className: 'input-project-code'\n }\n ]\n\n },\n cont_comp: {\n internalModelName: 'cont_comp',\n externalModelName: 'vendor',\n displayName: \"Vendors\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n format: '9{0,10}',\n className: 'input-vendor-number'\n }\n ]\n },\n costcode: {\n internalModelName: 'costcode',\n externalModelName: 'costcode',\n displayName: \"Cost Codes\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n }\n },\n budget: {\n internalModelName: 'budget',\n displayName: \"Budget\",\n externalModelName: 'estimate',\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n commitment: {\n internalModelName: 'commitment',\n externalModelName: 'commitment',\n displayName: \"Commitments\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n format: '99999',\n className: 'input-commitment-number'\n }\n ]\n },\n cco: {\n internalModelName: 'cco',\n externalModelName: 'cco',\n displayName: \"Commitment Change Orders\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n format: '9999',\n required: true,\n className: 'input-cco-number'\n }\n ]\n },\n ap_inv: {\n internalModelName: 'ap_inv',\n externalModelName: 'ap_inv',\n displayName: \"Payable Invoices\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n format: '*{0,5}',\n className: 'input-payable-invoice-number'\n },\n {\n type: 'date',\n name: 'Approval Date',\n value: 'approvalDate',\n required: false,\n className: 'input-payable-invoice-approval-date'\n }\n ]\n }\n }\n }\n },\n SAGE300: {\n logoURL: '/assets/modules2/global/images/sage300.png',\n name: 'SAGE300',\n shortName: 'Sage 300',\n displayName: 'Sage 300',\n description: 'Integrate Sage 300 CRE to work with your job costing tools',\n availableActions: [\n 'PUSH_VENDORS',\n 'PUSH_PROJECT',\n 'LINK_PROJECT',\n 'PULL_COMPANY_COST_CODES',\n 'PUSH_PROJECT_COST_CODES',\n 'PULL_PROJECT_COST_CODES',\n 'PULL_COST_TYPES',\n 'PULL_COMPANY_TAX_CODES',\n 'PUSH_SUB_JOBS',\n 'PULL_SUB_JOBS',\n 'PUSH_BUDGET',\n 'PULL_BUDGET',\n 'PUSH_COMMITMENTS',\n 'PUSH_COMMITMENT_CHANGE_ORDERS',\n 'PULL_PRIME_CONTRACTS',\n 'PUSH_PRIME_CONTRACT_CHANGE_ORDERS',\n 'PULL_DIRECT_COSTS',\n 'PUSH_PAYABLE_INVOICES',\n 'REQUIRE_SYNCED_COST_TYPES',\n 'PRIME_CONTRACT_CO_SOV_REQUIRE_LINKED_CONTRACT_CO',\n 'PRIME_CONTRACT_CO_SOV_BUDGET_CODE_NOT_REQUIRED',\n // 'COMMITMENT_CO_SOV_FILTER_TO_COMMITMENT_SOV'\n ],\n options: {\n linkProjectAlert: 'Linking to existing Jobs within Sage 300 that have existing Job Costs transactions is not supported. This may cause discrepancies in your Job Costing data.'\n },\n budgetColumns: [\n {\n name: 'Original Commitment',\n source: 'erp:originalCommitment',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Approved Commitment Changes',\n source: 'erp:approvedCommitmentChanges',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Revised Commitment',\n source: 'erp:revisedCommitment',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Commitment Invoiced',\n source: 'erp:commitmentInvoiced',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Job to Date Cost',\n source: 'erp:jobToDateCost',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Job to Date Units',\n source: 'erp:jobToDateUnits',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Job to Date Dollars Paid',\n source: 'erp:jobToDateDollarsPaid',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Month to Date Cost',\n source: 'erp:monthToDateCost',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Month to Date Units',\n source: 'erp:monthToDateUnits',\n canCalculate: true,\n format: 'money'\n },\n {\n name: 'Month to Date Dollars Paid',\n source: 'erp:monthToDateDollarsPaid',\n canCalculate: true,\n format: 'money'\n }\n ],\n erpAdmin: {\n features: {\n project: {\n internalModelName: 'project',\n externalModelName: 'job',\n displayName: \"Jobs\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n format: '99-999',\n className: 'input-project-code'\n }\n ]\n\n },\n subjob: {\n internalModelName: 'subjob',\n externalModelName: 'subjob',\n displayName: \"Sub Jobs\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n format: '99999',\n className: 'input-subjob-number'\n }\n ]\n },\n cont_comp: {\n internalModelName: 'cont_comp',\n externalModelName: 'vendor',\n displayName: \"Vendors\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n format: '#{0,10}',\n className: 'input-vendor-number'\n }\n ]\n },\n costcode: {\n internalModelName: 'costcode',\n externalModelName: 'costcode',\n displayName: \"Cost Codes\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n }\n },\n budget: {\n internalModelName: 'budget',\n displayName: \"Budget\",\n externalModelName: 'estimate',\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n pcco: {\n internalModelName: 'pcco',\n externalModelName: 'pcco',\n displayName: \"Contract Change Orders\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n format: '9999',\n className: 'input-pcco-number'\n }\n ]\n },\n commitment: {\n internalModelName: 'commitment',\n externalModelName: 'commitment',\n displayName: \"Commitments\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n className: 'input-commitment-number'\n }\n ]\n },\n cco: {\n internalModelName: 'cco',\n externalModelName: 'cco',\n displayName: \"Commitment Change Orders\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n format: '9999',\n required: true,\n className: 'input-cco-number'\n }\n ]\n },\n ap_inv: {\n internalModelName: 'ap_inv',\n externalModelName: 'ap_inv',\n displayName: \"Payable Invoices\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: true,\n format: '*{0,5}',\n className: 'input-payable-invoice-number'\n },\n {\n type: 'date',\n name: 'Approval Date',\n value: 'approvalDate',\n required: false,\n className: 'input-payable-invoice-approval-date'\n }\n ]\n },\n }\n }\n },\n INTACCT: {\n logoURL: '/assets/modules2/global/images/sageintacct.png',\n name: 'INTACCT',\n shortName: 'Sage Intacct',\n displayName: 'Sage Intacct',\n description: 'Integrate Sage Intacct CRE to work with your job costing tools',\n availableActions: [\n 'PUSH_VENDORS',\n 'UNLINK_VENDOR',\n 'PUSH_PROJECT',\n 'UNLINK_PROJECT',\n 'PULL_COMPANY_COST_CODES',\n 'PULL_PROJECT_COST_CODES',\n 'PUSH_PROJECT_COST_CODES',\n 'PUSH_SUB_JOBS',\n 'PULL_SUB_JOBS',\n 'PUSH_BUDGET',\n 'PULL_BUDGET',\n 'PUSH_COMMITMENTS',\n 'PUSH_COMMITMENT_CHANGE_ORDERS',\n 'PULL_PRIME_CONTRACTS',\n 'PRIME_CONTRACT_SOV_BUDGET_CODE_NOT_REQUIRED',\n 'PRIME_CONTRACT_CO_SOV_BUDGET_CODE_NOT_REQUIRED',\n 'PRIME_CONTRACT_CO_SOV_REQUIRE_LINKED_CONTRACT_CO',\n 'PUSH_PRIME_CONTRACT_CHANGE_ORDERS',\n 'PUSH_PAYABLE_INVOICES',\n 'PULL_PAYABLE_PAYMENTS',\n 'UNLINK_PRIME_CONTRACTS',\n 'UNLINK_PRIME_CONTRACT_CHANGE_ORDERS',\n 'UNLINK_COMMITMENT_CHANGE_ORDERS',\n 'UNLINK_PAYABLE_INVOICES',\n 'UNLINK_COMMITMENTS',\n 'DISABLE_EDIT_COST_CODE_TYPE_FILTER',\n 'PULL_DIRECT_COSTS'\n ],\n budgetColumns: [],\n erpAdmin: {\n features: {\n project: {\n internalModelName: 'project',\n externalModelName: 'project',\n displayName: \"Projects\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Project ID',\n value: 'id',\n required: true,\n format: '#{0,20}',\n className: 'input-project-code'\n }\n ]\n\n },\n subjob: {\n internalModelName: 'subjob',\n externalModelName: 'subjob',\n displayName: \"Sub Jobs\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n },\n cont_comp: {\n internalModelName: 'cont_comp',\n externalModelName: 'vendor',\n displayName: \"Vendors\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Code',\n value: 'code',\n required: false,\n format: '#{0,10}',\n className: 'input-vendor-number'\n }\n ]\n },\n costcode: {\n internalModelName: 'costcode',\n externalModelName: 'costcode',\n displayName: \"Cost Codes\",\n filters: {\n readyToImport: {\n displayName: 'Ready to Import',\n name: 'readyToImport',\n },\n archived: {\n displayName: 'Archived',\n name: 'archived'\n }\n }\n },\n budget: {\n internalModelName: 'budget',\n displayName: \"Budget\",\n externalModelName: 'estimate',\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n pcco: {\n internalModelName: 'pcco',\n externalModelName: 'pcco',\n displayName: \"Contract Change Orders\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: [\n {\n type: 'input',\n name: 'Project Change Order ID',\n value: 'projectChangeOrderId',\n required: true,\n format: '#{0,20}',\n className: 'input-pcco-number'\n }\n ]\n },\n commitment: {\n internalModelName: 'commitment',\n externalModelName: 'commitment',\n displayName: \"Commitments\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n cco: {\n internalModelName: 'cco',\n externalModelName: 'cco',\n displayName: \"Commitment Change Orders\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n },\n ap_inv: {\n internalModelName: 'ap_inv',\n externalModelName: 'ap_inv',\n displayName: \"Payable Invoices\",\n filters: {\n readyToExport: {\n displayName: 'Ready to Export',\n name: 'readyToExport',\n statuses: [1]\n },\n failedToExport: {\n displayName: 'Failed to Export',\n name: 'failedToExport',\n statuses: [5]\n }\n },\n approvalInputs: []\n }\n }\n }\n },\n // VIEWPOINT_VISTA: {\n // logoURL: '/assets/modules2/global/images/viewpoint_vista.png',\n // name: 'VIEWPOINT_VISTA',\n // displayName: 'Viewpoint Vista',\n // description: 'Integrate Viewpoint Vista to work with your job costing tools',\n // isAgave: true,\n // agaveSourceSystem: 'vista-hosted',\n // availableActions: [\n // 'PUSH_VENDORS',\n // 'PUSH_PROJECT',\n // 'PULL_COMPANY_COST_CODES',\n // 'PUSH_PROJECT_COST_CODES',\n // 'PULL_PROJECT_COST_CODES',\n // 'PULL_COMPANY_TAX_CODES',\n // 'PUSH_SUB_JOBS',\n // 'PULL_SUB_JOBS',\n // 'PUSH_BUDGET',\n // 'PULL_BUDGET',\n // 'PUSH_COMMITMENTS',\n // 'PUSH_COMMITMENT_CHANGE_ORDERS',\n // 'PULL_PRIME_CONTRACTS',\n // 'PUSH_PRIME_CONTRACT_CHANGE_ORDERS',\n // 'PULL_DIRECT_COSTS',\n // 'PUSH_PAYABLE_INVOICES',\n // 'REQUIRE_SYNCED_COST_TYPES',\n // 'PRIME_CONTRACT_CO_SOV_REQUIRE_LINKED_CONTRACT_CO',\n // 'COMMITMENT_CO_SOV_FILTER_TO_COMMITMENT_SOV'\n // ],\n // erpAdmin: {\n // features: {\n // project: {\n // internalModelName: 'project',\n // externalModelName: 'job',\n // refreshType: 'projects',\n // displayName: \"Jobs\",\n // filters: {\n // readyToImport: {\n // displayName: 'Ready to Import',\n // name: 'readyToImport',\n // },\n // readyToExport: {\n // displayName: 'Ready to Export',\n // name: 'readyToExport',\n // statuses: [1]\n // },\n // failedToExport: {\n // displayName: 'Failed to Export',\n // name: 'failedToExport',\n // statuses: [5]\n // }\n // },\n // approvalInputs: [\n // {\n // type: 'input',\n // name: 'Code',\n // value: 'code',\n // required: true,\n // format: '99-999',\n // className: 'input-project-code'\n // }\n // ]\n //\n // },\n // cont_comp: {\n // internalModelName: 'cont_comp',\n // externalModelName: 'vendor',\n // refreshType: 'vendors',\n // displayName: \"Vendors\",\n // filters: {\n // readyToImport: {\n // displayName: 'Ready to Import',\n // name: 'readyToImport',\n // },\n // readyToExport: {\n // displayName: 'Ready to Export',\n // name: 'readyToExport',\n // statuses: [1]\n // },\n // failedToExport: {\n // displayName: 'Failed to Export',\n // name: 'failedToExport',\n // statuses: [5]\n // }\n // },\n // approvalInputs: [\n // {\n // type: 'input',\n // name: 'Code',\n // value: 'code',\n // required: true,\n // format: '#{0,10}',\n // className: 'input-vendor-number'\n // }\n // ]\n // },\n // budget: {\n // internalModelName: 'budget',\n // displayName: \"Budget\",\n // externalModelName: 'estimate',\n // filters: {\n // readyToExport: {\n // displayName: 'Ready to Export',\n // name: 'readyToExport',\n // statuses: [1]\n // },\n // failedToExport: {\n // displayName: 'Failed to Export',\n // name: 'failedToExport',\n // statuses: [5]\n // }\n // },\n // approvalInputs: []\n // },\n // commitment: {\n // internalModelName: 'commitment',\n // externalModelName: 'commitment',\n // displayName: \"Commitments\",\n // filters: {\n // readyToExport: {\n // displayName: 'Ready to Export',\n // name: 'readyToExport',\n // statuses: [1]\n // },\n // failedToExport: {\n // displayName: 'Failed to Export',\n // name: 'failedToExport',\n // statuses: [5]\n // }\n // },\n // approvalInputs: [\n // {\n // type: 'input',\n // name: 'Code',\n // value: 'code',\n // required: true,\n // format: '99999',\n // className: 'input-commitment-number'\n // }\n // ]\n // },\n // cco: {\n // internalModelName: 'cco',\n // externalModelName: 'cco',\n // displayName: \"Commitment Change Orders\",\n // filters: {\n // readyToExport: {\n // displayName: 'Ready to Export',\n // name: 'readyToExport',\n // statuses: [1]\n // },\n // failedToExport: {\n // displayName: 'Failed to Export',\n // name: 'failedToExport',\n // statuses: [5]\n // }\n // },\n // approvalInputs: [\n // {\n // type: 'input',\n // name: 'Code',\n // value: 'code',\n // format: '9999',\n // required: true,\n // className: 'input-cco-number'\n // }\n // ]\n // },\n // ap_inv: {\n // internalModelName: 'ap_inv',\n // externalModelName: 'ap_inv',\n // displayName: \"Payable Invoices\",\n // filters: {\n // readyToExport: {\n // displayName: 'Ready to Export',\n // name: 'readyToExport',\n // statuses: [1]\n // },\n // failedToExport: {\n // displayName: 'Failed to Export',\n // name: 'failedToExport',\n // statuses: [5]\n // }\n // },\n // approvalInputs: [\n // {\n // type: 'input',\n // name: 'Code',\n // value: 'code',\n // required: true,\n // format: '*{0,5}',\n // className: 'input-payable-invoice-number'\n // },\n // {\n // type: 'date',\n // name: 'Approval Date',\n // value: 'approvalDate',\n // required: false,\n // className: 'input-payable-invoice-approval-date'\n // }\n // ]\n // },\n // pcco: {\n // internalModelName: 'pcco',\n // externalModelName: 'pcco',\n // displayName: \"Contract Change Orders\",\n // filters: {\n // readyToExport: {\n // displayName: 'Ready to Export',\n // name: 'readyToExport',\n // statuses: [1]\n // },\n // failedToExport: {\n // displayName: 'Failed to Export',\n // name: 'failedToExport',\n // statuses: [5]\n // }\n // },\n // approvalInputs: [\n // {\n // type: 'input',\n // name: 'Code',\n // value: 'code',\n // required: true,\n // format: '9999',\n // className: 'input-pcco-number'\n // }\n // ]\n // },\n // }\n // }\n // },\n },\n erp: {\n syncStatuses: {\n STALE: -2,\n CACHED: -1,\n PENDING: 0,\n REVIEWING: 1,\n REJECTED: 2,\n APPROVED: 3,\n SYNCED: 4,\n FAILED: 5,\n ARCHIVED: 6\n },\n syncStatusDescriptions: {\n '-2': 'Changes were made which have not been synced to your ERP system',\n 0: 'ERP sync not started',\n 1: 'ERP sync waiting for approval',\n 2: 'ERP sync rejected',\n 3: 'Approved - Sync to ERP in process',\n 4: 'Synced to ERP',\n 5: 'Sync to ERP failed',\n 6: 'Archived'\n }\n }\n};\n\n\n//Models\nPJQ.integrations.models.Integration = PJQ.models.BaseModel.extend({\n idAttribute: \"id\",\n defaults: {\n isAPIv2: true\n },\n endpoint: function () {\n let endpointArr,\n params = [];\n if (this.id > 0) {\n\n params.push({\n parameter: 'erp',\n value: this.get('erp')\n });\n\n endpointArr = [\n {\n endpoint: 'integrations',\n value: this.get('name')\n }\n ];\n } else {\n if (this.options.erp) {\n params.push({\n parameter: 'erp',\n value: true\n });\n\n if (_.size(this.get(\"name\")) === 0) {\n this.set('name', 'default');\n }\n }\n\n endpointArr = [\n {\n endpoint: 'integrations',\n value: this.get('name')\n }\n ];\n }\n return PJQ.helpers.urlHelpers.generateEndpoint(endpointArr, params);\n },\n parse: function (model) {\n if (model == null) {\n model = {};\n }\n\n if (!model.settings) {\n model.settings = {};\n }\n return model;\n },\n getSetting: function (setting) {\n return this.attributes.settings ? this.attributes.settings[setting] : null;\n },\n setSetting: function (setting, value) {\n if (_.size(setting) === 0) {\n return false;\n }\n\n if (this.attributes.settings == null) {\n this.attributes.settings = {};\n }\n this.attributes.settings[setting] = value;\n return true;\n },\n undoPush: function (obj, callback) {\n let externalObj = obj.get('externalObject');\n if (externalObj == null || !(externalObj.id > 0) || externalObj.status !== PJQ.constants.integrations.erp.syncStatuses.REVIEWING) {\n if (typeof callback === 'function') {\n callback(obj);\n }\n return;\n }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'objects',\n value: externalObj.id\n },\n {\n endpoint: 'undopush'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n obj.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(obj);\n }\n }).fail(function () {\n // todo: error\n });\n },\n fetchSyncData: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.syncData != null) {\n if (typeof callback === 'function') {\n callback(this.syncData);\n }\n resolve(this.syncData);\n return;\n }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'syncdata'\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n this.syncData = res;\n if (typeof callback === 'function') {\n callback(this.syncData);\n }\n resolve(this.syncData);\n }).fail(() => {\n reject(new Error(\"Failed to fetch erp integration sync data\"));\n });\n });\n },\n fetchSettingsData: function (callback, options = null) {\n this.settingsData = {};\n return new Promise((resolve, reject) => {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'settingsdata'\n }\n ], [\n {\n parameter: 'type',\n value: options ? options.type : null\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n this.settingsData = _.extend(this.settingsData, res ?? {});\n if (typeof callback === 'function') {\n callback(res);\n }\n resolve(res);\n }).fail((res) => {\n if (!this.handleError(res)) {\n reject(res);\n }\n });\n });\n },\n pushVendor: function (contact, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'vendors',\n value: contact.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n contact.set({\n companyExternalObject: res,\n externalObject: res\n }, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(contact);\n }\n }).fail(function () {\n // todo: error\n });\n },\n unlinkVendor: function (contactCompany, callback) {\n let contactCompanyId = contactCompany.get('contactCompanyId');\n if (contactCompanyId == null) {\n contactCompanyId = contactCompany.id;\n }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'vendors',\n value: contactCompanyId\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n contactCompany.set({\n companyExternalObject: null,\n externalObject: null\n }, null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((xhr) => {\n // todo: error\n });\n },\n fetchUnlinkedProjects: async function () {\n return await this.fetchProjects(false);\n },\n fetchLinkedProjects: async function () {\n return await this.fetchProjects(true);\n },\n fetchProjects: async function (synced = false) {\n return new Promise((resolve, reject) => {\n if (this.erpProjects == null) {\n this.erpProjects = {};\n }\n\n let result = this.erpProjects[synced];\n if (result != null) {\n resolve(result);\n return;\n }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects'\n }\n ], [{\n parameter: 'synced',\n value: synced\n }]),\n isAPIv2: true\n }).get().done((res) => {\n this.erpProjects[synced] = res;\n resolve(this.erpProjects[synced]);\n }).fail(() => {\n reject(new Error(\"Failed to fetch erp projects\"));\n });\n });\n },\n pushProject: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n project.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(project);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n linkProject: function (project, externalId, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'link'\n }\n ], [{\n parameter: 'externalId',\n value: externalId\n }]),\n isAPIv2: true\n }).post().done((res) => {\n project.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(project);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n unlinkProject: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n project.set('externalObject', null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(false, err);\n });\n },\n pushSubJobs: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'subjobs'\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n if (typeof callback === 'function') {\n callback(res);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullSubJobs: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'subjobs'\n },\n {\n endpoint: 'pull'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n if (typeof callback === 'function') {\n callback(res, null);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n updateCostTypeData: function (obj, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'costtypes'\n },\n {\n endpoint: 'data'\n }\n ]),\n isAPIv2: true,\n data: obj\n }).post().done((res) => {\n if (typeof callback === 'function') {\n callback(res, null);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pushCostTypes: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'costtypes'\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n if (typeof callback === 'function') {\n callback(res, null);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullCostTypes: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'costtypes'\n },\n {\n endpoint: 'pull'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n if (typeof callback === 'function') {\n callback(res, null);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pushCostCodes: function (options, callback) {\n let params = [];\n if (options) {\n if (options.project && options.project.id > 0) {\n params.push({\n parameter: 'projectId',\n value: options.project.id\n });\n }\n\n if (options.dryRun) {\n params.push({\n parameter: 'dryRun',\n value: true\n });\n }\n }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'costcodes'\n },\n {\n endpoint: 'push'\n }\n ], params),\n isAPIv2: true\n }).post().done((res) => {\n if (typeof callback === 'function') {\n callback(res, null);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullCostCodes: function (project, callback) {\n let params = [];\n if (project != null) {\n params.push({\n parameter: 'projectId',\n value: project ? project.id : null\n });\n }\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'costcodes'\n },\n {\n endpoint: 'pull'\n }\n ], params),\n isAPIv2: true,\n data: []\n }).post().done((res) => {\n if (typeof callback === 'function') {\n callback(res, null);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n fetchCostCodes: function (callback, options = null) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'costcodes'\n }\n ], [\n {\n parameter: 'forLinking',\n value: options && options.forLinking ? true : null\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n if (typeof callback === 'function') {\n callback(res);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullTaxCodes: function (project, callback) {\n let params = [];\n if (project != null) {\n params.push({\n parameter: 'projectId',\n value: project ? project.id : null\n });\n }\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'taxcodes'\n },\n {\n endpoint: 'pull'\n }\n ], params),\n isAPIv2: true\n }).post().done((res) => {\n if (typeof callback === 'function') {\n callback(res, null);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pushBudget: function (budget, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: budget.get('projectId')\n },\n {\n endpoint: 'budget'\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n budget.set({\n externalObject: res,\n isLocked: true\n }, {\n silent: true\n })\n budget.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(budget);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullBudget: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'budget'\n },\n {\n endpoint: 'pull'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n if (typeof callback === 'function') {\n callback(res, null);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pushCommitment: function (commitment, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'commitments',\n value: commitment.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n commitment.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(commitment);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullCommitments: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'commitments'\n },\n {\n endpoint: 'pull'\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n if (typeof callback === 'function') {\n callback(res);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n unlinkCommitment: function (commitment, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'commitments',\n value: commitment.id\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n commitment.set('externalObject', null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(false, err);\n });\n },\n pushChangeRequest: function (changeRequest, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'changerequests',\n value: changeRequest.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n changeRequest.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(changeRequest);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n unlinkChangeRequest: function (changeRequest, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'changerequests',\n value: changeRequest.id\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n changeRequest.set('externalObject', null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(false, err);\n });\n },\n pushCommitmentChangeOrder: function (changeOrder, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'commitmentchangeorders',\n value: changeOrder.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n changeOrder.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(changeOrder);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullCommitmentChangeOrders: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'commitmentchangeorders'\n },\n {\n endpoint: 'pull'\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n if (typeof callback === 'function') {\n callback(res);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n unlinkCommitmentChangeOrder: function (changeOrder, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'commitmentchangeorders',\n value: changeOrder.id\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n changeOrder.set('externalObject', null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(false, err);\n });\n },\n pushPrimeContract: function (primeContract, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'primecontracts',\n value: primeContract.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n primeContract.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(primeContract);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullPrimeContracts: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'primecontracts'\n },\n {\n endpoint: 'pull'\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n if (typeof callback === 'function') {\n callback(res);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n unlinkPrimeContract: function (contract, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'primecontracts',\n value: contract.id\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n contract.set('externalObject', null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(false, err);\n });\n },\n pushPrimeContractChangeOrder: function (changeOrder, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'primecontractchangeorders',\n value: changeOrder.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n changeOrder.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(changeOrder);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullPrimeContractChangeOrders: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'primecontractchangeorders'\n },\n {\n endpoint: 'pull'\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n if (typeof callback === 'function') {\n callback(res);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n unlinkPrimeContractChangeOrder: function (changeOrder, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'primecontractchangeorders',\n value: changeOrder.id\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n changeOrder.set('externalObject', null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(false, err);\n });\n },\n pushDirectCost: function (directcost, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'directcosts',\n value: directcost.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n directcost.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(directcost);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullDirectCosts: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'directcosts'\n },\n {\n endpoint: 'pull'\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n if (typeof callback === 'function') {\n callback(res, null);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n unlinkDirectCost: function (directCost, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'directcosts',\n value: directCost.id\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n directCost.set('externalObject', null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(false, err);\n });\n },\n pushPayableInvoice: function (invoice, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'payableinvoices',\n value: invoice.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n invoice.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(invoice);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullPayableInvoicePayments: function (invoice, callback) {\n return new Promise((resolve, reject) => {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'payableinvoicepayments',\n value: invoice.id\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n if (typeof callback === 'function') {\n callback(res);\n }\n resolve(res);\n }).fail((err) => {\n if (typeof callback === 'function') {\n callback(null, err);\n }\n this.handleError(err);\n reject(new Error(\"Failed to fetch invoice payments\"));\n });\n });\n },\n unlinkPayableInvoice: function (invoice, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'payableinvoices',\n value: invoice.id\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n invoice.set('externalObject', null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(false, err);\n });\n },\n pushReceivableInvoice: function (invoice, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'receivableinvoices',\n value: invoice.id\n },\n {\n endpoint: 'push'\n }\n ]),\n isAPIv2: true\n }).post().done((res) => {\n invoice.set('externalObject', res, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(invoice);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(null, err);\n });\n },\n pullReceivableInvoicePayments: function (invoice, callback) {\n return new Promise((resolve, reject) => {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'receivableinvoicepayments',\n value: invoice.id\n }\n ]),\n isAPIv2: true\n }).get().done((res) => {\n if (typeof callback === 'function') {\n callback(res);\n }\n resolve(res);\n }).fail((err) => {\n if (typeof callback === 'function') {\n callback(null, err);\n }\n this.handleError(err);\n reject(new Error(\"Failed to fetch invoice payments\"));\n });\n });\n },\n unlinkReceivableInvoice: function (invoice, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'erp'\n },\n {\n endpoint: 'receivableinvoices',\n value: invoice.id\n },\n {\n endpoint: 'unlink'\n }\n ]),\n isAPIv2: true,\n }).post().done(() => {\n invoice.set('externalObject', null, {\n silent: true\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((err) => {\n this.handleError(err);\n callback(false, err);\n });\n },\n getProvider: function () {\n return PJQ.constants.integrations.providers[this.get('name')];\n },\n getShortName: function () {\n let pvd = this.getProvider();\n if (pvd != null) {\n return _.size(pvd.shortName) > 0 ? pvd.shortName : '';\n }\n return '';\n },\n getBudgetColumns: function () {\n let pvd = this.getProvider();\n if (pvd != null) {\n return pvd.budgetColumns != null ? pvd.budgetColumns : [];\n }\n return [];\n },\n hasAvailableAction: function (action) {\n let pvd = this.getProvider();\n if (pvd != null) {\n return pvd.availableActions != null && pvd.availableActions.indexOf(action) !== -1;\n }\n return false;\n },\n authorize: function () {\n return new Promise((resolve, reject) => {\n let type = this.get('name'),\n provider = PJQ.constants.integrations.providers[type];\n if (provider && provider.isAgave) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'integrations'\n },\n {\n endpoint: 'agave'\n },\n {\n endpoint: 'linktoken'\n }\n ], [\n {\n parameter: 'name',\n value: type\n }\n ]),\n isAPIv2: true\n }).get().done((response) => {\n if (_.size(response.linkToken) > 0) {\n window.AgaveLink.openLink({\n linkToken: response.linkToken,\n sourceSystem: provider.agaveSourceSystem,\n showSandboxSourceSystems: true,\n onSuccess: (publicToken) => {\n this.get('settings').publicToken = publicToken;\n resolve(true);\n }\n });\n } else {\n reject(new Error('Failed to get Agave link token'));\n }\n }).fail(function (err) {\n reject(err)\n });\n return;\n }\n\n switch (type) {\n case PJQ.constants.integrations.providers.ACUMATICA.name:\n case PJQ.constants.integrations.providers.SAGE100.name:\n case PJQ.constants.integrations.providers.SAGE300.name:\n case PJQ.constants.integrations.providers.INTACCT.name:\n resolve(true);\n break;\n case PJQ.constants.integrations.providers.QBO.name:\n default:\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'integrations'\n },\n {\n endpoint: 'authorize'\n }\n ], [\n {\n parameter: 'name',\n value: type\n }\n ]),\n isAPIv2: true\n }).get().done((response) => {\n document.location = response.url;\n resolve(true);\n }).fail(function (res) {\n reject(res);\n });\n break;\n }\n });\n },\n handleError: function (res) {\n // if this function returns true, the error was handled\n // if it returns false, the error was not handled and the caller is expected to handle it\n // this is used to handle errors that are common to all ERP integrations - i.e. authentication for QBO\n if (res && res.responseJSON && res.responseJSON.type === \"APP_NOT_AUTHORIZED\" && this.get('name') === PJQ.constants.integrations.providers.QBO.name) {\n new PJQ.views.modals.YesNo({\n header: \"Authorize QuickBooks Online\",\n body: \"Authorization for QuickBooks Online has expired. You must re-authorize to continue to use the integration features. Would you like to re-authorize now?\",\n onYes: () => {\n this.authorize().catch((err) => {\n\n });\n }\n });\n return true;\n }\n return false;\n }\n});\n\n// Collections\nPJQ.integrations.collections.Integrations = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.integrations.models.Integration,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'integrations'\n }\n ]);\n }\n});\n\n// Models\nPJQ.integrations.models.LinkERPProjectModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-erp-project-link'),\n onCancel: _.noop,\n onSave: _.noop,\n minWidth: '700px'\n },\n events: {\n \"change .select-project\": \"selectProject\",\n \"click .btn-cancel\": \"cancel\",\n \"click .btn-save\": \"save\"\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\n this.provider = this.erpIntegration.getProvider();\n\n this.projects = await this.erpIntegration.fetchUnlinkedProjects();\n\n this.isFetched = true;\n\n this.render();\n },\n renderData: function () {\n return {\n isFetched: this.isFetched,\n provider: this.provider\n }\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n let columns = [\n {\n \"data\": \"id\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": (data, type, row) => {\n let isSelected = this.selectedProject && this.selectedProject.id === row.id;\n return ('
');\n }\n },\n {\n \"data\": \"name\",\n \"title\": \"Name\",\n \"render\": (data, type, row) => {\n return row.data.name ?? \"\";\n }\n },\n {\n \"data\": \"city\",\n \"title\": \"City\",\n \"render\": (data, type, row) => {\n return row.data.city ?? \"\";\n }\n },\n {\n \"data\": \"state\",\n \"title\": \"State\",\n \"render\": (data, type, row) => {\n return row.data.state ?? \"\";\n }\n }];\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.projects-data-table'),\n data: this.projects,\n deferRender: true,\n order: [1, 'asc'],\n columns: columns,\n language: {\n emptyTable: \"No projects were found\",\n zeroRecords: \"No projects match the search criteria\"\n }\n });\n },\n selectProject: function (e) {\n let target = $(e.currentTarget),\n isSelected = target.prop('checked');\n this.$('.select-project').not(target).prop('checked', false);\n if (isSelected) {\n this.selectedProject = this.dataTable.dataTable.row(target.parents('tr')).data();\n } else {\n this.selectedProject = null;\n }\n this.$('.btn-save').prop('disabled', this.selectedProject == null)\n },\n save: function () {\n if (this.options.project != null && this.selectedProject != null && _.size(this.selectedProject.externalId) > 0) {\n this.erpIntegration.linkProject(this.options.project, this.selectedProject.externalId, () => {\n PJQ.notifications.notify.successNotify({\n message: 'Project linked to ERP'\n });\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.options.project);\n }\n });\n }\n\n this.removeModal();\n },\n cancel: function () {\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel();\n }\n }\n});","PJQ.integrations.views.IntegrationsList = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'integrations')\n },\n events: {\n 'click .btn-settings': 'integrationClicked',\n 'click .btn-connect': 'integrationClicked',\n 'click .btn-disconnect': 'disconnectIntegration'\n },\n beforeFirstRender: function () {\n this.isFetched = false;\n PJQ.app.session.fetchIntegrations(_.bind(function (integrations) {\n this.integrations = integrations;\n this.isFetched = true;\n this.render();\n }, this))\n },\n renderData: function () {\n return {\n integrations: this.integrations,\n getIntegration: this.getIntegration\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n if (this.options.initOptions != null && _.size(this.options.initOptions.integrationName) > 0) {\n this.handleIntegrationType(this.options.initOptions.integrationName);\n this.options.initOptions = null;\n }\n },\n getIntegration: function (type) {\n if (this.integrations == null) {\n return null;\n }\n\n return this.integrations.find((ig) => {\n return ig.get('name') === type.toUpperCase()\n });\n },\n integrationClicked: function (e) {\n let $target = $(e.currentTarget),\n integrationType = $target.data('name');\n this.handleIntegrationType(integrationType);\n },\n handleIntegrationType: function (type, integration) {\n if (integration == null) {\n integration = this.getIntegration(type);\n }\n let enabled = integration != null;\n if (!enabled) {\n this.authorizeIntegration(type);\n return;\n }\n\n switch (type.toUpperCase()) {\n case PJQ.constants.integrations.providers.QBO.name:\n return new PJQ.integrations.views.QBOIntegrationSettings({\n model: integration,\n initOptions: this.options.initOptions\n });\n case PJQ.constants.integrations.providers.SAGE100.name:\n case PJQ.constants.integrations.providers.SAGE300.name:\n return new PJQ.integrations.views.SageHH2IntegrationSettings({\n model: integration,\n initOptions: this.options.initOptions,\n onSave: _.bind(function (integration) {\n this.integrations.add(integration);\n PJQ.app.session.erpIntegration = integration;\n PJQ.app.navigator.refreshCommands();\n this.render();\n }, this)\n });\n case PJQ.constants.integrations.providers.ACUMATICA.name:\n return new PJQ.integrations.views.AcumaticaIntegrationSettings({\n model: integration,\n initOptions: this.options.initOptions,\n onSave: _.bind(function (integration) {\n if (integration.id > 0) {\n this.integrations.add(integration);\n PJQ.app.session.erpIntegration = integration;\n PJQ.app.navigator.refreshCommands();\n }\n this.render();\n }, this)\n });\n case PJQ.constants.integrations.providers.INTACCT.name:\n return new PJQ.integrations.views.SageIntacctIntegrationSettings({\n model: integration,\n initOptions: this.options.initOptions,\n onSave: _.bind(function (integration) {\n this.integrations.add(integration);\n PJQ.app.session.erpIntegration = integration;\n PJQ.app.navigator.refreshCommands();\n this.render();\n }, this)\n });\n\n // case PJQ.constants.integrations.providers.VIEWPOINT_VISTA.name:\n // return new PJQ.integrations.views.VistaIntegrationSettings({\n // model: integration,\n // initOptions: this.options.initOptions,\n // onSave: _.bind(function (integration) {\n // this.integrations.add(integration);\n // PJQ.app.session.erpIntegration = integration;\n // PJQ.app.navigator.refreshCommands();\n // this.render();\n // }, this)\n // });\n }\n },\n authorizeIntegration: function (type) {\n let integration = this.getIntegration(type);\n if (integration == null) {\n integration = new PJQ.integrations.models.Integration({\n name: type,\n erp: true\n });\n }\n\n integration.authorize().then((authorized) => {\n if (authorized) {\n this.handleIntegrationType(type, integration);\n }\n }).catch((err) => {\n\n });\n },\n disconnectIntegration: function (e) {\n let $target = $(e.currentTarget),\n name = $target.data('name'),\n integration = this.integrations.findWhere({\n name: name\n }),\n displayName = PJQ.constants.integrations.providers[integration.get('name')].displayName;\n new PJQ.views.modals.YesNo({\n header: \"Disconnect Integration?\",\n body: \"Are you sure you want to disconnect your \" + displayName + \" integration? This will unlink all synced items and cannot be undone. \",\n onYes: _.bind(function () {\n if (integration != null) {\n integration.destroy({\n success: _.bind(function () {\n PJQ.app.session.erpIntegration = new PJQ.integrations.models.Integration({}, {\n erp: true\n });\n PJQ.app.navigator.refreshCommands();\n PJQ.notifications.notify.successNotify({\n message: 'Integration successfully disconnected'\n });\n this.render();\n }, this)\n });\n }\n }, this)\n });\n }\n});\n\nPJQ.integrations.views.QBOIntegrationSettings = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-integration-settings-qbo'),\n minWidth: 500\n },\n events: {\n 'change .input-projects': 'render',\n 'change .input-import-single-item': 'render',\n 'change .input-export-single-item': 'render',\n 'change .input-sync-costs': 'render',\n 'click .btn-re-auth': 'reAuthorize',\n 'click .btn-save': 'save',\n 'click .btn-cancel': 'cancel',\n 'click .btn-unlink': 'unlink'\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n this.costCodes = await PJQ.app.session.fetchCostCodes();\n this.costTypes = await PJQ.app.session.fetchCostTypes();\n this.isFetched = true;\n this.render();\n },\n renderData: function () {\n return {\n integrationName: PJQ.constants.integrations.providers[this.model.get('name')].displayName,\n model: this.model,\n costCodes: this.costCodes,\n costTypes: this.costTypes,\n settings: this.model.get('settings'),\n isFetched: this.isFetched,\n newAuth: this.options.initOptions && this.options.initOptions.authorized\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n if (this.options.initOptions && this.options.initOptions.authorized) {\n PJQ.notifications.notify.successNotify({\n message: 'QuickBooks Online Integration successfully authorized'\n });\n }\n\n new PJQ.Binder(this.$('.modal-body'), this.model.get('settings'), {\n setDefaultValues: true,\n watchElements: [\n 'input'\n ]\n });\n\n let incomeAccount = this.model.getSetting('incomeAccount');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-income-account'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Income Account ' + PJQ.constants.markup.requiredAst,\n title: 'The income account used when pushing Cost Codes to QuickBooks Online Products',\n showSaveButton: false,\n defaultDisplayValue: incomeAccount != null ? incomeAccount.name : null,\n value: incomeAccount != null ? incomeAccount.id : null,\n getChoices: (cb) => {\n this.fetchAccounts(() => {\n cb(_.sortBy(_.map(this.incomeAccounts, function (account) {\n return {\n id: account.id,\n name: account.name\n };\n }), (account) => {\n return account.name;\n }));\n });\n },\n onChange: (value) => {\n let account = this.incomeAccounts.find((item) => item.id === value);\n if (account != null) {\n this.model.setSetting('incomeAccount', account);\n }\n }\n });\n\n let expenseAccount = this.model.getSetting('expenseAccount');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-expense-account'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Expense Account ' + PJQ.constants.markup.requiredAst,\n title: 'The expense account used when pushing Cost Codes to QuickBooks Online Products',\n showSaveButton: false,\n defaultDisplayValue: expenseAccount != null ? expenseAccount.name : null,\n value: expenseAccount != null ? expenseAccount.id : null,\n getChoices: (cb) => {\n this.fetchAccounts(() => {\n cb(_.sortBy(_.map(this.expenseAccounts, function (account) {\n return {\n id: account.id,\n name: account.name\n };\n }), (account) => {\n return account.name;\n }));\n });\n },\n onChange: (value) => {\n let account = this.expenseAccounts.find((item) => item.id === value);\n if (account != null) {\n this.model.setSetting('expenseAccount', account);\n }\n }\n });\n\n let paymentAccount = this.model.getSetting('paymentAccount');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-payment-account'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Payment Account ' + PJQ.constants.markup.requiredAst,\n title: 'The payment account used when pushing Direct Costs to QuickBooks Online Purchases',\n showSaveButton: false,\n defaultDisplayValue: paymentAccount != null ? paymentAccount.name : null,\n value: paymentAccount != null ? paymentAccount.id : null,\n getChoices: (cb) => {\n this.fetchAccounts(() => {\n cb(_.sortBy(_.map(this.paymentAccounts, function (account) {\n return {\n id: account.id,\n name: account.name\n };\n }), (account) => {\n return account.name;\n }));\n });\n },\n onChange: (value) => {\n let account = this.paymentAccounts.find((item) => item.id === value);\n if (account != null) {\n this.model.setSetting('paymentAccount', account);\n }\n }\n });\n\n let incomeDefaultItem = this.model.getSetting('incomeDefaultItem');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-income-default-item'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Default Export Income Product ' + PJQ.constants.markup.requiredAst,\n title: 'The product used when syncing Contracts, Contract Change Orders, and Receivable Invoices to QuickBooks Online',\n showSaveButton: false,\n defaultDisplayValue: incomeDefaultItem != null ? (incomeDefaultItem.name + ' ' + incomeDefaultItem.description) : null,\n value: incomeDefaultItem != null ? incomeDefaultItem.id : null,\n getChoices: (cb) => {\n this.fetchProducts(() => {\n cb(_.sortBy(_.map(_.filter(this.products, function (product) {\n return product.forIncome;\n }), function (product) {\n return {\n id: product.id,\n name: product.name + ' ' + product.description\n };\n }), (product) => {\n return product.name;\n }));\n });\n },\n onChange: (value) => {\n let product = this.products.find((item) => item.id === value);\n if (product != null) {\n this.model.setSetting('incomeDefaultItem', product);\n }\n }\n });\n\n let expenseDefaultItem = this.model.getSetting('expenseDefaultItem');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-expense-default-item'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Default Export Expense Product ' + PJQ.constants.markup.requiredAst,\n title: 'The product used when syncing Commitments, Commitment Change Orders, and Payable Invoices to QuickBooks Online',\n showSaveButton: false,\n defaultDisplayValue: expenseDefaultItem != null ? (expenseDefaultItem.name + ' ' + expenseDefaultItem.description) : null,\n value: expenseDefaultItem != null ? expenseDefaultItem.id : null,\n getChoices: (cb) => {\n this.fetchProducts(() => {\n cb(_.sortBy(_.map(_.filter(this.products, function (product) {\n return product.forExpense;\n }), function (product) {\n return {\n id: product.id,\n name: product.name + ' ' + product.description\n };\n }), (product) => {\n return product.name;\n }));\n });\n },\n onChange: (value) => {\n let product = this.products.find((item) => item.id === value);\n if (product != null) {\n this.model.setSetting('expenseDefaultItem', product);\n }\n }\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-cost-default-group'),\n isLiveSearch: true,\n isIntChoices: true,\n choices: _.map(this.costCodes.models.sort(function (a, b) {\n return PJQ.helpers.sortHelpers.sortAlphaNum(a.get('code'), b.get('code'));\n }), function (costCode) {\n return {\n id: costCode.id,\n name: costCode.getDisplayName()\n };\n }),\n defaultValue: this.model.get('settings').costDefaultGroupId,\n onChange: _.bind(function (value) {\n this.model.get('settings').costDefaultGroupId = value;\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-cost-default-cost-type'),\n isLiveSearch: true,\n isIntChoices: true,\n choices: _.map(this.costTypes.models, function (costType) {\n return {\n id: costType.id,\n name: costType.get('name')\n };\n }),\n defaultValue: this.model.get('settings').costDefaultCostTypeId,\n onChange: _.bind(function (value) {\n this.model.get('settings').costDefaultCostTypeId = value;\n }, this)\n });\n },\n fetchAccounts: function (callback) {\n if (this.expenseAccounts != null && this.incomeAccounts != null && this.paymentAccounts != null) {\n if (typeof callback === 'function') {\n callback();\n }\n return;\n }\n\n this.model.fetchSettingsData(null, {\n type: 'accounts'\n }).then((data) => {\n if (data != null) {\n this.expenseAccounts = data.expenseAccounts ?? [];\n this.incomeAccounts = data.incomeAccounts ?? [];\n this.paymentAccounts = data.paymentAccounts ?? [];\n }\n if (typeof callback === 'function') {\n callback();\n }\n }).catch((err) => {\n\n });\n },\n fetchProducts: function (callback) {\n if (this.products != null) {\n if (typeof callback === 'function') {\n callback();\n }\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n if (data != null) {\n this.products = data.products ?? [];\n }\n if (typeof callback === 'function') {\n callback();\n }\n }, {\n type: 'products'\n });\n },\n reAuthorize: function () {\n new PJQ.views.modals.YesNo({\n header: \"Re-Authorize QuickBooks Online Integration?\",\n body: \"Are you sure you want to re-authorize your QuickBooks Online integration? This is usually only necessary if you have made changes to the user you used during setup, or if you are experiencing issues with your integration.\",\n onYes: () => {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.model.authorize().then((authorized) => {\n if (authorized) {\n this.render();\n }\n }).catch((err) => {\n loader.remove();\n });\n }\n });\n },\n validate: function () {\n let settings = this.model.get('settings'),\n valid = true;\n\n if (settings.incomeAccount == null) {\n valid = false;\n this.$('.label-income-account').addClass('text-danger');\n }\n\n if (settings.expenseAccount == null) {\n valid = false;\n this.$('.label-expense-account').addClass('text-danger');\n }\n\n if (settings.paymentAccount == null) {\n valid = false;\n this.$('.label-payment-account').addClass('text-danger');\n }\n\n if (settings.exportSingleItem) {\n if (settings.incomeDefaultItem == null) {\n valid = false;\n this.$('.label-income-default-item').addClass('text-danger');\n }\n\n if (settings.expenseDefaultItem == null) {\n valid = false;\n this.$('.label-expense-default-item').addClass('text-danger');\n }\n }\n\n if (settings.syncProjects && settings.syncCosts) {\n if (settings.importSingleItem && settings.costDefaultGroupId == null) {\n valid = false;\n this.$('.label-cost-default-group').addClass('text-danger');\n }\n\n if (settings.costDefaultCostTypeId == null) {\n valid = false;\n this.$('.label-cost-default-cost-type').addClass('text-danger');\n }\n }\n\n return valid;\n },\n cancel: function () {\n if (this.model && this.model.hasChanged()) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.save();\n }, this),\n onDontSave: _.bind(function () {\n this.model.restore();\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel(this.model);\n }\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n },\n save: function () {\n if (this.validate()) {\n this.model.save(null, {\n success: _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n this.removeModal();\n }, this)\n })\n }\n },\n setSettings: function (callback) {\n if (typeof callback === 'function') {\n callback(settings);\n }\n },\n});\n\nPJQ.integrations.views.SageHH2IntegrationSettings = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-integration-settings-sage-hh2'),\n minWidth: 500,\n onSave: null\n },\n events: {\n 'click .btn-save': 'save',\n 'click .btn-cancel': 'cancel',\n 'click .btn-unlink': 'unlink'\n },\n beforeModalCreated: function () {\n this.isFetched = false;\n PJQ.app.session.fetchCostCodes(_.bind(function (costCodes) {\n this.costCodes = costCodes;\n PJQ.app.session.fetchCostTypes(_.bind(function (ct) {\n this.costTypes = ct;\n this.isFetched = true;\n this.render();\n }, this));\n }, this));\n },\n renderData: function () {\n return {\n provider: PJQ.constants.integrations.providers[this.model.get('name')],\n model: this.model,\n settings: this.model.get('settings'),\n isFetched: this.isFetched\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n new PJQ.Binder(this.$('.modal-body'), this.model.get('settings'), {\n setDefaultValues: true,\n watchElements: [\n 'input'\n ],\n afterChange: _.bind(function () {\n this.renderAlerts();\n }, this)\n });\n\n this.renderAlerts();\n },\n renderAlerts: function () {\n\n },\n validate: function () {\n let settings = this.model.get('settings'),\n valid = true;\n return valid;\n },\n cancel: function () {\n if (this.model && this.model.hasChanged()) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.save();\n }, this),\n onDontSave: _.bind(function () {\n this.model.restore();\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel(this.model);\n }\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n },\n save: function () {\n if (this.validate()) {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.model.save(null, {\n success: () => {\n loader.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n\n this.removeModal();\n }\n })\n }\n }\n});\n\nPJQ.integrations.views.AcumaticaIntegrationSettings = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-integration-settings-acumatica'),\n minWidth: 500,\n onSave: null\n },\n events: {\n 'click .btn-save, .btn-authorize': 'save',\n 'click .btn-cancel': 'cancel',\n 'click .btn-unlink': 'unlink',\n 'change .input-export-single-item': 'render',\n 'click .btn-edit-auth': 'editAuthorization',\n 'click .btn-cancel-auth': 'cancelEditingAuthorization'\n },\n beforeModalCreated: function () {\n this.settingsData = {};\n\n this.isFetched = false;\n PJQ.app.session.fetchCostCodes((costCodes) => {\n this.costCodes = costCodes;\n PJQ.app.session.fetchCostTypes((ct) => {\n this.costTypes = ct;\n this.options.isAuthorized = true;\n this.options.editingAuthorization = false;\n\n if (this.model.id == null) {\n this.options.editingAuthorization = true;\n this.options.isAuthorized = false;\n }\n\n if (null == this.model.getSetting(PJQ.constants.integrations.settings.SYNC_PRIME_CONTRACT_CHANGE_ORDERS)) {\n this.model.setSetting(PJQ.constants.integrations.settings.SYNC_PRIME_CONTRACT_CHANGE_ORDERS, this.model.getSetting(PJQ.constants.integrations.settings.SYNC_PRIME_CONTRACTS));\n }\n\n this.isFetched = true;\n this.render();\n });\n });\n },\n renderData: function () {\n return {\n provider: PJQ.constants.integrations.providers[this.model.get('name')],\n model: this.model,\n settings: this.model.get('settings'),\n isFetched: this.isFetched,\n editingAuthorization: this.options.editingAuthorization,\n isAuthorized: this.options.isAuthorized\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n new PJQ.Binder(this.$('.modal-body'), this.model.get('settings'), {\n setDefaultValues: true,\n watchElements: [\n 'input'\n ],\n afterChange: () => {\n this.renderAlerts();\n }\n });\n\n let version = this.model.get('settings').version != null ? this.model.get('settings').version : null;\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-api-version'),\n defaultValue: version ? version : '',\n onChange: (value) => {\n this.model.get('settings').version = value;\n this.renderCustomizationLink();\n }\n });\n this.renderCustomizationLink();\n\n let defaultIncomeAccountGroup = this.model.getSetting('defaultIncomeAccountGroup');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-income-account'),\n isFormInput: true,\n canEdit: !this.options.editingAuthorization,\n editButtonText: \"Change\",\n label: 'Default Income Account Group ' + PJQ.constants.markup.requiredAst,\n title: 'The account group used when syncing Contracts to Acumatica Project Revenue Budgets',\n showSaveButton: false,\n defaultDisplayValue: defaultIncomeAccountGroup != null ? defaultIncomeAccountGroup.accountGroupID : null,\n value: defaultIncomeAccountGroup != null ? defaultIncomeAccountGroup.id : null,\n getChoices: (cb) => {\n let fnCallback = () => {\n let incomeAccounts = _.filter(this.settingsData.accountGroups, function (account) {\n return account.type.toLowerCase() === \"income\";\n })\n cb(_.map(incomeAccounts, function (account) {\n return {\n id: account.id,\n name: account.accountGroupID\n };\n }));\n };\n if (this.settingsData.accountGroups != null) {\n fnCallback();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnCallback();\n }, {\n type: 'account_groups'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.accountGroups.find((item) => item.id === value);\n if (item != null) {\n this.model.setSetting('defaultIncomeAccountGroup', item);\n }\n }\n });\n\n let defaultSalesSubaccount = this.model.getSetting('defaultSalesSubaccount');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-default-sales-subaccount'),\n isFormInput: true,\n canEdit: !this.options.editingAuthorization,\n editButtonText: \"Change\",\n label: 'Default Sales Subaccount',\n title: 'The subaccount used when syncing projects to Acumatica',\n showSaveButton: false,\n defaultDisplayValue: defaultSalesSubaccount != null ? defaultSalesSubaccount.subaccountID : null,\n value: defaultSalesSubaccount != null ? defaultSalesSubaccount.id : null,\n getChoices: (cb) => {\n let fnCallback = () => {\n let subaccounts = _.filter(this.settingsData.subaccounts, function (subaccount) {\n return true;\n })\n cb(_.map(subaccounts, function (subaccount) {\n return {\n id: subaccount.id,\n name: subaccount.subaccountID\n };\n }));\n };\n if (this.settingsData.subaccounts != null) {\n fnCallback();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnCallback();\n }, {\n type: 'sub_accounts'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.subaccounts.find((item) => item.id === value);\n if (item != null) {\n this.model.setSetting('defaultSalesSubaccount', item);\n }\n }\n });\n\n let defaultCreditTerms = this.model.getSetting('defaultCreditTerms');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-default-credit-terms'),\n isFormInput: true,\n canEdit: !this.options.editingAuthorization,\n editButtonText: \"Change\",\n label: 'Default Credit Terms ' + PJQ.constants.markup.requiredAst,\n title: 'The Credit Terms used when syncing Commitments to Acumatica Subcontracts and Purchase Orders',\n showSaveButton: false,\n defaultDisplayValue: defaultCreditTerms != null ? defaultCreditTerms.termsID : null,\n value: defaultCreditTerms != null ? defaultCreditTerms.id : null,\n getChoices: (cb) => {\n let fnCallback = () => {\n cb(_.map(this.settingsData.creditTerms, function (cls) {\n return {\n id: cls.id,\n name: cls.termsID\n };\n }));\n };\n if (this.settingsData.creditTerms != null) {\n fnCallback();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnCallback();\n }, {\n type: 'credit_terms'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.creditTerms.find((item) => item.id === value);\n if (item != null) {\n this.model.setSetting('defaultCreditTerms', item);\n }\n }\n });\n\n let defaultNonStockItem = this.model.getSetting('defaultNonStockItem');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-default-nonstock'),\n isFormInput: true,\n canEdit: !this.options.editingAuthorization,\n editButtonText: \"Change\",\n label: 'Default Non-Stock Item ' + PJQ.constants.markup.requiredAst,\n title: 'The Non-Stock Item used when syncing Commitments to Acumatica Subcontracts and Purchase Orders',\n showSaveButton: false,\n defaultDisplayValue: defaultNonStockItem != null ? defaultNonStockItem.inventoryID : null,\n value: defaultNonStockItem != null ? defaultNonStockItem.id : null,\n getChoices: (cb) => {\n let fnCallback = () => {\n cb(_.map(this.settingsData.nonStockItems, function (item) {\n return {\n id: item.id,\n name: item.inventoryID\n };\n }));\n };\n if (this.settingsData.nonStockItems != null) {\n fnCallback();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnCallback();\n }, {\n type: 'non_stock_items'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.nonStockItems.find((item) => item.id === value);\n if (item != null) {\n this.model.setSetting('defaultNonStockItem', item);\n }\n }\n });\n\n let primeContractCOClass = this.model.getSetting('primeContractCOClass');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-pcco-class'),\n isFormInput: true,\n canEdit: !this.options.editingAuthorization,\n editButtonText: \"Change\",\n label: 'Default Contract CO Class ' + PJQ.constants.markup.requiredAst,\n showSaveButton: false,\n defaultDisplayValue: primeContractCOClass != null ? primeContractCOClass.classID : null,\n value: primeContractCOClass != null ? primeContractCOClass.id : null,\n getChoices: (cb) => {\n let fnCallback = () => {\n cb(_.map(this.settingsData.primeContractCOClasses, function (cls) {\n return {\n id: cls.id,\n name: cls.classID\n };\n }));\n };\n if (this.settingsData.primeContractCOClasses != null) {\n fnCallback();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnCallback();\n }, {\n type: 'change_order_class'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.primeContractCOClasses.find((item) => item.id === value);\n if (item != null) {\n this.model.setSetting('primeContractCOClass', item);\n }\n }\n });\n\n let commitmentCOClass = this.model.getSetting('commitmentCOClass');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-cco-class'),\n isFormInput: true,\n canEdit: !this.options.editingAuthorization,\n editButtonText: \"Change\",\n label: 'Default Commitment CO Class ' + PJQ.constants.markup.requiredAst,\n showSaveButton: false,\n defaultDisplayValue: commitmentCOClass != null ? commitmentCOClass.classID : null,\n value: commitmentCOClass != null ? commitmentCOClass.id : null,\n getChoices: (cb) => {\n let fnCallback = () => {\n cb(_.map(this.settingsData.commitmentCOClasses, function (cls) {\n return {\n id: cls.id,\n name: cls.classID\n };\n }));\n };\n if (this.settingsData.commitmentCOClasses != null) {\n fnCallback();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnCallback();\n }, {\n type: 'change_order_class'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.commitmentCOClasses.find((item) => item.id === value);\n if (item != null) {\n this.model.setSetting('commitmentCOClass', item);\n }\n }\n });\n\n let vendorClass = this.model.getSetting('vendorClass');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-vendor-class'),\n isFormInput: true,\n canEdit: !this.options.editingAuthorization,\n editButtonText: \"Change\",\n label: 'Default Vendor Class ' + PJQ.constants.markup.requiredAst,\n showSaveButton: false,\n defaultDisplayValue: vendorClass != null ? vendorClass.classID : null,\n value: vendorClass != null ? vendorClass.id : null,\n getChoices: (cb) => {\n let fnCallback = () => {\n cb(_.map(this.settingsData.vendorClasses, function (cls) {\n return {\n id: cls.id,\n name: cls.classID\n };\n }));\n };\n if (this.settingsData.vendorClasses != null) {\n fnCallback();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnCallback();\n }, {\n type: 'vendor_class'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.vendorClasses.find((item) => item.id === value);\n if (item != null) {\n this.model.setSetting('vendorClass', item);\n }\n }\n });\n\n this.renderAlerts();\n },\n renderCustomizationLink: function () {\n let ver = this.model.get('settings').version,\n fileName = '',\n $pkg = this.$('.customization-package');\n if (ver === '23.200.001') {\n fileName = 'JobPlanner2023R2';\n } else if (ver === '22.200.001') {\n fileName = 'JobPlanner2022R1';\n } else {\n $pkg.empty();\n return;\n }\n $pkg.html('Download Customization Package');\n },\n editAuthorization: function () {\n this.options.editingAuthorization = true;\n this.render();\n },\n cancelEditingAuthorization: function () {\n this.options.editingAuthorization = false;\n this.render();\n },\n renderAlerts: function () {\n\n },\n validate: function () {\n let settings = this.model.get('settings'),\n valid = true;\n\n\n if (settings.defaultIncomeAccountGroup == null && !this.options.editingAuthorization) {\n valid = false;\n this.$('.edit-income-account .form-group > label').addClass('text-danger');\n }\n\n if (settings.defaultCreditTerms == null && !this.options.editingAuthorization) {\n valid = false;\n this.$('.edit-default-credit-terms .form-group > label').addClass('text-danger');\n }\n\n if (settings.defaultNonStockItem == null && !this.options.editingAuthorization) {\n valid = false;\n this.$('.edit-default-nonstock .form-group > label').addClass('text-danger');\n }\n\n if (settings.primeContractCOClass == null && !this.options.editingAuthorization) {\n valid = false;\n this.$('.edit-pcco-class .form-group > label').addClass('text-danger');\n }\n\n if (settings.commitmentCOClass == null && !this.options.editingAuthorization) {\n valid = false;\n this.$('.edit-cco-class .form-group > label').addClass('text-danger');\n }\n\n\n return valid;\n },\n cancel: function () {\n if (this.model && this.model.hasChanged()) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.save();\n }, this),\n onDontSave: _.bind(function () {\n this.model.restore();\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel(this.model);\n }\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n },\n save: function () {\n if (this.validate()) {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.model.save(null, {\n success: () => {\n loader.remove();\n\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n if (!this.options.editingAuthorization) {\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n this.removeModal();\n } else {\n PJQ.notifications.notify.successNotify({\n message: 'Successfully Authorized'\n });\n this.options.editingAuthorization = false;\n this.options.isAuthorized = true;\n this.render();\n }\n },\n error: () => {\n loader.remove();\n this.errorAlert = new PJQ.Alert(this.$('.error-container'), {\n type: 'danger',\n text: 'Unable to validate the integration. Double check your information is correct.'\n });\n }\n })\n }\n }\n});\n\nPJQ.integrations.views.VistaIntegrationSettings = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-integration-settings-viewpoint-vista'),\n minWidth: 500,\n onSave: null\n },\n events: {\n 'click .btn-save': 'save',\n 'click .btn-cancel': 'cancel',\n 'click .btn-unlink': 'unlink'\n },\n beforeModalCreated: function () {\n this.isFetched = false;\n PJQ.app.session.fetchCostCodes(_.bind(function (costCodes) {\n this.costCodes = costCodes;\n PJQ.app.session.fetchCostTypes(_.bind(function (ct) {\n this.costTypes = ct;\n this.isFetched = true;\n this.render();\n }, this));\n }, this));\n },\n renderData: function () {\n return {\n provider: PJQ.constants.integrations.providers[this.model.get('name')],\n model: this.model,\n settings: this.model.get('settings'),\n isFetched: this.isFetched\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n new PJQ.Binder(this.$('.modal-body'), this.model.get('settings'), {\n setDefaultValues: true,\n watchElements: [\n 'input'\n ],\n afterChange: _.bind(function () {\n this.renderAlerts();\n }, this)\n });\n\n this.renderAlerts();\n },\n renderAlerts: function () {\n\n },\n validate: function () {\n let settings = this.model.get('settings'),\n valid = true;\n return valid;\n },\n cancel: function () {\n if (this.model && this.model.hasChanged()) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.save();\n }, this),\n onDontSave: _.bind(function () {\n this.model.restore();\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel(this.model);\n }\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n },\n save: function () {\n if (this.validate()) {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.model.save(null, {\n success: () => {\n loader.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n\n this.removeModal();\n }\n })\n }\n }\n});\n\nPJQ.integrations.views.SageIntacctIntegrationSettings = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-integration-settings-sage-intacct'),\n minWidth: 500,\n onSave: null\n },\n events: {\n 'click .btn-save, .btn-authorize': 'save',\n 'click .btn-cancel': 'cancel',\n 'click .btn-unlink': 'unlink',\n 'click .btn-edit-auth': 'editAuthorization',\n 'click .btn-cancel-auth': 'cancelEditingAuthorization'\n },\n beforeModalCreated: function () {\n this.settingsData = {};\n\n this.isFetched = false;\n PJQ.app.session.fetchCostCodes(_.bind(function (costCodes) {\n this.costCodes = costCodes;\n PJQ.app.session.fetchCostTypes(_.bind(function (ct) {\n this.costTypes = ct;\n this.options.isAuthorized = true;\n this.options.editingAuthorization = false;\n\n if (this.model.id == null) {\n this.options.editingAuthorization = true;\n this.options.isAuthorized = false;\n }\n\n if (null == this.model.getSetting(PJQ.constants.integrations.settings.SYNC_PRIME_CONTRACT_CHANGE_ORDERS)) {\n this.model.setSetting(PJQ.constants.integrations.settings.SYNC_PRIME_CONTRACT_CHANGE_ORDERS, this.model.getSetting(PJQ.constants.integrations.settings.SYNC_PRIME_CONTRACTS));\n }\n\n this.isFetched = true;\n this.render();\n }, this));\n }, this));\n },\n renderData: function () {\n return {\n provider: PJQ.constants.integrations.providers[this.model.get('name')],\n model: this.model,\n settings: this.model.get('settings'),\n isFetched: this.isFetched,\n editingAuthorization: this.options.editingAuthorization,\n isAuthorized: this.options.isAuthorized\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n new PJQ.Binder(this.$('.modal-body'), this.model.get('settings'), {\n setDefaultValues: true,\n watchElements: [\n 'input'\n ],\n afterChange: _.bind(function () {\n }, this)\n });\n\n let fnGetAccounts = (cb, options) => {\n let accounts = _.filter(this.settingsData.glAccounts, function (glAccount) {\n return true;\n })\n cb(_.map(_.filter(accounts, (account) => {\n if (!options || !options.normalBalance) {\n return true;\n }\n\n return account.normalBalance === options.normalBalance;\n }), function (account) {\n return {\n id: account.accountNo,\n name: `${account.accountNo} - ${account.title}`\n };\n }));\n },\n defaultPayableAccount = this.model.getSetting('defaultPayableAccount'),\n defaultReceivableAccount = this.model.getSetting('defaultReceivableAccount');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-default-receivable-account'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Default Receivable Account ' + PJQ.constants.markup.requiredAst,\n title: 'The default account used when pushing Contracts to Sage Intacct',\n showSaveButton: false,\n selectPickerOptions: {\n isLiveSearch: true\n },\n defaultDisplayValue: defaultReceivableAccount != null ? `${defaultReceivableAccount.accountNo} - ${defaultReceivableAccount.title}` : null,\n value: defaultReceivableAccount != null ? defaultReceivableAccount.recordNo : null,\n getChoices: (cb) => {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n if (this.settingsData.glAccounts != null) {\n fnGetAccounts(cb, {\n normalBalance: 'debit'\n });\n loader.remove();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnGetAccounts(cb, {\n normalBalance: 'debit'\n });\n loader.remove();\n }, {\n type: 'gl_accounts'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.glAccounts.find((item) => item.accountNo === value);\n if (item != null) {\n this.model.setSetting('defaultReceivableAccount', item);\n }\n }\n });\n\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-default-payable-account'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Default Payable Account ' + PJQ.constants.markup.requiredAst,\n title: 'The default Account used when pushing Payable Invoices (Bills) to Sage Intacct',\n showSaveButton: false,\n selectPickerOptions: {\n isLiveSearch: true\n },\n defaultDisplayValue: defaultPayableAccount != null ? `${defaultPayableAccount.accountNo} - ${defaultPayableAccount.title}` : null,\n value: defaultPayableAccount != null ? defaultPayableAccount.recordNo : null,\n getChoices: (cb) => {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n if (this.settingsData.glAccounts != null) {\n fnGetAccounts(cb, {\n normalBalance: 'credit'\n });\n loader.remove();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnGetAccounts(cb, {\n normalBalance: 'credit'\n });\n loader.remove();\n }, {\n type: 'gl_accounts'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.glAccounts.find((item) => item.accountNo === value);\n if (item != null) {\n this.model.setSetting('defaultPayableAccount', item);\n }\n }\n });\n\n let defaultItem = this.model.getSetting('defaultItem');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-default-item-id'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Default Item ' + PJQ.constants.markup.requiredAst,\n title: 'The default Item used when pushing Contracts to Sage Intacct',\n showSaveButton: false,\n defaultDisplayValue: defaultItem != null ? `${defaultItem.itemId} - ${defaultItem.name}` : null,\n value: defaultItem != null ? defaultItem.recordNo : null,\n getChoices: (cb) => {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n let fnCallback = () => {\n loader.remove();\n let items = _.filter(this.settingsData.items, function (glAccount) {\n return true;\n })\n cb(_.map(items, function (item) {\n return {\n id: item.itemId,\n name: `${item.itemId} - ${item.name}`\n };\n }));\n };\n if (this.settingsData.items != null) {\n fnCallback();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnCallback();\n }, {\n type: 'items'\n });\n },\n onChange: (value) => {\n let item = this.settingsData.items.find((item) => item.itemId === value);\n if (item != null) {\n this.model.setSetting('defaultItem', item);\n }\n }\n });\n\n let defaultEntity = this.model.getSetting('defaultEntity');\n new PJQ.inputs.SelectPickerEditorInput({\n el: this.$('.edit-default-entity'),\n isFormInput: true,\n editButtonText: \"Change\",\n label: 'Default Entity',\n title: 'The default entity used when pushing new project locations to Sage Intacct',\n showSaveButton: false,\n defaultDisplayValue: defaultEntity != null ? `${defaultEntity.locationId} - ${defaultEntity.name}` : null,\n value: defaultEntity != null ? defaultEntity.recordNo : null,\n getChoices: (cb) => {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n let fnCallback = () => {\n loader.remove();\n let entities = _.filter(this.settingsData.entities, function (glAccount) {\n return true;\n })\n cb(_.map(entities, function (entity) {\n return {\n id: entity.locationId,\n name: `${entity.locationId} - ${entity.name}`\n };\n }));\n };\n if (this.settingsData.entities != null) {\n fnCallback();\n return;\n }\n\n this.model.fetchSettingsData((data) => {\n this.settingsData = _.extend(this.settingsData, data ?? {});\n fnCallback();\n }, {\n type: 'entities'\n });\n },\n onChange: (value) => {\n let entity = this.settingsData.entities.find((entity) => entity.locationId === value);\n if (entity != null) {\n this.model.setSetting('defaultEntity', entity);\n }\n }\n });\n },\n editAuthorization: function () {\n this.options.editingAuthorization = true;\n this.render();\n },\n cancelEditingAuthorization: function () {\n this.options.editingAuthorization = false;\n this.render();\n },\n validate: function () {\n if (this.options.editingAuthorization) {\n return true;\n }\n\n let settings = this.model.get('settings'),\n valid = true;\n if (settings.defaultReceivableAccount == null) {\n valid = false;\n this.$('.edit-default-receivable-account .form-group > label').addClass('text-danger');\n }\n\n if (settings.defaultPayableAccount == null) {\n valid = false;\n this.$('.edit-default-payable-account .form-group > label').addClass('text-danger');\n }\n\n if (settings.defaultItem == null) {\n valid = false;\n this.$('.edit-default-item-id .form-group > label').addClass('text-danger');\n }\n return valid;\n },\n cancel: function () {\n if (this.model && this.model.hasChanged()) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.save();\n }, this),\n onDontSave: _.bind(function () {\n this.model.restore();\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel(this.model);\n }\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n },\n save: function () {\n if (this.validate()) {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.model.save(null, {\n success: () => {\n loader.remove();\n\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n if (!this.options.editingAuthorization) {\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n this.removeModal();\n } else {\n PJQ.notifications.notify.successNotify({\n message: 'Successfully Authorized'\n });\n this.options.editingAuthorization = false;\n this.options.isAuthorized = true;\n this.render();\n }\n },\n error: () => {\n loader.remove();\n this.errorAlert = new PJQ.Alert(this.$('.error-container'), {\n type: 'danger',\n text: 'Unable to validate the integration. Double check your information is correct.'\n });\n }\n })\n }\n }\n});","PJQ.views.budget.LineItemsView = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'line-items-view'),\r\n subTemplates: {\r\n invoiceHeader: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'invoice-line-items-header'),\r\n changeRequestHeader: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'change-request-line-items-header'),\r\n actions: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'line-items-actions')\r\n },\r\n isSubmitting: false,\r\n canEdit: true,\r\n canDelete: true,\r\n isAdmin: true,\r\n isCostCodeRequired: true,\r\n isCostTypeRequired: true,\r\n filterToPrimeContractItems: false,\r\n canChangeAccountingMethod: false,\r\n canImportBudget: false,\r\n accountingMethod: PJQ.constants.budget.accountingMethod.AMOUNT,\r\n onAccountingMethodChanged: null,\r\n lineItemModel: PJQ.models.BaseModel,\r\n enableSelection: false,\r\n canSendRFQ: false,\r\n onLineItemAdd: null,\r\n onLineItemChange: null,\r\n onLineItemDelete: null,\r\n onTotalsChanged: null,\r\n enableStoredMaterials: true,\r\n enableRetainage: true,\r\n enableTax: false,\r\n billedToDate: null,\r\n approvedChanges: null,\r\n showMarkup: true,\r\n isBudget: false,\r\n showBilling: false,\r\n showSubTotal: false,\r\n showGrandTotal: false,\r\n showRevenue: false,\r\n copyCostToRevenue: false\r\n },\r\n events: {\r\n 'click .btn-add-standard': 'addStandardCostCodes',\r\n 'click .btn-add-cost-code': 'addCostCodeClicked',\r\n 'click .btn-view-commitment': 'viewCommitment',\r\n 'click .btn-view-change-order': 'viewChangeOrder',\r\n 'click .btn-import-budget': 'importBudget',\r\n 'click .btn-import-file': 'importFile',\r\n 'click .btn-import-contracts': 'importContracts',\r\n 'click .btn-add-line-item': 'addLineItem',\r\n 'click .btn-add-all-line-items': 'addAllPossibleLineItems',\r\n 'click .btn-autofill-amounts': 'autofillAmounts',\r\n 'click .btn-save-line-item': 'saveLineItem',\r\n 'click .btn-delete-line-item': 'deleteLineItemClicked',\r\n 'focus .input-dollars-full,.input-percent': 'selectInput',\r\n 'change .input-progress-percent': 'minimumProgressPercent',\r\n 'click .btn-add-from-change-requests': 'addFromChangeRequests',\r\n 'click .btn-add-from-commitments': 'addFromCommitments',\r\n 'click .select-cr-li': 'lineItemSelected',\r\n 'click .btn-new-commitment': 'createCommitmentFromLineItems',\r\n 'click .btn-existing-commitment': 'addLineItemsToCommitment',\r\n 'click .btn-new-pcco': 'createPCCOFromLineItems',\r\n 'click .btn-existing-pcco': 'addLineItemsToPCCO',\r\n 'click .btn-new-cco': 'createCCOFromLineItems',\r\n 'click .btn-existing-cco': 'addLineItemsToCCO',\r\n 'click .btn-total-fn': 'totalButtonClicked',\r\n 'click .btn-edit-bulk': 'bulkEditLineItems',\r\n 'click .btn-delete-bulk': 'bulkDeleteLineItems',\r\n 'click .select-all-line-items': 'selectAllLineItems',\r\n 'click .btn-edit-line-item-vendor': 'editLineItemVendor',\r\n 'click .btn-send-rfq': 'sendRFQClicked',\r\n },\r\n addStandardCostCodes: function (e) {\r\n let $btn = $(e.currentTarget),\r\n lineItem = this.getLineItemForInput($btn),\r\n subJobId = lineItem.get('subJobId'),\r\n title;\r\n if (subJobId != null) {\r\n title = 'Add Cost Codes To Sub Job';\r\n } else {\r\n title = 'Add Cost Codes To Project'\r\n }\r\n\r\n new PJQ.views.budget.CostCodePickerModal({\r\n title: title,\r\n pickerOptions: {\r\n showDisabledAsSelected: true,\r\n isCostCodeDisabled: _.bind(function (costCode) {\r\n return null != _.find(this.costCodes.models, function (pCostCode) {\r\n return (subJobId == null || pCostCode.get('subJobId') === subJobId) && pCostCode.get('code').toLowerCase() === costCode.get('code').toLowerCase();\r\n })\r\n }, this)\r\n },\r\n onSave: _.bind(function (newCostCodes) {\r\n if (_.size(newCostCodes) > 0) {\r\n this.costCodes.saveBulk(newCostCodes, subJobId, _.bind(function (savedCostCodes) {\r\n if (savedCostCodes) {\r\n if (this.options.project) {\r\n this.options.project.costCodes.add(savedCostCodes);\r\n }\r\n this.renderLineItemsTable();\r\n PJQ.notifications.notify.successNotify({\r\n message: _.size(savedCostCodes).toString() + ' Company Cost Codes added to project'\r\n });\r\n } else {\r\n // todo: error\r\n }\r\n }, this));\r\n }\r\n }, this)\r\n });\r\n },\r\n sendRFQClicked: function () {\r\n if (typeof this.options.onSendRFQ === 'function') {\r\n this.options.onSendRFQ({\r\n selectedIds: this.options.selectedLineItems,\r\n projectCommitments: this.projectCommitments\r\n });\r\n }\r\n },\r\n addCostCodeClicked: function (e) {\r\n let $btn = $(e.currentTarget),\r\n lineItem = this.getLineItemForInput($btn);\r\n new PJQ.views.budget.EditCostCodeModal({\r\n project: PJQ.app.session.project,\r\n onSave: _.bind(function (costCode) {\r\n this.costCodes.add(costCode);\r\n lineItem.set('costCodeId', costCode.id);\r\n this.renderLineItemsTable();\r\n }, this)\r\n });\r\n },\r\n beforeFirstRender: async function () {\r\n this.options.project = this.options.project != null ? this.options.project : PJQ.app.session.project;\r\n this.options.addingNewContractLineItems = [];\r\n this.isReceivableInvoices = this.options.lineItemModel === PJQ.models.invoicing.ReceivableInvoiceLineItem;\r\n this.isInvoices = this.options.lineItemModel === PJQ.models.invoicing.PayableInvoiceLineItem\r\n || this.isReceivableInvoices;\r\n this.isDirectCosts = this.options.lineItemModel === PJQ.models.directcosts.LineItem;\r\n this.isChangeRequests = this.options.lineItemModel === PJQ.models.changeRequests.ChangeRequestLineItem;\r\n this.isPCCO = this.options.lineItemModel === PJQ.models.primeContracts.ChangeOrderLineItem;\r\n this.isCCO = this.options.lineItemModel === PJQ.models.commitments.ChangeOrderLineItem;\r\n this.isCommitments = this.options.lineItemModel === PJQ.models.commitments.CommitmentLineItem;\r\n\r\n this.isFetched = false;\r\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\r\n if (this.erpIntegration != null && this.options.project.isERPSynced()) {\r\n if (this.options.lineItemModel === PJQ.models.commitments.ChangeOrderLineItem) {\r\n this.options.filterToCommitmentCostCodes = this.options.commitmentId > 0 && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.COMMITMENT_CO_SOV_FILTER_TO_COMMITMENT_SOV);\r\n }\r\n\r\n if (this.options.lineItemModel === PJQ.models.primeContracts.ChangeOrderLineItem || this.options.lineItemModel === PJQ.models.changeRequests.ChangeRequestLineItem) {\r\n this.options.filterToPrimeContractItems = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PRIME_CONTRACT_CO_SOV_REQUIRE_LINKED_CONTRACT_CO);\r\n\r\n this.options.isCostCodeRequired = this.options.isCostTypeRequired = !(true === this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PRIME_CONTRACT_CO_SOV_BUDGET_CODE_NOT_REQUIRED));\r\n } else if (this.options.lineItemModel === PJQ.models.primeContracts.LineItem) {\r\n this.options.isCostCodeRequired = this.options.isCostTypeRequired = !(true === this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PRIME_CONTRACT_SOV_BUDGET_CODE_NOT_REQUIRED));\r\n }\r\n }\r\n\r\n if (this.options.project.hasPermission('budget.canView')) {\r\n this.budget = await this.options.project.fetchBudget();\r\n }\r\n this.subJobs = await this.options.project.fetchSubJobs();\r\n this.costCodes = await this.options.project.fetchCostCodes();\r\n this.costTypes = await this.options.project.fetchCostTypes();\r\n\r\n if (this.options.enableTax) {\r\n this.taxCodes = await this.options.project.fetchTaxCodes();\r\n this.options.enableTax = _.size(this.taxCodes.models) > 0;\r\n }\r\n\r\n this.unitsOfMeasure = await this.options.project.fetchUnitsOfMeasure();\r\n\r\n if (this.options.project && this.isChangeRequests && this.options.canEdit) {\r\n this.projectCommitments = new PJQ.collections.commitments.Commitments([], {\r\n projectId: this.options.project.id,\r\n withLineItems: true\r\n });\r\n await this.projectCommitments.fetch();\r\n }\r\n\r\n this.isFetched = true;\r\n this.render(true);\r\n },\r\n beforeRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n\r\n this.canAddCommitments = this.options.project.hasPermission('commitments.canAdd');\r\n this.canAddCommitmentChangeOrders = this.options.project.hasPermission('commitmentChangeOrders.canAdd');\r\n this.canAddContractChangeOrders = this.options.project.hasPermission('primeContractChangeOrders.canAdd');\r\n },\r\n renderData: function () {\r\n return {\r\n project: PJQ.app.session.project,\r\n subJobs: this.subJobs,\r\n costCodes: this.costCodes,\r\n costTypes: this.costTypes,\r\n isInvoices: this.isInvoices,\r\n isDirectCosts: this.isDirectCosts,\r\n isChangeRequests: this.isChangeRequests,\r\n canApplyChangeRequestCosts: this.options.canApplyChangeRequestCosts,\r\n canApplyChangeRequestRevenue: this.options.canApplyChangeRequestRevenue,\r\n enableSelection: this.options.enableSelection,\r\n canSendRFQ: this.options.canSendRFQ,\r\n onSendRFQ: null,\r\n isReceivableInvoices: this.isReceivableInvoices,\r\n canImportBudget: this.options.canImportBudget,\r\n canChangeAccountingMethod: this.options.canChangeAccountingMethod,\r\n canEdit: this.options.canEdit,\r\n isBudget: this.options.isBudget,\r\n isFetched: this.isFetched,\r\n isCCO: this.isCCO,\r\n isPCCO: this.isPCCO,\r\n showRevenue: this.options.showRevenue,\r\n selectedLineItems: this.options.selectedLineItems,\r\n isCommitments: this.isCommitments,\r\n canAddCommitments: this.canAddCommitments,\r\n canAddCommitmentChangeOrders: this.canAddCommitmentChangeOrders,\r\n canAddContractChangeOrders: this.canAddContractChangeOrders\r\n };\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n this.accountingMethodPicker = new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-accounting-method'),\r\n isIntChoices: true,\r\n defaultValue: this.options.accountingMethod,\r\n canEdit: this.options.canEdit && _.size(this.getVisibleLineItems()) === 0,\r\n onChange: _.bind(function (value) {\r\n this.options.accountingMethod = value;\r\n if (typeof this.options.onAccountingMethodChanged === 'function') {\r\n this.options.onAccountingMethodChanged(value);\r\n }\r\n this.renderLineItemsTable();\r\n }, this)\r\n });\r\n this.renderActions();\r\n this.renderLineItemsTable();\r\n this.updateAccountingMethodSelector();\r\n this.renderTotals();\r\n },\r\n minimumProgressPercent: function (e) {\r\n let $input = $(e.currentTarget),\r\n lineItem = this.getLineItemForInput($input);\r\n if (lineItem != null) {\r\n let percent = lineItem.get('progressPercent'),\r\n totalProgressPercent = lineItem.get('progressPercentTotal');\r\n if (percent < totalProgressPercent) {\r\n $input.val(PJQ.helpers.formatHelpers.formatPercent(totalProgressPercent));\r\n lineItem.set('progressPercent', totalProgressPercent);\r\n }\r\n }\r\n },\r\n selectInput: function (e) {\r\n let el = $(e.currentTarget)[0];\r\n if (this.focusInput !== el) {\r\n this.focusInput = el;\r\n setTimeout(_.bind(function () {\r\n this.focusInput.select();\r\n }, this), 100);\r\n }\r\n },\r\n importBudget: function () {\r\n PJQ.app.session.project.fetchBudget(_.bind(function (budget) {\r\n let newLineItems = [],\r\n counter = 1;\r\n _.each(_.sortBy(budget.lineItems.models, function (lineItem) {\r\n return lineItem.get('sortOrder');\r\n }), function (lineItem) {\r\n newLineItems.push(new this.options.lineItemModel({\r\n subJobId: lineItem.get('subJobId'),\r\n costCodeId: lineItem.get('costCodeId'),\r\n costTypeId: lineItem.get('costTypeId'),\r\n amount: lineItem.get('budgetedCost'),\r\n description: '',\r\n number: counter,\r\n accountingMethod: this.options.accountingMethod\r\n }));\r\n counter++;\r\n }, this);\r\n this.collection.reset(newLineItems);\r\n this.renderLineItemsTable();\r\n }, this));\r\n },\r\n importFile: function () {\r\n this.renderUploader();\r\n },\r\n importContracts: function () {\r\n new PJQ.ajax.Request({\r\n endpoint: 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: 'budgets',\r\n value: 'lineitems'\r\n },\r\n {\r\n endpoint: 'import',\r\n value: 'contracts'\r\n }\r\n ]),\r\n isAPIv2: true,\r\n }).get().done(_.bind(function (data) {\r\n this.collection.add(_.filter(data, (lineItem) => {\r\n return null == this.collection.findWhere({\r\n costCodeId: lineItem.costCodeId,\r\n costTypeId: lineItem.costTypeId\r\n });\r\n }));\r\n this.renderLineItemsTable();\r\n if (typeof this.options.onLineItemAdd === 'function') {\r\n this.options.onLineItemAdd();\r\n }\r\n }, this)).fail(_.bind(function (data) {\r\n\r\n }, this));\r\n },\r\n getVisibleLineItems: function () {\r\n return _.filter(this.collection.models, function (model) {\r\n return !model.get('delete');\r\n });\r\n },\r\n renderUploader: function () {\r\n let $uploader = this.$('.import-uploader');\r\n if (this.fileUploader == null) {\r\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\r\n el: $uploader,\r\n useApiV2: true,\r\n allowedExtensions: ['xls', 'xlsx', 'csv'],\r\n uploadTemplateCallback: () => {\r\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'budgets'\r\n },\r\n {\r\n endpoint: 'lineitems'\r\n },\r\n {\r\n endpoint: 'import'\r\n },\r\n {\r\n endpoint: 'template'\r\n }\r\n ]), {isAPIv2: true});\r\n },\r\n maxFiles: 1,\r\n style: 'grid',\r\n onSuccess: _.bind(function (file) {\r\n let loader = new PJQ.Loader($uploader);\r\n let uploadId = file.uploadId;\r\n new PJQ.ajax.Request({\r\n endpoint: 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: 'budgets'\r\n },\r\n {\r\n endpoint: 'lineitems'\r\n },\r\n {\r\n endpoint: 'import',\r\n value: uploadId\r\n }\r\n ]),\r\n isAPIv2: true\r\n }).post().done(_.bind(function (result) {\r\n loader.remove();\r\n this.fileUploader.remove();\r\n this.subJobs.add(result.subJobs);\r\n this.costCodes.add(result.costCodes);\r\n this.costTypes.add(result.costTypes);\r\n this.collection.add(result.lineItems);\r\n this.renderLineItemsTable();\r\n if (typeof this.options.onLineItemAdd === 'function') {\r\n this.options.onLineItemAdd();\r\n }\r\n }, this)).fail((err) => {\r\n if (err && err.responseJSON) {\r\n loader.remove();\r\n let file = this.fileUploader.collection.models[0];\r\n this.fileUploader.collection.remove(file);\r\n this.fileUploader.render();\r\n this.fileUploader.showError(err.responseJSON.message, 10000);\r\n }\r\n });\r\n }, this)\r\n });\r\n } else {\r\n // Hide file uploader if button is clicked again\r\n $uploader.attr('hidden', !$uploader.attr('hidden'));\r\n }\r\n let self = this;\r\n $uploader.find('.btn-download-template').off('click').on('click', self.downloadImportTemplate);\r\n },\r\n updateAccountingMethodSelector: function () {\r\n if (this.accountingMethodPicker != null) {\r\n if (!this.options.canEdit || _.size(this.getVisibleLineItems()) > 0) {\r\n this.accountingMethodPicker.disable();\r\n } else {\r\n this.accountingMethodPicker.enable();\r\n }\r\n }\r\n },\r\n renderTotals: function () {\r\n let amount = 0,\r\n billed = 0;\r\n _.each(this.collection.models.filter((lineItem) => {\r\n return !lineItem.get('delete');\r\n }), function (lineItem) {\r\n billed += lineItem.get('progressAmount');\r\n if (this.isInvoices) {\r\n amount += lineItem.get('progressAmount') + lineItem.get('materialsNew') - lineItem.get('workRetainage') - lineItem.get('materialRetainage') + lineItem.get('workRetainageReleased') + lineItem.get('materialRetainageReleased');\r\n } else if (this.options.isBudget) {\r\n amount += lineItem.get('budgetedCost');\r\n } else {\r\n amount += lineItem.get('amount');\r\n }\r\n }, this);\r\n\r\n this.$('.line-items-amount').text(PJQ.helpers.formatHelpers.formatCurrency(amount));\r\n if (!this.isInvoices) {\r\n this.$('.line-items-billed').text(PJQ.helpers.formatHelpers.formatCurrency(billed));\r\n this.$('.line-items-remaining').text(PJQ.helpers.formatHelpers.formatCurrency((amount - billed)));\r\n }\r\n\r\n if (typeof this.options.onTotalsChanged === 'function') {\r\n this.options.onTotalsChanged();\r\n }\r\n\r\n this.renderTableFooter();\r\n },\r\n getColumns: function () {\r\n let columns = [];\r\n if (this.options.enableSelection && (this.options.canApplyChangeRequestRevenue || this.options.canApplyChangeRequestCosts || this.options.canSendRFQ || this.isInvoices)) {\r\n columns.push({\r\n \"title\": '
',\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"render\": _.bind(function (data, type, row) {\r\n let enable = !row.get('revenueLineItemId') || !row.get('costLineItemId');\r\n return ('
');\r\n }, this),\r\n \"width\": '4%'\r\n });\r\n }\r\n\r\n let fnBudgetCodeCols = () => {\r\n if (this.isInvoices) {\r\n return [\r\n {\r\n \"columnData\": \"costCodeId\",\r\n \"title\": \"Budget Code\",\r\n \"titleSettings\": \"Budget Code\",\r\n \"width\": this.isChangeRequests ? '15%' : '20%',\r\n \"render\": (data, type, row) => {\r\n if (this.options.canEdit && row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n\r\n let costCode = this.costCodes.get(row.get('costCodeId')),\r\n costType = this.costTypes.get(row.get('costTypeId'));\r\n return '
' + (costCode ? costCode.getDisplayName() : '') + '
' + '
' + (costType ? costType.get('name') : '') + '
';\r\n }\r\n }];\r\n } else if (this.options.canEdit) {\r\n return [{\r\n \"columnData\": \"costCodeId\",\r\n \"title\": \"Cost Code\",\r\n \"width\": this.isChangeRequests ? '15%' : '20%',\r\n \"render\": (data, type, row) => {\r\n if (this.options.canEdit && row.isNew() && (!this.isChangeRequests && !row.get('changeRequestLineItemId') || this.isChangeRequests && !row.get('costLineItemId') && !row.get('revenueLineItemId'))) {\r\n let res = '
';\r\n if (PJQ.app.session.project.hasPermission('budget.isAdmin')) {\r\n // res += ``\r\n\r\n if ((PJQ.app.session.erpIntegration == null || (PJQ.app.session.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PROJECT_COST_CODES) && PJQ.app.session.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PROJECT_SPECIFIC_COST_CODES)))) {\r\n res += `
\r\n \r\n \r\n
`;\r\n } else {\r\n res += ``;\r\n }\r\n }\r\n res += '
';\r\n return res;\r\n } else {\r\n let costCode = this.costCodes.get(row.get('costCodeId'));\r\n return costCode ? costCode.getDisplayName() : '';\r\n }\r\n }\r\n },\r\n {\r\n \"columnData\": \"costTypeId\",\r\n \"title\": \"Type\",\r\n \"titleSettings\": \"Cost Type\",\r\n \"width\": this.isChangeRequests ? \"7%\" : \"10%\",\r\n \"render\": (data, type, row) => {\r\n if (this.options.canEdit && row.isNew() && (!this.isChangeRequests && !row.get('changeRequestLineItemId') || this.isChangeRequests && !row.get('costLineItemId') && !row.get('revenueLineItemId'))) {\r\n return '';\r\n } else {\r\n let costType = this.costTypes.get(row.get('costTypeId'));\r\n return costType ? costType.get('name') : '';\r\n }\r\n }\r\n }];\r\n } else {\r\n return [\r\n {\r\n \"columnData\": \"costCodeId\",\r\n \"title\": \"Budget Code\",\r\n \"titleSettings\": \"Budget Code\",\r\n \"width\": this.isChangeRequests ? '15%' : '20%',\r\n \"render\": (data, type, row) => {\r\n if (this.isInvoices && row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n let costCode = this.costCodes.get(row.get('costCodeId')),\r\n costType = this.costTypes.get(row.get('costTypeId'));\r\n return '
' + (costCode ? costCode.getDisplayName() : '') + '
' + '
' + (costType ? costType.get('name') : '') + '
';\r\n }\r\n }];\r\n }\r\n }\r\n\r\n if (this.isInvoices) {\r\n columns.push(...[\r\n {\r\n \"columnData\": \"attributes.number\",\r\n \"title\": \"#\",\r\n \"width\": \"50px\",\r\n \"render\": _.bind(function (data, type, row, opt) {\r\n return '
' + (opt.row + 1).toString() + '
';\r\n }, this)\r\n },\r\n {\r\n \"columnData\": \"attributes.id\",\r\n \"title\": \"Source\",\r\n \"render\": _.bind(function (data, type, row) {\r\n let result;\r\n if (row.get('commitmentId') > 0) {\r\n result = '' + row.get('commitmentNumber') + '';\r\n } else if (row.get('primeContractId') > 0) {\r\n result = '' + row.get('primeContractNumber') + '';\r\n } else if (row.get('changeOrderId') > 0) {\r\n result = '' + row.get('changeOrderNumber') + '';\r\n } else {\r\n result = '';\r\n }\r\n return '
' + result + '
';\r\n }, this)\r\n },\r\n {\r\n \"columnData\": \"subJobId\",\r\n \"title\": \"Sub Job\",\r\n \"visible\": _.size(this.subJobs.models) > 0,\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n let subJob = this.subJobs.get(row.get('subJobId'));\r\n return '
' + (subJob ? subJob.get('name') : '') + '
';\r\n }, this)\r\n },\r\n ...fnBudgetCodeCols(),\r\n {\r\n \"columnData\": \"description\",\r\n \"data\": \"attributes.description\",\r\n \"title\": \"Description\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n return '
' + row.get('description') + '
';\r\n }, this)\r\n },\r\n {\r\n \"columnData\": \"committedAmount\",\r\n \"data\": \"\",\r\n \"title\": \"Scheduled Value\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n return '
' + PJQ.helpers.formatHelpers.formatCurrency(row.get('committedAmount')) + '
'\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('committedAmount');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n },\r\n {\r\n \"columnData\": \"progressAmountTotal\",\r\n \"data\": \"attributes.progressAmountTotal\",\r\n \"title\": \"$\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n return '
' + PJQ.helpers.formatHelpers.formatCurrency(row.get('progressAmountTotal')) + '
';\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('progressAmountTotal');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n },\r\n {\r\n \"columnData\": \"progressPercentTotal\",\r\n \"data\": \"attributes.progressPercentTotal\",\r\n \"title\": \"%\",\r\n \"format\": \"percent\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n return '
' + PJQ.helpers.formatHelpers.formatPercent(row.get('progressPercentTotal')) + '
';\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n if (_.size(data) > 0) {\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('progressPercentTotal');\r\n });\r\n amt = amt / _.size(data)\r\n }\r\n return PJQ.helpers.formatHelpers.formatPercent(amt);\r\n }\r\n },\r\n {\r\n \"columnData\": \"progressAmount\",\r\n \"data\": \"attributes.progressAmount\",\r\n \"title\": \"$\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n if (this.options.canEdit) {\r\n return '';\r\n } else {\r\n return '
' + PJQ.helpers.formatHelpers.formatCurrency(row.get('progressAmount')) + '
';\r\n }\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('progressAmount');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n },\r\n {\r\n \"columnData\": \"progressPercent\",\r\n \"data\": \"attributes.progressPercent\",\r\n \"title\": \"%\",\r\n \"format\": \"percent\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit) {\r\n result = ''\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatPercent(row.get('progressPercent'));\r\n }\r\n return result;\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n if (_.size(data) > 0) {\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('progressPercent');\r\n });\r\n amt = amt / _.size(data)\r\n }\r\n return PJQ.helpers.formatHelpers.formatPercent(Math.round(amt * 100) / 100);\r\n }\r\n }]);\r\n if (this.options.enableStoredMaterials) {\r\n columns.push(...[{\r\n \"columnData\": \"materialsNew\",\r\n \"data\": \"attributes.materialsNew\",\r\n \"title\": \"New\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit) {\r\n result = '';\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatCurrency(row.get('materialsNew'));\r\n }\r\n return result;\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('materialsNew');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n },\r\n {\r\n \"columnData\": \"materialsStored\",\r\n \"data\": \"attributes.materialsStored\",\r\n \"title\": \"Stored\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n return '
' + PJQ.helpers.formatHelpers.formatCurrency(Math.max(0, row.getMaterialsStored(this.model))) + '
'\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('materialsStored');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n }]);\r\n }\r\n\r\n if (this.options.enableTax) {\r\n columns.push({\r\n \"columnData\": \"taxAmount\",\r\n \"data\": \"attributes.taxAmount\",\r\n \"width\": \"10%\",\r\n \"title\": \"Tax\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (this.isInvoices && row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n let taxAmount = PJQ.helpers.formatHelpers.formatCurrency(row.get('taxAmount'));\r\n if (this.options.canEdit) {\r\n return '' + taxAmount + '';\r\n }\r\n return taxAmount;\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('taxAmount');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n });\r\n }\r\n\r\n columns.push(...[{\r\n \"columnData\": \"\",\r\n \"data\": \"\",\r\n \"title\": \"Total Completed and Stored\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return ''\r\n }\r\n\r\n return '
' + PJQ.helpers.formatHelpers.formatCurrency(row.getTotalCompleteAndStored(this.model)) + '
'\r\n }, this),\r\n \"renderFooter\": _.bind(function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.getTotalCompleteAndStored(this.model);\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }, this)\r\n },\r\n {\r\n \"columnData\": \"\",\r\n \"data\": \"\",\r\n \"title\": \"Balance To Finish\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n return '
' + PJQ.helpers.formatHelpers.formatCurrency(row.getBalanceToFinish(this.model)) + '
'\r\n }, this),\r\n \"renderFooter\": _.bind(function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.getBalanceToFinish(this.model);\r\n }, this);\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }, this)\r\n }]);\r\n if (this.options.enableRetainage) {\r\n columns.push(...[{\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.workRetainage\",\r\n \"title\": \"$\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit && !this.options.isSubmitting) {\r\n result = '';\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatCurrency(row.get('workRetainage'));\r\n }\r\n return result;\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('workRetainage');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n },\r\n {\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.workRetainagePercent\",\r\n \"title\": \"%\",\r\n \"format\": \"percent\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit && !this.options.isSubmitting) {\r\n result = ''\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatPercent(row.get('workRetainagePercent'));\r\n }\r\n return result\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n if (_.size(data) > 0) {\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('workRetainagePercent');\r\n });\r\n amt = amt / _.size(data)\r\n }\r\n return PJQ.helpers.formatHelpers.formatPercent(Math.round(amt * 100) / 100);\r\n }\r\n }]);\r\n if (this.options.enableStoredMaterials) {\r\n columns.push(...[{\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.materialRetainage\",\r\n \"title\": \"$\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit && !this.options.isSubmitting) {\r\n result = '';\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatCurrency(row.get('materialRetainage'));\r\n }\r\n return result\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('materialRetainage');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n },\r\n {\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.materialRetainagePercent\",\r\n \"title\": \"%\",\r\n \"format\": \"percent\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit && !this.options.isSubmitting) {\r\n result = ''\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatPercent(row.get('materialRetainagePercent'));\r\n }\r\n return result\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n if (_.size(data) > 0) {\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('materialRetainagePercent');\r\n });\r\n amt = amt / _.size(data)\r\n }\r\n return PJQ.helpers.formatHelpers.formatPercent(Math.round(amt * 100) / 100);\r\n }\r\n }]);\r\n }\r\n columns.push(...[{\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.workRetainageReleased\",\r\n \"title\": \"$\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit) {\r\n result = '';\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatCurrency(row.get('workRetainageReleased'));\r\n }\r\n return result;\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('workRetainageReleased');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n },\r\n {\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.workRetainageReleasedPercent\",\r\n \"title\": \"%\",\r\n \"format\": \"percent\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit) {\r\n result = ''\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatPercent(row.get('workRetainageReleasedPercent'));\r\n }\r\n return result;\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n if (_.size(data) > 0) {\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('workRetainageReleasedPercent');\r\n });\r\n amt = amt / _.size(data)\r\n }\r\n return PJQ.helpers.formatHelpers.formatPercent(Math.round(amt * 100) / 100);\r\n }\r\n }]);\r\n if (this.options.enableStoredMaterials) {\r\n columns.push(...[{\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.materialRetainageReleased\",\r\n \"title\": \"$\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit) {\r\n result = '';\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatCurrency(row.get('materialRetainageReleased'));\r\n }\r\n return result;\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('materialRetainageReleased');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n },\r\n {\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.materialRetainageReleasedPercent\",\r\n \"title\": \"%\",\r\n \"format\": \"percent\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n\r\n let result;\r\n if (this.options.canEdit) {\r\n result = ''\r\n } else {\r\n result = PJQ.helpers.formatHelpers.formatPercent(row.get('materialRetainageReleasedPercent'));\r\n }\r\n return result;\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n if (_.size(data) > 0) {\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('materialRetainageReleasedPercent');\r\n });\r\n amt = amt / _.size(data)\r\n }\r\n return PJQ.helpers.formatHelpers.formatPercent(Math.round(amt * 100) / 100);\r\n }\r\n }]);\r\n }\r\n columns.push({\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.workRetainageTotal\",\r\n \"title\": \"$\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n return '
' + PJQ.helpers.formatHelpers.formatCurrency(row.getWorkRetainageRemaining(this.model)) + '
';\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.getWorkRetainageRemaining(this.model);\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n });\r\n if (this.options.enableStoredMaterials) {\r\n columns.push({\r\n \"columnData\": \"\",\r\n \"data\": \"attributes.materialRetainageTotal\",\r\n \"title\": \"$\",\r\n \"format\": \"money\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (row.get('lineItemId') == null) {\r\n return '';\r\n }\r\n return '
' + PJQ.helpers.formatHelpers.formatCurrency(row.getMaterialRetainageRemaining(this.model)) + '
';\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.getMaterialRetainageRemaining(this.model);\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n });\r\n }\r\n }\r\n } else {\r\n columns.push(...[\r\n {\r\n \"columnData\": \"attributes.number\",\r\n \"title\": \"#\",\r\n \"width\": \"50px\",\r\n \"render\": _.bind(function (data, type, row, opt) {\r\n let html = '
';\r\n if (row.get('changeRequestLineItemId')) {\r\n html += ''\r\n }\r\n\r\n html += (opt.row + 1).toString() + '
';\r\n return html;\r\n }, this)\r\n },\r\n {\r\n \"columnData\": \"attributes\",\r\n \"title\": \"Contract Item\",\r\n \"visible\": this.options.filterToPrimeContractItems,\r\n \"render\": _.bind(function (data, type, row) {\r\n if (this.options.canEdit && row.isNew() && (!this.isChangeRequests && !row.get('changeRequestLineItemId') || (this.isChangeRequests && !row.get('costLineItemId') && !row.get('revenueLineItemId')))) {\r\n if (this.options.addingNewContractLineItems.includes(row.cid)) {\r\n return ''\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return row.get('description');\r\n }\r\n }, this)\r\n },\r\n {\r\n \"columnData\": \"subJobId\",\r\n \"title\": \"Sub Job\",\r\n \"visible\": _.size(this.subJobs.models) > 0,\r\n \"width\": this.isChangeRequests ? \"10%\" : \"15%\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (this.options.canEdit && row.isNew() && (!this.isChangeRequests && !row.get('changeRequestLineItemId') || (this.isChangeRequests && !row.get('costLineItemId') && !row.get('revenueLineItemId')))) {\r\n return '';\r\n } else {\r\n let subJob = this.subJobs.get(row.get('subJobId'));\r\n return subJob ? (subJob.get('code') + ' - ' + subJob.get('name')) : '';\r\n }\r\n }, this)\r\n },\r\n ...fnBudgetCodeCols()]);\r\n\r\n if (this.isChangeRequests) {\r\n if (this.options.showRevenue) {\r\n columns.push({\r\n \"columnData\": \"pccoId\",\r\n \"title\": \"Contract CO\",\r\n \"width\": \"140px\",\r\n \"visible\": this.isChangeRequests,\r\n \"render\": _.bind(function (data, type, row) {\r\n let pccoId = row.get('pccoId'),\r\n html = '';\r\n\r\n if (row.get('revenueLineItemId') > 0) {\r\n html += ''\r\n }\r\n\r\n if (row.get('revenueLineItemId') > 0 && pccoId > 0) {\r\n if (pccoId > 0) {\r\n html += '';\r\n }\r\n }\r\n return '
' + html + '
';\r\n }, this)\r\n });\r\n }\r\n\r\n columns.push(...[\r\n {\r\n \"columnData\": \"vendor\",\r\n \"title\": \"Company\",\r\n \"width\": \"140px\",\r\n \"visible\": this.isChangeRequests,\r\n \"render\": _.bind(function (data, type, row) {\r\n let vendor = row.get('vendor') ?? null,\r\n html = \"\";\r\n if (this.options.canEdit) {\r\n html += '';\r\n } else if (vendor != null) {\r\n html += PJQ.helpers.contacts.getContactAnchor({contact: vendor, useCompanyName: true});\r\n } else {\r\n html += '
Not Assigned
';\r\n }\r\n\r\n return \"
\" + html + \"
\"\r\n }, this)\r\n },\r\n {\r\n \"columnData\": \"commitmentId\",\r\n \"title\": \"Commitment\",\r\n \"width\": \"140px\",\r\n \"visible\": this.isChangeRequests,\r\n \"render\": (data, type, row) => {\r\n let commitmentId = row.get('commitmentId'),\r\n ccoId = row.get('ccoId'),\r\n html = '';\r\n\r\n if (row.get('costLineItemId') > 0) {\r\n html += ''\r\n }\r\n\r\n if (row.get('costLineItemId') > 0 || !this.options.canEdit) {\r\n if (commitmentId > 0) {\r\n html += '';\r\n } else if (ccoId > 0) {\r\n html += '';\r\n }\r\n } else if (this.options.canEdit) {\r\n html += '';\r\n }\r\n return '
' + html + '
';\r\n }\r\n }\r\n ]);\r\n }\r\n\r\n columns.push(...[\r\n {\r\n \"columnData\": \"description\",\r\n \"visible\": !this.options.filterToPrimeContractItems,\r\n \"data\": \"attributes.description\",\r\n \"width\": this.isChangeRequests && this.options.canApplyChangeRequestRevenue ? \"20%\" : null,\r\n \"title\": \"Description\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (this.options.canEdit) {\r\n return '';\r\n } else {\r\n return row.get('description');\r\n }\r\n }, this)\r\n }\r\n ]);\r\n\r\n if ((this.options.showMarkup !== false || this.options.canEdit) && this.options.accountingMethod === PJQ.constants.budget.accountingMethod.UNIT_QUANTITY) {\r\n columns.push(...[\r\n {\r\n \"columnData\": \"quantity\",\r\n \"data\": \"attributes.quantity\",\r\n \"width\": \"5%\",\r\n \"title\": \"Quantity\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": (data, type, row) => {\r\n if (this.options.canEdit && (!this.isChangeRequests && !row.get('changeRequestLineItemId') || (this.isChangeRequests && !row.get('revenueLineItemId') && !row.get('costLineItemId')))) {\r\n return '';\r\n } else {\r\n return row.get('quantity');\r\n }\r\n }\r\n },\r\n {\r\n \"columnData\": \"unitOfMeasure\",\r\n \"data\": \"attributes.unitId\",\r\n \"title\": \"Unit\",\r\n \"width\": \"5%\",\r\n \"className\": \"text-align-center\",\r\n \"render\": (data, type, row) => {\r\n if (this.options.canEdit && (!this.isChangeRequests && !row.get('changeRequestLineItemId') || (this.isChangeRequests && !row.get('revenueLineItemId') && !row.get('costLineItemId')))) {\r\n return '';\r\n } else {\r\n let unitOfMeasure = this.unitsOfMeasure.get(row.get('unitId'));\r\n return unitOfMeasure ? unitOfMeasure.get('name') : '';\r\n }\r\n }\r\n },\r\n {\r\n \"columnData\": \"unitPrice\",\r\n \"data\": \"attributes.unitPrice\",\r\n \"width\": \"10%\",\r\n \"title\": \"Unit Price\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": (data, type, row) => {\r\n if (this.options.canEdit && (!this.isChangeRequests && !row.get('changeRequestLineItemId') || (this.isChangeRequests && !row.get('revenueLineItemId') && !row.get('costLineItemId')))) {\r\n return '';\r\n } else {\r\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('unitPrice'));\r\n }\r\n }\r\n }\r\n ]);\r\n } else if (this.options.showMarkup !== false || this.options.canEdit) {\r\n columns.push({\r\n \"columnData\": \"amount\",\r\n \"data\": \"attributes.amount\",\r\n \"width\": \"10%\",\r\n \"title\": this.isChangeRequests ? \"Cost\" : \"Amount\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (this.options.canEdit && (!this.isChangeRequests || (!row.get('revenueLineItemId') && !row.get('costLineItemId')))) {\r\n if (this.options.accountingMethod === PJQ.constants.budget.accountingMethod.AMOUNT) {\r\n if (this.options.isBudget) {\r\n return '';\r\n } else {\r\n return '';\r\n }\r\n }\r\n return '' + PJQ.helpers.formatHelpers.formatCurrency(row.get('amount')) + '';\r\n }\r\n\r\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('amount'));\r\n }, this),\r\n \"renderFooter\": _.bind(function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n if (this.options.isBudget) {\r\n amt += lineItem.get('budgetedCost')\r\n } else {\r\n amt += lineItem.get('amount')\r\n }\r\n }, this);\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }, this)\r\n });\r\n }\r\n\r\n if (this.isChangeRequests && this.options.showRevenue) {\r\n columns.push({\r\n \"columnData\": \"revenue\",\r\n \"data\": \"attributes.revenue\",\r\n \"width\": \"10%\",\r\n \"title\": \"Revenue\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n if (this.options.canEdit && !row.get('revenueLineItemId')) {\r\n return '';\r\n }\r\n\r\n return '' + PJQ.helpers.formatHelpers.formatCurrency(row.get('revenue')) + '';\r\n }, this),\r\n \"renderFooter\": _.bind(function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('revenue');\r\n }, this);\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }, this)\r\n });\r\n }\r\n\r\n if (!this.options.isBudget && !this.isDirectCosts) {\r\n if (this.options.financialMarkups != null && this.options.showMarkup) {\r\n _.each(this.options.financialMarkups.models, (markup) => {\r\n if (markup.get('isVertical') || markup.get('delete')) {\r\n return;\r\n }\r\n\r\n columns.push({\r\n \"columnData\": \"markupAmount\",\r\n \"data\": \"attributes.markupAmount\",\r\n \"title\": markup.get('name') + ' (' + PJQ.helpers.formatHelpers.formatPercent(markup.get('percent') / 100) + ')',\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": (data, type, row) => {\r\n let amt = row.getMarkupAmount(this.options.financialMarkups, {cid: markup.cid});\r\n return '' + PJQ.helpers.formatHelpers.formatCurrency(amt) + '';\r\n },\r\n \"renderFooter\": (data) => {\r\n let amt = 0;\r\n _.each(data, (lineItem) => {\r\n amt += lineItem.getMarkupAmount(this.options.financialMarkups, {cid: markup.cid});\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (this.options.enableTax) {\r\n columns.push(...[{\r\n \"columnData\": \"taxCode\",\r\n \"data\": \"attributes.taxCodeId\",\r\n \"width\": \"8%\",\r\n \"title\": \"Tax Code\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": (data, type, row) => {\r\n if (this.options.canEdit) {\r\n return '
';\r\n }\r\n\r\n let taxCode = this.taxCodes.get(row.get('taxCodeId'));\r\n if (taxCode != null) {\r\n return taxCode.get('code') + ' (' + PJQ.helpers.formatHelpers.formatPercent(taxCode.get('rate') / 100) + ')'\r\n }\r\n return 'N/A';\r\n },\r\n \"renderFooter\": function (data) {\r\n return '';\r\n }\r\n }, {\r\n \"columnData\": \"taxAmount\",\r\n \"data\": \"attributes.taxAmount\",\r\n \"width\": \"10%\",\r\n \"title\": \"Tax\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n let taxAmount = PJQ.helpers.formatHelpers.formatCurrency(row.get('taxAmount'));\r\n if (this.options.canEdit) {\r\n return '' + taxAmount + '';\r\n }\r\n return taxAmount;\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('taxAmount');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n }]);\r\n }\r\n\r\n if (!this.isChangeRequests && this.options.showBilling) {\r\n columns.push(...[\r\n {\r\n \"columnData\": \"billedToDate\",\r\n \"data\": \"attributes.billedToDate\",\r\n \"width\": \"10%\",\r\n \"title\": \"Billed to Date\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"text-align-center\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('progressAmount'));\r\n }, this),\r\n \"renderFooter\": function (data) {\r\n let amt = 0;\r\n _.each(data, function (lineItem) {\r\n amt += lineItem.get('progressAmount');\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n }]);\r\n }\r\n\r\n columns.push({\r\n \"columnData\": \"subTotal\",\r\n \"data\": \"attributes.amount\",\r\n \"title\": \"Subtotal\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": \"150px\",\r\n \"className\": \"text-align-center\",\r\n \"render\": (data, type, row) => {\r\n let subtotal = PJQ.helpers.formatHelpers.formatCurrency(row.getSubTotal(this.options.financialMarkups, {\r\n costs: this.isChangeRequests && !this.options.showRevenue\r\n }));\r\n if (this.options.canEdit) {\r\n return '' + subtotal + '';\r\n }\r\n return subtotal;\r\n },\r\n \"renderFooter\": (data) => {\r\n let amt = 0;\r\n _.each(data, (lineItem) => {\r\n amt += lineItem.getSubTotal(this.options.financialMarkups, {\r\n costs: this.isChangeRequests && !this.options.showRevenue\r\n });\r\n });\r\n return PJQ.helpers.formatHelpers.formatCurrency(amt);\r\n }\r\n });\r\n }\r\n }\r\n if (this.options.canEdit) {\r\n columns.push({\r\n data: \"id\",\r\n title: \"\",\r\n orderable: false,\r\n searchable: false,\r\n width: 50,\r\n className: 'text-align-center',\r\n render: _.bind(function (data, type, row) {\r\n let html = '
';\r\n if (this.options.canDelete && (!this.isChangeRequests || (!row.get('revenueLineItemId') && !row.get('costLineItemId')) || row.isNew())) {\r\n html += '';\r\n }\r\n html += '
';\r\n return html;\r\n }, this)\r\n });\r\n }\r\n return columns;\r\n },\r\n renderLineItemsTable: function () {\r\n this.data = _.sortBy(_.filter(this.collection.models, (model) => {\r\n return !model.get('delete');\r\n }), (model) => {\r\n return model.id;\r\n });\r\n let $dataTable = this.$('.line-items-table')\r\n this.dataTable = new PJQ.views.dataTables.DataTable({\r\n el: $dataTable,\r\n data: this.data,\r\n autoWidth: false,\r\n fixedHeader: {\r\n header: false,\r\n footer: false\r\n },\r\n hasFooter: true,\r\n extraClasses: this.isInvoices ? 'table-invoice-line-items' : '',\r\n isHideSearch: true,\r\n paging: false,\r\n order: [],\r\n language: {\r\n emptyTable: this.options.canEdit ? 'Click \"Add Line Item\" to create a new Line item' : 'No line items have been added yet'\r\n },\r\n columns: this.getColumns(),\r\n afterDataTableRender: _.bind(function () {\r\n this.renderInputs();\r\n if (this.isInvoices) {\r\n this.renderSubTemplate(true, this.options.subTemplates.invoiceHeader, this.$('thead').first(), {\r\n subJobs: this.subJobs,\r\n enableStoredMaterials: this.options.enableStoredMaterials,\r\n enableRetainage: this.options.enableRetainage,\r\n enableTax: this.options.enableTax,\r\n canEdit: this.options.canEdit,\r\n enableSelection: this.options.enableSelection\r\n }, {\r\n prepend: true\r\n });\r\n } else if (this.isChangeRequests && this.options.accountingMethod === PJQ.constants.budget.accountingMethod.UNIT_QUANTITY) {\r\n this.renderSubTemplate(true, this.options.subTemplates.changeRequestHeader, this.$('thead').first(), {\r\n subJobs: this.subJobs,\r\n enableSelection: this.options.enableSelection,\r\n canEdit: this.options.canEdit,\r\n accountingMethod: this.options.accountingMethod\r\n }, {\r\n prepend: true\r\n });\r\n }\r\n this.renderTableFooter(this.data);\r\n }, this),\r\n onRowRemoved: _.bind(function () {\r\n this.renderInputs();\r\n }, this),\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'Delete',\r\n isDanger: true,\r\n onClick: _.bind(function (row) {\r\n this.deleteLineItem(row);\r\n }, this),\r\n isShown: _.bind(function (row) {\r\n this.options.canEdit\r\n }, this),\r\n }\r\n ]\r\n },\r\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\r\n });\r\n },\r\n totalButtonClicked: function (e) {\r\n let $btn = $(e.currentTarget),\r\n fnName = $btn.data('fn'),\r\n fn = this.options[fnName];\r\n if (typeof fn === 'function') {\r\n fn();\r\n }\r\n },\r\n renderTableFooter: function () {\r\n if (this.dataTable && this.data) {\r\n let $footer = this.$('tfoot').first(),\r\n visibleCols = _.filter(this.getColumns(), function (column) {\r\n return column.visible !== false;\r\n });\r\n\r\n $footer.find('tr').remove();\r\n // _.each(visibleCols, function (column, index) {\r\n // if (typeof column.renderFooter === 'function') {\r\n // let $footerCol = $footer.find('th').eq(index);\r\n // $footerCol.html('
' + column.renderFooter(this.data) + '
');\r\n // }\r\n // }, this);\r\n\r\n let totalRows = [],\r\n lineItems = this.collection.models.filter((lineItem) => {\r\n return !lineItem.get('delete');\r\n });\r\n if (this.options.showSubTotal) {\r\n let sTotal = 0;\r\n _.each(lineItems, (lineItem) => {\r\n sTotal += lineItem.getSubTotal(this.options.financialMarkups, {\r\n costs: this.isChangeRequests && !this.options.showRevenue\r\n });\r\n });\r\n totalRows.push({\r\n label: 'Subtotal',\r\n amount: sTotal\r\n });\r\n }\r\n\r\n if (this.options.financialMarkups != null && this.options.showMarkup) {\r\n let markups = this.options.financialMarkups.getMarkups(lineItems);\r\n _.each(_.sortBy(_.filter(markups, (markup) => {\r\n return markup.isVertical;\r\n }), (markup) => {\r\n return markup.sortOrder;\r\n }), (vMarkup) => {\r\n totalRows.push({\r\n label: vMarkup.name + ' (' + PJQ.helpers.formatHelpers.formatPercent(vMarkup.model.get('percent') / 100) + ')',\r\n amount: vMarkup.amount\r\n });\r\n });\r\n }\r\n\r\n if (this.isInvoices) {\r\n if (this.options.enableRetainage) {\r\n let rtTotal = 0,\r\n rrTotal = 0;\r\n _.each(lineItems, (lineItem) => {\r\n rtTotal += lineItem.getRetainage();\r\n rrTotal += lineItem.getRetainageReleased();\r\n });\r\n\r\n if (rtTotal > 0) {\r\n totalRows.push({\r\n label: 'Retainage',\r\n amount: -rtTotal,\r\n extraClasses: 'text-danger'\r\n });\r\n }\r\n\r\n if (rrTotal > 0) {\r\n totalRows.push({\r\n label: 'Retainage Released',\r\n amount: rrTotal\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (this.options.enableTax) {\r\n let tTotal = 0;\r\n _.each(lineItems, (lineItem) => {\r\n tTotal += lineItem.getTaxAmount();\r\n });\r\n totalRows.push({\r\n label: 'Tax',\r\n amount: tTotal\r\n });\r\n }\r\n\r\n let grandTotal = 0;\r\n if (this.options.showGrandTotal) {\r\n _.each(lineItems, (lineItem) => {\r\n grandTotal += lineItem.getGrandTotal(this.options.financialMarkups, {\r\n totalMarkups: true,\r\n costs: this.isChangeRequests && !this.options.showRevenue\r\n });\r\n });\r\n }\r\n if (this.options.approvedChanges != null) {\r\n if (this.options.showGrandTotal) {\r\n totalRows.push({\r\n label: 'Original Contract',\r\n amount: grandTotal\r\n });\r\n }\r\n\r\n totalRows.push({\r\n label: 'Approved Changes',\r\n amount: this.options.approvedChanges,\r\n clickFn: typeof this.options.onApprovedChangesClicked === 'function' ? 'onApprovedChangesClicked' : null\r\n });\r\n\r\n if (this.options.showGrandTotal) {\r\n totalRows.push({\r\n label: 'Contract Total',\r\n amount: grandTotal + this.options.approvedChanges,\r\n bold: true\r\n });\r\n }\r\n } else if (this.options.showGrandTotal) {\r\n totalRows.push({\r\n bold: true,\r\n label: 'Grand Total',\r\n amount: grandTotal\r\n });\r\n }\r\n\r\n if (this.options.billedToDate != null) {\r\n let billed = null;\r\n if (typeof this.options.billedToDate === 'function') {\r\n billed = this.options.billedToDate();\r\n } else if (typeof this.options.billedToDate === 'number') {\r\n billed = this.options.billedToDate;\r\n }\r\n if (billed != null) {\r\n totalRows.push({\r\n label: 'Billed to Date',\r\n amount: billed,\r\n clickFn: typeof this.options.onBilledToDateClicked === 'function' ? 'onBilledToDateClicked' : null\r\n });\r\n }\r\n }\r\n\r\n _.each(totalRows, (item) => {\r\n if (_.size(item.label) === 0) {\r\n return;\r\n }\r\n\r\n let $totalRow = $(''),\r\n colOffset = this.options.canEdit ? 2 : 1;\r\n $totalRow.append('' + item.label + ':');\r\n\r\n let txt = '';\r\n if (_.size(item.clickFn) > 0) {\r\n txt = '' + PJQ.helpers.formatHelpers.formatCurrency(item.amount) + '';\r\n } else {\r\n txt = '' + PJQ.helpers.formatHelpers.formatCurrency(item.amount) + '';\r\n }\r\n\r\n $totalRow.append(' 1 ? ' border-right-0' : '') + '\">' + txt + '');\r\n if (colOffset > 1) {\r\n $totalRow.append('');\r\n }\r\n\r\n $footer.append($totalRow);\r\n });\r\n }\r\n },\r\n updateCommitmentForChangeRequestLineItem: function (lineItem, commitment) {\r\n if (!(lineItem.id > 0) && commitment != null && !(lineItem.get('costCodeId') > 0)) {\r\n let budgetCodes = _.uniq(_.map(commitment.lineItems.models, (lineItem) => {\r\n return lineItem.get('costCodeId') + '|' + lineItem.get('costTypeId');\r\n }));\r\n if (_.size(budgetCodes) === 1) {\r\n let bcSplit = budgetCodes[0].split('|'),\r\n costCodeId = parseInt(bcSplit[0]),\r\n costTypeId = parseInt(bcSplit[1]);\r\n lineItem.set({\r\n costCodeId: costCodeId,\r\n costTypeId: costTypeId\r\n })\r\n }\r\n }\r\n\r\n lineItem.set({\r\n vendor: commitment?.contractedContact?.toJSON(),\r\n vendorId: commitment?.contractedContact?.id,\r\n commitmentId: commitment?.id,\r\n commitmentNumber: commitment?.get('number')\r\n });\r\n\r\n lineItem.vendor = commitment?.contractedContact;\r\n },\r\n renderInputs: function () {\r\n PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.input-dollars-full'), 2, true);\r\n PJQ.helpers.inputHelpers.inputMaskPercent(this.$('.input-percent'), 2, true);\r\n PJQ.helpers.inputHelpers.inputMaskDecimal(this.$('.input-decimal'), 2);\r\n\r\n this.addListeners();\r\n if (!this.binder) {\r\n this.binder = new PJQ.Binder(this.$el, this.collection, {\r\n delegate: true,\r\n modelSelectorAttribute: 'id',\r\n idAttribute: 'cid',\r\n useDecimalPercentFields: true,\r\n watchElements: [\r\n 'input'\r\n ]\r\n });\r\n }\r\n\r\n if (this.isChangeRequests && this.options.canEdit) {\r\n let fnCommitmentToChoice = (commitment) => {\r\n return {\r\n id: commitment.id,\r\n name: '' + commitment.get('number') + '' + ' | ' + PJQ.helpers.formatHelpers.formatCurrency(commitment.getGrandTotal()) + '',\r\n subtext: commitment.contractedContact?.get('companyName') ?? ''\r\n };\r\n };\r\n this.commitmentPickerCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.collection.models, {\r\n pickerSelector: '.select-commitment',\r\n valueAttribute: 'commitmentId',\r\n selectPickerOptions: {\r\n isBlockSubtext: true,\r\n size: 5,\r\n choices: (model) => {\r\n if (model.get('costCodeId') > 0) {\r\n let suggested = [],\r\n others = [];\r\n _.each(this.projectCommitments.models, (commitment) => {\r\n if (null != commitment.lineItems.findWhere({\r\n costCodeId: model.get('costCodeId')\r\n })) {\r\n suggested.push(commitment);\r\n } else {\r\n others.push(commitment);\r\n }\r\n });\r\n if (_.size(suggested) > 0) {\r\n return [{\r\n name: 'Suggested',\r\n choices: _.map(suggested, fnCommitmentToChoice)\r\n }, {\r\n name: '',\r\n choices: _.map(others, fnCommitmentToChoice)\r\n }];\r\n }\r\n }\r\n return _.map(this.projectCommitments.models, fnCommitmentToChoice);\r\n }\r\n },\r\n onChange: (model, value) => {\r\n let commitment = this.projectCommitments.get(value);\r\n this.updateCommitmentForChangeRequestLineItem(model, commitment);\r\n\r\n let row = this.dataTable.getRow(model.cid);\r\n if (row) {\r\n this.dataTable.refreshRow(row);\r\n }\r\n\r\n this.renderLineItemsTable();\r\n }\r\n });\r\n\r\n let fnVendorToChoice = (commitment) => {\r\n return {\r\n id: commitment.contractedContact.id,\r\n name: '' + commitment.contractedContact.get('companyName') + '',\r\n subtext: commitment.contractedContact.get('contactName') ?? ''\r\n };\r\n };\r\n this.vendorPickerCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.collection.models, {\r\n pickerSelector: '.select-vendor',\r\n valueAttribute: 'vendorId',\r\n selectPickerOptions: {\r\n isBlockSubtext: true,\r\n size: 5,\r\n isIntChoices: true,\r\n choices: (model) => {\r\n let foundIds = [],\r\n suggested = [],\r\n others = [],\r\n costCodeId = model.get('costCodeId') > 0;\r\n _.each(this.projectCommitments.models, (commitment) => {\r\n if (commitment.contractedContact == null || -1 !== foundIds.indexOf(commitment.contractedContact.id)) {\r\n return;\r\n }\r\n\r\n if (costCodeId > 0 && null != commitment.lineItems.findWhere({\r\n costCodeId: costCodeId\r\n })) {\r\n suggested.push(commitment);\r\n } else {\r\n others.push(commitment);\r\n }\r\n });\r\n if (_.size(suggested) > 0) {\r\n return [{\r\n name: 'Suggested',\r\n choices: _.map(suggested, fnVendorToChoice)\r\n }, {\r\n name: '',\r\n choices: _.map(others, fnVendorToChoice)\r\n }];\r\n }\r\n return _.map(others, fnVendorToChoice);\r\n }\r\n },\r\n onChange: (model, value) => {\r\n let commitment = null,\r\n currentCommitment = this.projectCommitments.get(model.get('commitmentId')),\r\n matchCommitments;\r\n if (currentCommitment && currentCommitment.contractedContact && currentCommitment.contractedContact.id === value) {\r\n commitment = currentCommitment\r\n matchCommitments = this.projectCommitments.filter((commitment) => {\r\n return commitment.contractedContact && commitment.contractedContact.id === value;\r\n });\r\n } else {\r\n commitment = _.size(matchCommitments) === 1 ? matchCommitments[0] : commitment;\r\n matchCommitments = this.projectCommitments.filter((commitment) => {\r\n return commitment.contractedContact && commitment.contractedContact.id === value;\r\n });\r\n }\r\n\r\n this.updateCommitmentForChangeRequestLineItem(model, commitment);\r\n\r\n if (_.size(matchCommitments) > 0) {\r\n let vendor = matchCommitments[0].contractedContact;\r\n model.set({\r\n vendorId: value,\r\n vendor: vendor?.toJSON()\r\n });\r\n model.vendor = vendor;\r\n }\r\n\r\n let row = this.dataTable.getRow(model.cid);\r\n if (row) {\r\n this.dataTable.refreshRow(row);\r\n }\r\n\r\n this.renderLineItemsTable();\r\n\r\n this.nextInput('vendor', model);\r\n }\r\n });\r\n }\r\n\r\n if (this.isInvoices) {\r\n if (this.possibleLineItems != null) {\r\n this.lineItemPickerCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.collection.models, {\r\n pickerSelector: '.select-line-item',\r\n valueAttribute: 'lineItemId',\r\n selectPickerOptions: {\r\n isBlockSubtext: true,\r\n size: 5,\r\n choices: this.getPossibleLineItemOptions()\r\n },\r\n onChange: (model, value) => {\r\n let selectedItem = this.possibleLineItems.get(value);\r\n if (selectedItem != null) {\r\n model.set(selectedItem.attributes, {\r\n silent: true\r\n });\r\n let row = this.dataTable.getRow(model.cid);\r\n this.dataTable.refreshRow(row);\r\n\r\n this.nextInput('lineItem', model);\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n if (this.options.primeContract != null && this.options.filterToPrimeContractItems) {\r\n this.primeContractLineItemPickerCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.collection.models, {\r\n pickerSelector: '.select-prime-contract-item',\r\n valueAttribute: 'description',\r\n selectPickerOptions: {\r\n noneSelectedText: 'Select Item',\r\n isLiveSearch: true,\r\n isIntChoices: false,\r\n size: 8,\r\n isDisabled: _.bind(function (model) {\r\n return !model.isNew() || !this.options.canEdit;\r\n }, this),\r\n choices: this.getPrimeContractItemChoices()\r\n },\r\n onChange: (model, value) => {\r\n if (value === \"c652db68-5944-433e-99de-17c7d26bae45\") {\r\n this.options.addingNewContractLineItems.push(model.cid);\r\n this.dataTable.render();\r\n\r\n this.toggleInput('contractItem', model);\r\n } else {\r\n model.set('description', value);\r\n this.nextInput('pc_lineItem', model);\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (_.size(this.subJobs.models) > 0) {\r\n this.subJobPickerCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.collection.models, {\r\n pickerSelector: '.select-sub-job',\r\n valueAttribute: 'subJobId',\r\n selectPickerOptions: {\r\n noneSelectedText: 'Parent Job',\r\n isLiveSearch: true,\r\n isIntChoices: true,\r\n size: 8,\r\n isDisabled: _.bind(function (model) {\r\n return !model.isNew() || !this.options.canEdit;\r\n }, this),\r\n choices: _.union([{name: '', choices: {id: 0, name: 'Parent Job'}}], [{\r\n name: 'Sub Jobs', choices: _.map(this.subJobs.models, function (subJob) {\r\n return {\r\n id: subJob.id,\r\n name: subJob.get('name'),\r\n subtext: subJob.get('code')\r\n }\r\n }, this)\r\n }])\r\n },\r\n onChange: _.bind(function (model, value) {\r\n model.set('subJobId', value > 0 ? value : null);\r\n model.set('costCodeId', 0);\r\n\r\n let costCodePicker = this.costCodeSelectorCollection.pickers[model.cid];\r\n costCodePicker.render();\r\n\r\n this.nextInput('subJob', model);\r\n }, this)\r\n });\r\n }\r\n\r\n this.costCodeSelectorCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.collection.models, {\r\n pickerSelector: '.select-cost-code',\r\n valueAttribute: 'costCodeId',\r\n selectPickerOptions: {\r\n isLiveSearch: true,\r\n isIntChoices: true,\r\n hideDisabled: false,\r\n isDisabled: _.bind(function (model) {\r\n return !model.isNew() || !this.options.canEdit;\r\n }, this),\r\n choices: _.bind(function (model) {\r\n return this.getCostCodeOptions(model)\r\n }, this)\r\n },\r\n onChange: _.bind(function (model, value) {\r\n model.set('costCodeId', value);\r\n\r\n let costCode = this.costCodes.get(value),\r\n allowedCostTypeIds = costCode.get('costTypeIds');\r\n if (_.size(allowedCostTypeIds) > 0 && allowedCostTypeIds.indexOf(model.get('costTypeId')) === -1) {\r\n model.set('costTypeId', 0);\r\n }\r\n\r\n let costTypeSelector = this.costTypeSelectorCollection.pickers[model.cid];\r\n costTypeSelector.render();\r\n\r\n this.nextInput('costCode', model);\r\n }, this)\r\n });\r\n\r\n this.costTypeSelectorCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.collection.models, {\r\n pickerSelector: '.select-cost-type',\r\n valueAttribute: 'costTypeId',\r\n selectPickerOptions: {\r\n isIntChoices: true,\r\n isDisabled: _.bind(function (model) {\r\n return !model.isNew() || !this.options.canEdit || !(model.get('costCodeId') > 0);\r\n }, this),\r\n choices: _.bind(function (model) {\r\n return this.getCostTypeOptions(model)\r\n }, this)\r\n },\r\n onChange: _.bind(function (model, value) {\r\n model.set('costTypeId', value);\r\n\r\n if (typeof model.resetMarkup === 'function') {\r\n model.resetMarkup();\r\n }\r\n\r\n if (this.options.isBudget) {\r\n let hasSubJobs = _.size(this.subJobs) > 0,\r\n budgetLineItem = _.find(this.budget.lineItems.models, function (li) {\r\n if (hasSubJobs && li.get('subJobId') !== model.get('subJobId')) {\r\n return false;\r\n } else if (li.get('accountingMethod') === PJQ.constants.budget.accountingMethod.AMOUNT && this.options.accountingMethod !== li.get('accountingMethod')) {\r\n return false;\r\n }\r\n return li.get('costCodeId') === model.get('costCodeId')\r\n && li.get('costTypeId') === model.get('costTypeId');\r\n }, this);\r\n if (budgetLineItem != null) {\r\n let $line = this.getLineItemElement(model),\r\n budgetedCost = budgetLineItem.get('budgetedCost'),\r\n description = budgetLineItem.get('description');\r\n if (this.options.accountingMethod === PJQ.constants.budget.accountingMethod.UNIT_QUANTITY) {\r\n let quantity = budgetLineItem.get('quantity'),\r\n unitId = budgetLineItem.get('unitId'),\r\n unitPrice = budgetLineItem.get('unitPrice');\r\n model.set({\r\n description: description,\r\n quantity: quantity,\r\n unitId: unitId,\r\n unitPrice: unitPrice,\r\n budgetedCost: budgetedCost\r\n });\r\n $line.find('.input-quantity').val(quantity);\r\n $line.find('select.select-unit-type').val(unitId > 0 ? unitId.toString() : \"\").change();\r\n $line.find('.input-unit-price').val(PJQ.helpers.formatHelpers.formatCurrency(unitPrice));\r\n } else {\r\n model.set({\r\n description: budgetLineItem.get('description'),\r\n budgetedCost: budgetedCost\r\n });\r\n $line.find('.input-amount').val(PJQ.helpers.formatHelpers.formatCurrency(model.get('budgetedCost')));\r\n }\r\n $line.find('.input-description').val(model.get('description'));\r\n }\r\n }\r\n this.nextInput('costType', model);\r\n }, this)\r\n });\r\n\r\n this.taxCodeSelectorCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.collection.models, {\r\n pickerSelector: '.select-tax-code',\r\n valueAttribute: 'taxCodeId',\r\n selectPickerOptions: {\r\n isLiveSearch: true,\r\n isIntChoices: true,\r\n isDisabled: (model) => {\r\n return !this.options.canEdit;\r\n },\r\n choices: (model) => {\r\n return [{\r\n id: 0,\r\n name: 'N/A'\r\n }, ..._.map(this.taxCodes.models, function (taxCode) {\r\n return {\r\n id: taxCode.id,\r\n name: taxCode.get('code') + \" (\" + PJQ.helpers.formatHelpers.formatPercent(taxCode.get('rate') / 100) + \")\"\r\n }\r\n }, this)];\r\n }\r\n },\r\n onChange: _.bind(function (model, value) {\r\n let taxCode = this.taxCodes.get(value);\r\n model.set({\r\n taxCodeId: taxCode ? taxCode.id : null,\r\n taxRate: taxCode ? taxCode.get('rate') : 0\r\n });\r\n\r\n this.nextInput('taxCode', model);\r\n }, this)\r\n });\r\n\r\n new PJQ.inputs.SelectPickerCollection(this.$el, this.collection.models, {\r\n pickerSelector: '.select-unit-type',\r\n valueAttribute: 'unitId',\r\n selectPickerOptions: {\r\n isIntChoices: true,\r\n isDisabled: function (model) {\r\n return !model.isNew();\r\n },\r\n choices: _.bind(function (model) {\r\n return _.map(this.unitsOfMeasure.models, function (unit) {\r\n return {\r\n id: unit.id,\r\n name: unit.get('name')\r\n }\r\n });\r\n }, this)\r\n },\r\n onChange: _.bind(function (model, value) {\r\n model.set('unitId', value);\r\n\r\n this.nextInput('unitType', model);\r\n }, this)\r\n });\r\n }\r\n\r\n if (this.options.canEdit && this.focusLineItem != null) {\r\n if (this.isInvoices) {\r\n this.toggleInput('lineItem', this.focusLineItem);\r\n } else if (this.options.filterToPrimeContractItems) {\r\n this.toggleInput('pc_lineItem', this.focusLineItem);\r\n } else if (_.size(this.subJobs) > 0) {\r\n this.toggleInput('subJob', this.focusLineItem);\r\n } else {\r\n this.toggleInput('costCode', this.focusLineItem);\r\n }\r\n this.focusLineItem = null;\r\n }\r\n },\r\n updateLineItemRow: function (lineItem) {\r\n let $line = this.getLineItemElement(lineItem);\r\n if (this.options.isBudget) {\r\n $line.find('.label-amount').text(PJQ.helpers.formatHelpers.formatCurrency(this.options.isBudget ? lineItem.get('budgetedCost') : lineItem.get('amount')));\r\n return;\r\n }\r\n\r\n let subTotal = lineItem.getSubTotal(this.options.financialMarkups),\r\n progress = lineItem.get('progressAmount');\r\n if (progress != null) {\r\n let amtRemain = subTotal - progress;\r\n $line.find('.label-amount-remaining').text(PJQ.helpers.formatHelpers.formatCurrency(amtRemain));\r\n }\r\n\r\n if (this.options.financialMarkups != null) {\r\n _.each(this.options.financialMarkups.models, (markup) => {\r\n let amt = lineItem.getMarkupAmount(this.options.financialMarkups, {cid: markup.cid});\r\n $line.find('.label-markup-amount-' + markup.cid.toString()).text(PJQ.helpers.formatHelpers.formatCurrency(amt));\r\n });\r\n }\r\n\r\n if (this.options.enableTax) {\r\n $line.find('.label-tax-amount').text(PJQ.helpers.formatHelpers.formatCurrency(lineItem.get('taxAmount')));\r\n }\r\n\r\n $line.find('.label-subtotal').text(PJQ.helpers.formatHelpers.formatCurrency(subTotal));\r\n $line.find('.label-amount').text(PJQ.helpers.formatHelpers.formatCurrency(lineItem.get('amount')));\r\n },\r\n nextInput: function (prevInput, lineItem) {\r\n switch (prevInput) {\r\n case 'pc_lineItem':\r\n if (this.subJobPickerCollection != null) {\r\n this.toggleInput('subJob', lineItem);\r\n } else {\r\n this.toggleInput('costCode', lineItem);\r\n }\r\n break;\r\n case 'subJob':\r\n this.toggleInput('costCode', lineItem);\r\n break;\r\n case 'costCode':\r\n if (lineItem.get('costCodeId') > 0 && !(lineItem.get('costTypeId') > 0)) {\r\n this.toggleInput('costType', lineItem);\r\n }\r\n break;\r\n case 'costType':\r\n if (this.isChangeRequests) {\r\n this.toggleInput('vendor', lineItem);\r\n } else {\r\n this.toggleInput('description', lineItem);\r\n }\r\n break;\r\n case 'vendor':\r\n if (lineItem.get('commitmentId') == null) {\r\n this.toggleInput('commitment', lineItem);\r\n } else {\r\n this.toggleInput('description', lineItem);\r\n }\r\n break;\r\n case 'commitment':\r\n this.toggleInput('description', lineItem);\r\n break;\r\n case 'taxCode':\r\n\r\n break;\r\n case 'unitType':\r\n\r\n break;\r\n }\r\n },\r\n getPrimeContractItemChoices: function () {\r\n let choices = _.map(this.options.primeContract.lineItems.models.sort((a, b) => {\r\n return PJQ.helpers.sortHelpers.sortAlphaNum(a.get('description') ?? \"\", b.get('description') ?? \"\");\r\n }), (lineItem) => {\r\n return {\r\n id: _.size(lineItem.get('description')) > 0 ? lineItem.get('description') : (this.costCodes.get(lineItem.get('costCodeId')).get('name') + ' - ' + this.costTypes.get(lineItem.get('costTypeId')).get('name')),\r\n name: _.size(lineItem.get('description')) > 0 ? lineItem.get('description') : (this.costCodes.get(lineItem.get('costCodeId')).get('name') + ' - ' + this.costTypes.get(lineItem.get('costTypeId')).get('name'))\r\n };\r\n });\r\n\r\n // choices.unshift({\r\n // id: \"c652db68-5944-433e-99de-17c7d26bae45\",\r\n // name: 'New Item'\r\n // })\r\n\r\n return choices;\r\n },\r\n toggleInput: function (input, lineItem) {\r\n if (!this.options.canEdit) {\r\n return false;\r\n }\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n switch (input) {\r\n case 'lineItem':\r\n if (this.lineItemPickerCollection == null) {\r\n return false;\r\n }\r\n\r\n let lineItemPicker = this.lineItemPickerCollection.getPickerForId(lineItem.cid);\r\n if (lineItemPicker != null) {\r\n setTimeout(() => {\r\n lineItemPicker.toggle();\r\n }, 100);\r\n }\r\n break;\r\n case 'pc_lineItem':\r\n if (this.primeContractLineItemPickerCollection == null) {\r\n return false;\r\n }\r\n\r\n let pcLineItemPicker = this.primeContractLineItemPickerCollection.getPickerForId(lineItem.cid);\r\n if (pcLineItemPicker != null) {\r\n setTimeout(() => {\r\n pcLineItemPicker.toggle();\r\n }, 100);\r\n }\r\n break;\r\n case 'subJob':\r\n if (this.subJobPickerCollection == null) {\r\n return false;\r\n }\r\n\r\n let subJobPicker = this.subJobPickerCollection.getPickerForId(lineItem.cid);\r\n if (subJobPicker != null) {\r\n setTimeout(() => {\r\n subJobPicker.toggle();\r\n }, 100);\r\n }\r\n break;\r\n case 'costCode':\r\n if (this.costCodeSelectorCollection == null) {\r\n return false;\r\n }\r\n\r\n let costCodePicker = this.costCodeSelectorCollection.getPickerForId(lineItem.cid);\r\n if (costCodePicker != null) {\r\n setTimeout(() => {\r\n costCodePicker.toggle();\r\n }, 100);\r\n }\r\n break;\r\n case 'costType':\r\n if (this.costTypeSelectorCollection == null) {\r\n return false;\r\n }\r\n\r\n let costTypePicker = this.costTypeSelectorCollection.getPickerForId(lineItem.cid);\r\n if (costTypePicker != null) {\r\n setTimeout(() => {\r\n costTypePicker.toggle();\r\n }, 100);\r\n }\r\n break\r\n case 'vendor':\r\n if (this.vendorPickerCollection == null) {\r\n return false;\r\n }\r\n\r\n let vendorPicker = this.vendorPickerCollection.getPickerForId(lineItem.cid);\r\n if (vendorPicker != null) {\r\n setTimeout(() => {\r\n vendorPicker.toggle();\r\n }, 100)\r\n }\r\n break;\r\n case 'commitment':\r\n if (this.commitmentPickerCollection == null) {\r\n return false;\r\n }\r\n\r\n let commitmentPicker = this.commitmentPickerCollection.getPickerForId(lineItem.cid);\r\n if (commitmentPicker != null) {\r\n setTimeout(() => {\r\n commitmentPicker.toggle();\r\n }, 100)\r\n }\r\n break;\r\n case 'description':\r\n $line.find('.input-description').focus();\r\n break;\r\n case 'contractItem':\r\n $line.find('.input-contract-item').focus();\r\n break;\r\n case 'amount':\r\n $line.find('.input-amount').focus();\r\n break;\r\n case 'revenue':\r\n $line.find('.input-revenue').focus();\r\n break;\r\n case 'taxCode':\r\n\r\n break;\r\n case 'unitType':\r\n\r\n break;\r\n }\r\n\r\n return true;\r\n },\r\n addListeners: function () {\r\n this.stopListening(this.collection);\r\n if (!this.isInvoices) {\r\n this.listenTo(this.collection, 'change:amount change:taxRate change:costCodeId change:costTypeId', (lineItem) => {\r\n if (typeof lineItem.resetMarkup === 'function') {\r\n lineItem.resetMarkup();\r\n }\r\n\r\n if (lineItem.get('taxRate') > 0 || lineItem.get('taxAmount') > 0) {\r\n lineItem.set('taxAmount', lineItem.getTaxAmount());\r\n }\r\n\r\n this.updateLineItemRow(lineItem);\r\n this.renderTotals();\r\n });\r\n\r\n this.listenTo(this.collection, 'change', _.bind(function (lineItem) {\r\n this.updateAccountingMethodSelector();\r\n this.updateLineItemRow(lineItem);\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:quantity change:unitPrice', _.bind(function (lineItem) {\r\n let amount = lineItem.get('unitPrice') * lineItem.get('quantity');\r\n if (this.options.isBudget) {\r\n lineItem.set({\r\n budgetedCost: amount\r\n });\r\n } else {\r\n lineItem.set({\r\n amount: amount\r\n });\r\n }\r\n this.updateLineItemRow(lineItem);\r\n }, this));\r\n\r\n if (this.isChangeRequests) {\r\n this.listenTo(this.collection, 'change:amount', (lineItem) => {\r\n let cost = lineItem.get('amount');\r\n if (this.options.copyCostToRevenue && lineItem.get('costLineItemId') == null) {\r\n lineItem.set({\r\n revenue: cost ?? 0\r\n });\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-revenue').val(PJQ.helpers.formatHelpers.formatCurrency(cost));\r\n }\r\n\r\n this.updateLineItemRow(lineItem);\r\n this.renderTotals();\r\n });\r\n }\r\n } else {\r\n if (this.options.enableTax) {\r\n this.listenTo(this.collection, 'change', _.bind(function (lineItem) {\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.label-tax-amount').text(PJQ.helpers.formatHelpers.formatCurrency(lineItem.get('taxAmount')));\r\n }, this));\r\n }\r\n\r\n this.listenTo(this.collection, 'change:workRetainage change:materialRetainage change:workRetainageReleased change:materialRetainageReleased', _.bind(function (lineItem) {\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.label-work-retainage-remaining').text(PJQ.helpers.formatHelpers.formatCurrency(lineItem.getWorkRetainageRemaining(this.model)));\r\n $line.find('.label-material-retainage-remaining').text(PJQ.helpers.formatHelpers.formatCurrency(lineItem.getMaterialRetainageRemaining(this.model)));\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:materialsNew change:progressAmount', _.bind(function (lineItem) {\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.label-total-completed').text(PJQ.helpers.formatHelpers.formatCurrency(lineItem.getTotalCompleteAndStored(this.model)));\r\n $line.find('.label-balance-to-finish').text(PJQ.helpers.formatHelpers.formatCurrency(lineItem.getBalanceToFinish(this.model)));\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:progressAmount', _.bind(function (lineItem, id, opts) {\r\n if (opts && opts.percentUpdate) {\r\n return;\r\n }\r\n\r\n let $line = this.getLineItemElement(lineItem),\r\n amount = lineItem.get('progressAmount'),\r\n stored = lineItem.get('materialsStoredTotal'),\r\n nem = lineItem.get('materialsNew'),\r\n committed = lineItem.get('committedAmount'),\r\n totalProgress = amount + lineItem.get('progressAmountTotal');\r\n if (totalProgress > committed) {\r\n amount = committed - lineItem.get('progressAmountTotal') - stored - nem;\r\n lineItem.set('progressAmount', amount);\r\n\r\n totalProgress = amount + lineItem.get('progressAmountTotal');\r\n\r\n $line.find('.input-progress-amount').val(PJQ.helpers.formatHelpers.formatCurrency(amount));\r\n }\r\n\r\n let percent = (totalProgress / (committed - stored - nem)) * 100;\r\n percent = Math.round(percent * 100) / 100;\r\n\r\n $line.find('.input-progress-percent').val(PJQ.helpers.formatHelpers.formatPercent(percent));\r\n lineItem.set('progressPercent', percent, {\r\n silent: true\r\n });\r\n\r\n if (lineItem.get('taxRate') > 0 || lineItem.get('taxAmount') > 0) {\r\n lineItem.set('taxAmount', lineItem.getTaxAmount());\r\n }\r\n\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:progressPercent change:materialsNew', _.bind(function (lineItem) {\r\n let percent = lineItem.get('progressPercent'),\r\n // totalProgressPercent = lineItem.get('progressPercentTotal'),\r\n $line = this.getLineItemElement(lineItem);\r\n\r\n if (percent > 100) {\r\n percent = 100;\r\n lineItem.set('progressPercent', percent);\r\n $line.find('.input-progress-percent').val(PJQ.helpers.formatHelpers.formatPercent(percent));\r\n }\r\n\r\n let committed = lineItem.get('committedAmount'),\r\n totalProgress = lineItem.get('progressAmountTotal'),\r\n stored = lineItem.get('materialsStoredTotal'),\r\n nem = lineItem.get('materialsNew'),\r\n amount = Math.round(((committed - stored - nem) * (percent / 100)) - totalProgress);\r\n\r\n let billableNow = committed - stored - nem - totalProgress;\r\n if ((billableNow < 0 && amount < billableNow) || (billableNow > 0 && amount > billableNow)) {\r\n amount = 0;\r\n }\r\n\r\n if (lineItem.get('taxRate') > 0 || lineItem.get('taxAmount') > 0) {\r\n lineItem.set('taxAmount', lineItem.getTaxAmount());\r\n }\r\n\r\n $line.find('.input-progress-amount').val(PJQ.helpers.formatHelpers.formatCurrency(amount));\r\n lineItem.set({\r\n progressAmount: amount\r\n }, {\r\n percentUpdate: true\r\n });\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:materialsNew', _.bind(function (lineItem, id, opts) {\r\n if (opts.percentUpdate) {\r\n return;\r\n }\r\n\r\n let stored = lineItem.get('materialsStoredTotal'),\r\n nem = lineItem.get('materialsNew'),\r\n percent = lineItem.get('materialRetainagePercent'),\r\n materialRetainage = (stored + nem) * (percent / 100);\r\n\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-material-retainage-amount').val(materialRetainage / 100);\r\n lineItem.set({\r\n materialRetainage: materialRetainage\r\n });\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:workRetainage', _.bind(function (lineItem, id, opts) {\r\n if (opts.percentUpdate) {\r\n return;\r\n }\r\n\r\n let amount = lineItem.get('workRetainage'),\r\n percent = (amount / lineItem.get('progressAmount')) * 100;\r\n percent = Math.round(percent * 100) / 100;\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-work-retainage-percent').val(PJQ.helpers.formatHelpers.formatPercent(percent));\r\n lineItem.set({\r\n workRetainagePercent: percent\r\n }, {\r\n silent: true\r\n });\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:workRetainagePercent change:progressAmount', _.bind(function (lineItem) {\r\n let percent = lineItem.get('workRetainagePercent'),\r\n amount = Math.round(lineItem.get('progressAmount') * (percent / 100));\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-work-retainage-amount').val(PJQ.helpers.formatHelpers.formatCurrency(amount));\r\n lineItem.set({\r\n workRetainage: amount\r\n }, {\r\n percentUpdate: true\r\n });\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:materialRetainage', _.bind(function (lineItem, id, opts) {\r\n if (opts.percentUpdate) {\r\n return;\r\n }\r\n\r\n let amount = lineItem.get('materialRetainage'),\r\n percent = (amount / lineItem.get('materialsNew')) * 100;\r\n percent = Math.round(percent * 100) / 100;\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-material-retainage-percent').val(PJQ.helpers.formatHelpers.formatPercent(percent));\r\n lineItem.set({\r\n materialRetainagePercent: percent\r\n }, {\r\n silent: true\r\n });\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:materialRetainagePercent', _.bind(function (lineItem) {\r\n let percent = lineItem.get('materialRetainagePercent'),\r\n amount = Math.round(lineItem.get('materialsNew') * (percent / 100));\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-material-retainage-amount').val(PJQ.helpers.formatHelpers.formatCurrency(amount));\r\n lineItem.set({\r\n materialRetainage: amount\r\n }, {\r\n percentUpdate: true\r\n });\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:workRetainageReleased', _.bind(function (lineItem, id, opts) {\r\n if (opts.percentUpdate) {\r\n return;\r\n }\r\n\r\n let amount = lineItem.get('workRetainageReleased'),\r\n retainage = lineItem.getWorkRetainageTotal(),\r\n percent = (amount / retainage) * 100;\r\n percent = Math.round(percent * 100) / 100;\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-work-retainage-released-percent').val(PJQ.helpers.formatHelpers.formatPercent(percent));\r\n lineItem.set({\r\n workRetainageReleasedPercent: percent\r\n }, {\r\n silent: true\r\n });\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:workRetainageReleasedPercent change:workRetainage', _.bind(function (lineItem) {\r\n let percent = lineItem.get('workRetainageReleasedPercent'),\r\n retainage = lineItem.getWorkRetainageTotal(),\r\n amount = Math.round(retainage * (percent / 100));\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-work-retainage-released-amount').val(PJQ.helpers.formatHelpers.formatCurrency(amount));\r\n lineItem.set({\r\n workRetainageReleased: amount\r\n }, {\r\n percentUpdate: true\r\n });\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:materialRetainageReleased', _.bind(function (lineItem, id, opts) {\r\n if (opts.percentUpdate) {\r\n return;\r\n }\r\n\r\n let amount = lineItem.get('materialRetainageReleased'),\r\n retainage = lineItem.getMaterialRetainageTotal(),\r\n percent = (amount / retainage) * 100;\r\n\r\n percent = Math.round(percent * 100) / 100;\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-material-retainage-released-percent').val(PJQ.helpers.formatHelpers.formatPercent(percent));\r\n lineItem.set({\r\n materialRetainageReleasedPercent: percent\r\n }, {\r\n silent: true\r\n });\r\n this.renderTotals();\r\n }, this));\r\n\r\n this.listenTo(this.collection, 'change:materialRetainageReleasedPercent change:materialRetainage', _.bind(function (lineItem) {\r\n let percent = lineItem.get('materialRetainageReleasedPercent'),\r\n retainage = lineItem.getMaterialRetainageTotal(),\r\n amount = Math.round(retainage * (percent / 100));\r\n\r\n let $line = this.getLineItemElement(lineItem);\r\n $line.find('.input-material-retainage-released-amount').val(PJQ.helpers.formatHelpers.formatCurrency(amount));\r\n lineItem.set({\r\n materialRetainageReleased: amount\r\n }, {\r\n percentUpdate: true\r\n });\r\n this.renderTotals();\r\n }, this));\r\n }\r\n },\r\n getPossibleLineItems: function () {\r\n let result = [];\r\n _.each(this.possibleLineItems.models, function (pLineItem) {\r\n let exists = null != _.find(this.model.lineItems.models, function (li) {\r\n return !li.get('delete') && li.get('lineItemId') === pLineItem.get('lineItemId')\r\n && (li.get('commitmentId') === pLineItem.get('commitmentId')\r\n || li.get('changeOrderId') === pLineItem.get('changeOrderId'));\r\n });\r\n if (!exists) {\r\n result.push(pLineItem);\r\n }\r\n }, this);\r\n return result;\r\n },\r\n getPossibleLineItemOptions: function () {\r\n let contractNumber = '',\r\n contractLines = [],\r\n changes = {};\r\n _.each(this.getPossibleLineItems(), function (pLineItem) {\r\n let costCode = this.costCodes.get(pLineItem.get('costCodeId')),\r\n costType = this.costTypes.get(pLineItem.get('costTypeId'));\r\n if (costCode != null && costType != null) {\r\n let choice = {\r\n id: pLineItem.cid,\r\n name: '' + costCode.getDisplayName() + '' + ' - ' + costType.get('name'),\r\n subtext: PJQ.helpers.formatHelpers.formatCurrency(pLineItem.get('committedAmount'))\r\n };\r\n let changeOrderId = pLineItem.get('changeOrderId');\r\n if (changeOrderId > 0) {\r\n if (changes[changeOrderId] == null) {\r\n changes[changeOrderId] = {\r\n name: pLineItem.get('changeOrderNumber'),\r\n choices: []\r\n };\r\n }\r\n changes[changeOrderId].choices.push(choice);\r\n } else {\r\n contractNumber = _.size(pLineItem.get('commitmentNumber')) > 0 ? pLineItem.get('commitmentNumber') : pLineItem.get('primeContractNumber');\r\n contractLines.push(choice);\r\n }\r\n }\r\n }, this);\r\n return [\r\n {\r\n name: contractNumber ?? \"\",\r\n choices: contractLines\r\n },\r\n ..._.map(changes, (obj) => {\r\n return obj;\r\n })\r\n ];\r\n },\r\n getCostCodeOptions: function (model) {\r\n let subJob = this.subJobs.get(model.get('subJobId')),\r\n budgeted = [],\r\n unBudgeted = [],\r\n filteredCostCodes = _.filter(this.costCodes.models, function (costCode) {\r\n if (subJob == null) {\r\n return costCode.get('subJobId') == null\r\n }\r\n return costCode.get('subJobId') === subJob.id;\r\n });\r\n\r\n if (this.options.filterToCommitmentCostCodes && this.options.commitment != null) {\r\n filteredCostCodes = _.filter(filteredCostCodes, (costCode) => {\r\n return null != this.options.commitment.lineItems.findWhere({costCodeId: costCode.id});\r\n });\r\n }\r\n\r\n if (_.size(filteredCostCodes) === 0) {\r\n return [{\r\n id: 0,\r\n name: 'No cost codes found',\r\n disabled: true\r\n }];\r\n }\r\n\r\n _.each(filteredCostCodes.sort((c1, c2) => {\r\n return PJQ.helpers.sortHelpers.sortAlphaNum(c1.get('code'), c2.get('code'));\r\n }), function (costCode) {\r\n let choice = {\r\n id: costCode.id,\r\n name: costCode.getDisplayName()\r\n };\r\n if (this.budget != null && null == _.find(this.budget.lineItems.models, function (lineItem) {\r\n return !lineItem.get('isUnBudgeted') && lineItem.get('costCodeId') === costCode.id\r\n && ((subJob == null && !(lineItem.get('subJobId') > 0)) || lineItem.get('subJobId') === subJob.id);\r\n })) {\r\n unBudgeted.push(choice);\r\n } else {\r\n budgeted.push(choice);\r\n }\r\n }, this);\r\n return [\r\n {\r\n name: \"Budgeted\",\r\n choices: budgeted\r\n },\r\n {\r\n name: \"Un-Budgeted\",\r\n choices: unBudgeted\r\n }\r\n ];\r\n },\r\n getCostTypeOptions: function (model) {\r\n let costCode = this.costCodes.get(model.get('costCodeId'));\r\n if (costCode == null) {\r\n return [];\r\n }\r\n\r\n let budgeted = [],\r\n unBudgeted = [],\r\n allowedCostTypes = costCode.get('costTypeIds'),\r\n filteredCostTypes = _.filter(this.costTypes.models, function (costType) {\r\n return (_.size(allowedCostTypes) === 0 || allowedCostTypes.indexOf(costType.id) !== -1);\r\n });\r\n\r\n if (this.options.filterToCommitmentCostCodes && this.options.commitment != null) {\r\n filteredCostTypes = _.filter(this.costTypes.models, (costType) => {\r\n return null != this.options.commitment.lineItems.findWhere({costTypeId: costType.id});\r\n });\r\n }\r\n\r\n if (this.options.project\r\n && PJQ.app.session.erpIntegration\r\n && PJQ.app.session.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.REQUIRE_SYNCED_COST_TYPES)) {\r\n let filterUnsyncedCostTypes = _.bind(function () {\r\n if (this.options.project.get('externalObject') != null) {\r\n filteredCostTypes = _.filter(filteredCostTypes, (costType) => {\r\n return costType.get('externalObject') != null;\r\n })\r\n }\r\n }, this)\r\n\r\n if (!this.options.project.erpObjectFetched) {\r\n this.options.project.fetchERPObject(filterUnsyncedCostTypes());\r\n } else {\r\n filterUnsyncedCostTypes();\r\n }\r\n }\r\n\r\n if (this.budget == null) {\r\n return _.map(filteredCostTypes, (costType) => {\r\n return {\r\n id: costType.id,\r\n name: costType.get('name')\r\n };\r\n });\r\n }\r\n\r\n _.each(filteredCostTypes, function (costType) {\r\n let choice = {\r\n id: costType.id,\r\n name: costType.get('name')\r\n };\r\n if (null == _.find(this.budget.lineItems.models, function (lineItem) {\r\n return !lineItem.get('isUnBudgeted') && lineItem.get('costCodeId') === costCode.id\r\n && lineItem.get('costTypeId') === costType.id;\r\n })) {\r\n unBudgeted.push(choice);\r\n } else {\r\n budgeted.push(choice);\r\n }\r\n }, this);\r\n return [\r\n {\r\n name: \"Budgeted\",\r\n choices: budgeted\r\n },\r\n {\r\n name: \"Un-Budgeted\",\r\n choices: unBudgeted\r\n }\r\n ];\r\n },\r\n getLineItemForInput: function ($input) {\r\n if ($input == null || this.dataTable == null) {\r\n return null;\r\n }\r\n let row = this.dataTable.getRow($input.closest('tr'));\r\n if (row) {\r\n return row.data();\r\n }\r\n return null;\r\n },\r\n getLineItemRow: function (lineItem) {\r\n if (lineItem == null || this.dataTable == null) {\r\n return null;\r\n }\r\n return this.dataTable.getRow(lineItem.cid);\r\n },\r\n getLineItemElement: function (lineItem) {\r\n let row = this.getLineItemRow(lineItem);\r\n if (row) {\r\n return $(row.node());\r\n }\r\n return null;\r\n },\r\n addLineItem: function () {\r\n let newLineItem = new this.options.lineItemModel({\r\n description: '',\r\n quantity: 0,\r\n unitPrice: 0,\r\n amount: 0,\r\n taxAmount: 0,\r\n taxRate: 0,\r\n amountRemaining: 0,\r\n billedToDate: 0,\r\n accountingMethod: this.options.accountingMethod\r\n });\r\n\r\n let fnAdd = () => {\r\n this.focusLineItem = newLineItem;\r\n this.collection.add(newLineItem);\r\n this.renderLineItemsTable();\r\n if (typeof this.options.onLineItemAdd === 'function') {\r\n this.options.onLineItemAdd(newLineItem);\r\n }\r\n }\r\n if (this.isInvoices) {\r\n this.model.fetchPossibleLineItems(_.bind(function (pLineItems) {\r\n this.possibleLineItems = pLineItems;\r\n\r\n if (_.size(this.getPossibleLineItems()) === 0) {\r\n new PJQ.Alert(this.$('.line-items-table'), {\r\n type: 'warning',\r\n text: 'All line items from the related commitment and change orders are already added',\r\n timeout: 3000,\r\n extraClasses: ['mt-2'],\r\n isPrepend: true\r\n });\r\n this.$('.btn-grp-add-line-item').prop('disabled', true);\r\n } else {\r\n fnAdd();\r\n }\r\n }, this));\r\n } else if (this.options.filterToCommitmentCostCodes && (this.options.commitment != null || this.options.commitmentId > 0)) {\r\n if (this.options.commitment == null) {\r\n this.options.commitment = new PJQ.models.commitments.Commitment({\r\n id: this.options.commitmentId\r\n });\r\n }\r\n\r\n if (!this.options.commitment.isFetched) {\r\n this.options.commitment.fetch({\r\n success: _.bind(function () {\r\n fnAdd();\r\n }, this)\r\n });\r\n } else {\r\n fnAdd();\r\n }\r\n } else if (this.options.filterToPrimeContractItems && (this.options.primeContract != null || this.options.primeContractId > 0)) {\r\n if (this.options.primeContract == null) {\r\n this.options.primeContract = new PJQ.models.primeContracts.PrimeContract({\r\n id: this.options.primeContractId\r\n });\r\n }\r\n\r\n if (!this.options.primeContract.isFetched) {\r\n this.options.primeContract.fetch({\r\n success: _.bind(function () {\r\n fnAdd();\r\n }, this)\r\n });\r\n } else {\r\n fnAdd();\r\n }\r\n } else {\r\n fnAdd();\r\n }\r\n },\r\n addFromChangeRequests: function () {\r\n new PJQ.views.changeRequests.SelectChangeRequestsModal({\r\n isSingleChoice: false,\r\n project: this.options.project,\r\n primeContractId: this.options.primeContractId,\r\n headerSubText: 'Select the Change Requests you would like to add line items from.',\r\n filterStatuses: PJQ.constants.changeRequests.changeRequestStatus.APPROVED,\r\n onSave: _.bind(function (changeRequests) {\r\n let changeRequestIds = _.map(changeRequests, function (model) {\r\n return model.id;\r\n }, this);\r\n\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'changerequests'\r\n },\r\n {\r\n endpoint: 'lineitems'\r\n }\r\n ]),\r\n data: changeRequestIds,\r\n isAPIv2: true\r\n }).post().done(_.bind(function (lineItems) {\r\n let availableLineItems = _.filter(lineItems, function (lineItem) {\r\n if (this.isCCO || this.isCommitments) {\r\n return lineItem.costLineItemId == null;\r\n } else {\r\n return lineItem.revenueLineItemId == null;\r\n }\r\n }, this);\r\n\r\n if (_.size(availableLineItems) > 0) {\r\n _.each(availableLineItems, function (lineItem) {\r\n let lineItemModel = new this.options.lineItemModel({\r\n changeRequestLineItemId: lineItem.id,\r\n amount: lineItem.amount,\r\n markupAmount: lineItem.markupAmount,\r\n taxAmount: lineItem.taxAmount,\r\n number: lineItem.number,\r\n costCodeId: lineItem.costCodeId,\r\n costTypeId: lineItem.costTypeId,\r\n subJobId: lineItem.subJobId,\r\n description: lineItem.description,\r\n unitId: lineItem.unitId,\r\n quantity: lineItem.quantity,\r\n unitPrice: lineItem.unitPrice,\r\n progressQuantity: lineItem.progressQuantity,\r\n progressPercent: lineItem.progressPercent,\r\n progressAmount: lineItem.progressAmount,\r\n workRetainage: lineItem.workRetainage,\r\n workRetainageReleased: lineItem.workRetainageReleased,\r\n materialRetainage: lineItem.materialRetainage,\r\n materialRetainageReleased: lineItem.materialRetainageReleased,\r\n taxCodeId: lineItem.taxCodeId\r\n });\r\n this.collection.add(lineItemModel);\r\n\r\n if (typeof this.options.onLineItemAdd === 'function') {\r\n this.options.onLineItemAdd(lineItemModel);\r\n }\r\n }, this);\r\n\r\n this.renderLineItemsTable();\r\n this.renderTotals();\r\n } else {\r\n new PJQ.Alert(this.$('.line-items-table'), {\r\n type: 'warning',\r\n text: 'All line items from the selected Change Requests have already been assigned',\r\n timeout: 5000,\r\n extraClasses: ['mt-2'],\r\n isPrepend: true\r\n });\r\n }\r\n }, this));\r\n }, this)\r\n });\r\n },\r\n addFromCommitments: function () {\r\n new PJQ.views.commitments.SelectCommitmentsModal({\r\n isSingleChoice: false,\r\n project: this.options.project,\r\n headerSubText: 'Select the Commitments you would like to add line items from.',\r\n filterStatuses: PJQ.constants.commitments.commitmentStatus.APPROVED,\r\n onSave: (commitments) => {\r\n let commitmentIds = _.map(commitments, function (model) {\r\n return model.id;\r\n }, this);\r\n\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'commitments'\r\n },\r\n {\r\n endpoint: 'lineitems'\r\n }\r\n ]),\r\n data: commitmentIds,\r\n isAPIv2: true\r\n }).post().done(_.bind(function (lineItems) {\r\n let availableLineItems = _.filter(lineItems, function (lineItem) {\r\n return lineItem.changeRequestLineItemId == null;\r\n }, this);\r\n\r\n if (_.size(availableLineItems) > 0) {\r\n _.each(availableLineItems, function (lineItem) {\r\n let lineItemModel = new this.options.lineItemModel({\r\n commitmentId: lineItem.commitmentId,\r\n amount: lineItem.amount,\r\n number: lineItem.number,\r\n costCodeId: lineItem.costCodeId,\r\n costTypeId: lineItem.costTypeId,\r\n subJobId: lineItem.subJobId,\r\n description: lineItem.description,\r\n unitId: lineItem.unitId,\r\n quantity: lineItem.quantity,\r\n unitPrice: lineItem.unitPrice,\r\n markup: lineItem.markup,\r\n progressQuantity: lineItem.progressQuantity,\r\n progressPercent: lineItem.progressPercent,\r\n progressAmount: lineItem.progressAmount,\r\n workRetainage: lineItem.workRetainage,\r\n workRetainageReleased: lineItem.workRetainageReleased,\r\n materialRetainage: lineItem.materialRetainage,\r\n materialRetainageReleased: lineItem.materialRetainageReleased,\r\n taxCodeId: lineItem.taxCodeId\r\n });\r\n this.collection.add(lineItemModel);\r\n\r\n if (typeof this.options.onLineItemAdd === 'function') {\r\n this.options.onLineItemAdd(lineItemModel);\r\n }\r\n }, this);\r\n\r\n this.renderLineItemsTable();\r\n this.renderTotals();\r\n } else {\r\n new PJQ.Alert(this.$('.line-items-table'), {\r\n type: 'warning',\r\n text: 'All line items from the selected Commitment have already been assigned',\r\n timeout: 5000,\r\n extraClasses: ['mt-2'],\r\n isPrepend: true\r\n });\r\n }\r\n }, this));\r\n }\r\n });\r\n },\r\n addAllPossibleLineItems: function () {\r\n this.model.fetchPossibleLineItems(_.bind(function (pLineItems) {\r\n this.possibleLineItems = pLineItems;\r\n let changed = false,\r\n newLineItems = [];\r\n _.each(this.possibleLineItems.models, function (pLineItem) {\r\n let existingLineItem = _.find(this.model.lineItems.models, function (li) {\r\n return li.get('lineItemId') === pLineItem.get('lineItemId')\r\n && ((li.get('commitmentId') === pLineItem.get('commitmentId'))\r\n || (li.get('changeOrderId') === pLineItem.get('changeOrderId')))\r\n });\r\n if (existingLineItem) {\r\n if (existingLineItem.get('delete')) {\r\n existingLineItem.set('delete', false);\r\n changed = true;\r\n }\r\n } else {\r\n newLineItems.push(pLineItem);\r\n changed = true;\r\n }\r\n }, this)\r\n if (changed) {\r\n if (_.size(newLineItems) > 0) {\r\n this.collection.add(newLineItems);\r\n }\r\n this.renderLineItemsTable();\r\n }\r\n }, this));\r\n },\r\n autofillAmounts: function () {\r\n if (typeof this.model.getAutofillAmounts === 'function') {\r\n this.model.getAutofillAmounts((lineItems) => {\r\n if (lineItems != null && _.size(lineItems.models) > 0) {\r\n _.each(lineItems.models, function (autoFillItem) {\r\n let invoiceItem = _.find(this.collection.models, function (li) {\r\n return li.get('costCodeId') === autoFillItem.get('costCodeId')\r\n && li.get('costTypeId') === autoFillItem.get('costTypeId');\r\n });\r\n if (invoiceItem != null) {\r\n invoiceItem.set({\r\n progressAmount: autoFillItem.get('progressAmount'),\r\n progressPercent: autoFillItem.get('progressPercent'),\r\n materialsNew: autoFillItem.get('materialsNew'),\r\n workRetainage: autoFillItem.get('workRetainage'),\r\n workRetainagePercent: autoFillItem.get('workRetainagePercent'),\r\n materialRetainage: autoFillItem.get('materialRetainage'),\r\n materialRetainagePercent: autoFillItem.get('materialRetainagePercent')\r\n })\r\n } else {\r\n this.collection.add(autoFillItem);\r\n }\r\n }, this);\r\n this.renderLineItemsTable();\r\n\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Line items auto-filled successfully'\r\n });\r\n } else {\r\n PJQ.notifications.notify.warningNotify({\r\n message: 'Found 0 line items to auto-fill'\r\n });\r\n }\r\n });\r\n }\r\n },\r\n validateLineItem: function (lineItem) {\r\n if (this.dataTable == null) {\r\n return true;\r\n }\r\n\r\n let row = this.dataTable.getRow(lineItem.cid),\r\n data = row.data(),\r\n result = true,\r\n updateCell = _.bind(function ($cell, isValid) {\r\n if (isValid) {\r\n $cell.removeClass('bg-danger-transparent');\r\n } else {\r\n $cell.addClass('bg-danger-transparent');\r\n }\r\n result = result && isValid;\r\n }, this);\r\n\r\n if (data == null || data.get('delete')) {\r\n return true;\r\n }\r\n\r\n if (row != null) {\r\n if (!this.isInvoices) {\r\n let costCodeCol = 1,\r\n costTypeCol = 2,\r\n uomCol = 5;\r\n if (_.size(this.subJobs) > 0) {\r\n costCodeCol++;\r\n costTypeCol++;\r\n uomCol++;\r\n }\r\n\r\n let contractItemCol = null;\r\n if (this.options.filterToPrimeContractItems) {\r\n costCodeCol++;\r\n costTypeCol++;\r\n uomCol++;\r\n\r\n contractItemCol = 1;\r\n }\r\n\r\n if (contractItemCol != null) {\r\n updateCell($(row.nodes()[0]).find('td:eq(' + contractItemCol + ')'), _.size(lineItem.get('description')) > 0);\r\n }\r\n\r\n if (this.options.isCostCodeRequired !== false) {\r\n updateCell($(row.nodes()[0]).find('td:eq(' + costCodeCol + ')'), lineItem.get('costCodeId') > 0);\r\n }\r\n\r\n if (this.options.isCostTypeRequired !== false) {\r\n updateCell($(row.nodes()[0]).find('td:eq(' + costTypeCol + ')'), lineItem.get('costTypeId') > 0);\r\n }\r\n\r\n if (this.options.accountingMethod === PJQ.constants.budget.accountingMethod.UNIT_QUANTITY) {\r\n updateCell($(row.nodes()[0]).find('td:eq(' + uomCol + ')'), lineItem.get('unitId') > 0);\r\n }\r\n } else {\r\n\r\n }\r\n }\r\n return result;\r\n },\r\n validate: function () {\r\n this.wasValidated = true;\r\n\r\n let result = true;\r\n _.each(this.collection.models, function (lineItem) {\r\n result = result && this.validateLineItem(lineItem);\r\n }, this);\r\n return result;\r\n },\r\n saveLineItem: function (e) {\r\n if (e && e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n },\r\n deleteLineItem: function (row) {\r\n if (row == null) {\r\n return;\r\n }\r\n\r\n let item = row.data();\r\n if (this.collection != null) {\r\n if (item.isNew()) {\r\n this.collection.remove(item);\r\n } else {\r\n item.set('delete', true);\r\n }\r\n this.dataTable.removeRow(row);\r\n this.renderTotals();\r\n this.$('.btn-grp-add-line-item').prop('disabled', false);\r\n }\r\n\r\n if (typeof this.options.onLineItemDelete === 'function') {\r\n this.options.onLineItemDelete(item);\r\n }\r\n },\r\n deleteLineItemClicked: function (e) {\r\n e.stopPropagation();\r\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr'));\r\n if (row != null) {\r\n let item = row.data();\r\n if (item && item.get('changeRequestLineItemId') && !item.isNew()) {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"This line item was created from a Change Request. This line item will still exist on the Change Request, but it will no longer be assigned. Are you sure you want to delete this line item?\",\r\n onDelete: _.bind(function () {\r\n this.deleteLineItem(row);\r\n }, this)\r\n });\r\n } else {\r\n this.deleteLineItem(row);\r\n }\r\n }\r\n },\r\n bulkDeleteLineItems: function () {\r\n let lineItems = _.map(this.options.selectedLineItems, (cid) => {\r\n return this.collection.get(cid);\r\n });\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"You're about to delete \" + _.size(lineItems) + \" line items. Are you sure you want to delete these line items?\",\r\n onDelete: _.bind(function () {\r\n _.each(lineItems, (lineItem) => {\r\n this.deleteLineItem(this.getLineItemRow(lineItem));\r\n })\r\n }, this)\r\n });\r\n },\r\n bulkEditLineItems: function () {\r\n let lineItems = _.map(this.options.selectedLineItems, (cid) => {\r\n return this.collection.get(cid);\r\n });\r\n\r\n new PJQ.views.budget.BulkEditLineItemsModal({\r\n lineItems: lineItems,\r\n enableRetainage: this.options.enableRetainage,\r\n enableStoredMaterials: this.options.enableStoredMaterials,\r\n onSave: () => {\r\n this.options.selectedLineItems = [];\r\n this.renderActions();\r\n this.renderLineItemsTable();\r\n this.renderTotals();\r\n }\r\n })\r\n },\r\n viewCommitment: function (e) {\r\n let id = $(e.currentTarget).data('id');\r\n if (typeof this.options.onCommitmentView === 'function') {\r\n this.options.onCommitmentView(id);\r\n }\r\n if (id > 0) {\r\n new PJQ.views.commitments.CommitmentEditModal({\r\n model: new PJQ.models.commitments.Commitment({\r\n id: id\r\n })\r\n });\r\n }\r\n },\r\n viewChangeOrder: function (e) {\r\n let id = $(e.currentTarget).data('id'),\r\n type = $(e.currentTarget).data('type');\r\n if (typeof this.options.onChangeOrderView === 'function') {\r\n this.options.onChangeOrderView(id);\r\n }\r\n\r\n if (id > 0 && _.size(type) > 0) {\r\n if (this.isReceivableInvoices || type === 'pcco') {\r\n new PJQ.views.primeContracts.ChangeOrderEditModal({\r\n model: new PJQ.models.primeContracts.ChangeOrder({\r\n id: id\r\n })\r\n });\r\n } else {\r\n new PJQ.views.commitments.ChangeOrderEditModal({\r\n model: new PJQ.models.commitments.ChangeOrder({\r\n id: id\r\n })\r\n });\r\n }\r\n }\r\n },\r\n lineItemSelected: function (e) {\r\n if (this.options.selectedLineItems == null) {\r\n this.options.selectedLineItems = [];\r\n }\r\n\r\n let $target = $(e.currentTarget),\r\n cid = $target.data('cid'),\r\n isChecked = $target.prop('checked');\r\n if (_.size(cid) > 0) {\r\n if (isChecked) {\r\n this.options.selectedLineItems.push(cid);\r\n } else {\r\n this.options.selectedLineItems = _.reject(this.options.selectedLineItems, function (sCid) {\r\n return sCid === cid;\r\n });\r\n }\r\n }\r\n\r\n this.$('.select-all-line-items').prop('checked', _.size(this.options.selectedLineItems) === _.size(this.collection.models));\r\n\r\n this.renderActions();\r\n },\r\n selectAllLineItems: function (e) {\r\n let $target = $(e.currentTarget),\r\n isChecked = $target.prop('checked');\r\n\r\n if (!isChecked || this.options.selectedLineItems == null) {\r\n this.options.selectedLineItems = [];\r\n }\r\n\r\n _.each(this.collection.models, function (model) {\r\n let checkbox = this.$('.select-cr-li[data-cid=\"' + model.cid + '\"]');\r\n\r\n if (!isChecked) {\r\n checkbox.prop('checked', false);\r\n } else {\r\n checkbox.prop('checked', true);\r\n\r\n if (!_.contains(this.options.selectedLineItems, model.cid)) {\r\n this.options.selectedLineItems.push(model.cid);\r\n }\r\n }\r\n }, this);\r\n\r\n this.renderActions();\r\n },\r\n renderActions: function () {\r\n let disableCommitmentsButtons = true,\r\n disableContractsButtons = true;\r\n if (_.size(this.options.selectedLineItems) > 0) {\r\n this.$('.btn-create-new').removeClass('disabled');\r\n\r\n _.each(this.collection.get(this.options.selectedLineItems), (lineItem) => {\r\n if (!(lineItem.get('costLineItemId') > 0)) {\r\n disableCommitmentsButtons = false;\r\n }\r\n\r\n if (!(lineItem.get('revenueLineItemId') > 0)) {\r\n disableContractsButtons = false;\r\n }\r\n });\r\n }\r\n this.renderSubTemplate(false, this.options.subTemplates.actions, this.$('.line-items-actions'), _.extend(this.renderData(), {\r\n disableCommitmentsButtons: disableCommitmentsButtons,\r\n disableContractsButtons: disableContractsButtons\r\n }), () => {\r\n if (this.accountingMethodPicker) {\r\n this.accountingMethodPicker.remove();\r\n }\r\n this.accountingMethodPicker = new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-accounting-method'),\r\n isIntChoices: true,\r\n defaultValue: this.options.accountingMethod,\r\n canEdit: this.options.canEdit && _.size(this.getVisibleLineItems()) === 0,\r\n onChange: _.bind(function (value) {\r\n this.options.accountingMethod = value;\r\n if (typeof this.options.onAccountingMethodChanged === 'function') {\r\n this.options.onAccountingMethodChanged(value);\r\n }\r\n this.renderLineItemsTable();\r\n }, this)\r\n });\r\n });\r\n },\r\n addLineItemsToCommitment: function () {\r\n if (_.size(this.options.selectedLineItems) === 0) {\r\n return;\r\n }\r\n\r\n let commitmentIds = this.getSelectedCommitmentIds(),\r\n selCommitmentId = null;\r\n if (_.size(commitmentIds) === 1) {\r\n selCommitmentId = commitmentIds[0];\r\n }\r\n\r\n new PJQ.views.commitments.SelectCommitmentsModal({\r\n isSingleChoice: true,\r\n project: this.options.project,\r\n selectedCommitmentId: selCommitmentId,\r\n headerSubText: 'Select the Commitment you would like to add these line items to',\r\n filterStatuses: [\r\n PJQ.constants.commitments.commitmentStatus.DRAFT,\r\n PJQ.constants.commitments.commitmentStatus.PURCHASE_ORDER_PROCESSING,\r\n PJQ.constants.commitments.commitmentStatus.SUBCONTRACT_OUT_FOR_BID,\r\n PJQ.constants.commitments.commitmentStatus.OUT_FOR_SIGNATURE,\r\n PJQ.constants.commitments.commitmentStatus.SUBMITTED,\r\n PJQ.constants.commitments.commitmentStatus.PURCHASE_ORDER_PARTIALLY_RECEIVED,\r\n PJQ.constants.commitments.commitmentStatus.PURCHASE_ORDER_RECEIVED\r\n ],\r\n onSave: async (commitment) => {\r\n if (commitment == null) {\r\n return;\r\n }\r\n\r\n await commitment.fetch();\r\n\r\n let selLineItems = this.collection.get(this.options.selectedLineItems);\r\n _.each(selLineItems, function (lineItem) {\r\n if (lineItem.get('costLineItemId') == null) {\r\n commitment.lineItems.add(_.extend(lineItem.attributes, {\r\n id: null,\r\n commitmentId: commitment.id,\r\n changeRequestLineItemId: lineItem.id\r\n }));\r\n }\r\n }, this);\r\n\r\n new PJQ.views.commitments.CommitmentEditModal({\r\n model: commitment,\r\n fetch: false,\r\n onSave: _.bind(function (commitment) {\r\n if (typeof this.options.onCreateFromLineItems === 'function') {\r\n this.options.onCreateFromLineItems();\r\n }\r\n }, this),\r\n });\r\n }\r\n });\r\n },\r\n createCommitmentFromLineItems: function (e) {\r\n if (_.size(this.options.selectedLineItems) === 0) {\r\n return;\r\n }\r\n\r\n let commitmentType = $(e.currentTarget).hasClass('new-po') ? PJQ.constants.commitments.commitmentType.PURCHASE_ORDER : PJQ.constants.commitments.commitmentType.SUBCONTRACT,\r\n lineItems = [],\r\n selLineItems = this.collection.get(this.options.selectedLineItems),\r\n vendors = [],\r\n vendorIds = [];\r\n _.each(selLineItems, function (lineItem) {\r\n if (lineItem.get('costLineItemId') == null) {\r\n lineItems.push(_.extend(lineItem.attributes, {\r\n id: null,\r\n changeRequestLineItemId: lineItem.id\r\n }));\r\n\r\n let liVendor = lineItem.get('vendor');\r\n if (vendors == null) {\r\n return;\r\n } else if (liVendor && vendorIds.indexOf(liVendor.id) === -1) {\r\n vendors.length > 0 ? null : vendors.push(liVendor);\r\n }\r\n }\r\n }, this);\r\n\r\n if (_.size(lineItems) > 0) {\r\n new PJQ.views.commitments.CommitmentEditModal({\r\n model: null,\r\n fromChangeRequest: this.model,\r\n contractedContact: vendors.length > 0 ? vendors[0] : null,\r\n commitmentType: commitmentType,\r\n lineItems: lineItems,\r\n onSave: _.bind(function (commitment) {\r\n if (typeof this.options.onCreateFromLineItems === 'function') {\r\n this.options.onCreateFromLineItems();\r\n }\r\n }, this),\r\n });\r\n }\r\n },\r\n addLineItemsToPCCO: function () {\r\n if (_.size(this.options.selectedLineItems) === 0) {\r\n return;\r\n }\r\n\r\n new PJQ.views.primeContracts.SelectChangeOrdersModal({\r\n isSingleChoice: true,\r\n project: this.options.project,\r\n headerSubText: 'Select the Contract Change Orders you would like to add these line items to.',\r\n filterStatuses: [\r\n PJQ.constants.primeContracts.changeOrderStatus.DRAFT,\r\n PJQ.constants.primeContracts.changeOrderStatus.NO_CHARGE,\r\n PJQ.constants.primeContracts.changeOrderStatus.IN_REVIEW,\r\n PJQ.constants.primeContracts.changeOrderStatus.NOT_PRICING,\r\n PJQ.constants.primeContracts.changeOrderStatus.PRICING,\r\n PJQ.constants.primeContracts.changeOrderStatus.NOT_PROCEEDING,\r\n PJQ.constants.primeContracts.changeOrderStatus.PROCEEDING,\r\n PJQ.constants.primeContracts.changeOrderStatus.REVISED\r\n ],\r\n onSave: async (changeOrder) => {\r\n if (changeOrder == null) {\r\n return;\r\n }\r\n\r\n await changeOrder.fetch();\r\n\r\n let selLineItems = this.collection.get(this.options.selectedLineItems);\r\n _.each(selLineItems, function (lineItem) {\r\n if (lineItem.get('revenueLineItemId') == null) {\r\n changeOrder.lineItems.add(_.extend(lineItem.attributes, {\r\n id: null,\r\n changeOrderId: changeOrder.id,\r\n changeRequestLineItemId: lineItem.id\r\n }));\r\n }\r\n }, this);\r\n\r\n new PJQ.views.primeContracts.ChangeOrderEditModal({\r\n model: changeOrder,\r\n onSave: _.bind(function (changeOrder) {\r\n if (typeof this.options.onCreateFromLineItems === 'function') {\r\n this.options.onCreateFromLineItems();\r\n }\r\n }, this),\r\n });\r\n }\r\n });\r\n },\r\n createPCCOFromLineItems: async function () {\r\n if (_.size(this.options.selectedLineItems) === 0) {\r\n return;\r\n }\r\n\r\n let primeContract = new PJQ.models.primeContracts.PrimeContract({\r\n id: this.options.changeRequest.get('primeContractId')\r\n });\r\n await primeContract.fetch();\r\n\r\n let lineItems = [],\r\n selLineItems = this.collection.get(this.options.selectedLineItems);\r\n _.each(selLineItems, function (lineItem) {\r\n if (!lineItem.get('revenueLineItemId')) {\r\n lineItems.push(_.extend(lineItem.attributes, {\r\n id: null,\r\n amount: lineItem.get('revenue'),\r\n changeRequestLineItemId: lineItem.id\r\n }));\r\n }\r\n }, this);\r\n\r\n if (_.size(lineItems) > 0) {\r\n new PJQ.views.primeContracts.ChangeOrderEditModal({\r\n primeContract: primeContract,\r\n lineItems: lineItems,\r\n onSave: _.bind(function (commitment) {\r\n if (typeof this.options.onCreateFromLineItems === 'function') {\r\n this.options.onCreateFromLineItems();\r\n }\r\n }, this),\r\n });\r\n }\r\n },\r\n addLineItemsToCCO: function () {\r\n if (_.size(this.options.selectedLineItems) === 0) {\r\n return;\r\n }\r\n\r\n new PJQ.views.commitments.SelectCommitmentChangeOrdersModal({\r\n isSingleChoice: true,\r\n project: this.options.project,\r\n headerSubText: 'Select the Commitment Change Orders you would like to add these line items to.',\r\n filterStatuses: [\r\n PJQ.constants.commitments.changeOrderStatus.DRAFT,\r\n PJQ.constants.commitments.changeOrderStatus.NO_CHARGE,\r\n PJQ.constants.commitments.changeOrderStatus.IN_REVIEW,\r\n PJQ.constants.commitments.changeOrderStatus.NOT_PRICING,\r\n PJQ.constants.commitments.changeOrderStatus.PRICING,\r\n PJQ.constants.commitments.changeOrderStatus.NOT_PROCEEDING,\r\n PJQ.constants.commitments.changeOrderStatus.PROCEEDING,\r\n PJQ.constants.commitments.changeOrderStatus.REVISED\r\n ],\r\n onSave: async (changeOrder) => {\r\n if (changeOrder == null) {\r\n return;\r\n }\r\n\r\n await changeOrder.fetch();\r\n\r\n let selLineItems = this.collection.get(this.options.selectedLineItems);\r\n _.each(selLineItems, function (lineItem) {\r\n if (lineItem.get('costLineItemId') == null) {\r\n changeOrder.lineItems.add(_.extend(lineItem.attributes, {\r\n id: null,\r\n changeOrderId: changeOrder.id,\r\n changeRequestLineItemId: lineItem.id\r\n }));\r\n }\r\n }, this);\r\n\r\n new PJQ.views.commitments.ChangeOrderEditModal({\r\n model: changeOrder,\r\n onSave: _.bind(function (changeOrder) {\r\n if (typeof this.options.onCreateFromLineItems === 'function') {\r\n this.options.onCreateFromLineItems();\r\n }\r\n }, this),\r\n });\r\n }\r\n });\r\n },\r\n getSelectedCommitmentIds: function () {\r\n let commitmentIds = _.uniq(_.map(this.options.selectedLineItems, (liCid) => {\r\n let lineItem = this.collection.get(liCid);\r\n return lineItem.get('commitmentId');\r\n }));\r\n return commitmentIds;\r\n },\r\n createCCOFromLineItems: function () {\r\n if (_.size(this.options.selectedLineItems) === 0) {\r\n return;\r\n }\r\n\r\n let commitmentIds = this.getSelectedCommitmentIds(),\r\n selCommitmentId = null;\r\n if (_.size(commitmentIds) === 1) {\r\n selCommitmentId = commitmentIds[0];\r\n }\r\n\r\n new PJQ.views.commitments.SelectCommitmentsModal({\r\n isSingleChoice: true,\r\n project: this.options.project,\r\n selectedCommitmentId: selCommitmentId,\r\n filterStatuses: PJQ.constants.commitments.commitmentStatus.APPROVED,\r\n headerSubText: 'Select the Commitment you would like to create a Change Order for.',\r\n onSave: async (commitment) => {\r\n if (commitment == null) {\r\n return;\r\n }\r\n\r\n await commitment.fetch();\r\n\r\n let selLineItems = this.collection.get(this.options.selectedLineItems),\r\n lineItems = [];\r\n _.each(selLineItems, function (lineItem) {\r\n if (lineItem.get('costLineItemId') == null) {\r\n lineItems.push(_.extend(lineItem.attributes, {\r\n id: null,\r\n changeRequestLineItemId: lineItem.id\r\n }));\r\n }\r\n }, this);\r\n\r\n if (_.size(lineItems) > 0) {\r\n new PJQ.views.commitments.ChangeOrderEditModal({\r\n commitment: commitment,\r\n fromChangeRequest: this.model,\r\n lineItems: lineItems,\r\n onSave: _.bind(function (changeOrder) {\r\n if (typeof this.options.onCreateFromLineItems === 'function') {\r\n this.options.onCreateFromLineItems();\r\n }\r\n }, this),\r\n });\r\n }\r\n }\r\n });\r\n }\r\n});","PJQ.views.dataTables.DataTableTest = PJQ.views.dataTables.DataTable.extend({\n childRowToggle: function (sender, rowOverride) {\n let $target = rowOverride ? $(rowOverride.selector.rows).find(this.options.toggleRowClass) : $(sender.currentTarget),\n id = $target.data('id'),\n tr = $target.closest('tr'),\n row = this.getRow(tr);\n if (row.child.isShown() && rowOverride == null) {\n // This row is already open - close it\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== id;\n }, this));\n row.child.hide();\n tr.removeClass('shown');\n $target.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n } else {\n $target.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n\n this.renderChildRow(row, id);\n }\n },\n toggleChildRow: function (row) {\n let tr = $(row.node()),\n id = row.data()[this.options.rowId],\n $icon = tr.find(this.options.toggleRowClass);\n if (row.child.isShown()) {\n // This row is already open - close it\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== id;\n }, this));\n row.child.hide();\n tr.removeClass('shown');\n $icon.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n } else {\n $icon.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n\n this.renderChildRow(row, id);\n }\n },\n renderChildRow: function (row, parentId) {\n //row.child.hide();\n let childClass = 'subgrid-' + parentId.toString(),\n $childTable = $('
', {\n class: childClass + ' p-2'\n });\n row.child($childTable).show();\n\n let childData = this.getRowChildData(row);\n if (childData != null) {\n let fnRender = _.bind(function () {\n let childTable = this.getRowChildTable({\n el: $childTable,\n data: PJQ.helpers.objectHelpers.isBackboneCollection(childData) ? childData.models : childData,\n isHideSearch: true,\n parentId: parentId,\n parentData: row.data()\n });\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== parentId;\n }, this));\n this.options.childDataTables.push(childTable);\n }, this);\n\n if (PJQ.helpers.objectHelpers.isBackboneModel(childData)) {\n childData.fetch({\n success: _.bind(function () {\n // loader.remove();\n fnRender();\n }, this)\n });\n } else {\n fnRender();\n }\n }\n },\n getRowChildTable: function (opts) {\n if (typeof this.options.getRowChildTable === 'function') {\n return this.options.getRowChildTable(opts);\n }\n return null;\n },\n getRowChildData: function (row) {\n if (typeof this.options.getRowChildData === 'function') {\n return this.options.getRowChildData(row);\n }\n return {};\n },\n});\n\nPJQ.views.budget.ProjectBudget = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'project-budget'),\n canEdit: true,\n isAdmin: true,\n groupByCookie: 'budget_group_by',\n groupBy: ['division', 'costcode']\n },\n events: {\n // 'click .expand-item': 'expandTableClicked',\n 'click .btn-push-erp': 'pushERP',\n 'click .btn-undo-push-erp': 'undoPushERP',\n 'click .btn-pull-erp': 'pullERP',\n 'click .btn-link-erp': 'linkERP',\n 'click .btn-add-line-items': 'addLineItems',\n 'click .btn-edit-budget': 'editLineItemBudgetClicked',\n 'click .btn-edit-forecast': 'editLineItemForecastClicked',\n 'click .btn-view-modifications': 'viewLineItemModificationsClicked',\n 'click .btn-view-prime-contracts': 'viewLineItemPrimeContractsClicked',\n 'click .btn-view-commitments': 'viewLineItemCommitmentsClicked',\n 'click .btn-view-cco': 'viewLineItemCommitmentChangeOrdersClicked',\n 'click .btn-view-pcco': 'viewLineItemPrimeContractChangeOrdersClicked',\n 'click .btn-view-receivable-invoices': 'viewLineItemReceivableInvoicesClicked',\n 'click .btn-view-payable-invoices': 'viewLineItemPayableInvoicesClicked',\n 'click .btn-view-direct-costs': 'viewLineItemDirectCostsClicked',\n 'click .btn-add-modification': 'addBudgetModifications',\n 'click .btn-lock-budget': 'lockBudget',\n 'click .btn-unlock-budget': 'unlockBudget',\n 'keyup .budget-search': 'searchBudget',\n 'click .btn-export': 'exportBudget',\n 'click .expand-all-items': 'expandAllClicked'\n },\n beforeFirstRender: async function () {\n this.isFetched = false;\n\n this.options.project = this.options.project != null ? this.options.project : PJQ.app.session.project;\n\n this.options.canEdit = PJQ.app.session.project.hasPermission('budget.canEdit');\n this.options.isAdmin = PJQ.app.session.project.hasPermission('budget.isAdmin');\n\n let gbCookie = PJQ.helpers.cookieHelpers.getCookie(this.options.groupByCookie);\n if (gbCookie != null) {\n this.options.groupBy = _.size(gbCookie) > 0 ? gbCookie.split(',') : [];\n }\n\n this.expandedItems = [-1];\n\n this.subJobs = await this.options.project.fetchSubJobs();\n\n this.costCodes = await this.options.project.fetchCostCodes();\n this.options.hasDivisions = this.costCodes.hasDivisions();\n\n this.costTypes = await this.options.project.fetchCostTypes();\n\n this.budget = await this.options.project.fetchBudget(null, {\n force: true\n });\n this.currentBudget = this.budget;\n\n this.snapshots = await this.options.project.fetchBudgetSnapshots();\n\n this.budgetViews = await this.options.project.fetchBudgetViews();\n this.setActiveView();\n\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\n\n await this.options.project.fetchERPObject();\n\n this.isFetched = true;\n this.render();\n },\n beforeRender: function () {\n this.childDataTables = [];\n },\n renderData: function () {\n return {\n model: this.model,\n canUnlock: this.canUnlock,\n isFetched: this.isFetched\n }\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n this.renderERP();\n\n this.options.groupBy = _.without(this.options.groupBy, 'subjob');\n if (_.size(this.subJobs.models) > 0) {\n this.options.groupBy = _.union(['subjob'], this.options.groupBy);\n }\n\n if (!this.options.hasDivisions && this.options.groupBy.indexOf('division') !== -1) {\n this.options.groupBy = _.without(this.options.groupBy, 'division');\n }\n\n this.fetchBudgetForActiveView(_.bind(function () {\n let data = this.getDataForLevel(0);\n this.renderDatatable(this.$(\".budget-table\"), data);\n }, this));\n },\n renderERP: function () {\n if (!this.options.project.isERPSynced() || this.budget.get('snapshotOfId') != null) {\n return;\n }\n\n let hasUnsynced = false;\n _.each(this.budget.lineItems.models, function (lineItem) {\n let status = lineItem.erpSyncStatus();\n if (lineItem.get('budgetedCost') > 0 && status !== PJQ.constants.integrations.erp.syncStatuses.APPROVED && status !== PJQ.constants.integrations.erp.syncStatuses.SYNCED) {\n hasUnsynced = true;\n }\n });\n\n let $erp = this.$('.erp-sync'),\n budgetStatus = this.budget.erpSyncStatus(),\n reviewing = PJQ.constants.integrations.erp.syncStatuses.REVIEWING,\n synced = PJQ.constants.integrations.erp.syncStatuses.SYNCED,\n approved = PJQ.constants.integrations.erp.syncStatuses.APPROVED,\n status;\n if (budgetStatus === reviewing) {\n status = reviewing;\n } else if (hasUnsynced && budgetStatus === synced) {\n status = PJQ.constants.integrations.erp.syncStatuses.STALE;\n } else {\n status = budgetStatus;\n }\n\n if (budgetStatus == null) {\n budgetStatus = PJQ.constants.integrations.erp.syncStatuses.PENDING;\n }\n\n this.erpButtons = PJQ.helpers.erp.renderERPButtons($erp, {\n pushSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_BUDGET),\n canPush: hasUnsynced && budgetStatus !== reviewing,\n disablePushReason: !hasUnsynced ? 'All budget updates have been pushed to ERP' : '',\n pullSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_BUDGET),\n canPull: budgetStatus !== approved,\n status: status\n });\n\n let badge = PJQ.helpers.erp.getERPBadge(status, this.budget.get('externalObject'));\n if (_.size(badge) > 0) {\n this.$('.erp-badge').html('' + badge + '');\n }\n },\n setActiveView: function (viewId) {\n this.view = _.find(this.budgetViews.models, function (budgetView) {\n if (viewId == null) {\n return budgetView.get('isDefault');\n }\n return budgetView.id === viewId;\n });\n\n if (this.view == null) {\n // we didn't find a default view or a view matching the argument viewId\n // here we use the standard budget view\n this.view = _.find(this.budgetViews.models, function (budgetView) {\n return budgetView.get('companyId') === -1;\n });\n }\n this.budgetView = null;\n },\n fetchBudgetForActiveView: function (callback) {\n if (this.budgetView == null) {\n this.budget.fetchForView(this.view.id, _.bind(function (res) {\n this.budgetView = res;\n callback(this.budgetView);\n }, this));\n } else {\n if (typeof callback === 'function') {\n callback(this.budgetView);\n }\n }\n },\n getDataForLevel: function (level, parentData = null) {\n let groupByLevel = _.size(this.options.groupBy) >= level + 1 ? this.options.groupBy[level] : null;\n if (groupByLevel == null) {\n let groupByCostCode = this.options.groupBy.indexOf('costcode') !== -1;\n return _.map(_.filter(this.budgetView.lineItems, function (lineItem) {\n return parentData == null || parentData.lineItemIds.indexOf(lineItem.id) !== -1;\n }), function (lineItem) {\n let costCode = this.costCodes.get(lineItem.costCodeId),\n costType = this.costTypes.get(lineItem.costTypeId),\n budgetCode;\n if (groupByCostCode) {\n budgetCode = costType.get('name');\n } else {\n budgetCode = '
' + costCode.getDisplayName() + '
' + costType.get('name') + '
'\n }\n return _.defaults({\n costCode: costCode,\n costType: costType,\n budgetCode: budgetCode\n }, lineItem);\n }, this);\n } else {\n let parents = {};\n _.each(this.budgetView.lineItems, function (lineItem) {\n if (parentData != null && parentData.lineItemIds.indexOf(lineItem.id) === -1) {\n return;\n }\n\n let parent;\n if (groupByLevel === 'subjob') {\n let subJob = this.subJobs.get(lineItem.subJobId),\n subJobId = subJob ? subJob.id : -1;\n if (parents[subJobId] != null) {\n parents[subJobId].lineItemIds.push(lineItem.id);\n } else {\n parents[subJobId] = ({\n id: PJQ.helpers.guid(),\n budgetCode: subJob ? subJob.get('name') : this.options.project.get('projectName'),\n lineItemIds: [lineItem.id],\n columnData: []\n });\n }\n\n parent = parents[subJobId];\n } else if (groupByLevel === 'division') {\n let costCode = this.costCodes.get(lineItem.costCodeId);\n if (parents[costCode.get('division')] != null) {\n parents[costCode.get('division')].lineItemIds.push(lineItem.id);\n } else {\n parents[costCode.get('division')] = ({\n id: PJQ.helpers.guid(),\n budgetCode: costCode.get('division'),\n lineItemIds: [lineItem.id],\n columnData: []\n });\n }\n\n parent = parents[costCode.get('division')];\n } else if (groupByLevel === 'costcode') {\n let costCode = this.costCodes.get(lineItem.costCodeId);\n if (parents[costCode.id] != null) {\n parents[costCode.id].lineItemIds.push(lineItem.id);\n } else {\n parents[costCode.id] = ({\n id: PJQ.helpers.guid(),\n budgetCode: costCode.getDisplayName(),\n costCode: costCode,\n costCodeId: lineItem.costCodeId,\n lineItemIds: [lineItem.id],\n columnData: []\n });\n }\n\n parent = parents[costCode.id];\n }\n\n if (parent != null) {\n _.each(this.budgetView.columns, function (column, index) {\n let val;\n if (column.format === 'money' || column.format === 'decimal' || column.format === 'integer' || column.format === 'percent') {\n if (_.size(parent.columnData) >= index + 1) {\n val = parent.columnData[index];\n } else {\n val = 0;\n }\n\n let liVal = lineItem.columnData[index] ?? 0;\n if (column.format === 'money') {\n val += parseInt(PJQ.helpers.formatHelpers.numbersOnly(liVal, false, true));\n } else if (column.source === 'TimeCardValues') {\n if (!Array.isArray(val)) {\n val = [];\n }\n\n val.push(liVal);\n } else {\n val += liVal;\n }\n } else {\n val = '';\n }\n parent.columnData[index] = val;\n });\n }\n }, this);\n\n _.each(parents, function (parent) {\n _.each(this.budgetView.columns, function (column, index) {\n if (column.format === 'money') {\n parent.columnData[index] = PJQ.helpers.formatHelpers.formatCurrency(parent.columnData[index]);\n } else if (column.format === 'integer') {\n parent.columnData[index] = parent.columnData[index];\n } else if (column.format === 'decimal') {\n parent.columnData[index] = parent.columnData[index];\n } else if (column.format === 'percent') {\n parent.columnData[index] = parent.columnData[index];\n }\n });\n }, this);\n\n let data = [];\n _.each(parents, function (lineItem) {\n data.push(lineItem);\n })\n\n return data;\n }\n },\n renderDatatable: function ($element, data, level = 0, parentTable = null) {\n let contextMenuActions = [],\n isLastLevel = level === _.size(this.options.groupBy),\n groupBy = isLastLevel ? null : this.options.groupBy[level];\n if (groupBy === null) {\n contextMenuActions = [\n {\n name: 'Add to Budget',\n isShown: _.bind(function (row) {\n let lineItem = this.budget.lineItems.get(row.data().id);\n return lineItem.get('isUnBudgeted');\n }, this),\n onClick: _.bind(function (row) {\n let lineItem = this.budget.lineItems.get(row.data().id);\n this.addLineItemToBudget(lineItem);\n }, this)\n },\n {\n name: 'Edit Original Budget',\n isShown: _.bind(function (row) {\n return !this.budget.get('isLocked') && this.options.canEdit;\n }, this),\n onClick: _.bind(function (row) {\n this.editLineItemBudget(row.data().id);\n }, this)\n },\n {\n name: 'View Modifications',\n isShown: _.bind(function (row) {\n return this.budget.get('isLocked');\n }, this),\n onClick: _.bind(function (row) {\n let lineItem = this.budget.lineItems.get(row.data().id);\n this.viewLineItemModifications(lineItem);\n }, this)\n },\n {\n name: 'Edit Forecast',\n // isShown: _.bind(function (row) {\n // \treturn this.budget.get('isLocked');\n // }, this),\n onClick: _.bind(function (row) {\n this.editLineItemForecast(row.data().id)\n }, this),\n isShown: _.bind(function (row) {\n return !this.budget.get('isLocked') && this.options.canEdit;\n }, this)\n\n },\n {\n name: 'Delete',\n isShown: _.bind(function (row) {\n return !this.budget.get('isLocked') && this.options.isAdmin;\n }, this),\n onClick: _.bind(function (row) {\n let lineItem = this.budget.lineItems.get(row.data().id);\n this.deleteLineItem(lineItem);\n }, this)\n }\n ];\n }\n\n let dt = new PJQ.views.dataTables.DataTableTest({\n rowId: \"id\",\n el: $element,\n data: data,\n isHideSearch: level > 0,\n paging: false,\n order: [1, 'asc'],\n extraClasses: !isLastLevel ? 'rows-muted' : '',\n language: {\n zeroRecords: '',\n emptyTable: ''\n },\n rowCallback: function (row, data) {\n if (data.isUnBudgeted) {\n $(row).attr('style', 'background-color: #ffefbe !important');\n }\n },\n drawCallback: _.bind(function (settings) {\n if (parentTable != null) {\n // If you open up a bunch of child rows, an ugly border starts to form between them all growing with every new child row opened.\n // need to collapse the group-start every time to prevent this\n this.$('.group-start').attr('style', 'visibility: collapse;');\n // Remove child tables header\n $element.find('thead').attr('style', 'visibility: collapse;');\n }\n\n if (level === 0) {\n $(settings.nTableWrapper).css('overflow-x', 'auto');\n this.snapshotSelect = new PJQ.inputs.Selectpicker({\n el: this.$('.select-snapshot'),\n defaultValue: this.budget === this.currentBudget ? -1 : this.budget.get('id'),\n isIntChoices: true,\n onChange: _.bind(function (value) {\n if (value === -2) {\n this.createSnapshot();\n this.snapshotSelect.setValue(-1)\n } else if (value === -1) {\n this.budget = this.currentBudget;\n this.budgetView = null;\n this.render();\n } else {\n this.budget = new PJQ.models.budget.Budget({id: value});\n this.budget.fetch({\n success: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n })\n }\n }, this)\n });\n\n this.groupBySelector = new PJQ.inputs.Selectpicker({\n el: this.$('.budget-group-by'),\n hideDisabled: false,\n isMultiple: true,\n noneSelectedText: 'No Grouping',\n defaultValue: this.options.groupBy,\n onChange: _.bind(function (value) {\n this.setGroupBy(value);\n }, this)\n });\n\n this.viewSelector = new PJQ.inputs.Selectpicker({\n el: this.$('.budget-view-select'),\n defaultValue: this.view.id,\n isIntChoices: true,\n onChange: _.bind(function (value) {\n if (value === -1) {\n this.viewSelector.setValue(this.view.id);\n this.manageViews();\n } else {\n this.setActiveView(value);\n this.budgetView = null;\n this.render();\n }\n }, this)\n });\n }\n }, this),\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'data-table-header-budget')\n },\n headerData: _.bind(function () {\n let erpStatus = this.budget.erpSyncStatus(),\n erpReviewing = erpStatus === PJQ.constants.integrations.erp.syncStatuses.APPROVED || erpStatus === PJQ.constants.integrations.erp.syncStatuses.REVIEWING;\n return {\n subJobs: this.subJobs,\n hasDivisions: this.options.hasDivisions,\n isLocked: this.budget.get('isLocked'),\n erpReviewing: erpReviewing,\n views: this.budgetViews,\n snapshots: this.snapshots,\n isAdmin: this.options.isAdmin,\n canEdit: this.options.canEdit,\n isSnapshot: this.budget.get('snapshotOfId') != null,\n erpIntegration: this.erpIntegration,\n project: PJQ.app.session.project\n };\n }, this),\n hasFooter: level === 0,\n afterDataTableRender: _.bind(function () {\n if (_.size(this.expandedItems) > 0) {\n this.expandChildTables(dt, level + 1);\n }\n\n if (level === 0) {\n this.renderTableFooter();\n }\n }, this),\n afterHeaderRender: () => {\n this.renderERP();\n },\n contextMenuOptions: {\n actions: contextMenuActions\n },\n columns: this.getColumns(level)\n });\n\n if (parentTable != null) {\n parentTable.options.childDataTables.push(dt);\n } else {\n this.dataTable = dt;\n }\n\n if (_.size(this.expandedItems) > 0) {\n this.expandChildTables(dt, level + 1);\n }\n\n this.$el.on('click', '.expand-item', _.bind(function (e) {\n let $target = $(e.currentTarget),\n tr = $target.closest('tr'),\n row = dt.getRow(tr);\n if (row.data()) {\n this.renderChildTable(row, dt, level + 1);\n }\n }, this));\n },\n setGroupBy: function (value) {\n this.options.groupBy = value;\n PJQ.helpers.cookieHelpers.setCookie(this.options.groupByCookie, _.size(value) > 0 ? value.join(',') : '');\n\n if (this.dataTable != null) {\n this.render();\n }\n },\n renderTableFooter: function () {\n let $footer = this.$('tfoot').first(),\n $totalTextCol = $footer.find('th').eq(1);\n $totalTextCol.html(\"Grand Total\");\n _.each(this.budgetView.columns, function (column, index) {\n if (column.format == null) {\n return;\n }\n\n let format = column.format.toLowerCase();\n if (format === 'money' || format === 'decimal' || format === 'integer' || format === 'percent') {\n let total = 0;\n _.each(this.budgetView.lineItems, function (lineItem) {\n if (lineItem.columnData != null) {\n if (column.source === 'TimeCardValues') {\n let minutes = PJQ.helpers.dateHelpers.getMinutesFromHoursDecimal(lineItem.columnData[index] / 100);\n total += minutes;\n } else {\n let cVal = lineItem.columnData[index];\n if (typeof cVal === 'string') {\n cVal = PJQ.helpers.formatHelpers.numbersOnly(cVal, true, true);\n }\n total += parseFloat(cVal);\n }\n }\n });\n\n // we add a +2 offset because there is always an actions and \"Description\" column on the left\n let $footerCol = $footer.find('th').eq(index + 2);\n if (format === 'money') {\n $footerCol.text(PJQ.helpers.formatHelpers.formatCurrency(total));\n } else if (format === 'integer') {\n $footerCol.text(total);\n } else if (format === 'decimal') {\n if (column.source === 'TimeCardValues') {\n $footerCol.text(PJQ.helpers.timecards.getFormattedTime(total));\n } else {\n $footerCol.text((total).toFixed(2));\n }\n } else if (format === 'percent') {\n $footerCol.text((total / 100).toFixed(2) + '%');\n }\n }\n }, this);\n },\n lockBudget: function () {\n this.budget.updateLocked(true, _.bind(function (success) {\n if (success) {\n this.render();\n }\n }, this));\n },\n linkERP: function () {\n new PJQ.integrations.models.LinkERPProjectModal({\n project: PJQ.app.session.project,\n onSave: _.bind(function (erpProject) {\n if (erpProject != null && _.size(erpProject.id) > 0) {\n PJQ.app.session.project.linkERP(erpProject.id, _.bind(function (res) {\n if (res != null) {\n this.render();\n }\n }, this));\n }\n }, this)\n });\n },\n pushERP: function () {\n if (this.options.project != null && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_BUDGET)) {\n this.erpButtons?.pushing(true);\n this.erpIntegration.pushBudget(this.budget, _.bind(function () {\n this.erpButtons?.pushing(false);\n PJQ.notifications.notify.successNotify({\n message: 'Budget pushed to ERP'\n });\n this.render();\n }, this));\n }\n },\n pullERP: function () {\n if (this.options.project != null && this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_BUDGET)) {\n this.erpButtons?.pulling(true);\n\n this.erpIntegration.pullBudget(this.options.project, (res, err) => {\n this.erpButtons?.pulling(false);\n\n if (res == null) {\n return;\n }\n\n PJQ.notifications.notify.successNotify({\n message: 'Budget pulled from ERP'\n });\n\n this.budgetView = null;\n PJQ.app.session.project.fetchCostCodes(_.bind(function (costCodes) {\n this.costCodes = costCodes;\n this.options.hasDivisions = this.costCodes.hasDivisions();\n PJQ.app.session.project.fetchCostTypes(_.bind(function (costTypes) {\n this.costTypes = costTypes;\n this.render();\n }, this), true);\n }, this), true);\n });\n }\n },\n undoPushERP: function () {\n if (this.budget.erpSyncStatus() === PJQ.constants.integrations.erp.syncStatuses.REVIEWING) {\n this.erpIntegration.undoPush(this.budget, _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Budget removed from ERP approval'\n });\n this.render();\n }, this));\n }\n },\n exportBudget: function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'budgets',\n value: this.budget.get('id')\n },\n {\n endpoint: 'export'\n }\n ], [\n {\n parameter: 'viewId',\n value: this.view.id\n }\n ]), {isAPIv2: true});\n },\n searchBudget: function () {\n let searchVal = this.$('.budget-search').val(),\n filteredIds = [];\n if (this.options.hasDivisions) {\n this.dataTable.dataTable.search(searchVal).draw();\n } else {\n _.each(this.childDataTables, function (dt) {\n dt.dataTable.search(searchVal).draw();\n _.each(dt.dataTable.rows({search: 'applied'}).data(), function (row) {\n filteredIds.push(row.id);\n }, this);\n }, this);\n\n _.each(this.dataTable.dataTable.rows().data(), function (data, index, dt) {\n let column = this.$('tr#' + (data.id)),\n isValid = false,\n row = this.dataTable.getRow(data.id);\n _.each(filteredIds, function (id) {\n if (_.contains(data.lineItemIds, id)) {\n isValid = true;\n }\n }, this)\n\n if (isValid) {\n column.show();\n row.child.show();\n } else {\n column.hide();\n row.child.hide()\n }\n }, this)\n }\n },\n unlockBudget: function () {\n // deleteModifications\n this.budget.updateLocked(false, _.bind(function (success) {\n if (success) {\n this.render();\n }\n }, this));\n },\n getColumns: function (level) {\n let isLastLevel = level === _.size(this.options.groupBy),\n columns = [\n {\n // \"data\": \"\",\n \"title\": ' 0 ? 'fa-minus-circle' : 'fa-plus-circle') + ' expand-all-items\" style=\"cursor: pointer\">',\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n // budgetId is an attribute that only exists if it's a line item\n let html = '';\n if (!isLastLevel) {\n html = '';\n } else if (row.isUnBudgeted) {\n html = ' '\n }\n\n return '
' + html + '
';\n }, this)\n }\n ],\n canClickColumnData = _.size(this.options.groupBy) === level;\n columns.push({\n \"title\": \"Budget Code\",\n \"width\": \"250px\",\n \"data\": \"budgetCode\",\n \"type\": 'num',\n \"render\": _.bind(function (data, type, row) {\n if (type === 'sort') {\n let sValue = row.costCode ? row.costCode.get('code') : row.budgetCode,\n numOnly = PJQ.helpers.formatHelpers.numbersOnly(sValue, false);\n return _.size(numOnly) > 0 ? parseInt(numOnly) : sValue;\n }\n\n let classes = '';\n if (!isLastLevel) {\n classes = 'font-weight-bold';\n }\n\n let padding = level * 5;\n return '
' + data + '
';\n }, this)\n });\n\n _.each(this.budgetView.columns, function (column, index) {\n columns.push({\n \"data\": \"\",\n \"title\": column.name,\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let val = row.columnData[index],\n extraClasses = '';\n if (column.format === 'money') {\n let rawVal = PJQ.helpers.formatHelpers.numbersOnly(val, false, true);\n // extraClasses += 'wd-80p '\n if (rawVal < 0) {\n extraClasses += 'text-danger ';\n }\n } else if (column.format === 'decimal' || column.format === 'percent') {\n if (column.source === 'TimeCardValues' && Array.isArray(val)) {\n let totalMinutes = _.reduce(val, function (total, timeValue) {\n let timeDecimal = Math.floor(timeValue / 100) + (timeValue % 100) / 100;\n\n let hours = Math.floor(timeDecimal);\n let minutes = Math.round((timeDecimal - hours) * 100 * 60 / 100);\n\n return total + (hours * 60) + minutes;\n }, 0);\n\n val = totalMinutes / 60;\n } else if (column.source === 'TimeCardValues') {\n val = ((val ?? 0) / 100).toFixed(2);\n } else {\n val = (val ?? 0).toFixed(2);\n if (column.format === 'percent') {\n val = val + '%';\n }\n }\n }\n\n if (column.source === 'TimeCardValues') {\n let minutes = PJQ.helpers.dateHelpers.getMinutesFromHoursDecimal(val);\n\n return PJQ.helpers.timecards.getFormattedTime(minutes);\n }\n\n if (canClickColumnData) {\n let statuses = column.options && column.options.statuses ? column.options.statuses.join(',') : '',\n result = val;\n switch (column.source) {\n case \"CommitmentValues\":\n result = '' + val.toString() + ''\n break;\n case \"BudgetedCost\":\n if (this.options.canEdit) {\n result = '' + val.toString() + ''\n } else {\n result = val.toString();\n }\n break;\n case \"ForecastToComplete\":\n result = '' + val.toString() + ''\n break;\n case \"BudgetModification\":\n result = '' + val.toString() + ''\n break;\n case \"PrimeContractValues\":\n result = '' + val.toString() + ''\n break;\n case \"CommitmentChangeOrderValues\":\n result = '' + val.toString() + ''\n break;\n case \"PrimeContractChangeOrderValues\":\n result = '' + val.toString() + ''\n break;\n case \"DirectCostValues\":\n result = '' + val.toString() + ''\n break;\n case \"PayableInvoiceValues\":\n result = '' + val.toString() + ''\n break;\n case \"ReceivableInvoiceValues\":\n result = '' + val.toString() + ''\n break;\n }\n return '' + result + '';\n } else {\n return '' + val + '';\n }\n }, this)\n })\n }, this)\n return columns;\n },\n createSnapshot: function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'budgets',\n value: this.budget.get('id')\n },\n {\n endpoint: 'snapshot'\n }\n ]),\n isAPIv2: true,\n }).post().done(_.bind(function (data) {\n data.createdOn = new Date()\n this.snapshots.add(data);\n this.render();\n PJQ.notifications.notify.successNotify({\n message: 'Snapshot successfully created'\n });\n }, this));\n },\n expandChildTables: function (dataTable, level, expand = null) {\n let self = this,\n hasChildren = _.size(this.options.groupBy) >= level;\n if (hasChildren && dataTable && dataTable.dataTable) {\n dataTable.dataTable.rows().every(function () {\n self.renderChildTable(this, dataTable, level, expand != null ? expand : true);\n });\n }\n },\n renderChildTable: function (row, parentTable, level, expand = null) {\n let $tr = $(row.node()),\n $expandIcon = $tr.find('.expand-item'),\n id = row.data().id;\n if (row.child.isShown() || expand === false) {\n // This row is already open - close it\n row.child.hide();\n $tr.removeClass('shown');\n $expandIcon.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n } else {\n $expandIcon.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n let childClass = 'subgrid-' + id.toString(),\n $childTable = $('
', {\n class: childClass + ' p-2'\n });\n row.child($childTable).show();\n\n let parent = row.data(),\n childData = this.getDataForLevel(level, parent);\n if (childData != null) {\n this.renderDatatable($childTable, childData, level, parentTable);\n }\n }\n },\n expandAllClicked: function () {\n let $expandIcon = this.$('.expand-all-items');\n if (_.size(this.expandedItems) > 0) {\n this.expandedItems = [];\n $expandIcon.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n this.expandChildTables(this.dataTable, 1, false);\n } else {\n this.expandedItems = [-1];\n $expandIcon.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n this.expandChildTables(this.dataTable, 1, true);\n }\n },\n editLineItemBudgetClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id');\n this.editLineItemBudget(id);\n },\n editLineItemBudget: function (id) {\n let lineItem = this.budget.lineItems.get(id);\n new PJQ.views.budget.EditLineItemBudgetModal({\n model: lineItem,\n budget: this.budget,\n onSave: _.bind(function () {\n lineItem.set('modifiedOn', new Date());\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n addLineItemToBudget: function (lineItem) {\n lineItem.save(null, {\n success: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n })\n },\n editLineItemForecastClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id');\n this.editLineItemForecast(id);\n },\n editLineItemForecast: function (lineItemId) {\n let lineItem = this.budget.lineItems.get(lineItemId);\n new PJQ.views.budget.AddBudgetLineItemForecastModal({\n model: lineItem,\n budget: this.budget,\n onSave: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n viewLineItemReceivableInvoicesClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id'),\n statusIds = $target.data('statuses').toString();\n\n if (_.size(statusIds.trim()) > 0) {\n statusIds = _.map(statusIds.split(','), statusId => parseInt(statusId));\n }\n\n this.viewLineItemReceivableInvoices(id, statusIds);\n },\n viewLineItemReceivableInvoices: function (lineItemId, statusIds) {\n let lineItem = this.budget.lineItems.get(lineItemId);\n new PJQ.views.invoicing.ModalViewReceivableInvoices({\n model: lineItem,\n budget: this.budget,\n project: this.options.project,\n showAllBillingPeriods: true,\n statusIds: statusIds,\n onSave: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n viewLineItemPayableInvoicesClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id'),\n statusIds = $target.data('statuses').toString();\n\n if (_.size(statusIds.trim()) > 0) {\n statusIds = _.map(statusIds.split(','), statusId => parseInt(statusId));\n }\n\n this.viewLineItemPayableInvoices(id, statusIds);\n },\n viewLineItemPayableInvoices: function (lineItemId, statusIds) {\n let lineItem = this.budget.lineItems.get(lineItemId);\n new PJQ.views.invoicing.ModalViewPayableInvoices({\n model: lineItem,\n budget: this.budget,\n project: this.options.project,\n showAllBillingPeriods: true,\n statusIds: statusIds,\n onSave: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n viewLineItemPrimeContractsClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id'),\n statusIds = $target.data('statuses').toString();\n\n if (_.size(statusIds.trim()) > 0) {\n statusIds = _.map(statusIds.split(','), statusId => parseInt(statusId));\n }\n\n this.viewLineItemPrimeContracts(id, statusIds);\n },\n viewLineItemPrimeContracts: function (lineItemId, statusIds) {\n let lineItem = this.budget.lineItems.get(lineItemId);\n new PJQ.views.primeContracts.ModalViewPrimeContracts({\n model: lineItem,\n budget: this.budget,\n project: this.options.project,\n statusIds: statusIds,\n onSave: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n viewLineItemPrimeContractChangeOrdersClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id'),\n statusIds = $target.data('statuses').toString();\n\n if (_.size(statusIds.trim()) > 0) {\n statusIds = _.map(statusIds.split(','), statusId => parseInt(statusId));\n }\n\n this.viewLineItemPrimeContractChangeOrders(id, statusIds);\n },\n viewLineItemPrimeContractChangeOrders: function (lineItemId, statusIds) {\n let lineItem = this.budget.lineItems.get(lineItemId);\n new PJQ.views.primeContracts.ModalViewChangeOrders({\n model: lineItem,\n budget: this.budget,\n project: this.options.project,\n statusIds: statusIds,\n onSave: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n viewLineItemCommitmentChangeOrdersClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id'),\n statusIds = $target.data('statuses').toString();\n\n if (_.size(statusIds.trim()) > 0) {\n statusIds = _.map(statusIds.split(','), statusId => parseInt(statusId));\n }\n\n this.viewLineItemCommitmentChangeOrders(id, statusIds);\n },\n viewLineItemCommitmentChangeOrders: function (lineItemId, statusIds) {\n let lineItem = this.budget.lineItems.get(lineItemId);\n new PJQ.views.commitments.ModalViewChangeOrders({\n model: lineItem,\n statusIds: statusIds,\n budget: this.budget,\n project: this.options.project,\n onSave: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n viewLineItemCommitmentsClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id'),\n statusIds = $target.data('statuses').toString();\n\n if (_.size(statusIds.trim()) > 0) {\n statusIds = _.map(statusIds.split(','), statusId => parseInt(statusId));\n }\n\n this.viewLineItemCommitments(id, statusIds);\n },\n viewLineItemCommitments: function (lineItemId, statusIds) {\n let lineItem = this.budget.lineItems.get(lineItemId);\n new PJQ.views.commitments.ModalViewCommitments({\n model: lineItem,\n budget: this.budget,\n statusIds: statusIds,\n project: this.options.project,\n onSave: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n viewLineItemDirectCostsClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id'),\n statusIds = $target.data('statuses').toString();\n\n if (_.size(statusIds.trim()) > 0) {\n statusIds = _.map(statusIds.split(','), statusId => parseInt(statusId));\n }\n\n this.viewLineItemDirectCosts(id, statusIds);\n },\n viewLineItemDirectCosts: function (lineItemId, statusIds) {\n let lineItem = this.budget.lineItems.get(lineItemId);\n new PJQ.views.directcosts.ModalViewDirectCosts({\n model: lineItem,\n budget: this.budget,\n project: this.options.project,\n statusIds: statusIds,\n onSave: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n addLineItems: function () {\n new PJQ.views.budget.AddBudgetLineItemsModal({\n budget: this.budget,\n costCodes: this.costCodes,\n onSave: _.bind(function () {\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n filterLineItems: function (lineItemIds, filterText) {\n if (_.size(lineItemIds) > 0 || _.size(filterText) > 0) {\n return _.filter(this.budgetView.lineItems, function (lineItem) {\n let costCode = this.costCodes.get(lineItem.costCodeId);\n return (_.size(lineItemIds) === 0 || lineItemIds.indexOf(lineItem.id) !== -1) &&\n (_.size(filterText) === 0 || costCode.getDisplayName().indexOf(filterText) !== -1 || costCode.get('division').indexOf(filterText) !== -1);\n }, this)\n }\n\n return this.budgetView.lineItems;\n },\n deleteLineItem: function (lineItem) {\n lineItem.destroy({\n wait: true,\n notify: false,\n success: _.bind(function () {\n this.budgetView.lineItems = _.filter(this.budgetView.lineItems, function (itm) {\n return itm.id !== lineItem.id;\n })\n this.render();\n }, this),\n error: function (model, xhr) {\n if (xhr.responseJSON != null && xhr.responseJSON.type === 'delete_line_item_with_costs') {\n PJQ.notifications.notify.warningNotify({\n message: 'You can not delete line items with committed or pending costs or contracts'\n });\n }\n }\n });\n },\n addBudgetModifications: function () {\n new PJQ.views.budget.AddBudgetModificationsModal({\n budget: this.budget,\n onSave: _.bind(function (modifications) {\n _.each(modifications, (modification) => {\n let fromLine = this.budget.lineItems.get(modification.get('fromLineItemId'));\n if (fromLine != null) {\n fromLine.set('modifiedOn', new Date());\n }\n\n let toLine = this.budget.lineItems.get(modification.get('toLineItemId'));\n if (toLine != null) {\n toLine.set('modifiedOn', new Date());\n }\n });\n this.budgetView = null;\n this.render();\n }, this)\n });\n },\n viewLineItemModificationsClicked: function (e) {\n let $target = $(e.currentTarget),\n id = $target.data('id'),\n lineItem = this.budget.lineItems.get(id);\n this.viewLineItemModifications(lineItem);\n },\n viewLineItemModifications: function (lineItem) {\n new PJQ.views.budget.ViewBudgetModificationsModal({\n budget: this.budget,\n lineItem: lineItem\n });\n },\n manageViews: function () {\n let fnUpdateChoices = _.bind(function (views) {\n this.budgetViews = views;\n if (this.viewSelector != null) {\n this.viewSelector.updateChoices(_.map(this.budgetViews.models, function (bv) {\n return {\n value: bv.id,\n name: bv.get('name')\n }\n }));\n }\n }, this)\n new PJQ.views.budget.BudgetsViewsEditorModal({\n budget: this.budget,\n budgetViews: this.budgetViews,\n onSave: _.bind(function (vw, views) {\n this.budgetViews = views;\n // fnUpdateChoices(views);\n if (vw.id === this.view.id) {\n this.setActiveView(vw.id);\n // this.render();\n }\n this.render();\n }, this),\n onDelete: _.bind(function (vw, views) {\n this.budgetViews = views;\n // fnUpdateChoices(views);\n if (vw.id === this.view.id) {\n this.setActiveView();\n // this.render();\n }\n this.render();\n }, this)\n });\n }\n});\n","PJQ.collections.rfq = PJQ.collections.rfq ? PJQ.collections.rfq : {};\nPJQ.models.rfq = PJQ.models.rfq ? PJQ.models.rfq : {};\nPJQ.views.rfq = PJQ.views.rfq ? PJQ.views.rfq : {};","PJQ.views.rfq.RFQBatchModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-rfq-batch'),\n maxWidth: 1200,\n isShowCloseButton: true,\n onSave: _.noop()\n },\n events: {\n 'click .btn-close': 'close',\n 'click .btn-save': 'save',\n // 'click .cb-send': 'sendChanged',\n 'click .cb-send-all': 'sendAllChanged',\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n\n this.batch = {\n changeRequestId: this.options.changeRequest?.id,\n title: this.options.changeRequest ? (this.options.changeRequest.get('number') + ' - ' + this.options.changeRequest.get('title')) : '',\n description: this.options.changeRequest?.get('description') ?? '',\n dueDate: new Date(),\n attachments: new PJQ.collections.rfq.Attachments(),\n requests: _.map(this.options.lineItems ?? [], (lineItem) => {\n let vendor = lineItem.get('vendor');\n return {\n id: lineItem.id,\n lineItem: lineItem,\n lineItemId: lineItem.id,\n scope: lineItem.get('description'),\n contractedContact: vendor,\n contractedContactId: vendor?.id,\n assignees: vendor != null ? [vendor] : [],\n assigneeIds: vendor != null ? [vendor.id] : [],\n commitmentId: lineItem.get('commitmentId'),\n commitmentNumber: lineItem.get('commitmentNumber'),\n send: true\n };\n })\n }\n\n this.isFetched = true;\n },\n beforeRender: function () {\n\n },\n renderData: function () {\n return {\n batch: this.batch,\n isFetched: this.isFetched\n }\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n this.renderForm();\n\n this.renderDataTable();\n },\n sendAllChanged: function () {\n let $target = $(e.currentTarget),\n checked = $target.prop('checked');\n _.each(this.batch.requests, (request) => {\n let checkbox = this.$('.cb-send[data-id=\"' + request.id + '\"]');\n checkbox.prop('checked', checked);\n request.send = checked;\n });\n },\n renderForm: function () {\n if (!this.binder) {\n this.binder = new PJQ.Binder(this.$('.details-outer'), this.batch, {\n watchElements: [\n 'input'\n ]\n });\n }\n\n new PJQ.inputs.Datepicker({\n el: this.$('.input-due-date'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: this.batch.dueDate\n },\n onChange: (newDate) => {\n this.batch.dueDate = newDate;\n }\n });\n\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.rfq-file-uploader'),\n collection: this.batch.attachments,\n useApiV2: true,\n onDelete: (attachment, callback) => {\n if (attachment.get('id') > 0) {\n attachment.set('delete', true);\n } else {\n attachment.destroy();\n }\n\n callback();\n }\n });\n },\n renderInputs: function () {\n if (!this.lineBinder) {\n this.lineBinder = new PJQ.Binder(this.$('.line-items'), this.batch.requests, {\n delegate: true,\n modelSelectorAttribute: 'id',\n idAttribute: 'id',\n watchElements: [\n 'input'\n ]\n });\n }\n let fnCommitmentToChoice = (commitment) => {\n return {\n id: commitment.id,\n name: '' + commitment.get('number') + '' + ' | ' + PJQ.helpers.formatHelpers.formatCurrency(commitment.getGrandTotal()),\n subtext: commitment.contractedContact?.get('companyName') ?? ''\n };\n };\n this.commitmentPickerCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.batch.requests, {\n pickerSelector: '.select-commitment',\n valueAttribute: 'commitmentId',\n idAttribute: 'id',\n selectPickerOptions: {\n isBlockSubtext: true,\n size: 5,\n choices: (model) => {\n if (model.lineItem.get('costCodeId') > 0) {\n let suggested = [],\n others = [];\n _.each(this.options.projectCommitments.models, (commitment) => {\n if (null != commitment.lineItems.findWhere({\n costCodeId: model.lineItem.get('costCodeId')\n })) {\n suggested.push(commitment);\n } else {\n others.push(commitment);\n }\n });\n if (_.size(suggested) > 0) {\n return [{\n name: 'Suggested',\n choices: _.map(suggested, fnCommitmentToChoice)\n }, {\n name: '',\n choices: _.map(others, fnCommitmentToChoice)\n }];\n }\n }\n return _.map(this.options.projectCommitments.models, fnCommitmentToChoice);\n }\n },\n onChange: (model, value) => {\n let commitment = this.options.projectCommitments.get(value);\n model.commitment = commitment;\n model.commitmentNumber = model.commitment?.get('number');\n model.contractedContact = commitment.contractedContact;\n model.contractedContactId = model.contractedContact?.id;\n this.renderDataTable();\n }\n });\n\n let fnVendorToChoice = (commitment) => {\n return {\n id: commitment.contractedContact.id,\n name: '' + commitment.contractedContact.get('companyName') + '',\n subtext: commitment.contractedContact.get('contactName') ?? ''\n };\n };\n this.companyPickerCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.batch.requests, {\n pickerSelector: '.select-company',\n valueAttribute: 'contractedContactId',\n idAttribute: 'id',\n selectPickerOptions: {\n isBlockSubtext: true,\n size: 5,\n isIntChoices: true,\n choices: (model) => {\n let foundIds = [],\n suggested = [],\n others = [],\n costCodeId = model.lineItem.get('costCodeId') > 0;\n _.each(this.options.projectCommitments.models, (commitment) => {\n if (commitment.contractedContact == null || -1 !== foundIds.indexOf(commitment.contractedContact.id)) {\n return;\n }\n\n if (costCodeId > 0 && null != commitment.lineItems.findWhere({\n costCodeId: costCodeId\n })) {\n suggested.push(commitment);\n } else {\n others.push(commitment);\n }\n });\n if (_.size(suggested) > 0) {\n return [{\n name: 'Suggested',\n choices: _.map(suggested, fnVendorToChoice)\n }, {\n name: '',\n choices: _.map(others, fnVendorToChoice)\n }];\n }\n return _.map(others, fnVendorToChoice);\n }\n },\n onChange: (model, value) => {\n let commitment = null,\n currentCommitment = this.options.projectCommitments.get(model.commitmentId),\n matchCommitments;\n if (currentCommitment && currentCommitment.contractedContact && currentCommitment.contractedContact.id === value) {\n commitment = currentCommitment\n matchCommitments = this.options.projectCommitments.filter((commitment) => {\n return commitment.contractedContact && commitment.contractedContact.id === value;\n });\n } else {\n commitment = _.size(matchCommitments) === 1 ? matchCommitments[0] : commitment;\n matchCommitments = this.options.projectCommitments.filter((commitment) => {\n return commitment.contractedContact && commitment.contractedContact.id === value;\n });\n }\n\n let contractedContact = null;\n if (_.size(matchCommitments) > 0) {\n contractedContact = matchCommitments[0].contractedContact ?? matchCommitments[0].invoiceContact;\n }\n model.commitment = commitment;\n model.commitmentNumber = model.commitment?.get('number');\n model.contractedContact = contractedContact;\n model.contractedContactId = model.contractedContact?.id;\n\n this.renderDataTable();\n }\n });\n },\n getColumns: function () {\n return [\n {\n \"data\": \"send\",\n \"columnData\": \"send\",\n \"title\": 'Send',\n \"orderable\": false,\n \"searchable\": false,\n \"render\": (data, type, row) => {\n if (type === 'sort') {\n return data.id;\n }\n\n return ('
');\n },\n \"width\": '4%'\n },\n {\n \"columnData\": \"scope\",\n \"data\": \"scope\",\n \"title\": \"Scope\",\n \"render\": (data, type, row) => {\n return '';\n }\n },\n {\n \"columnData\": \"contractedContact\",\n \"title\": \"Company\",\n \"width\": \"15%\",\n \"render\": (data, type, row) => {\n return \"
\";\n }\n },\n {\n \"columnData\": \"commitmentId\",\n \"title\": \"Commitment\",\n \"width\": \"20%\",\n \"render\": (data, type, row) => {\n return '
';\n }\n },\n {\n \"columnData\": \"assignees\",\n \"title\": \"Assignees\",\n \"width\": \"20%\",\n \"visible\": false,\n \"render\": (data, type, row) => {\n return '
';\n }\n },\n {\n data: \"id\",\n title: \"\",\n orderable: false,\n searchable: false,\n width: 50,\n className: 'text-align-center',\n render: (data, type, row) => {\n return '
';\n }\n }\n ];\n },\n renderDataTable: function () {\n let data = _.sortBy(this.batch.requests, (model) => {\n return model.id;\n });\n let $dataTable = this.$('.line-items-table')\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: $dataTable,\n data: data,\n rowId: 'id',\n order: [],\n // autoWidth: false,\n // fixedHeader: {\n // header: false,\n // footer: false\n // },\n // hasFooter: true,\n // extraClasses: this.isInvoices ? 'table-invoice-line-items' : '',\n isHideSearch: true,\n paging: false,\n // order: [],\n // language: {\n // emptyTable: this.options.canEdit ? 'Click \"Add Line Item\" to create a new Line item' : 'No line items have been added yet'\n // },\n columns: this.getColumns(),\n afterDataTableRender: () => {\n this.renderInputs();\n },\n onRowRemoved: () => {\n this.renderInputs();\n },\n contextMenuOptions: {\n actions: [\n {\n name: 'Delete',\n isDanger: true,\n onClick: (row) => {\n this.deleteLineItem(row);\n }\n }\n ]\n },\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n },\n deleteLineItem: function (row) {\n if (row == null) {\n return;\n }\n\n let item = row.data();\n this.batch.requests = _.reject(this.batch.requests, (request) => {\n return request.id === item.id;\n });\n this.render();\n },\n validate: function () {\n return true;\n },\n save: function () {\n if (!this.validate()) {\n return;\n }\n\n let loader = new PJQ.Loader(this.$('.modal-content'));\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'rfq'\n },\n {\n endpoint: 'batch'\n }]),\n isAPIv2: true,\n data: {\n changeRequestId: this.batch.changeRequestId,\n attachments: this.batch.attachments.toJSON(),\n requests: _.map(this.batch.requests, (req) => {\n return _.defaults({\n id: null,\n title: this.batch.title,\n description: this.batch.description,\n dueDate: this.batch.dueDate\n }, req);\n })\n }\n }).post().done((batchRes) => {\n if (_.size(batchRes.requests) > 0) {\n PJQ.notifications.notify.successNotify({\n message: _.size(batchRes.requests).toString() + ' RFQs were created'\n });\n } else {\n PJQ.notifications.notify.warningNotify({\n message: 'No RFQs were created'\n });\n }\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(batchRes);\n }\n this.removeModal();\n }).fail((err) => {\n loader.remove();\n PJQ.notifications.notify.warningNotify({\n message: 'Encountered an error while creating RFQs. Please contact customer service.'\n });\n });\n },\n close: function () {\n new PJQ.views.modals.YesNo({\n header: \"Cancel creating RFQs?\",\n body: \"Are you sure you want to cancel creating RFQs? All unsaved changes will be lost.\",\n onYes: () => {\n this.removeModal();\n }\n });\n }\n});","PJQ.views.rfq.RFQDataTable = PJQ.views.dataTables.DataTable.extend({\n defaults: {\n language: {\n emptyTable: 'No RFQs have been created yet',\n zeroRecords: \"No RFQs matched the search criteria\"\n },\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'data-table-header-rfq')\n },\n toggleRowClass: '.rfq-toggle-row',\n onViewChangeRequest: null\n },\n events: {\n 'click .btn-view-rfq': 'viewRFQClicked',\n 'click .btn-view-change-request': 'viewChangeRequestClicked'\n },\n getDefaultFilter: function () {\n let defaultFilter = {};\n defaultFilter = [];\n return defaultFilter;\n },\n afterSearch: function () {\n if(typeof this.options.afterSearch === 'function'){\n this.options.afterSearch();\n }\n },\n afterHeaderRender: function (){\n new PJQ.inputs.Selectpicker({\n el: this.$('.rfq-status-filter'),\n defaultValue: this.getDefaultFilter(),\n isIntChoices: true,\n isMultiple: true,\n noneSelectedText: 'No Filters',\n onChange: _.bind(function (value) {\n this.setFilter(PJQ.constants.rfq.filterType.STATUS_FILTER, value);\n }, this)\n });\n this.setFilter(PJQ.constants.rfq.filterType.STATUS_FILTER, this.getDefaultFilter());\n },\n getFilterData: function () {\n let statusFilter = this.getFilter(PJQ.constants.rfq.filterType.STATUS_FILTER);\n if (_.size(statusFilter) === 0) {\n return this.options.data;\n }\n\n return _.filter(this.options.data, function (row) {\n return (_.size(statusFilter) === 0 || _.contains(statusFilter, row.get('statusId')));\n });\n },\n getColumns: function (includeAllColumns = false) {\n this.options.canViewChangeRequests = PJQ.app.session.project.hasPermission('changeRequests.canView');\n\n let columns = [],\n includeColumns = ['status', 'changeRequest', 'title', 'number', 'description', 'assignedTo.companyName', 'amount'];\n\n columns.push({\n \"columnData\": \"childData\",\n \"data\": null,\n \"title\": \"\",\n \"width\": \"20px\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return PJQ.helpers.erp.getERPIcon(row.erpSyncStatus());\n }\n });\n\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'status':\n columns.push({\n \"columnData\": \"status\",\n \"data\": \"attributes.statusId\",\n \"title\": \"Status\",\n \"width\": \"100px\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.constants.rfq.rfqStatusNames[row.get('statusId')]\n }, this)\n });\n break;\n case 'changeRequest':\n columns.push({\n \"columnData\": \"changeRequest\",\n \"title\": \"Change Request\",\n \"data\": \"attributes.changeRequestId\",\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n if(this.options.canViewChangeRequests){\n return '' + row.get('changeRequestNumber') + '';\n }\n return data;\n }, this)\n },);\n break;\n case 'number':\n columns.push({\n \"columnData\": \"number\",\n \"data\": \"attributes.number\",\n \"title\": \"Number\",\n \"render\": _.bind(function (data, type, row) {\n return '' + row.get('number') + '';\n }, this)\n });\n break;\n case 'title':\n columns.push({\n \"columnData\": \"title\",\n \"data\": \"attributes.title\",\n \"title\": \"Title\"\n });\n break;\n case 'description':\n columns.push({\n \"columnData\": \"description\",\n \"data\": \"attributes.description\",\n \"title\": \"Description\"\n });\n break;\n case 'createdOn':\n columns.push({\n \"columnData\": \"createdOn\",\n \"data\": \"attributes.createdOn\",\n \"title\": 'Created',\n \"width\": '90px',\n \"render\": _.bind(function (data, type, row) {\n if(_.size(data) === 0){\n return '';\n }\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }, this)\n });\n break;\n case 'assignedTo.companyName':\n columns.push({\n \"columnData\": \"assignedTo.companyName\",\n \"title\": \"Assigned To\",\n \"titleSettings\": \"Assigned To\",\n \"render\": _.bind(function (data, type, row) {\n return row.get('assignedTo') ? row.get('assignedTo').companyName : 'N/A';\n }, this)\n });\n break;\n case 'amount':\n columns.push({\n \"columnData\": \"amount\",\n \"data\": \"attributes.amount\",\n \"width\": \"10%\",\n \"title\": \"Amount\",\n \"className\": \"text-align-right\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(row.get('amount'));\n }, this)\n });\n break;\n }\n }, this));\n\n if (!includeAllColumns) {\n columns.push({\n \"title\": '',\n \"render\": _.bind(function (data, type, row) {\n return '
';\n }, this),\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"90px\",\n \"className\": \"text-center\",\n \"visible\": true\n });\n }\n\n return columns;\n },\n viewRFQClicked: function (e){\n if(typeof(this.options.onViewRFQ) === 'function'){\n let row = this.getRow((e.currentTarget).closest('tr')),\n rfq = row.data();\n if(rfq != null){\n this.options.onViewRFQ(rfq);\n }\n }\n },\n viewChangeRequestClicked: function (e) {\n let row = this.getRow((e.currentTarget).closest('tr'));\n this.viewChangeRequest(row.data().get('changeRequestId'));\n },\n viewChangeRequest: function(changeRequestId) {\n new PJQ.views.changeRequests.ChangeRequestEditModal({\n model: new PJQ.models.changeRequests.ChangeRequest({\n id: changeRequestId\n })\n });\n }\n});","PJQ.views.rfq.RFQEditModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-rfq-edit'),\n width: '95%',\n maxWidth: 1500,\n model: null,\n isShowCloseButton: true,\n onSave: _.noop(),\n onDelete: _.noop()\n },\n events: {\n 'click .btn-view-change-request': 'viewChangeRequest',\n 'click .btn-close': 'close',\n 'click .btn-save': 'saveRFQ',\n 'click .btn-delete': 'deleteRFQ',\n 'click .btn-send-request': 'sendRequest',\n 'click .btn-update-response': 'updateResponseClicked',\n 'click .impact-response>button': 'impactResponseChanged'\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n\n if (this.options.changeRequest == null) {\n this.options.changeRequest = new PJQ.models.changeRequests.ChangeRequest({\n id: this.model.get('changeRequestId')\n });\n }\n\n if (this.model == null) {\n if (!this.options.changeRequest.isFetched) {\n await this.options.changeRequest.fetch();\n }\n\n this.model = new PJQ.models.rfq.RFQ({\n title: \"\",\n description: this.options.changeRequest.get('description'),\n changeRequestId: this.options.changeRequest.id,\n changeRequestNumber: this.options.changeRequest.get('number'),\n projectId: this.options.changeRequest.get('projectId'),\n statusId: PJQ.constants.rfq.rfqStatus.DRAFT,\n amount: 0\n });\n }\n\n if (!this.model.isNew()) {\n await this.model.fetch();\n }\n\n this.isFetched = true;\n this.render();\n },\n beforeRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n let pContactId = this.options.project.get('contactId');\n this.options.isAssignee = pContactId > 0 && (this.model.contractedContact?.id === pContactId || this.model.assignees.get(this.options.project.get('contactId')));\n this.options.canAdd = this.options.project.hasPermission('changeRequests.canAdd');\n this.options.isAdmin = this.options.project.hasPermission('changeRequests.isAdmin');\n this.options.canViewChangeRequests = this.options.isAdmin;\n this.options.canEdit = this.options.isAdmin && this.model.get('statusId') !== PJQ.constants.rfq.rfqStatus.APPROVED && this.model.get('statusId') !== PJQ.constants.rfq.rfqStatus.CLOSED;\n this.options.canRespond = (this.options.isAdmin || this.options.isAssignee) && (this.model.get('statusId') === PJQ.constants.rfq.rfqStatus.PRICING || this.model.get('statusId') === PJQ.constants.rfq.rfqStatus.REVISE);\n this.options.canDelete = this.options.isAdmin && this.model.get('statusId') !== PJQ.constants.rfq.rfqStatus.APPROVED;\n this.options.canEditStatus = this.options.isAdmin && !this.model.isNew();\n this.options.canSendRequest = this.options.isAdmin && !this.model.isNew() && (this.options.canEdit || this.options.canRespond) && (this.model.get('statusId') === PJQ.constants.rfq.rfqStatus.DRAFT || this.model.get('statusId') === PJQ.constants.rfq.rfqStatus.PRICING || this.model.get('statusId') === PJQ.constants.rfq.rfqStatus.REVISE);\n\n if (!this.isFetched || this.model.isNew()) {\n return;\n }\n\n let status = this.model.get('statusId');\n if (status === PJQ.constants.rfq.rfqStatus.APPROVED\n || status === PJQ.constants.rfq.rfqStatus.VOID) {\n this.options.canEdit = false;\n this.options.canDelete = false;\n } else if (status == PJQ.constants.rfq.rfqStatus.PRICING\n || status == PJQ.constants.rfq.rfqStatus.REVISE) {\n this.options.canEdit = false;\n }\n },\n renderData: function () {\n return {\n model: this.model,\n isAssignee: this.options.isAssignee,\n canAdd: this.options.canAdd,\n canEdit: this.options.canEdit,\n canDelete: this.options.canDelete,\n isAdmin: this.options.isAdmin,\n canRespond: this.options.canRespond,\n canViewChangeRequests: this.options.canViewChangeRequests,\n isFetched: this.isFetched,\n activeView: this.options.activeView,\n canSendRequest: this.options.canSendRequest,\n views: this.views\n }\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n this.renderGeneral();\n this.renderResponse();\n },\n renderGeneral: function () {\n new PJQ.Binder(this.$el, this.model, {\n useDecimalPercentFields: true,\n watchElements: [\n 'input',\n 'textarea'\n ]\n });\n\n PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.input-dollars-full'), 2, true);\n\n let choices = _.map(PJQ.constants.rfq.rfqStatus, (st) => {\n return {\n id: st,\n name: PJQ.constants.rfq.rfqStatusNames[st],\n disabled: false\n }\n });\n this.statusPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-status'),\n choices: choices,\n isIntChoices: true,\n defaultValue: this.model.get('statusId'),\n canEdit: this.options.canEditStatus,\n onChange: (value) => {\n let newStatus = value,\n fnSave = () => {\n this.model.set('statusId', newStatus);\n if (!this.model.isNew()) {\n this.model.save(null, {\n success: _.bind(function () {\n this.model.dirtyAttributes = {};\n if (typeof this.options.onSave === 'function')\n this.options.onSave(this.model, false);\n this.render();\n PJQ.notifications.notify.successNotify({\n message: 'RFQ saved successfully'\n });\n\n if (newStatus === PJQ.constants.rfq.rfqStatus.PRICING || newStatus === PJQ.constants.rfq.rfqStatus.REVISE) {\n this.sendRequest();\n }\n }, this)\n })\n }\n };\n\n if (newStatus === PJQ.constants.rfq.rfqStatus.APPROVED && this.model.get('hasCostImpact')) {\n let oldStatus = this.model.get('statusId');\n\n new PJQ.views.modals.YesNo({\n header: \"Approve RFQ?\",\n body: \"Approving this RFQ will apply the quote amount to it's related change request item revenue and cost. Would you like to continue?\",\n onYes: () => {\n fnSave();\n },\n onNo: () => {\n this.model.set('statusId', oldStatus);\n this.render();\n }\n });\n return;\n }\n\n fnSave();\n }\n });\n\n this.companyPicker = new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.contracted-contact'),\n context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\n hideUsers: true,\n selectedContact: this.model.contractedContact,\n isSingleChoice: true,\n canViewContacts: this.options.project.hasPermission('projectContacts.canView'),\n canEdit: this.model.isNew() || this.model.contractedContact == null,\n onChange: (selectedContact) => {\n this.model.contractedContact = selectedContact;\n this.model.set('contractedContactId', selectedContact?.id);\n\n this.render();\n }\n });\n\n this.assigneePicker = new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.assigned-to'),\n context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\n hideUsers: true,\n selectedContact: this.model.assignees.models,\n isSingleChoice: false,\n canViewContacts: this.options.project.hasPermission('projectContacts.canView'),\n canEdit: this.options.canEdit && this.options.isAdmin,\n onChange: (selectedContacts) => {\n this.model.assignees = selectedContacts;\n this.model.set('assigneeIds', selectedContacts?.pluck('id') ?? []);\n }\n });\n\n this.distributeToPicker = new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.distribute-to'),\n context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\n hideUsers: true,\n selectedContact: this.model.distributeTo.models,\n isSingleChoice: false,\n canViewContacts: this.options.project.hasPermission('projectContacts.canView'),\n canEdit: this.options.canEdit && this.options.isAdmin,\n onChange: (selectedContacts) => {\n this.model.distributeTo = selectedContacts;\n this.model.set('distributeToIds', selectedContacts?.pluck('id') ?? []);\n }\n });\n\n new PJQ.inputs.Datepicker({\n el: this.$('.due-date'),\n canEdit: this.options.canEdit,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: this.model.get('dueDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('dueDate'), false) : null\n },\n onChange: _.bind(function (newDate) {\n this.model.set('dueDate', newDate);\n }, this)\n });\n\n if (_.size(this.model.dirtyAttributes) === 1 && this.model.dirtyAttributes.hasOwnProperty('dueDate')) {\n this.model.dirtyAttributes = {};\n this.model.isDirty = false;\n }\n\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.rfq-file-uploader'),\n collection: this.model.attachments,\n canUpload: this.options.isAdmin && this.model.get('statusId') !== PJQ.constants.rfq.rfqStatus.APPROVED && this.model.get('statusId') !== PJQ.constants.rfq.rfqStatus.CLOSED,\n useApiV2: true,\n canDelete: this.options.isAdmin && this.model.get('statusId') !== PJQ.constants.rfq.rfqStatus.APPROVED && this.model.get('statusId') !== PJQ.constants.rfq.rfqStatus.CLOSED,\n previewImageDimension: 150,\n onSuccess: _.bind(function (file) {\n this.model.isDirty = true;\n }, this),\n onDelete: _.bind(function (attachment, callback) {\n if (attachment.get('id') > 0) {\n attachment.set('delete', true);\n } else {\n attachment.destroy();\n }\n\n this.model.isDirty = true;\n callback();\n }, this)\n });\n },\n renderResponse: function () {\n if (!this.model.get('hasCostImpact')) {\n return;\n }\n\n if (_.size(this.model.responseAttachments.models) > 0) {\n new PJQ.views.files.FileUploaderGrid({\n el: this.$('.rfq-response-file-uploader'),\n collection: this.model.responseAttachments,\n canUpload: false,\n useApiV2: true,\n canDelete: false\n });\n }\n },\n updateResponseClicked: function () {\n this.updateResponse();\n },\n updateResponse: function (hasCostImpact = null) {\n new PJQ.views.rfq.RFQResponseModal({\n model: this.model,\n hasCostImpact: hasCostImpact,\n onSubmit: (data) => {\n this.model.set(data.response);\n this.model.responseAttachments = data.attachments;\n this.submitResponse(() => {\n this.render();\n });\n }\n });\n },\n impactResponseChanged: function (e) {\n let hasCostImpact = $(e.currentTarget).data('value');\n if (!hasCostImpact) {\n new PJQ.views.modals.YesNo({\n header: \"Submit Response?\",\n body: \"Are you sure you want to submit the response of no impact for this RFQ?\",\n onYes: () => {\n this.model.set('hasCostImpact', hasCostImpact);\n this.submitResponse(() => {\n this.render();\n });\n }\n });\n return;\n }\n\n this.updateResponse(hasCostImpact);\n },\n submitResponse: function (callback) {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.model.respond((result) => {\n loader.remove();\n if (result) {\n PJQ.notifications.notify.successNotify({\n message: 'RFQ response submitted'\n });\n\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n\n PJQ.app.session.project.trigger('rfqChanged', this.model);\n\n this.render();\n\n if (typeof callback === 'function') {\n callback();\n }\n }\n });\n },\n sendRequest: function () {\n let message = \"Would you like to send this RFQ to the assigned contact?\";\n if (this.model.get('statusId') === PJQ.constants.rfq.rfqStatus.DRAFT) {\n message += ' This will also set the status to ' + PJQ.constants.rfq.rfqStatusNames[PJQ.constants.rfq.rfqStatus.PRICING] + '.';\n }\n\n new PJQ.views.modals.YesNo({\n header: \"Send Request?\",\n body: message,\n onYes: () => {\n this.model.sendQuoteRequest((success) => {\n if (success) {\n PJQ.notifications.notify.successNotify({\n message: 'RFQ sent successfully'\n });\n this.model.set('requestLastSentOn', new Date());\n this.render();\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to send RFQ'\n });\n }\n });\n }\n });\n },\n viewChangeRequest: function () {\n this.removeModal();\n new PJQ.views.changeRequests.ChangeRequestEditModal({\n model: this.options.changeRequest\n });\n },\n saveRFQ: function () {\n let isNew = this.model.isNew(),\n quoteAmount = PJQ.helpers.inputHelpers.getMoneyInputValue(this.$('.input-quote-amount'));\n this.model.set('amount', quoteAmount != null ? quoteAmount : 0);\n this.save(() => {\n PJQ.notifications.notify.successNotify({\n message: 'RFQ saved successfully'\n });\n\n if (!isNew) {\n this.removeModal();\n }\n });\n },\n validate: function () {\n let isValid = true;\n\n if (!this.assigneePicker.validate()) {\n isValid = false;\n }\n\n if (this.model.get('statusId') === PJQ.constants.rfq.rfqStatus.PRICING || this.model.get('statusId') === PJQ.constants.rfq.rfqStatus.REVISE) {\n let quoteAmount = PJQ.helpers.inputHelpers.getMoneyInputValue(this.$('.input-quote-amount'));\n if (quoteAmount == null || quoteAmount.trim() === '') {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-quote-amount'), false);\n }\n }\n\n return isValid;\n },\n save: function (callback) {\n if (!this.validate())\n return;\n\n this.model.save(null, {\n success: _.bind(function () {\n this.render();\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n\n PJQ.app.session.project.trigger('rfqChanged', this.model);\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)\n });\n },\n deleteRFQ: function () {\n let rfqId = this.model.id\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Delete\",\n body: \"Are you sure you want to delete this RFQ?\",\n onDelete: _.bind(function () {\n this.model.destroy({\n success: _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'RFQ deleted successfully'\n });\n\n if (typeof this.options.onDelete === 'function')\n this.options.onDelete(rfqId);\n\n this.removeModal();\n }, this)\n });\n }, this)\n });\n },\n close: function () {\n if (this.model.hasChanged() && this.options.canEdit) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.saveRFQ();\n this.removeModal();\n }, this),\n onDontSave: _.bind(function () {\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n }\n});","PJQ.views.rfq.RFQList = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'rfq-list'),\n rfqId: null\n },\n events: {\n 'click .btn-add-rfq': 'addRFQ',\n 'click .btn-delete-rfq': 'deleteRFQClicked'\n },\n beforeFirstRender: async function () {\n this.isFetched = false;\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n\n if (this.collection == null) {\n this.collection = new PJQ.collections.rfq.RFQs(null, {\n projectId: this.options.project.get('projectId')\n });\n }\n\n if(!this.collection.isFetched) {\n await this.collection.fetch();\n }\n\n this.erpIntegration = await PJQ.app.session.fetchERPIntegration();\n\n this.isFetched = true;\n this.render();\n },\n beforeRender: function(){\n if (!this.isFetched) {\n return;\n }\n\n this.options.isAdmin = PJQ.app.session.project.hasPermission('changeRequests.isAdmin');\n },\n renderData: function () {\n return {\n collection: this.collection,\n isFetched: this.isFetched,\n isAdmin: this.options.isAdmin,\n hideHeader: this.options.hideHeader\n }\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n this.renderView();\n\n PJQ.app.session.project.off('rfqChanged');\n PJQ.app.session.project.on('rfqChanged', function (rfq) {\n this.collection.add(rfq);\n this.render();\n }, this);\n\n if (this.options.rfqId > 0) {\n let initRFQ = this.collection.get(this.options.rfqId);\n if (initRFQ != null) {\n this.viewRFQ(initRFQ);\n this.options.rfqId = null;\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.rfq.RFQDataTable({\n el: this.$('.rfq-data'),\n rowId: \"cid\",\n data: this.collection.models,\n isAdmin: this.options.isAdmin,\n headerData: _.bind(function () {\n return {\n project: this.options.project,\n isAdmin: this.options.isAdmin\n };\n }, this),\n order: [[1, 'asc']],\n onViewRFQ: (rfq) => {\n this.viewRFQ(rfq);\n },\n onRowDoubleClick: (row) => {\n this.viewRFQ(row.data());\n },\n contextMenuOptions: {\n actions: [\n {\n name: 'View',\n onClick: _.bind(function (row) {\n this.viewRFQ(row.data());\n }, this)\n }\n ]\n }\n });\n },\n viewRFQClicked: function (e) {\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr'));\n this.viewRFQ(row.data());\n },\n viewRFQ: function (rfq) {\n isNew = rfq == null;\n new PJQ.views.rfq.RFQEditModal({\n model: rfq,\n changeRequest: this.options.changeRequest,\n onSave: _.bind(function (rfq) {\n if (isNew) {\n this.collection.add(rfq);\n }\n this.renderView();\n }, this),\n onDelete: _.bind(function (rfq) {\n this.collection.remove(rfq);\n this.renderView();\n }, this)\n });\n },\n addRFQ: function() {\n this.viewRFQ();\n },\n deleteRFQClicked: function (e) {\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr'));\n this.deleteRFQ(row);\n },\n deleteRFQ: function (row) {\n if (row != null) {\n let rfq = row.data();\n if (rfq != null) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete RFQ\",\n body: \"Are you sure you want to delete this RFQ?\",\n onDelete: _.bind(function () {\n rfq.destroy({\n success: _.bind(function () {\n this.dataTable.removeRow(row);\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(rfq);\n }\n }, this)\n });\n }, this)\n });\n }\n }\n }\n});\n\nPJQ.views.rfq.SelectRFQModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-select-rfqs'),\n width: '50%',\n maxWidth: 700,\n onSave: _.noop\n },\n events: {\n \"change .select-rfq\": \"selectRFQ\",\n \"click .btn-save\": \"save\",\n \"click .btn-cancel\": \"cancel\"\n },\n beforeModalCreated: function () {\n this.options.isAdmin = PJQ.app.session.project.hasPermission('changeRequests.isAdmin');\n this.selectedRFQs = [];\n\n if (this.collection == null) {\n this.collection = new PJQ.collections.rfq.RFQs();\n }\n\n this.render()\n\n },\n renderData: function() {\n return {\n headerSubText: this.options.headerSubText,\n isSingleChoice: this.options.isSingleChoice\n }\n },\n afterRender: function () {\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.rfqs-table'),\n data: this.rfqs,\n isHideSearch: true,\n order: [],\n columns: [{\n \"data\": \"attributes.isSelected\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('
');\n }, this)\n },\n {\n \"data\": \"attributes.number\",\n \"title\": \"Number\",\n \"orderable\": true\n },\n {\n \"data\": \"attributes.client.companyName\",\n \"title\": \"Client\",\n \"orderable\": true\n },\n {\n \"data\": \"attributes.description\",\n \"title\": \"Description\",\n \"orderable\": false\n },\n {\n \"data\": \"attributes.amount\",\n \"title\": \"Amount\",\n \"orderable\": false,\n \"className\": \"text-align-right\",\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.formatHelpers.formatCurrency(data);\n }, this)\n }],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n },\n selectRFQ: function (e) {\n let target = $(e.currentTarget),\n rfq = this.dataTable.getRow(target.closest('tr')).data();\n\n if (this.options.isSingleChoice) {\n this.$('.select-rfq').not(target).text('Select').prop('checked', false);\n if (rfq.get('isSelected')) {\n rfq.set('isSelected', false);\n this.selectedRFQ = null;\n } else {\n rfq.set('isSelected', true);\n this.selectedRFQ = rfq;\n this.collection.get(rfq.id);\n _.each(this.collection.models, _.bind(function (dtRFQ) {\n if (rfq.id !== dtRFQ.id)\n dtRFQ.set('isSelected', false);\n }, this));\n }\n this.$('.btn-save').attr('disabled', this.selectedRFQ == null);\n\n if(typeof this.options.onRFQSelected === 'function') {\n this.options.onRFQSelected(this.selectedRFQ);\n }\n } else {\n if (rfq.get('isSelected')) {\n target.text('Select').addClass('btn-primary').removeClass('btn-secondary');\n rfq.set('isSelected', false);\n this.selectedRFQs = _.reject(this.selectedRFQs, function (selRFQ) {\n return selRFQ.id === rfq.id;\n });\n } else {\n target.text('Deselect').addClass('btn-secondary').removeClass('btn-primary');\n rfq.set('isSelected', true);\n this.selectedRFQ.push(rfq);\n }\n this.$('.btn-save').attr('disabled', this.selectedRFQs == null);\n\n if(typeof this.options.onRFQSelected === 'function') {\n this.options.onRFQSelected(this.selectedRFQs);\n }\n }\n },\n cancel: function () {\n if (this.options.onCancel) {\n this.options.onCancel();\n }\n this.removeModal();\n },\n save: function () {\n if (this.options.onSave) {\n this.options.onSave(this.selectedRFQ ? this.selectedRFQ : this.selectedRFQs);\n this.removeModal();\n }\n }\n});","// Models\nPJQ.models.rfq.RFQ = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id',\n endpoint: function () {\n let arr = [];\n if (this.isNew()) {\n arr.push({\n endpoint: 'projects',\n value: this.get('projectId')\n });\n }\n arr.push({\n endpoint: 'rfq',\n value: this.id\n });\n return PJQ.helpers.urlHelpers.generateEndpoint(arr);\n },\n parse: function (model) {\n if (!model)\n return model;\n\n this.attachments = new PJQ.collections.rfq.Attachments(model.attachments);\n this.responseAttachments = new PJQ.collections.rfq.Attachments(model.responseAttachments);\n\n if (model && model.contractedContact) {\n this.contractedContact = new PJQ.models.contacts.Contact(model.contractedContact);\n } else {\n this.contractedContact = null;\n }\n\n if (model && model.responseBy) {\n this.responseBy = new PJQ.models.contacts.Contact(model.responseBy);\n } else {\n this.responseBy = null;\n }\n\n this.assignees = new PJQ.collections.contacts.Contacts(model.assignees);\n\n this.distributeTo = new PJQ.collections.contacts.Contacts(model.distributeTo);\n\n return model;\n },\n beforeSave: function () {\n this.set({\n assigneeIds: this.assignees.pluck('id'),\n assignees: this.assignees.toJSON(),\n contractedContactId: this.contractedContact?.get('id'),\n contractedContact: this.contractedContact ? this.contractedContact.toJSON() : null,\n attachments: this.attachments.toJSON(),\n responseAttachments: this.responseAttachments.toJSON()\n });\n },\n sendQuoteRequest: function (callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/send',\n isAPIv2: true,\n }).post().done((response) => {\n this.set(this.parse(response));\n if (typeof callback === 'function') {\n callback(true);\n }\n }).fail((response) => {\n if (typeof callback === 'function') {\n callback(false);\n }\n });\n },\n respond: function (callback) {\n this.beforeSave();\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/respond',\n isAPIv2: true,\n data: this.toJSON()\n }).post().done(_.bind(function (response) {\n if (typeof callback === 'function') {\n this.set(this.parse(response));\n callback(true);\n }\n }, this)).fail(_.bind(function (response) {\n if (typeof callback === 'function') {\n callback(false);\n }\n }, this));\n },\n syncERP: function (callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/syncerp',\n isAPIv2: true,\n }).post().done(_.bind(function (res) {\n if (res && _.size(res.externalId) > 0) {\n this.set('externalObject', res);\n }\n if (typeof callback === 'function') {\n callback(res);\n }\n }, this)).fail(_.bind(function (xhr, err, result) {\n if (typeof callback === 'function') {\n callback(null);\n }\n }, this));\n },\n unlinkERP: function (callback) {\n new PJQ.ajax.Request({\n endpoint: this.endpoint() + '/unlinkerp',\n isAPIv2: true,\n }).post().done(_.bind(function () {\n this.set('externalObject', null);\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)).fail(_.bind(function (xhr) {\n if (typeof callback === 'function') {\n let err;\n if (xhr.responseJSON != null) {\n err = xhr.responseJSON.type;\n } else {\n err = null;\n }\n callback(false, err);\n }\n }, this));\n },\n makeERPUrl: function (integration) {\n let externalId = this.externalId();\n if (_.size(externalId) === 0) {\n return '';\n }\n\n switch (integration.get('name')) {\n case PJQ.constants.integrations.providers.QBO.name:\n // TODO: QBO Integration URL\n return 'https://app.sandbox.qbo.intuit.com/app/purchaseorder?txnId=' + externalId;\n default:\n return '';\n }\n }\n});\n\nPJQ.models.rfq.Attachment = PJQ.models.files.File.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id'\n});\n\n// Collections\nPJQ.collections.rfq.RFQs = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n endpoint: function () {\n let params = [];\n if (this.options.changeRequestId > 0) {\n params.push({\n endpoint: 'changeRequestId',\n value: this.options.changeRequestId\n });\n }\n\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.projectId\n },\n {\n endpoint: 'rfq'\n }\n ], params);\n },\n model: PJQ.models.rfq.RFQ\n});\n\nPJQ.collections.rfq.Attachments = PJQ.collections.files.Files.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.rfq.Attachment,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'rfq',\n value: this.options.rfqId\n },\n {\n endpoint: 'attachments'\n }\n ]);\n }\n});","PJQ.views.rfq.RFQResponseModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-rfq-response'),\n maxWidth: 600,\n isShowCloseButton: true,\n onSubmit: _.noop()\n },\n events: {\n 'click .btn-close': 'close',\n 'click .btn-submit': 'submitResponse',\n 'click .impact-response>button': 'impactResponseChanged'\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n this.options.isAdmin = this.options.project.hasPermission('changeRequests.isAdmin');\n\n this.hasChanged = false;\n this.response = {\n hasCostImpact: this.options.hasCostImpact ?? this.model.get('hasCostImpact'),\n amount: this.model.get('amount') ?? null,\n comment: this.model.get('comment') ?? null\n };\n this.attachments = this.model.responseAttachments.clone();\n\n this.isFetched = true;\n this.render();\n },\n beforeRender: function () {\n\n },\n renderData: function () {\n return {\n model: this.model,\n response: this.response,\n isFetched: this.isFetched\n }\n },\n afterRender: function () {\n if (!this.isFetched || !this.response.hasCostImpact)\n return;\n\n new PJQ.Binder(this.$el, this.response, {\n watchElements: [\n 'input'\n ],\n afterChange: () => {\n this.hasChanged = true;\n }\n });\n\n new PJQ.views.files.FileUploaderGrid({\n el: this.$('.rfq-response-file-uploader'),\n collection: this.attachments,\n useApiV2: true,\n canDelete: this.options.isAdmin,\n onSuccess: (file) => {\n this.hasChanged = true;\n },\n onDelete: (attachment, callback) => {\n this.hasChanged = true;\n\n if (attachment.get('id') > 0) {\n attachment.set('delete', true);\n } else {\n attachment.destroy();\n }\n\n callback();\n }\n });\n\n let self = this;\n this.$('.impact-response>button').each(function () {\n if ($(this).data('value') === self.response.hasCostImpact) {\n $(this).removeClass('inactive').addClass('font-weight-normal');\n } else {\n $(this).addClass('inactive').removeClass('font-weight-normal');\n }\n });\n },\n impactResponseChanged: function (e) {\n this.response.hasCostImpact = $(e.currentTarget).data('value');\n this.render();\n },\n validate: function () {\n let err = null;\n if (this.response.hasCostImpact == null) {\n err = 'Please select a response';\n }\n\n this.$('.error-outer').html(err);\n\n return err == null;\n },\n submitResponse: function () {\n if (!this.validate()) {\n return;\n }\n\n if(!this.response.hasCostImpact){\n this.response.amount = null;\n this.response.comment = null;\n }\n\n this.options.onSubmit({\n response: this.response,\n attachments: this.attachments\n })\n this.removeModal();\n },\n close: function () {\n new PJQ.views.modals.YesNo({\n header: \"Cancel Response?\",\n body: \"Are you sure you want to cancel your response?\",\n onYes: () => {\n this.removeModal();\n }\n });\n }\n});","PJQ.models.budget.Settings = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'settingId',\n parseNumberFormat: function (numberFormat, project, additionalData) {\n let result = '';\n\n _.each(numberFormat, _.bind(function (token) {\n if (token.isText)\n result += token.label;\n else if (token.token === 'today')\n result += this.parseDateFormatToken(new Date(), token.dateFormatId);\n else if (token.token === 'project.projectId')\n result += project.get('projectId').toString();\n else if (token.token === 'project.startDate')\n result += this.parseDateFormatToken(PJQ.helpers.dateHelpers.parseDateString(project.get('startDate'), false), token.dateFormatId);\n else if (token.token === 'counter')\n result += additionalData.counter.toString().padStart(4, '0');\n else if (token.token.startsWith('fieldValue')) {\n let fieldNumber = parseInt(token.token.substr(10));\n _.each(PJQ.app.session.project.customFields.models, _.bind(function (customField) {\n if (customField.get('fieldNumber') === fieldNumber) {\n _.each(PJQ.app.session.project.get('customFields'), _.bind(function (fieldValue) {\n if (fieldValue.fieldNumber === fieldNumber) {\n switch (customField.get('fieldType')) {\n case PJQ.constants.customFields.fieldTypes.TEXT:\n case PJQ.constants.customFields.fieldTypes.INT:\n result += fieldValue.value.toString();\n break;\n case PJQ.constants.customFields.fieldTypes.CHOICE:\n _.each(customField.get('choices'), _.bind(function (choice) {\n if (choice.id === fieldValue.value)\n result += choice.choiceName;\n }, this));\n break;\n case PJQ.constants.customFields.fieldTypes.DATE:\n result += this.parseDateFormatToken(PJQ.helpers.dateHelpers.parseDateString(fieldValue.value, false), token.dateFormatId);\n break;\n case PJQ.constants.customFields.fieldTypes.DATETIME:\n result += this.parseDateFormatToken(PJQ.helpers.dateHelpers.parseDateString(fieldValue.value, true), token.dateFormatId);\n break;\n }\n }\n }, this));\n }\n }, this));\n }\n }, this));\n\n return result.replaceAll(' ', '');\n },\n parseDateFormatToken: function (input, dateFormatId) {\n let result = null;\n\n switch (dateFormatId) {\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.DD:\n result = input.getDate().toString().padStart(2, '0');\n break;\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.MM:\n result = (input.getMonth() + 1).toString().padStart(2, '0');\n break;\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.YY:\n result = input.getFullYear().toString().substr(2);\n break;\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.YYYY:\n result = input.getFullYear().toString();\n break;\n case PJQ.constants.commitments.commitmentNumberTokenDateFormat.MMDDYYYY:\n //PJQ.helpers.dateHelpers.getDateString(startDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD, false) + ' 00:00:00');\n result = PJQ.helpers.dateHelpers.getDateString(input, PJQ.helpers.dateHelpers.dateFormats.URL_DATE, false).replaceAll('-', '');\n break;\n }\n\n return result;\n }\n});","PJQ.views.budget.SubJobSettings = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'sub-job-settings'),\r\n enableSubJobsChanged: null\r\n },\r\n events: {\r\n 'click .btn-add-sub-job': 'addClicked',\r\n 'click .btn-edit-sub-job': 'editClicked',\r\n 'click .btn-delete-sub-job': 'deleteClicked',\r\n 'click .btn-edit-cost-codes': 'editCostCodesClicked',\r\n 'click .btn-push-erp': 'pushERP',\r\n 'click .btn-pull-erp': 'pullERP',\r\n },\r\n beforeFirstRender: function () {\r\n this.isFetched = false;\r\n\r\n let fnRender = _.bind(function () {\r\n this.isFetched = true;\r\n this.render();\r\n }, this);\r\n if (this.options.project != null) {\r\n this.options.project.fetchBudget(_.bind(function (budget) {\r\n this.budget = budget;\r\n PJQ.app.session.fetchERPIntegration(_.bind(function (erp) {\r\n this.erpIntegration = erp;\r\n this.options.project.fetchSubJobs(_.bind(function (subJobs) {\r\n this.subJobs = subJobs;\r\n this.options.project.fetchCostCodes(_.bind(function (costCodes) {\r\n this.costCodes = costCodes;\r\n if (this.erpIntegration != null && this.erpIntegration.getSetting('syncProjects')) {\r\n this.options.project.fetchERPObject(_.bind(function () {\r\n fnRender();\r\n }, this));\r\n } else {\r\n fnRender();\r\n }\r\n }, this));\r\n }, this));\r\n }, this));\r\n }, this));\r\n }\r\n },\r\n renderData: function () {\r\n return {\r\n erpIntegration: this.erpIntegration,\r\n project: this.options.project,\r\n subJobs: this.subJobs,\r\n costCodes: this.costCodes,\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 this.renderERP();\r\n this.renderSubJobTable();\r\n },\r\n renderERP: function () {\r\n if (this.erpIntegration == null || (this.options.project != null && !this.options.project.isERPSynced())) {\r\n return;\r\n }\r\n\r\n let pushSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_SUB_JOBS),\r\n pullSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_SUB_JOBS),\r\n hasUnsynced = null != _.find(this.subJobs.models, function (subJob) {\r\n let st = subJob.erpSyncStatus();\r\n return st !== PJQ.constants.integrations.erp.syncStatuses.APPROVED && st !== PJQ.constants.integrations.erp.syncStatuses.SYNCED;\r\n }), btn = '';\r\n this.erpButtons = PJQ.helpers.erp.renderERPButtons(this.$('.erp-sync'), {\r\n pushSupported: pushSupported,\r\n canPush: hasUnsynced,\r\n disablePushReason: !hasUnsynced ? 'All sub jobs have been pushed to ERP' : '',\r\n pullSupported: pullSupported,\r\n status: status\r\n });\r\n\r\n let badge = PJQ.helpers.erp.getERPBadge(status);\r\n this.$('.erp-badge').html('' + badge + '');\r\n },\r\n pushERP: function () {\r\n if (this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_SUB_JOBS)) {\r\n this.erpButtons.pushing(true);\r\n this.erpIntegration.pushSubJobs(this.options.project, _.bind(function (subJobs) {\r\n this.erpButtons.pushing(false);\r\n PJQ.notifications.notify.successNotify({\r\n message: _.size(subJobs).toString() + ' Sub Jobs pushed to ERP'\r\n });\r\n this.render();\r\n }, this));\r\n }\r\n },\r\n pullERP: function () {\r\n if (this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_SUB_JOBS)) {\r\n this.erpButtons.pulling(true);\r\n this.erpIntegration.pullSubJobs(this.options.project, (subJobs, err) => {\r\n this.erpButtons.pulling(false);\r\n if (subJobs == null) {\r\n return;\r\n }\r\n\r\n let newSubJobsCount = _.size(subJobs) - _.size(this.subJobs.models);\r\n this.subJobs.reset(subJobs);\r\n PJQ.notifications.notify.successNotify({\r\n message: newSubJobsCount.toString() + ' Sub Jobs pulled from ERP'\r\n });\r\n this.render();\r\n });\r\n }\r\n },\r\n renderSubJobTable: function () {\r\n if (this.dataTable && this.dataTable.dataTable) {\r\n this.dataTable.dataTable.destroy();\r\n this.dataTable = null;\r\n }\r\n\r\n this.dataTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$(\".sub-jobs-table\"),\r\n data: this.subJobs.models,\r\n rowId: \"cid\",\r\n language: {\r\n zeroRecords: 'Click \"Add Sub Job\" to create a new Sub Job'\r\n },\r\n order: [1, 'asc'],\r\n onRowDoubleClick: _.bind(function (row) {\r\n this.editSubJob(row.data());\r\n }, this),\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'Edit',\r\n onClick: (row) => {\r\n this.editSubJob(row.data());\r\n }\r\n },\r\n {\r\n name: 'Edit Cost Codes',\r\n onClick: (row) => {\r\n this.editCostCodes(row.data());\r\n }\r\n },\r\n {\r\n name: 'Delete',\r\n isDanger: true,\r\n isShown: (row) => {\r\n return null == this.budget.lineItems.findWhere({subJobId: row.data().id});\r\n },\r\n onClick: (row) => {\r\n this.deleteSubJob(row.data());\r\n }\r\n }\r\n ]\r\n },\r\n columns: [\r\n {\r\n \"width\": \"15px\",\r\n \"columnData\": \"division\",\r\n \"data\": null,\r\n \"title\": \"\",\r\n \"className\": \"dt-center\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"defaultContent\": '',\r\n \"render\": (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 {\r\n \"data\": \"attributes.name\",\r\n \"title\": \"Name\",\r\n \"render\": (data, type, model) => {\r\n return '' + data + '';\r\n }\r\n },\r\n {\r\n \"data\": \"attributes.code\",\r\n \"title\": \"Code\"\r\n },\r\n {\r\n \"data\": \"attributes.description\",\r\n \"title\": \"Description\"\r\n },\r\n {\r\n \"data\": \"id\",\r\n \"title\": \"Cost Codes\",\r\n \"render\": (data, type, model) => {\r\n let costCodeCount = _.size(this.costCodes.where({subJobId: model.id}));\r\n return '' + costCodeCount.toString() + ' Cost Codes';\r\n }\r\n },\r\n {\r\n \"data\": \"\",\r\n \"title\": \"\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"className\": \"p-2\",\r\n \"width\": \"80px\",\r\n \"render\": (data, type, model) => {\r\n let canDelete = null == this.budget.lineItems.findWhere({subJobId: model.id}),\r\n res = '
';\r\n if (canDelete) {\r\n res += '';\r\n } else {\r\n res += '';\r\n }\r\n return res + '
';\r\n }\r\n }\r\n ]\r\n });\r\n },\r\n addClicked: function () {\r\n this.editSubJob(null);\r\n },\r\n editClicked: function (e) {\r\n let id = $(e.currentTarget).closest('tr').attr('id');\r\n if (_.size(id) > 0) {\r\n let subJob = this.subJobs.get(id);\r\n if (subJob != null) {\r\n this.editSubJob(subJob);\r\n }\r\n }\r\n },\r\n editSubJob: function (subJob) {\r\n new PJQ.views.budget.EditSubJobModal({\r\n model: subJob,\r\n project: this.options.project,\r\n subJobs: this.subJobs,\r\n onSave: _.bind(function (subJob) {\r\n this.subJobs.add(subJob);\r\n this.renderSubJobTable();\r\n }, this),\r\n onDelete: _.bind(function (subJob) {\r\n this.deleteSubJob(subJob);\r\n }, this)\r\n });\r\n },\r\n editCostCodesClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n row = this.dataTable.getRow(target.closest('tr')),\r\n subJob = row.data();\r\n this.editCostCodes(subJob);\r\n },\r\n editCostCodes: function (subJob) {\r\n new PJQ.views.budget.CostCodeSettingsModal({\r\n project: this.options.project,\r\n subJob: subJob\r\n });\r\n },\r\n deleteClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n row = this.dataTable.getRow(target.closest('tr'));\r\n this.deleteSubJob(row.data());\r\n },\r\n deleteSubJob: function (subJob) {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"Are you sure you want to delete this Sub Job?\",\r\n onDelete: _.bind(function () {\r\n subJob.destroy({\r\n notify: false,\r\n success: _.bind(function () {\r\n this.subJobs.remove(subJob);\r\n this.renderSubJobTable();\r\n }, this),\r\n error: function (model, xhr) {\r\n if (xhr.responseJSON != null && xhr.responseJSON.type === 'delete_sub_job_with_line_item') {\r\n PJQ.notifications.notify.warningNotify({\r\n message: 'This sub job cannot be deleted because it has budget line items associated with it.'\r\n });\r\n }\r\n }\r\n });\r\n }, this)\r\n });\r\n }\r\n});\r\n\r\nPJQ.views.budget.EditSubJobModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-edit-sub-job'),\r\n maxWidth: 600\r\n },\r\n events: {\r\n 'click .btn-save': 'save',\r\n 'click .btn-close': 'close',\r\n 'click .btn-delete': 'delete'\r\n },\r\n beforeModalCreated: function () {\r\n if (this.model == null) {\r\n this.model = new PJQ.models.budget.SubJob({\r\n projectId: this.options.project ? this.options.project.id : null\r\n });\r\n }\r\n\r\n this.isFetched = true;\r\n this.render();\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model,\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 new PJQ.Binder(this.$el, this.model, {\r\n setDefaultValues: true,\r\n watchElements: [\r\n 'input',\r\n 'select'\r\n ]\r\n });\r\n },\r\n close: function () {\r\n if (this.model.hasChanged()) {\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.save();\r\n }, this),\r\n onDontSave: _.bind(function () {\r\n if (this.options.onClose) {\r\n this.options.onClose(this.model);\r\n }\r\n this.removeModal();\r\n }, this)\r\n });\r\n } else if (this.options.onClose) {\r\n this.options.onClose(this.model);\r\n this.removeModal();\r\n }\r\n },\r\n validate: function () {\r\n let $name = this.$('.input-name'),\r\n name = $name.val(),\r\n isNameValid = true,\r\n errorText = '';\r\n if (_.size(name) === 0) {\r\n isNameValid = false;\r\n } else if (null != _.find(this.options.subJobs.models, function (sj) {\r\n return sj.id !== this.model.id && sj.get('name').toLowerCase() === name.toLowerCase();\r\n }, this)) {\r\n isNameValid = false;\r\n errorText = 'This sub job name already exists'\r\n }\r\n PJQ.helpers.inputHelpers.setInputError($name, isNameValid, {\r\n errorText: errorText\r\n });\r\n return isNameValid;\r\n },\r\n save: function () {\r\n if (this.validate()) {\r\n this.model.save(null, {\r\n success: _.bind(function () {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n if (this.options.project != null) {\r\n if (this.options.project.subJobs != null) {\r\n this.options.project.subJobs.add(this.model);\r\n }\r\n }\r\n this.removeModal();\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Sub Job saved'\r\n });\r\n }, this)\r\n });\r\n }\r\n },\r\n delete: function () {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"Are you sure you want to delete this Sub Job?\",\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.removeModal();\r\n }, this)\r\n });\r\n }\r\n});","PJQ.views.budget.TaxCodeSettings = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'tax-code-settings')\n },\n events: {\n 'click .btn-pull-erp': 'pullERP',\n 'click .btn-add-tax-code': 'addClicked',\n 'click .btn-edit-tax-code': 'editClicked',\n 'click .btn-delete-tax-code': 'deleteClicked'\n },\n beforeFirstRender: function () {\n this.isFetched = false;\n PJQ.app.session.fetchERPIntegration(_.bind(function (erp) {\n this.erpIntegration = erp;\n PJQ.app.session.fetchTaxCodes(_.bind(function (taxCodes) {\n this.taxCodes = taxCodes;\n\n this.isFetched = true;\n this.render();\n }, this));\n }, this));\n return false;\n },\n renderData: function () {\n return {\n project: this.options.project,\n taxCodes: this.taxCodes,\n isFetched: this.isFetched,\n erpIntegration: this.erpIntegration\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n this.renderTaxCodeTable();\n this.renderERP();\n },\n renderTaxCodeTable: function () {\n if (this.dataTable && this.dataTable.dataTable) {\n this.dataTable.dataTable.destroy();\n this.dataTable = null;\n }\n\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$(\".tax-codes-table\"),\n data: this.taxCodes.models,\n order: [1, 'asc'],\n onRowDoubleClick: _.bind(function (row) {\n this.editTaxCode(row.data());\n }, this),\n rowId: 'cid',\n paging: false,\n contextMenuOptions: {\n actions: [\n {\n name: 'Edit',\n onClick: (row) => {\n this.editTaxCode(row.data());\n }\n },\n {\n name: 'Delete',\n isDanger: true,\n isShown: (row) => {\n return false;\n },\n onClick: (row) => {\n this.deleteTaxCode(row.data());\n }\n }\n ]\n },\n columns: [\n {\n \"title\": \"\",\n \"data\": \"attributes.externalObject\",\n \"width\": \"5%\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": (data, type, row) => {\n if (data) {\n return '';\n }\n return '';\n }\n },\n {\n \"data\": \"attributes.code\",\n \"title\": \"Code\",\n \"width\": \"15%\"\n },\n {\n \"data\": \"attributes.description\",\n \"title\": \"Description\"\n },\n {\n \"data\": \"attributes.rate\",\n \"title\": \"Rate\",\n \"render\": (data, type, model) => {\n return PJQ.helpers.formatHelpers.formatPercent(data/100);\n }\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"className\": \"p-2\",\n \"width\": \"80px\",\n \"render\": (data, type, model) => {\n let canDelete = false,\n res = '
';\n if (canDelete) {\n res += '';\n } else {\n // res += '';\n }\n return res + '
';\n }\n }\n ],\n language: {\n zeroRecords: 'Click \"Add Tax Code\" to create a new Tax Code'\n }\n });\n },\n addClicked: function () {\n this.editTaxCode(null);\n },\n editClicked: function (e) {\n let id = $(e.currentTarget).closest('tr').attr('id');\n if (_.size(id) > 0) {\n let taxCode = this.taxCodes.get(id);\n if (taxCode != null) {\n this.editTaxCode(taxCode);\n }\n }\n },\n editTaxCode: function (taxCode) {\n new PJQ.views.budget.EditTaxCodeModal({\n model: taxCode,\n project: this.options.project,\n onSave: _.bind(function (taxCode) {\n this.taxCodes.add(taxCode);\n this.render();\n }, this),\n onDelete: _.bind(function (taxCode) {\n if (taxCode.id > 0) {\n this.deleteTaxCode(taxCode, false);\n }\n }, this)\n });\n },\n deleteClicked: function (e) {\n let target = $(e.currentTarget),\n cid = target.closest('tr').attr('id'),\n taxCode = this.taxCodes.get(cid);\n this.deleteTaxCode(taxCode);\n },\n deleteTaxCode: function (taxCode, showDialogue = true) {\n if(showDialogue) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this Tax Code?\",\n onDelete: _.bind(function () {\n taxCode.destroy({\n notify: false,\n success: _.bind(function () {\n this.taxCodes.remove(taxCode);\n this.render();\n }, this)\n });\n }, this)\n });\n }\n else{\n taxCode.destroy({\n notify: false,\n success: _.bind(function () {\n this.taxCodes.remove(taxCode);\n this.render();\n }, this)\n });\n }\n },\n renderERP: function () {\n if (this.erpIntegration == null) {\n return;\n }\n\n PJQ.helpers.erp.renderERPButtons(this.$('.erp-sync'), {\n pushSupported: false,\n pullSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_COMPANY_TAX_CODES),\n status: PJQ.constants.integrations.erp.syncStatuses.SYNCED\n });\n\n let badge = PJQ.helpers.erp.getERPBadge(status);\n this.$('.erp-badge').html('' + badge + '');\n },\n pullERP: function () {\n if (this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PULL_COMPANY_TAX_CODES)) {\n this.erpIntegration.pullTaxCodes(this.options.project, (newTaxCodes, err) => {\n if(newTaxCodes == null){\n return;\n }\n\n this.taxCodes.reset(newTaxCodes);\n PJQ.notifications.notify.successNotify({\n message: _.size(newTaxCodes).toString() + ' Tax Codes pulled from ERP'\n });\n this.render();\n });\n }\n }\n});\n\nPJQ.views.budget.EditTaxCodeModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.BUDGET, 'modal-edit-tax-code'),\n maxWidth: 600\n },\n events: {\n 'click .btn-save': 'save',\n 'click .btn-close': 'close',\n 'click .btn-delete': 'delete'\n },\n beforeModalCreated: function () {\n if (this.model == null) {\n this.model = new PJQ.models.budget.TaxCode({\n projectId: this.options.project ? this.options.project.id : null,\n rate: 0\n });\n }\n\n this.isFetched = true;\n },\n renderData: function () {\n return {\n model: this.model,\n isFetched: this.isFetched\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n new PJQ.Binder(this.$el, this.model, {\n setDefaultValues: true,\n watchElements: [\n 'input',\n 'select'\n ]\n });\n\n this.$(\".input-name\").inputmask({\n \"mask\": \"a\".repeat(50),\n placeholder: \"\",\n definitions: {\n 'a': {\n validator: \".\",\n cardinality: 1\n }\n }\n });\n\n this.$(\".input-code\").inputmask({\n \"mask\": \"a\".repeat(20),\n placeholder: \"\",\n definitions: {\n 'a': {\n validator: \"[0-9a-zA-Z]\",\n cardinality: 1\n }\n }\n });\n\n PJQ.helpers.inputHelpers.inputMaskPercent(this.$('.input-percent'), 2, true);\n },\n close: function () {\n if (this.model.hasChanged()) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.save();\n }, this),\n onDontSave: _.bind(function () {\n if (this.options.onClose) {\n this.options.onClose(this.model);\n }\n this.removeModal();\n }, this)\n });\n } else if (this.options.onClose) {\n this.options.onClose(this.model);\n this.removeModal();\n }\n },\n validate: function () {\n let isValid = true;\n\n let $code = this.$('.input-code');\n PJQ.helpers.inputHelpers.setInputError($code, true);\n if (this.model.get('code') == null || this.model.get('code').length === 0) {\n PJQ.helpers.inputHelpers.setInputError($code, false);\n isValid = false;\n }\n\n return isValid;\n },\n save: function () {\n if (this.validate()) {\n this.model.save(null, {\n success: _.bind(function () {\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n this.removeModal();\n PJQ.notifications.notify.successNotify({\n message: 'Tax Code saved'\n });\n }, this)\n });\n }\n },\n delete: function () {\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(this.model);\n }\n this.removeModal();\n }\n});"]}