{"version":3,"sources":["1initializers.js","settingsviews.js","submittaleditviews.js","submittalmodels.js","submittalviews.js","templateviews.js","workflowviews.js"],"names":["PJQ","collections","submittals","models","views","modules","routes","route","name","callback","projectId","projectWall","initProjectNavigator","parseInt","app","addRoutes","Settings","BaseView","extend","defaults","template","templating","Template","constants","SUBMITTALS","subTemplates","maxWidth","overrideLockDate","onChange","events","click .settings-save","change .select-column","change .input-override-lock-date","click .btn-add-workflow-template","click .btn-edit-workflow-template","click .btn-delete-workflow-template","beforeFirstRender","_beforeFirstRender","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","this","isFetched","options","project","fetchSubmittalSettings","model","sent","fetchSubmittalWorkflowTemplates","workflowTemplates","session","render","stop","apply","arguments","renderData","userSettings","afterRender","Binder","$el","watchElements","afterChange","_","bind","changeEl","attribute","value","set","renderWorkflowTemplates","inputs","Selectpicker","el","$","defaultValue","get","rowsPerPageSelectPicker","getSettings","view","rowsPerPage","dataTable","dataTables","DataTable","data","submittalsView","getColumns","isHideSearch","order","columns","title","orderable","searchable","width","dom","addWorkflowTemplate","e","newTemplate","WorkflowTemplate","id","editWorkflowTemplate","editWorkflowTemplateClicked","$tr","currentTarget","closest","workflowTemplatesDataTable","getRow","_this","isNew","EditWorkflowTemplateModal","onSave","addRow","add","refresh","onDelete","row","cid","removeRow","deleteWorkflowTemplateClicked","deleteWorkflowTemplate","_this2","modals","DeleteCancel","header","body","destroy","success","error","notifications","notify","errorNotify","message","_this3","language","emptyTable","zeroRecords","isStriped","paging","columnData","type","html","contextMenuOptions","actions","isDanger","onClick","isShown","isEdit","onRowDoubleClick","columnSelected","sender","visible","prop","SettingsModal","BaseModal","minWidth","settingsView","loader","Loader","getValue","each","indexOf","push","filter","column","save","successNotify","removeModal","remove","TemplateManagement","templates","collection","Templates","listenTo","fetch","addTemplate","NewTemplateModal","editTemplate","EditTemplateModal","onClose","ItemTypeSettings","click .add-item-type","click .edit-item-type","click .delete-item-type","fetchItemTypes","ItemTypes","rowId","sortableOptions","pageLength","bSort","editItemType","deleteItemType","addItemType","EditItemTypeModal","editItemTypeClicked","$row","itemType","deleteItemTypeClicked","click .btn-save","click .btn-cancel","beforeModalCreated","ItemType","sortOrder","cancel","restore","SubmittalStatusSettings","click .add-status","click .edit-status","click .delete-status","_beforeFirstRender2","_callee2","_context2","fetchSubmittalStatuses","_this4","a","b","self","sortedRow","item","pageInfo","page","info","index","rowData","sortNumber","length","onRowSorted","editStatus","deleteStatus","statusType","statusTypeColors","statusTypeNames","copyStatuses","status","_this5","copy","newStatuses","reset","find","addStatus","editStatusClicked","_this6","fnAdd","copiedStatus","EditStatusModal","statuses","updatedStatus","collectionStatus","deleteStatusClicked","_this7","size","fnDelete","Alert","text","animation","in","out","timeout","Status","isDefault","shouldLock","asNoted","statusTypes","NEW","mustBeDefault","isDisabled","isIntChoices","validate","isValid","helpers","inputHelpers","setInputError","trim","EditSubmittalModal","contactBadge","GLOBAL","comments","isShowCloseButton","noop","isAdmin","click .btn-close","click .submittal-delete","click .btn-add-comment","click .btn-mark-submitted","click .btn-submit","click .btn-approve","click .btn-reject","click .btn-notification-history","click .btn-edit-history","click .btn-upload-files","click .edit-file","click .edit-note","click .btn-dl-approver-attachment","click .btn-download-all-attachments","click .expand-history","click .download-history-file","click .btn-export","click .btn-delete-comment","click .btn-void","click .btn-edit-workflow","click .btn-save-workflow","click .btn-view-revision","click .btn-create-revision","click .btn-submittal-respond","click .btn-close-submittal","click .btn-distribute-submittal","_beforeModalCreated","_callee3","submitter","defaultNewStatus","_context3","hasPermission","canEditPeople","canEdit","canUpload","canSubmit","contact","user","Submittals","templateId","toJSON","settings","fetchSubmittalItemTypes","itemTypes","fetchSubmittalCustomFields","customFields","changedAnnotations","drawings","Annotations","findWhere","beforeRender","searchId","isSubmitter","isCreator","createdBy","isApprover","isVoidStatus","isApprovedStatus","isPartiallyApproved","isSubmittedStatus","statusShouldLock","hideItemTypes","preferences","getPref","preferenceTypes","HIDE_SUBMITTAL_ITEM_TYPE","_this8","renderCustomFields","dueDatePicker","Datepicker","datepickerOptions","format","dateHelpers","dateFormats","datePicker","DATE","defaultDate","Date","newDate","groups","GroupsSelectInput","isShowAddButton","addButton","groupLevels","GROUP_LEVELS","groupUserId","selectedGroups","isReadOnly","onAfterSave","isDirty","ballInCourt","contacts","ContactsSelectInput","selectedContact","canViewContacts","displayContactsBlock","canSwitchContext","context","contexts","PROJECTCONTACTS","USERS","isSingleChoice","approvers","approver","projectContacts","ProjectContact","isSortable","allowDuplicate","approvalModes","SEQUENTIAL","onStop","array","newApprovers","usedIdx","approverIdx","findIndex","idx","contactsRenderData","showApproval","canApprove","isUserCurrentApprover","onApproveBehalf","approve","selectedContacts","approvedByIds","map","hasApproved","existApproverIdx","workflowView","WorkflowView","workflow","submittal","canChangeBallInCourt","canRespond","onRespond","onSetBallInCourt","managerPicker","manager","distributionList","noneSelectedText","isMultiple","fileUploader","files","FileUploaderGrid","contextId","canAddAnnotations","onAnnotationChange","annotation","merge","mergeAnnotations","attachments","canDelete","hasNotes","isVersioned","versionByName","previewImageDimension","includeProjectAttachments","onNoteChanged","attachment","ajax","Request","endpoint","isAPIv2","patch","done","fail","xhr","err","result","onNewVersion","onSuccess","renderComments","renderSubTemplate","respondToSubmittal","_this9","currentStep","getCurrentStep","isMe","WorkflowResponseModal","editWorkflow","addClass","removeClass","setEdit","saveWorkflow","viewRevision","lastRevisionId","revision","submittalId","createRevision","newSubmittal","clone","submittalNumber","statusId","dueDate","revisionFor","isClosed","Attachments","Comments","closeSubmittal","_this10","ConfirmSubmittalCloseModal","onConfirm","distribute","close","distributeSubmittal","_this11","YesNo","onYes","voidSubmittal","_this12","VOID","fnVoid","comment","void","handleStatusError","checkActiveResponse","hadComment","StatusChangeCommentModal","addCommentClicked","addComment","val","Comment","createdOn","deleteComment","customFieldsForm","CustomFieldsForm","fieldValues","_this13","isUploading","fnDisableButtons","disable","attr","hasChanged","submitting","initAttributes","saveAll","SaveDontSave","onDontSave","delete","aRes","onNo","submit","_this14","SUBMITTED","fnSubmit","reject","_this15","REJECTED","fnReject","dueDateVal","_this16","APPROVED","fnApprove","_this17","errors","STATUS_NOT_EXISTS","then","st","editFile","file","FileEditorModal","isNewVersion","newFile","attributes","parentSubmittalDocumentId","uploadFile","createdByDisplay","contactName","notes","versionNumber","editNoteClicked","target","filesTable","editNote","isNoteEdit","viewNotificationHistory","fetchNotifications","NotificationHistory","viewEditHistory","fetchEditHistory","editHistory","EditHistoryModal","history","exportSubmittal","isApi2","post","response","downloadFile","url","isEndpoint","downloadAttachment","i","sAttachment","versions","j","ver","download","downloadAllAttachments","downloadAttachments","File","entryId","guid","click .btn-confirm","change .cb-distribute","onDistributeChange","BaseModel","idAttribute","urlOptions","arr","urlHelpers","generateEndpoint","afterInit","silent","parse","Groups","Workflow","ProjectContacts","isNewStatus","isRejectedStatus","getStatusColor","colors","RED","PURPLE","getStatusName","undefined","getApproveStatusName","includeAsNoted","beforeSave","behalfId","_this18","ep","toString","res","responseJSON","_this19","prevStatus","_this20","_this21","respond","_this22","setBallInCourt","stepId","_this23","_this24","_this25","approvalMode","foundNextApprover","getRemainingApprovers","isLastApprover","Notifications","EditHistory","Attachment","steps","WorkflowSteps","cloned","prototype","call","step","isActive","person","personId","isRequired","WorkflowStep","WorkflowApprovers","WorkflowApprover","WorkflowResponse","Notification","notificationTypeNames","notifyName","EditHistoryItem","suffix","statusName","toLowerCase","substring","SubmittalUserSettings","params","forCompany","parameter","viewSettings","setting","SubmittalCustomField","CustomField","BaseCollection","WorkflowTemplates","Files","Statuses","SubmittalCustomFields","CustomFields","masterUserId","SubmittalsView","initSubmittalId","click .btn-delete-submittal","click .btn-edit-submittal","click .btn-add-submittal","click .export-detailed","click .export-list","click .btn-submittal-settings","click .btn-save-a-template","click .btn-import-template","_beforeFirstRender3","_callee4","_context4","fetchSubmittalUserSettings","canAdd","renderDataTable","initSubmittal","editSubmittal","_this26","orderCookie","cookies","SUBMITTAL_ORDER_COOKIE","headerData","afterHeaderRender","$header","addedPartial","sortBy","style","setFilter","choices","getFilterData","statusFilter","getFilter","showPartial","contains","showAsNoted","deleteSubmittal","colReorder","fixedColumnsLeft","fixedColumnsRight","realtime","columnOrderChanged","includeAllColumns","includeColumns","customField","_this27","sort","number","isNaN","display","itemTypeNames","join","dateString","getDateString","getDateDaysDiff","groupNames","group","getContactAnchor","startsWith","className","commitments","customFieldType","INTEGER","MONEY","PERCENT","fieldValue","getCustomFieldValue","choice","DATE_TIME","toLocaleString","parseFloat","formatHelpers","numbersOnly","formatCurrency","addClicked","editClicked","_this28","deleteClicked","editSettings","saveTemplate","SubmittalTemplateCreatorModal","importTemplate","ImportTemplateModal","onImport","exportSubmittals","exportList","cookieHelpers","getCookie","JSON","reports","NewReport","reportTypes","SUBMITTAL","columnOrder","export","renderHistory","reverse","canDownload","isRemoveOnComplete","fetchSubmittalTemplates","tmp","AutocompleteInput","source","$name","existingTemplate","fnSave","copyComments","copySubmitter","copyApprovers","copyGroups","copyDistribution","copyItemTypes","click .btn-import","templatePicker","selectedTemplate","showError","hideError","put","fitHeight","click .btn-delete","TextEditorInput","label","deleteTemplate","change .cb-required","change .cb-reject-to-manager","keyup .input-days-to-respond","click .btn-add-approver","click .btn-delete-approver","click .btn-add-step","click .btn-apply-template","click .btn-delete-step","click .btn-respond","click .btn-update-response","click .btn-set-bic","click .dl-approver-attachment","_beforeFirstRender4","_callee5","_context5","_beforeRender","_callee6","_context6","renderStepsTable","edit","approverRequiredChanged","$target","$badge","stepCid","returnOnRejectChanged","stepsDatatable","daysToRespondChanged","_this29","_this30","downloadApproverAttachment","addApprover","_this31","selector","SelectContactsModal","hideContacts","newContacts","deleteApprover","applyTemplateClicked","_this32","applyTemplate","_this33","fnApplyTemplate","cWorkflow","addStep","deleteStepClicked","deleteStep","_this34","approveLabel","_data","_toConsumableArray","personAnchor","req","companyName","_row$get","approverAttachments","_attachment$versions","newest","newestVer","max","groupBy","disableGroupToggle","getGroupHeader","bicBtn","activeBadge","keyup .input-comment","click .btn-back","click .btn-next","_beforeModalCreated2","_callee7","_context7","_this35","StepIndicator","activeStep","getParentAttachment","fileModel","statusPicker","commentChanged","responseText","previousStep","nextStep","_this$options$approve","_this36","_this37","_beforeModalCreated3","_callee8","_context8","_this38","focus","binder","_this39","_this40"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.collections.submittals = {};\r\n\r\nPJQ.models.submittals = {};\r\n\r\nPJQ.views.submittals = {};\r\n\r\nPJQ.modules.submittals = {\r\n routes: [\r\n {\r\n route: 'projects/:projectId/submittalsnew',\r\n name: 'submittalsnew',\r\n callback: function (projectId) {\r\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"submittalsnew\");\r\n }\r\n }\r\n ]\r\n};\r\n\r\nPJQ.app.addRoutes(PJQ.modules.submittals.routes);\r\n","PJQ.views.submittals.Settings = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'Settings'),\r\n subTemplates: {},\r\n maxWidth: 500,\r\n overrideLockDate: false,\r\n onChange: null\r\n },\r\n events: {\r\n 'click .settings-save': 'onSave',\r\n 'change .select-column': 'columnSelected',\r\n 'change .input-override-lock-date': 'overrideLockChanged',\r\n 'click .btn-add-workflow-template': 'addWorkflowTemplate',\r\n 'click .btn-edit-workflow-template': 'editWorkflowTemplateClicked',\r\n 'click .btn-delete-workflow-template': 'deleteWorkflowTemplateClicked'\r\n },\r\n beforeFirstRender: async function () {\r\n this.isFetched = false;\r\n\r\n if (this.options.project != null) {\r\n this.model = await this.options.project.fetchSubmittalSettings();\r\n this.workflowTemplates = await this.options.project.fetchSubmittalWorkflowTemplates();\r\n } else {\r\n this.model = await PJQ.app.session.fetchSubmittalSettings();\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 project: this.options.project,\r\n isFetched: this.isFetched,\r\n userSettings: this.options.userSettings\r\n };\r\n },\r\n onChange: function () {\r\n if (typeof this.options.onChange === 'function') {\r\n this.options.onChange(this.model);\r\n }\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched) {\r\n return;\r\n }\r\n\r\n if (this.model) {\r\n new PJQ.Binder(this.$el, this.model, {\r\n watchElements: [\r\n 'input',\r\n 'textarea'\r\n ],\r\n afterChange: _.bind(function (changeEl, attribute, value) {\r\n if (attribute === 'isOverrideApprove') {\r\n if (!value) {\r\n this.model.set('approveNameOverride', null);\r\n }\r\n this.render();\r\n } else if (attribute === 'enableWorkflow') {\r\n this.model.set('enableWorkflow', value);\r\n this.render();\r\n }\r\n this.onChange();\r\n }, this)\r\n });\r\n\r\n this.renderWorkflowTemplates();\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-approval-mode'),\r\n defaultValue: this.model.get('approvalMode'),\r\n onChange: _.bind(function (value) {\r\n this.model.set('approvalMode', value);\r\n this.onChange();\r\n }, this)\r\n });\r\n\r\n if (this.options.userSettings) {\r\n this.rowsPerPageSelectPicker = new PJQ.inputs.Selectpicker({\r\n el: this.$('.rows-per-page'),\r\n defaultValue: this.options.userSettings.getSettings(PJQ.constants.submittals.view.SUBMITTALS).rowsPerPage,\r\n onChange: _.bind(function (value) {\r\n this.onChange();\r\n }, this)\r\n });\r\n\r\n this.dataTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$('div.column-settings'),\r\n data: this.options.submittalsView.getColumns(true),\r\n isHideSearch: true,\r\n order: [],\r\n columns: [\r\n {\"data\": \"title\", \"title\": \"Column\", \"orderable\": false},\r\n {\r\n \"data\": \"visible\",\r\n \"title\": \"Show\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"render\": _.bind(function (data) {\r\n return ('
');\r\n }, this),\r\n \"width\": '10%'\r\n }\r\n ],\r\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\r\n });\r\n }\r\n }\r\n },\r\n addWorkflowTemplate: function (e) {\r\n let newTemplate = new PJQ.models.submittals.WorkflowTemplate({\r\n projectId: this.options.project.id\r\n });\r\n this.editWorkflowTemplate(newTemplate);\r\n },\r\n editWorkflowTemplateClicked: function (e) {\r\n let $target = $(e.currentTarget),\r\n $tr = $target.closest('tr'),\r\n row = this.workflowTemplatesDataTable.getRow($tr),\r\n template = row.data();\r\n this.editWorkflowTemplate(template);\r\n },\r\n editWorkflowTemplate: function (template) {\r\n let isNew = template.isNew();\r\n new PJQ.views.submittals.EditWorkflowTemplateModal({\r\n model: template,\r\n project: this.options.project,\r\n onSave: () => {\r\n if (isNew) {\r\n this.workflowTemplatesDataTable.addRow(template);\r\n this.workflowTemplates.add(template);\r\n }\r\n this.workflowTemplatesDataTable.refresh();\r\n },\r\n onDelete: () => {\r\n if (template.id > 0) {\r\n let row = this.workflowTemplatesDataTable.getRow(template.cid);\r\n if (row != null) {\r\n this.workflowTemplatesDataTable.removeRow(row);\r\n }\r\n }\r\n\r\n this.workflowTemplatesDataTable.refresh();\r\n }\r\n });\r\n },\r\n deleteWorkflowTemplateClicked: function (e) {\r\n let $target = $(e.currentTarget),\r\n $tr = $target.closest('tr'),\r\n row = this.workflowTemplatesDataTable.getRow($tr),\r\n template = row.data();\r\n this.deleteWorkflowTemplate(template);\r\n },\r\n deleteWorkflowTemplate: function (template) {\r\n if (template == null) {\r\n return;\r\n }\r\n\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Delete Submittal Workflow Template?\",\r\n body: \"Are you sure you want to delete this workflow template? This cannot be undone.\",\r\n onDelete: () => {\r\n template.destroy({\r\n success: () => {\r\n if (template.id > 0) {\r\n let row = this.workflowTemplatesDataTable.getRow(template.cid);\r\n if (row != null) {\r\n this.workflowTemplatesDataTable.removeRow(row);\r\n }\r\n }\r\n\r\n this.workflowTemplatesDataTable.refresh();\r\n },\r\n error: () => {\r\n PJQ.notifications.notify.errorNotify({\r\n message: 'Failed to delete workflow template'\r\n });\r\n }\r\n });\r\n }\r\n });\r\n },\r\n renderWorkflowTemplates: function () {\r\n if (this.workflowTemplates == null) {\r\n return;\r\n }\r\n\r\n this.workflowTemplatesDataTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$('.workflow-templates'),\r\n data: this.workflowTemplates.models,\r\n isHideSearch: true,\r\n language: {\r\n emptyTable: 'No Templates have been created yet',\r\n zeroRecords: 'No Templates have been created yet'\r\n },\r\n isStriped: false,\r\n paging: false,\r\n order: [[0, \"asc\"]],\r\n columns: [\r\n {\r\n \"data\": \"attributes.name\",\r\n \"columnData\": \"attributes.name\",\r\n \"title\": \"Name\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"render\": _.bind(function (data, type, row) {\r\n return '' + row.get('name') + '';\r\n }, this)\r\n },\r\n {\r\n \"data\": \"\",\r\n \"title\": \"\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": \"70px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n let html = '
'\r\n html += ''\r\n return html + '
';\r\n }, this)\r\n }],\r\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>',\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'Delete',\r\n isDanger: true,\r\n onClick: (row) => {\r\n this.deleteWorkflowTemplate(row.data());\r\n },\r\n isShown: () => {\r\n return this.options.isEdit;\r\n },\r\n }\r\n ]\r\n },\r\n onRowDoubleClick: (row) => {\r\n this.editWorkflowTemplate(row.data());\r\n }\r\n });\r\n },\r\n columnSelected: function (sender) {\r\n this.dataTable.dataTable.row($(sender.currentTarget).closest('tr')).data().visible = $(sender.currentTarget).prop('checked');\r\n }\r\n});\r\n\r\nPJQ.views.submittals.SettingsModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'Modal-Submittal-Settings'),\r\n minWidth: \"600px\",\r\n },\r\n events: {\r\n 'click .settings-save': 'onSave'\r\n },\r\n afterRender: function () {\r\n this.settingsView = new PJQ.views.submittals.Settings({\r\n el: this.$('.modal-body'),\r\n submittalsView: this.options.submittalsView,\r\n model: this.model,\r\n userSettings: this.options.userSettings,\r\n project: this.options.project\r\n });\r\n },\r\n onSave: function () {\r\n let loader = new PJQ.Loader(this.$('.modal-content'));\r\n this.options.submittalsView.options.userSettings.getSettings(PJQ.constants.submittals.view.SUBMITTALS).rowsPerPage = parseInt(this.settingsView.rowsPerPageSelectPicker.getValue());\r\n\r\n let columns = this.options.submittalsView.options.userSettings.getSettings(PJQ.constants.submittals.view.SUBMITTALS).columns;\r\n _.each(this.settingsView.dataTable.dataTable.data(), function (row) {\r\n if (row.visible) {\r\n if (columns.indexOf(row.columnData) === -1)\r\n columns.push(row.columnData);\r\n } else {\r\n columns = _.filter(columns, function (column) {\r\n return (column != row.columnData);\r\n });\r\n }\r\n });\r\n this.options.submittalsView.options.userSettings.getSettings(PJQ.constants.submittals.view.SUBMITTALS).columns = columns;\r\n this.options.submittalsView.options.userSettings.save(null, {\r\n success: _.bind(function () {\r\n this.settingsView.model.save(null, {\r\n success: _.bind(function () {\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Submittal settings saved'\r\n });\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave();\r\n }\r\n this.removeModal();\r\n }, this),\r\n error: function () {\r\n loader.remove();\r\n }\r\n });\r\n }, this)\r\n });\r\n }\r\n});\r\n\r\nPJQ.views.submittals.TemplateManagement = PJQ.views.templates.TemplateManagement.extend({\r\n beforeFirstRender: function () {\r\n this.collection = new PJQ.collections.submittals.Templates();\r\n this.listenTo(this.collection, 'fetch', this.render);\r\n this.collection.fetch();\r\n },\r\n addTemplate: function () {\r\n new PJQ.views.templates.NewTemplateModal({\r\n model: new PJQ.models.submittals.Template(),\r\n onSave: _.bind(function (template) {\r\n this.collection.add(template);\r\n this.editTemplate(template);\r\n }, this)\r\n });\r\n },\r\n editTemplate: function (template) {\r\n new PJQ.views.submittals.EditTemplateModal({\r\n model: template,\r\n onClose: _.bind(function () {\r\n this.dataTable.refresh();\r\n }, this),\r\n onDelete: _.bind(function (template) {\r\n if (template.id > 0) {\r\n let row = this.dataTable.getRow(template.cid);\r\n this.collection.remove(template);\r\n template.destroy();\r\n this.dataTable.removeRow(row);\r\n }\r\n }, this)\r\n });\r\n }\r\n});\r\n\r\nPJQ.views.submittals.ItemTypeSettings = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'item-type-settings')\r\n },\r\n events: {\r\n 'click .add-item-type': 'addItemType',\r\n 'click .edit-item-type': 'editItemTypeClicked',\r\n 'click .delete-item-type': 'deleteItemTypeClicked'\r\n },\r\n beforeFirstRender: function () {\r\n if (this.collection == null) {\r\n this.fetchItemTypes(_.bind(function () {\r\n this.render();\r\n }, this));\r\n }\r\n },\r\n fetchItemTypes: function (callback) {\r\n this.collection = new PJQ.collections.submittals.ItemTypes();\r\n\r\n this.collection.fetch({\r\n success: _.bind(function () {\r\n callback();\r\n }, this)\r\n })\r\n },\r\n afterRender: function () {\r\n this.dataTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$(\".item-types\"),\r\n data: this.collection.models,\r\n rowId: \"cid\",\r\n order: [0, 'asc'],\r\n language: {\r\n zeroRecords: 'Click \"Add\" to create a new line item'\r\n },\r\n sortableOptions: {\r\n data: this.collection\r\n },\r\n isHideSearch: true,\r\n pageLength: 50,\r\n bSort: false,\r\n onRowDoubleClick: _.bind(function (row) {\r\n this.editItemType(row.data());\r\n }, this),\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'Edit',\r\n onClick: _.bind(function (row) {\r\n this.editItemType(row.data());\r\n }, this)\r\n },\r\n {\r\n name: 'Delete',\r\n isDanger: true,\r\n onClick: _.bind(function (row) {\r\n this.deleteItemType(row);\r\n }, this)\r\n\r\n }\r\n ]\r\n },\r\n columns: [\r\n {\r\n \"data\": \"attributes.sortOrder\",\r\n \"title\": \"\",\r\n \"searchable\": false,\r\n \"orderable\": false,\r\n \"visible\": false\r\n },\r\n {\r\n \"title\": \"Name\",\r\n \"data\": \"attributes.name\",\r\n \"orderable\": true\r\n },\r\n {\r\n \"data\": \"\",\r\n \"title\": \"\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": \"80px\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return '
';\r\n }, this)\r\n }\r\n ]\r\n });\r\n },\r\n addItemType: function () {\r\n new PJQ.views.submittals.EditItemTypeModal({\r\n onSave: _.bind(function (model) {\r\n this.collection.add(model);\r\n this.dataTable.addRow(model);\r\n }, this)\r\n })\r\n },\r\n editItemTypeClicked: function (e) {\r\n let $target = $(e.currentTarget),\r\n $row = $target.closest('tr'),\r\n row = this.dataTable.getRow($row),\r\n itemType = row.data();\r\n\r\n this.editItemType(itemType);\r\n },\r\n deleteItemTypeClicked: function (e) {\r\n let $target = $(e.currentTarget),\r\n $row = $target.closest('tr'),\r\n row = this.dataTable.getRow($row),\r\n itemType = row.data();\r\n\r\n this.deleteItemType(itemType);\r\n },\r\n deleteItemType: function (row) {\r\n let itemType = row.data();\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"Are you sure you want to delete this item type?\",\r\n onDelete: _.bind(function () {\r\n this.collection.remove(itemType);\r\n itemType.destroy();\r\n this.dataTable.removeRow(row);\r\n }, this)\r\n });\r\n },\r\n editItemType: function (itemType) {\r\n new PJQ.views.submittals.EditItemTypeModal({\r\n model: itemType,\r\n onSave: _.bind(function () {\r\n this.dataTable.refresh();\r\n }, this)\r\n })\r\n }\r\n});\r\n\r\nPJQ.views.submittals.EditItemTypeModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'modal-edit-item-type'),\r\n maxWidth: \"400px\",\r\n },\r\n events: {\r\n 'click .btn-save': 'save',\r\n 'click .btn-cancel': 'cancel'\r\n },\r\n beforeModalCreated: function () {\r\n if (!this.options.model) {\r\n this.model = new PJQ.models.submittals.ItemType({\r\n name: \"\",\r\n sortOrder: 1\r\n });\r\n } else {\r\n this.model = this.options.model;\r\n }\r\n this.render();\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model\r\n }\r\n },\r\n afterRender: function () {\r\n if (this.model) {\r\n new PJQ.Binder(this.$el, this.model, {\r\n watchElements: [\r\n 'input'\r\n ]\r\n });\r\n }\r\n },\r\n cancel: function () {\r\n this.model.restore();\r\n this.removeModal();\r\n },\r\n save: function () {\r\n this.model.save(null, {\r\n success: _.bind(function (model) {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(model);\r\n this.removeModal();\r\n }\r\n }, this)\r\n })\r\n }\r\n});\r\n\r\nPJQ.views.submittals.SubmittalStatusSettings = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'status-settings')\r\n },\r\n events: {\r\n 'click .add-status': 'addStatus',\r\n 'click .edit-status': 'editStatusClicked',\r\n 'click .delete-status': 'deleteStatusClicked'\r\n },\r\n beforeFirstRender: async function () {\r\n this.isFetched = false;\r\n\r\n this.collection = await PJQ.app.session.fetchSubmittalStatuses();\r\n\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 this.dataTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$(\".statuses-table\"),\r\n data: this.collection.models,\r\n rowId: \"cid\",\r\n order: [0, 'asc'],\r\n language: {\r\n zeroRecords: 'Click \"Add\" to create a new Status'\r\n },\r\n sortableOptions: {\r\n data: this.collection,\r\n stop: (a, b) => {\r\n let self = this,\r\n sortedRow = b.item[0].id,\r\n pageInfo = self.dataTable.dataTable.page.info();\r\n self.$('tr').filter('.odd, .even').each(function (index, html) {\r\n let row = $(html)[0].id,\r\n rowData = self.collection.get(row),\r\n sortNumber = (pageInfo.page * pageInfo.length) + (index + 1);\r\n rowData.set('sortOrder', sortNumber);\r\n if (row === sortedRow) {\r\n self.dataTable.onRowSorted(rowData, sortNumber)\r\n }\r\n });\r\n }\r\n },\r\n isHideSearch: true,\r\n pageLength: 50,\r\n bSort: false,\r\n onRowDoubleClick: _.bind(function (row) {\r\n this.editStatus(row.data());\r\n }, this),\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'Edit',\r\n onClick: _.bind(function (row) {\r\n this.editStatus(row.data());\r\n }, this)\r\n },\r\n {\r\n name: 'Delete',\r\n isDanger: true,\r\n isShown: (row) => {\r\n return !row.data().get('isDefault');\r\n },\r\n onClick: (row) => {\r\n this.deleteStatus(row);\r\n }\r\n\r\n }\r\n ]\r\n },\r\n columns: [\r\n {\r\n \"data\": \"attributes.sortOrder\",\r\n \"title\": \"\",\r\n \"searchable\": false,\r\n \"orderable\": false,\r\n \"visible\": false\r\n },\r\n {\r\n \"title\": \"Name\",\r\n \"data\": \"attributes.name\",\r\n \"orderable\": true\r\n },\r\n {\r\n \"title\": \"Type\",\r\n \"data\": \"attributes.type\",\r\n \"orderable\": true,\r\n \"render\": (data, type, row) => {\r\n let statusType = row.get('type');\r\n return '' + PJQ.constants.submittals.statusTypeNames[data] + '';\r\n }\r\n },\r\n {\r\n \"title\": \"Default\",\r\n \"data\": \"attributes.isDefault\",\r\n \"orderable\": true,\r\n \"render\": (data, type, row) => {\r\n return data ? \"Yes\" : \"No\";\r\n }\r\n },\r\n {\r\n \"data\": \"\",\r\n \"title\": \"\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": \"80px\",\r\n \"render\": (data, type, row) => {\r\n let html = '
';\r\n\r\n if (!row.get('isDefault')) {\r\n html += ''\r\n }\r\n\r\n return html + '
';\r\n }\r\n }\r\n ]\r\n });\r\n },\r\n copyStatuses: function (callback, status) {\r\n this.collection.copy((newStatuses) => {\r\n this.collection.reset(newStatuses);\r\n this.render();\r\n if (typeof callback === 'function') {\r\n status = status ? _.find(this.collection.models, function (model) {\r\n return model.get('name') === status.get('name') && model.get('type') === status.get('type');\r\n }) : null;\r\n\r\n callback(status);\r\n }\r\n });\r\n },\r\n addStatus: function () {\r\n this.editStatus();\r\n },\r\n editStatusClicked: function (e) {\r\n let $target = $(e.currentTarget),\r\n $row = $target.closest('tr'),\r\n row = this.dataTable.getRow($row),\r\n status = row.data();\r\n\r\n this.editStatus(status);\r\n },\r\n editStatus: function (status) {\r\n let isNew = status == null,\r\n fnAdd = (copiedStatus) => {\r\n if (copiedStatus) {\r\n status = copiedStatus;\r\n }\r\n\r\n new PJQ.views.submittals.EditStatusModal({\r\n model: status,\r\n statuses: this.collection,\r\n onSave: _.bind(function (updatedStatus) {\r\n if (isNew) {\r\n this.collection.add(updatedStatus);\r\n this.dataTable.addRow(updatedStatus);\r\n }\r\n\r\n if (updatedStatus.get('isDefault')) {\r\n _.each(this.collection.models, function (collectionStatus) {\r\n if (collectionStatus !== updatedStatus && collectionStatus.get('type') === updatedStatus.get('type')) {\r\n collectionStatus.set('isDefault', false);\r\n }\r\n });\r\n }\r\n\r\n this.dataTable.refresh();\r\n }, this)\r\n })\r\n };\r\n\r\n if (this.collection.models[0].get('masterUserId') === -1) {\r\n this.copyStatuses(fnAdd, status);\r\n } else {\r\n fnAdd();\r\n }\r\n },\r\n deleteStatusClicked: function (e) {\r\n let $target = $(e.currentTarget),\r\n $row = $target.closest('tr'),\r\n row = this.dataTable.getRow($row)\r\n\r\n this.deleteStatus(row);\r\n },\r\n deleteStatus: function (row) {\r\n let status = row.data(),\r\n canDelete = _.size(_.filter(this.collection.models, function (model) {\r\n if (model.get('type') === status.get('type') && model !== status) {\r\n return model;\r\n }\r\n })) > 0;\r\n\r\n if (canDelete) {\r\n let fnDelete = (copiedStatus) => {\r\n if (copiedStatus) {\r\n status = copiedStatus;\r\n }\r\n\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"Are you sure you want to delete this status?\",\r\n onDelete: _.bind(function () {\r\n this.collection.remove(status);\r\n status.destroy();\r\n this.dataTable.removeRow(row);\r\n }, this)\r\n });\r\n }\r\n // Currently we only have 1 of each status type by default so this won't happen, but if we ever have more than 1 of each type, we need to copy the statuses first.\r\n if (this.collection.models[0].get('masterUserId') === -1) {\r\n this.copyStatuses(fnDelete, status);\r\n } else {\r\n fnDelete();\r\n }\r\n } else {\r\n new PJQ.Alert(this.$('.error'), {\r\n type: 'danger',\r\n text: '\"' + status.get('name') + '\" is the only ' + PJQ.constants.submittals.statusTypeNames[status.get('type')] + ' type status and cannot be deleted until another is created.',\r\n animation: {\r\n in: 'fadeIn',\r\n out: 'fadeOut'\r\n },\r\n timeout: 8000\r\n });\r\n }\r\n }\r\n});\r\n\r\nPJQ.views.submittals.EditStatusModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'modal-edit-status'),\r\n maxWidth: \"400px\",\r\n },\r\n events: {\r\n 'click .btn-save': 'save',\r\n 'click .btn-cancel': 'cancel'\r\n },\r\n beforeModalCreated: function () {\r\n if (!this.model) {\r\n this.model = new PJQ.models.submittals.Status({\r\n name: \"\",\r\n isDefault: false,\r\n shouldLock: false,\r\n asNoted: false,\r\n sortOrder: _.size(this.options.statuses) + 1,\r\n type: PJQ.constants.submittals.statusTypes.NEW\r\n });\r\n }\r\n\r\n // If the model comes in as default, it's the only default status.\r\n this.mustBeDefault = this.model.get('isDefault');\r\n\r\n this.render();\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model,\r\n mustBeDefault: this.mustBeDefault\r\n }\r\n },\r\n afterRender: function () {\r\n new PJQ.Binder(this.$el, this.model, {\r\n watchElements: [\r\n 'input'\r\n ]\r\n });\r\n\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-status-type'),\r\n defaultValue: this.model.get('type'),\r\n isDisabled: !this.model.isNew(),\r\n isIntChoices: true,\r\n onChange: _.bind(function (value) {\r\n this.model.set('type', value);\r\n this.render();\r\n }, this)\r\n });\r\n },\r\n cancel: function () {\r\n this.model.restore();\r\n this.removeModal();\r\n },\r\n validate: function () {\r\n let isValid = true;\r\n\r\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-status-name'), true);\r\n if (_.size(this.model.get('name').trim()) === 0) {\r\n isValid = false;\r\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-status-name'), false);\r\n }\r\n\r\n return isValid;\r\n },\r\n save: function () {\r\n if (this.validate()) {\r\n this.model.save(null, {\r\n success: _.bind(function (model) {\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(model);\r\n this.removeModal();\r\n }\r\n }, this)\r\n })\r\n }\r\n }\r\n});\r\n","PJQ.views.submittals.EditSubmittalModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'Modal-Edit-Submittal'),\n subTemplates: {\n contactBadge: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Contacts-Select-Input-Contacts'),\n comments: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'Comments'),\n },\n width: '90%',\n maxWidth: 1500,\n isShowCloseButton: true,\n onSave: _.noop,\n isAdmin: true\n },\n events: {\n 'click .btn-save': 'save',\n 'click .btn-close': 'close',\n 'click .submittal-delete': 'delete',\n 'click .btn-add-comment': 'addCommentClicked',\n 'click .btn-mark-submitted': 'submit',\n 'click .btn-submit': 'submit',\n 'click .btn-approve': 'approve',\n 'click .btn-reject': 'reject',\n 'click .btn-notification-history': 'viewNotificationHistory',\n 'click .btn-edit-history': 'viewEditHistory',\n 'click .btn-upload-files': 'uploadFile',\n 'click .edit-file': 'editFileClicked',\n 'click .edit-note': 'editNoteClicked',\n 'click .btn-dl-approver-attachment': 'downloadAttachment',\n 'click .btn-download-all-attachments': 'downloadAllAttachments',\n 'click .expand-history': 'renderHistory',\n 'click .download-history-file': 'downloadHistoryClicked',\n 'click .btn-export': 'exportSubmittal',\n 'click .btn-delete-comment': 'deleteComment',\n 'click .btn-void': 'voidSubmittal',\n 'click .btn-edit-workflow': 'editWorkflow',\n 'click .btn-save-workflow': 'saveWorkflow',\n 'click .btn-view-revision': 'viewRevision',\n 'click .btn-create-revision': 'createRevision',\n 'click .btn-submittal-respond': 'respondToSubmittal',\n 'click .btn-close-submittal': 'closeSubmittal',\n 'click .btn-distribute-submittal': 'distributeSubmittal',\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.project != null) {\n this.options.isAdmin = this.options.project.hasPermission('submittals.isAdmin');\n } else {\n this.options.isAdmin = true;\n }\n this.options.canEditPeople = this.options.isAdmin;\n this.options.canEdit = true;\n this.options.canUpload = true;\n this.options.canSubmit = this.options.project != null;\n\n if (this.model == null) {\n let submitter;\n if (!this.options.isAdmin) {\n submitter = PJQ.app.session.contact != null ? PJQ.app.session.contact : PJQ.app.session.user;\n }\n\n this.model = new PJQ.models.submittals.Submittals({\n projectId: this.options.project ? this.options.project.id : null,\n templateId: this.options.templateId,\n submitter: submitter ? submitter.toJSON() : null\n });\n }\n\n if (this.options.project != null) {\n this.options.settings = await this.options.project.fetchSubmittalSettings();\n this.options.itemTypes = await this.options.project.fetchSubmittalItemTypes();\n this.options.customFields = await this.options.project.fetchSubmittalCustomFields();\n this.options.statuses = await this.options.project.fetchSubmittalStatuses();\n } else {\n this.options.settings = await PJQ.app.session.fetchSubmittalSettings();\n this.options.itemTypes = await PJQ.app.session.fetchSubmittalItemTypes();\n this.options.customFields = await PJQ.app.session.fetchSubmittalCustomFields();\n this.options.statuses = await PJQ.app.session.fetchSubmittalStatuses();\n }\n this.changedAnnotations = new PJQ.collections.drawings.Annotations();\n\n if (this.model.isNew()) {\n let defaultNewStatus = this.options.statuses.findWhere({\n isDefault: true,\n type: PJQ.constants.submittals.statusTypes.NEW\n });\n this.model.set('statusId', defaultNewStatus.id);\n } else {\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 searchId = PJQ.app.session.contact ? PJQ.app.session.contact.get('id') : PJQ.app.session.user.get('id'),\n isSubmitter = this.model.get('isSubmitter') || (this.model.submitter && this.model.submitter.id === searchId),\n isCreator = this.model.get('isCreator') || (this.model.createdBy && this.model.createdBy.id === searchId);\n\n this.options.canEditPeople = this.options.isAdmin;\n this.options.isApprover = this.model.get('isApprover') || null != _.findWhere(this.model.get('approvers'), {id: searchId});\n if (this.model.isNew()) {\n this.options.canEdit = true;\n this.options.canUpload = true;\n this.options.canSubmit = this.options.project != null;\n } else if (this.model.get('hasRevision') || this.model.get('isClosed') || this.model.isVoidStatus(this.options.statuses)) {\n this.options.canEditPeople = false;\n this.options.canEdit = false;\n this.options.canUpload = false;\n this.options.canSubmit = false;\n } else if (this.model.get('isClosed') || this.model.isApprovedStatus(this.options.statuses) || this.model.isVoidStatus(this.options.statuses)) {\n this.options.canEdit = false;\n this.options.canUpload = false;\n this.options.canSubmit = false;\n } else if (this.model.isPartiallyApproved()) {\n this.options.canEdit = this.options.isAdmin;\n this.options.canUpload = this.options.isAdmin || this.options.isApprover;\n this.options.canSubmit = false;\n } else if (this.model.isSubmittedStatus(this.options.statuses)) {\n this.options.canEdit = this.options.isAdmin;\n this.options.canUpload = this.options.isAdmin || (!this.options.settings.get('enableWorkflow') && this.options.isApprover);\n this.options.canSubmit = false;\n } else {\n this.options.canEditPeople = this.options.isAdmin;\n this.options.canEdit = this.options.isAdmin;\n this.options.canSubmit = this.options.project != null && (this.options.isAdmin || this.options.isApprover || isSubmitter || isCreator);\n this.options.canUpload = this.options.canSubmit || isCreator\n }\n\n if (this.model.statusShouldLock(this.options.statuses)) {\n this.options.canEdit = false;\n this.options.canEditPeople = false;\n this.options.canSubmit = false;\n this.options.canUpload = false;\n this.options.isApprover = false;\n }\n\n this.options.hideItemTypes = PJQ.app.session.project ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.HIDE_SUBMITTAL_ITEM_TYPE) : PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.HIDE_SUBMITTAL_ITEM_TYPE);\n },\n renderData: function () {\n return {\n model: this.model,\n project: this.options.project,\n customFields: this.options.customFields,\n settings: this.options.settings,\n statuses: this.options.statuses,\n itemTypes: this.options.itemTypes ? this.options.itemTypes : null,\n canEdit: this.options.canEdit,\n canEditPeople: this.options.canEditPeople,\n canSubmit: this.options.canSubmit,\n isAdmin: this.options.isAdmin,\n isApprover: this.options.isApprover,\n canUpload: this.options.canUpload,\n hideItemTypes: this.options.hideItemTypes,\n isFetched: this.isFetched\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n if (this.options.itemTypes == null || !this.options.itemTypes.isFetched\n || this.options.customFields == null || !this.options.customFields.isFetched) {\n return;\n }\n if (this.options.project) {\n PJQ.app.session.project.fetchSubmittalCustomFields(_.bind(function (customFields) {\n this.customFields = customFields;\n this.renderCustomFields();\n }, this));\n }\n\n if (this.options.canEdit) {\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input',\n 'textarea'\n ]\n });\n }\n\n this.dueDatePicker = new PJQ.inputs.Datepicker({\n el: this.$('.input-due-date'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: this.model.get('dueDate') ? new Date(this.model.get('dueDate')) : null\n },\n onChange: _.bind(function (newDate) {\n this.model.set('dueDate', newDate);\n }, this)\n });\n\n new PJQ.inputs.Datepicker({\n el: this.$('.input-received-date'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: this.model.get('receivedDate') ? new Date(this.model.get('receivedDate')) : null\n },\n onChange: _.bind(function (newDate) {\n this.model.set('receivedDate', newDate);\n }, this)\n });\n\n new PJQ.views.groups.GroupsSelectInput({\n el: this.$('.submittal-groups'),\n isShowAddButton: false,\n addButton: this.$('.btn-edit-groups'),\n groupLevels: PJQ.app.session.project ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS) : PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS),\n groupUserId: PJQ.app.session.project ? PJQ.app.session.project.get('masterUserId') : PJQ.app.session.get('masterUserId'),\n selectedGroups: this.model.groups.models,\n isReadOnly: !this.options.canEdit,\n onAfterSave: _.bind(function (selectedGroups) {\n this.model.groups.reset(selectedGroups);\n this.model.isDirty = true;\n }, this)\n });\n\n if (this.model.ballInCourt) {\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.submittal-ball-in-court'),\n selectedContact: this.model.ballInCourt,\n canViewContacts: this.options.project == null || this.options.project.hasPermission('projectContacts.canView'),\n isReadOnly: true,\n displayContactsBlock: true\n });\n }\n\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.submittal-submitter'),\n selectedContact: this.model.submitter,\n canViewContacts: this.options.project == null || this.options.project.hasPermission('projectContacts.canView'),\n canEdit: this.options.canEditPeople,\n displayContactsBlock: true,\n canSwitchContext: this.options.project == null,\n context: this.options.project != null ? PJQ.constants.contacts.contexts.PROJECTCONTACTS : PJQ.constants.contacts.contexts.USERS,\n isSingleChoice: true,\n onChange: (selectedContact) => {\n this.model.submitter = selectedContact;\n this.model.isDirty = true;\n }\n });\n let approvers = [];\n _.each(this.model.get('approvers'), function (approver) {\n approvers.push(new PJQ.models.projectContacts.ProjectContact(approver));\n })\n\n if (this.options.settings.get('enableWorkflow') && (!this.model.isNew() || this.options.isAdmin)) {\n if (this.options.project != null) {\n this.workflowView = new PJQ.views.submittals.WorkflowView({\n el: this.$('.workflow-outer'),\n model: this.model.workflow,\n submittal: this.model,\n project: this.options.project,\n isEdit: this.model.isNew() && this.options.isAdmin,\n canChangeBallInCourt: this.options.canEdit && this.options.isAdmin && !this.model.get('isClosed') && this.model.isSubmittedStatus(this.options.statuses),\n canEdit: this.options.canEdit && this.options.isAdmin && !this.model.get('isClosed') && !this.model.isApprovedStatus(this.options.statuses) && !this.model.isVoidStatus(this.options.statuses),\n canRespond: !this.model.get('isClosed'),\n onChange: () => {\n this.model.isDirty = true;\n },\n onRespond: () => {\n this.render();\n },\n onSetBallInCourt: () => {\n this.render();\n }\n });\n }\n\n this.managerPicker = new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.submittal-manager'),\n selectedContact: this.model.manager,\n canViewContacts: this.options.project == null || this.options.project.hasPermission('projectContacts.canView'),\n canEdit: this.options.canEditPeople,\n displayContactsBlock: true,\n canSwitchContext: this.options.project == null,\n context: this.options.project != null ? PJQ.constants.contacts.contexts.PROJECTCONTACTS : PJQ.constants.contacts.contexts.USERS,\n isSingleChoice: true,\n onChange: _.bind(function (selectedContact) {\n this.model.manager = selectedContact;\n this.model.isDirty = true;\n }, this)\n });\n } else {\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.submittal-approval-list'),\n subTemplates: {\n contactBadge: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'Approver-Input-Contacts')\n },\n isSortable: true,\n allowDuplicate: this.options.settings.get('approvalMode') === PJQ.constants.submittals.approvalModes.SEQUENTIAL,\n onStop: (array) => {\n let approvers = this.model.get('approvers'),\n newApprovers = [],\n usedIdx = [];\n _.each(array, function (id) {\n let approverIdx = _.findIndex(approvers, function (approver, idx) {\n return approver.id === id && usedIdx.indexOf(idx) === -1;\n });\n if (approverIdx === -1) {\n return;\n }\n usedIdx.push(approverIdx);\n\n newApprovers.push(approvers[approverIdx]);\n });\n this.model.set('approvers', newApprovers);\n this.model.isDirty = true;\n },\n contactsRenderData: {\n isAdmin: this.options.isAdmin,\n showApproval: (contact, index) => {\n return this.model.isSubmittedStatus(this.options.statuses);\n },\n canApprove: (contact, index) => {\n return !contact.get('hasApproved') && this.model.isSubmittedStatus(this.options.statuses)\n && this.model.isUserCurrentApprover(this.options.settings.get('approvalMode'), contact);\n }\n },\n onApproveBehalf: (contact) => {\n this.model.set('asNotedCommentId', null);\n this.model.approve(null, contact.id, _.bind(function () {\n this.render();\n }, this));\n },\n selectedContact: approvers,\n canViewContacts: this.options.project == null || this.options.project.hasPermission('projectContacts.canView'),\n canEdit: this.options.canEditPeople,\n displayContactsBlock: true,\n context: this.options.project != null ? PJQ.constants.contacts.contexts.PROJECTCONTACTS : PJQ.constants.contacts.contexts.USERS,\n isSingleChoice: false,\n canSwitchContext: this.options.project == null,\n onChange: (selectedContacts) => {\n let newApprovers = [],\n approvedByIds = _.map(_.filter(this.model.get('approvers'), (approver) => {\n return approver.hasApproved;\n }), (approver) => {\n return approver.id;\n });\n _.each(selectedContacts, function (contact) {\n let existApproverIdx = approvedByIds.indexOf(contact.id)\n contact.set({\n isApprover: true,\n hasApproved: existApproverIdx !== -1\n });\n newApprovers.push(contact);\n\n if (existApproverIdx !== -1) {\n delete approvedByIds[existApproverIdx];\n }\n }, this)\n this.model.set('approvers', newApprovers);\n this.model.isDirty = true;\n }\n });\n }\n\n if (this.options.isAdmin) {\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.submittal-distribution-list'),\n selectedContact: this.model.distributionList.models,\n canViewContacts: this.options.project == null || this.options.project.hasPermission('projectContacts.canView'),\n canEdit: this.options.canEditPeople,\n displayContactsBlock: true,\n canSwitchContext: this.options.project == null,\n context: this.options.project != null ? PJQ.constants.contacts.contexts.PROJECTCONTACTS : PJQ.constants.contacts.contexts.USERS,\n isSingleChoice: false,\n onChange: _.bind(function (selectedContacts) {\n this.model.distributionList.reset(selectedContacts);\n this.model.isDirty = true;\n }, this)\n });\n }\n\n if (!this.options.hideItemTypes) {\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-item-type'),\n noneSelectedText: 'Select Value',\n isMultiple: true,\n isIntChoices: true,\n defaultValue: _.map(this.model.itemTypes.models, function (model) {\n return model.id;\n }),\n onChange: _.bind(function (value) {\n this.model.itemTypes.reset(this.options.itemTypes.get(value));\n this.model.isDirty = true;\n }, this)\n });\n }\n\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.submittal-file-uploader'),\n context: 'submittal',\n contextId: this.model.id,\n canAddAnnotations: this.options.canEdit,\n onAnnotationChange: (annotation) => {\n this.changedAnnotations.merge(annotation);\n },\n mergeAnnotations: this.changedAnnotations,\n collection: this.model.attachments,\n canUpload: this.options.canUpload,\n canDelete: this.options.isAdmin,\n hasNotes: true,\n isVersioned: true,\n versionByName: true,\n previewImageDimension: 150,\n includeProjectAttachments: true,\n onNoteChanged: (attachment) => {\n if (!(attachment.id > 0)) {\n return;\n }\n\n new PJQ.ajax.Request({\n endpoint: this.options.project.endpoint() + '/submittals/attachments/' + attachment.id,\n isAPIv2: true,\n data: attachment.toJSON()\n }).patch().done(() => {\n PJQ.notifications.notify.successNotify({\n message: 'Attachment note updated'\n });\n }).fail((xhr, err, result) => {\n PJQ.notifications.notify.errorNotify({\n message: 'Encountered an error while updating the attachment note'\n });\n });\n },\n onNewVersion: () => {\n this.model.isDirty = true;\n this.fileUploader.render();\n },\n onSuccess: () => {\n this.model.isDirty = true;\n },\n onDelete: (attachment, callback) => {\n if (attachment.id > 0) {\n attachment.set('isDeleted', true);\n } else {\n this.model.attachments.remove(attachment);\n }\n this.model.isDirty = true;\n callback();\n }\n });\n\n this.renderCustomFields();\n this.renderComments();\n },\n renderComments: function () {\n this.renderSubTemplate(false, this.options.subTemplates.comments, this.$('.comments-outer'), {\n comments: this.model.comments.models,\n model: this.model,\n settings: this.options.settings,\n statuses: this.options.statuses,\n canDelete: this.options.canEdit && (this.options.project ? this.options.project.hasPermission('submittals.canDeleteComments') : true)\n });\n },\n respondToSubmittal: function (e) {\n let currentStep = this.model.workflow.getCurrentStep();\n if (currentStep == null) {\n return;\n }\n\n let approver = currentStep.approvers.findWhere({isMe: true});\n new PJQ.views.submittals.WorkflowResponseModal({\n project: this.options.project,\n submittal: this.model,\n approver: approver,\n onSave: () => {\n this.render();\n }\n });\n },\n editWorkflow: function () {\n this.$('.btn-edit-workflow').addClass('hidden');\n this.$('.btn-save-workflow').removeClass('hidden');\n\n this.workflowView.setEdit(true);\n },\n saveWorkflow: function () {\n this.$('.btn-save-workflow').addClass('hidden');\n this.$('.btn-edit-workflow').removeClass('hidden');\n\n this.workflowView.setEdit(false);\n },\n viewRevision: function () {\n let lastRevisionId = this.model.get('lastRevisionId');\n if (lastRevisionId == null) {\n return;\n }\n\n this.removeModal();\n\n let revision = new PJQ.models.submittals.Submittals({\n submittalId: lastRevisionId\n });\n new PJQ.views.submittals.EditSubmittalModal({\n model: revision,\n project: this.options.project,\n onSave: this.options.onSave,\n onClose: this.options.onClose,\n onDelete: this.options.onDelete\n });\n },\n createRevision: function () {\n this.removeModal();\n\n let newSubmittal = this.model.clone();\n newSubmittal.set({\n submittalId: null,\n attachments: [],\n comments: [],\n workflow: null,\n submittalNumber: null,\n statusId: null,\n dueDate: null,\n revisionFor: this.model.id,\n isClosed: false\n });\n newSubmittal.attachments = new PJQ.collections.submittals.Attachments();\n newSubmittal.comments = new PJQ.collections.submittals.Comments();\n\n newSubmittal.workflow = this.model.workflow.clone();\n\n new PJQ.views.submittals.EditSubmittalModal({\n model: newSubmittal,\n project: this.options.project,\n onSave: this.options.onSave,\n onClose: this.options.onClose,\n onDelete: this.options.onDelete\n });\n },\n closeSubmittal: function () {\n new PJQ.views.submittals.ConfirmSubmittalCloseModal({\n header: \"Close Submittal?\",\n body: 'Are you sure you want to close this submittal? This will lock the submittal and distribute it to all submittal participants (when selected).',\n onConfirm: (distribute) => {\n this.model.close(distribute, () => {\n PJQ.notifications.notify.successNotify({\n message: \"Submittal successfully closed\" + (distribute ? ' and distributed' : '')\n });\n this.render();\n });\n }\n });\n },\n distributeSubmittal: function () {\n new PJQ.views.modals.YesNo({\n header: \"Distribute Submittal?\",\n body: 'Are you sure you want to distribute this submittal?',\n onYes: () => {\n this.model.distribute(() => {\n PJQ.notifications.notify.successNotify({\n message: \"Submittal successfully distributed\"\n });\n this.render();\n });\n }\n });\n },\n voidSubmittal: function (e) {\n if (this.model.get('templateId') != null) {\n return;\n }\n\n if (!this.validate()) {\n return;\n }\n\n let status = null;\n if (this.options.isAdmin && e && e.currentTarget != null) {\n statusId = $(e.currentTarget).data('statusId');\n status = this.options.statuses.get(statusId);\n }\n\n if (status == null) {\n status = this.options.statuses.findWhere({\n type: PJQ.constants.submittals.statusTypes.VOID,\n isDefault: true\n });\n }\n\n let isNew = this.model.isNew();\n let fnVoid = (comment) => {\n this.model.void(status.id, (success, err) => {\n if (!success) {\n if (!this.handleStatusError(err)) {\n let errTxt = 'Encountered an error while voiding the submittal';\n PJQ.notifications.notify.errorNotify({\n message: errTxt\n });\n }\n return;\n }\n\n if (this.options.onSave) {\n this.options.onSave(this.model, isNew);\n }\n this.render();\n });\n };\n\n let asNoted = status.get('asNoted');\n this.checkActiveResponse(asNoted, (hadComment) => {\n if (!hadComment && asNoted) {\n new PJQ.views.submittals.StatusChangeCommentModal({\n model: this.model,\n title: 'Void Note',\n onSave: _.bind(function (model, comment) {\n fnVoid(comment);\n }, this)\n })\n } else {\n fnVoid();\n }\n });\n },\n addCommentClicked: function () {\n this.addComment();\n },\n addComment: function (asNoted, callback) {\n let val = this.$('.item-new-comment').val().trim();\n if (_.size(val) === 0) {\n callback(false);\n return;\n }\n\n let comment = new PJQ.models.submittals.Comment({\n submittalId: this.model.id,\n comment: val,\n createdOn: new Date(),\n asNoted: asNoted === true\n });\n if (!this.model.isNew() && !asNoted) {\n comment.save(null, {\n success: _.bind(function () {\n this.model.comments.add(comment);\n this.renderComments();\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)\n });\n } else {\n comment.createdBy = PJQ.app.session.contact ? PJQ.app.session.contact : PJQ.app.session.user;\n this.model.comments.add(comment);\n this.renderComments();\n if (typeof callback === 'function') {\n callback(true);\n }\n }\n this.$('.item-new-comment').val('');\n },\n deleteComment: function (e) {\n let target = $(e.currentTarget),\n $comment = target.closest('.card'),\n cid = $comment.data().cid,\n comment = this.model.comments.get(cid);\n\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this comment?\",\n onDelete: _.bind(function () {\n this.model.comments.remove(comment);\n comment.destroy();\n this.renderComments();\n }, this)\n });\n },\n renderCustomFields: function () {\n if (_.size(this.options.customFields.models) > 0) {\n this.customFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\n el: this.$('.submittal-custom-fields'),\n collection: this.options.customFields,\n fieldValues: this.model.get('customFieldValues'),\n isEdit: this.options.canEdit,\n onChange: _.bind(function () {\n this.model.isDirty = true;\n }, this)\n });\n }\n },\n save: function () {\n this.checkActiveResponse(false, () => {\n if (this.fileUploader.isUploading()) {\n new PJQ.views.BaseModal({\n header: \"Files Uploading\",\n body: \"You can't save while files are uploading\"\n });\n } else {\n let fnDisableButtons = _.bind(function (disable) {\n this.$('.btn-save').attr('disabled', disable);\n this.$('.btn-submit').attr('disabled', disable);\n }, this)\n\n fnDisableButtons(true);\n if (!this.validate()) {\n fnDisableButtons(false);\n return;\n }\n\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-user-company-name'), true);\n if (this.model.hasChanged() || this.model.isNew()) {\n let submitting = this.model.isSubmittedStatus(this.options.statuses) && this.model.initAttributes.statusId !== this.model.get('statusId'),\n isNew = this.model.isNew();\n this.model.save({\n workflow: this.model.workflow && this.model.workflow.hasChanged() ? this.model.workflow.toJSON() : null,\n }, {\n notify: true,\n success: () => {\n let fnSaveAnnotations = () => {\n _.each(this.changedAnnotations.models, (annotation) => {\n if (annotation.isNew()) {\n annotation.set('contextId', this.model.id);\n }\n });\n this.changedAnnotations.saveAll(() => {\n if (this.options.onSave) {\n this.options.onSave(this.model, isNew);\n }\n\n let message;\n if (submitting) {\n message = 'Submittal successfully submitted';\n } else {\n message = 'Submittal saved';\n }\n PJQ.notifications.notify.successNotify({\n message: message\n });\n\n this.removeModal();\n });\n };\n fnSaveAnnotations();\n fnDisableButtons(false);\n },\n error: () => {\n fnDisableButtons(false);\n }\n });\n } else {\n this.removeModal();\n this.options.onSave(this.model);\n }\n }\n });\n },\n close: function () {\n if (this.model.hasChanged() && this.model.get('templateId') === null) {\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.onClose(this.model);\n this.removeModal();\n }, this)\n });\n } else {\n this.onClose(this.model);\n this.removeModal();\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 Submittal?\",\n onDelete: _.bind(function () {\n if (this.options.onDelete) {\n this.options.onDelete(this.model);\n }\n this.removeModal();\n }, this)\n });\n },\n checkActiveResponse: function (asNoted, callback) {\n let aRes = this.$('.item-new-comment').val();\n if (_.size(aRes) > 0) {\n new PJQ.views.modals.YesNo({\n header: \"Post Comment?\",\n body: 'You typed a comment but did not click Post Comment. Would you like to post this comment before continuing?',\n onYes: _.bind(function () {\n this.addComment(asNoted, (hadComment) => {\n callback(hadComment);\n });\n }, this),\n onNo: _.bind(function () {\n if (typeof callback === 'function') {\n callback(false);\n }\n }, this)\n });\n } else {\n if (typeof callback === 'function') {\n callback(false);\n }\n }\n },\n submit: function (e) {\n if (this.model.get('templateId') != null) {\n return;\n }\n\n if (!this.validate()) {\n return;\n }\n\n let status = null;\n if (e && e.currentTarget != null) {\n statusId = $(e.currentTarget).data('statusId');\n status = this.options.statuses.get(statusId);\n }\n\n if (status == null) {\n status = this.options.statuses.findWhere({\n type: PJQ.constants.submittals.statusTypes.SUBMITTED,\n isDefault: true\n });\n }\n\n let isNew = this.model.isNew();\n let fnSubmit = (comment) => {\n this.model.submit(status.id, (success, err) => {\n if (!success) {\n if (!this.handleStatusError(err)) {\n let errTxt = 'Encountered an error while submitting the submittal';\n PJQ.notifications.notify.errorNotify({\n message: errTxt\n });\n }\n return;\n }\n\n if (this.options.onSave) {\n this.options.onSave(this.model, isNew);\n }\n this.render();\n });\n };\n\n let asNoted = status.get('asNoted');\n this.checkActiveResponse(asNoted, (hadComment) => {\n if (!hadComment && asNoted) {\n new PJQ.views.submittals.StatusChangeCommentModal({\n model: this.model,\n title: 'Submission Note',\n onSave: _.bind(function (model, comment) {\n fnSubmit(comment);\n }, this)\n })\n } else {\n fnSubmit();\n }\n });\n },\n reject: function (e) {\n if (this.model.get('templateId') != null) {\n return;\n }\n\n if (!this.validate()) {\n return;\n }\n\n let status = null;\n if (this.options.isAdmin && e && e.currentTarget != null) {\n statusId = $(e.currentTarget).data('statusId');\n status = this.options.statuses.get(statusId);\n }\n\n if (status == null) {\n status = this.options.statuses.findWhere({\n type: PJQ.constants.submittals.statusTypes.REJECTED,\n isDefault: true\n });\n }\n\n let isNew = this.model.isNew();\n let fnReject = (comment) => {\n this.model.reject(status.id, (success, err) => {\n if (!success) {\n if (!this.handleStatusError(err)) {\n let errTxt = 'Encountered an error while rejecting the submittal';\n PJQ.notifications.notify.errorNotify({\n message: errTxt\n });\n }\n return;\n }\n\n if (this.options.onSave) {\n this.options.onSave(this.model, isNew);\n }\n this.render();\n });\n };\n\n let asNoted = status.get('asNoted');\n this.checkActiveResponse(asNoted, (hadComment) => {\n if (!hadComment && asNoted) {\n new PJQ.views.submittals.StatusChangeCommentModal({\n model: this.model,\n title: 'Rejection Note',\n onSave: _.bind(function (model, comment) {\n fnReject(comment);\n }, this)\n })\n } else {\n fnReject();\n }\n });\n },\n validate: function () {\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-due-date'), true);\n let dueDateVal = this.$('.input-due-date').val().trim();\n\n if (_.size(dueDateVal) === 0) {\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-due-date'), false);\n return false;\n }\n\n if (this.managerPicker != null && !this.managerPicker.validate() && this.options.isAdmin) {\n return false;\n }\n\n if (this.customFieldsForm && !this.customFieldsForm.validate()) {\n return false;\n }\n\n return true\n },\n approve: function (e) {\n if (this.model.get('templateId') != null) {\n return;\n }\n\n if (!this.validate()) {\n return;\n }\n\n let status = null;\n if (this.options.isAdmin && e && e.currentTarget != null) {\n statusId = $(e.currentTarget).data('statusId');\n status = this.options.statuses.get(statusId);\n }\n\n if (status == null) {\n status = this.options.statuses.findWhere({\n type: PJQ.constants.submittals.statusTypes.APPROVED,\n isDefault: true\n });\n }\n\n let isNew = this.model.isNew();\n let fnApprove = (comment) => {\n // todo: save comment\n this.model.approve(status.id, null, (success, err) => {\n if (!success) {\n if (!this.handleStatusError(err)) {\n let errTxt = 'Encountered an error while approving the submittal';\n PJQ.notifications.notify.errorNotify({\n message: errTxt\n });\n }\n return;\n }\n\n if (this.options.onSave) {\n this.options.onSave(this.model, isNew);\n }\n this.render();\n });\n };\n\n let asNoted = status.get('asNoted');\n this.checkActiveResponse(asNoted, (hadComment) => {\n if (!hadComment && asNoted) {\n new PJQ.views.submittals.StatusChangeCommentModal({\n model: this.model,\n title: 'Approval Note',\n onSave: _.bind(function (model, comment) {\n fnApprove(comment);\n }, this)\n })\n } else {\n fnApprove();\n }\n\n });\n },\n handleStatusError: function (err) {\n if (err !== PJQ.constants.submittals.errors.STATUS_NOT_EXISTS) {\n return false;\n }\n\n let fObj = this.options.project != null ? this.options.project : PJQ.app.session;\n fObj.fetchSubmittalStatuses(true).then((st) => {\n this.options.statuses = st;\n this.render();\n });\n\n PJQ.notifications.notify.errorNotify({\n message: 'The status you selected no longer exists, please select a different status'\n });\n return true;\n },\n editFile: function (file) {\n new PJQ.views.submittals.FileEditorModal({\n model: file,\n collection: new PJQ.collections.submittals.Attachments(),\n isNewVersion: true,\n onSave: _.bind(function (file) {\n let newFile = file.models[0];\n if (file.models[1].get('submittalDocumentId') === file.models[1].get('parentSubmittalDocumentId')) {\n newFile.attributes.parentSubmittalDocumentId = file.models[1].get('submittalDocumentId');\n } else {\n newFile.attributes.parentSubmittalDocumentId = file.models[1].get('parentSubmittalDocumentId');\n }\n _.each(this.model.attachments.models, function (model) {\n if (model.get('submittalDocumentId') === file.models[1].get('submittalDocumentId')) {\n model.attributes = newFile.attributes;\n }\n }, this);\n this.model.isDirty = true;\n }, this)\n });\n },\n uploadFile: function () {\n new PJQ.views.submittals.FileEditorModal({\n collection: new PJQ.collections.submittals.Attachments(),\n isNewVersion: false,\n onSave: _.bind(function (files) {\n _.each(files.models, function (model) {\n model.attributes.createdOn = new Date();\n model.attributes.createdByDisplay = model.get('createdBy').contactName;\n model.attributes.notes = \"\";\n model.attributes.versionNumber = 1;\n this.model.attachments.add(model);\n }, this);\n this.model.isDirty = true;\n }, this)\n });\n },\n editNoteClicked: function (e) {\n let target = $(e.currentTarget),\n row = this.filesTable.getRow(target.closest('tr'));\n this.editNote(row);\n },\n editNote: function (file) {\n new PJQ.views.submittals.FileEditorModal({\n model: file,\n isNoteEdit: true,\n collection: new PJQ.collections.submittals.Attachments(),\n isNewVersion: true,\n onSave: _.bind(function () {\n this.model.isDirty = true;\n // this.filesTable.render();\n }, this)\n });\n },\n viewNotificationHistory: function () {\n this.model.fetchNotifications(function (notifications) {\n new PJQ.views.notifications.NotificationHistory({\n collection: notifications\n });\n })\n },\n viewEditHistory: function () {\n this.model.fetchEditHistory(function (editHistory) {\n new PJQ.views.submittals.EditHistoryModal({\n history: editHistory\n })\n })\n },\n exportSubmittal: function () {\n new PJQ.ajax.Request({\n endpoint: this.options.project.endpoint() + '/submittals/' + this.model.get('submittalId') + '/export',\n data: {\n isApi2: true\n }\n }).post().done(_.bind(function (response) {\n PJQ.files.downloadFile(response.url, {\n isEndpoint: false\n });\n }, this)).fail(_.bind(function (xhr, err, result) {\n }, this));\n },\n downloadAttachment: function (e) {\n let $target = $(e.currentTarget),\n cid = $target.data('cid'),\n attachment = null;\n for (let i = 0; i < this.model.attachments.models.length; i++) {\n let sAttachment = this.model.attachments.models[i];\n if (sAttachment.cid === cid) {\n attachment = sAttachment;\n } else if (sAttachment.versions != null) {\n for (let j = 0; j < sAttachment.versions.models.length; j++) {\n let ver = sAttachment.versions.models[j];\n if (ver.cid === cid) {\n attachment = ver;\n }\n }\n }\n\n if (attachment != null) {\n break;\n }\n }\n if (attachment != null) {\n attachment.download();\n }\n },\n downloadAllAttachments: function () {\n this.options.project.downloadAttachments(_.map(this.model.attachments.models, function (attachment) {\n return new PJQ.models.files.File({\n entryId: attachment.get('entryId'),\n guid: attachment.get('guid')\n });\n }));\n }\n});\n\nPJQ.views.submittals.ConfirmSubmittalCloseModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'modal-close-submittal'),\n },\n events: {\n 'click .btn-confirm': 'onConfirm',\n 'change .cb-distribute': 'onDistributeChange'\n },\n beforeModalCreated: function () {\n this.distribute = true;\n },\n renderData: function () {\n return {\n distribute: this.distribute\n };\n },\n onDistributeChange: function () {\n this.distribute = this.$('.cb-distribute').prop('checked');\n this.render();\n },\n onConfirm: function () {\n if (typeof this.options.onConfirm === 'function') {\n this.options.onConfirm(this.distribute);\n }\n this.removeModal();\n }\n});","PJQ.models.submittals.Submittals = PJQ.models.BaseModel.extend({\r\n idAttribute: \"submittalId\",\r\n endpoint: function (urlOptions) {\r\n let arr;\r\n if (this.isNew() && this.get('projectId') > 0) {\r\n arr = [\r\n {\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n },\r\n {\r\n endpoint: 'submittals',\r\n value: this.id\r\n }\r\n ];\r\n } else if (this.isNew() && this.get('templateId') > 0) {\r\n arr = [\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'templates',\r\n value: this.get('templateId')\r\n },\r\n {\r\n endpoint: 'submittals'\r\n }\r\n ];\r\n } else {\r\n arr = [\r\n {\r\n endpoint: 'submittals',\r\n value: this.id\r\n }\r\n ];\r\n }\r\n\r\n return PJQ.helpers.urlHelpers.generateEndpoint(arr);\r\n },\r\n afterInit: function () {\r\n if (this.get('customFieldValues') == null) {\r\n this.set('customFieldValues', [], {\r\n silent: true\r\n });\r\n }\r\n },\r\n parse: function (model) {\r\n model = _.defaults(model, {});\r\n\r\n if (_.size(model.itemTypes) > 0) {\r\n this.itemTypes = new PJQ.collections.submittals.ItemTypes(model.itemTypes);\r\n } else if (!this.groups) {\r\n this.itemTypes = new PJQ.collections.submittals.ItemTypes();\r\n }\r\n\r\n if (_.size(model.groups) > 0) {\r\n this.groups = new PJQ.collections.groups.Groups(model.groups);\r\n } else if (!this.groups) {\r\n this.groups = new PJQ.collections.groups.Groups();\r\n }\r\n\r\n if (model.createdBy != null) {\r\n this.createdBy = new PJQ.models.projectContacts.ProjectContact(model.createdBy);\r\n } else {\r\n this.createdBy = null;\r\n }\r\n\r\n if (model.ballInCourt != null) {\r\n this.ballInCourt = new PJQ.models.projectContacts.ProjectContact(model.ballInCourt);\r\n } else {\r\n this.ballInCourt = null;\r\n }\r\n\r\n if (model.submitter != null) {\r\n this.submitter = new PJQ.models.projectContacts.ProjectContact(model.submitter);\r\n } else {\r\n this.submitter = null;\r\n }\r\n\r\n if (model.manager != null) {\r\n this.manager = new PJQ.models.projectContacts.ProjectContact(model.manager);\r\n } else {\r\n this.manager = null;\r\n }\r\n\r\n this.workflow = new PJQ.models.submittals.Workflow(model.workflow);\r\n\r\n // this.approvers = new PJQ.collections.projectContacts.ProjectContacts(model.approvers);\r\n\r\n if (_.size(model.distributionList) > 0) {\r\n this.distributionList = new PJQ.collections.projectContacts.ProjectContacts(model.distributionList);\r\n } else if (!this.distributionList) {\r\n this.distributionList = new PJQ.collections.projectContacts.ProjectContacts();\r\n }\r\n\r\n if (_.size(model.comments) > 0) {\r\n this.comments = new PJQ.collections.submittals.Comments(model.comments);\r\n } else if (!this.comments) {\r\n this.comments = new PJQ.collections.submittals.Comments();\r\n }\r\n\r\n if (_.size(model.attachments) > 0) {\r\n this.attachments = new PJQ.collections.submittals.Attachments(model.attachments);\r\n } else if (!this.attachments) {\r\n this.attachments = new PJQ.collections.submittals.Attachments();\r\n }\r\n\r\n return model;\r\n },\r\n statusShouldLock: function (statuses) {\r\n let statusId = this.get('statusId'),\r\n status = statuses.get(statusId);\r\n return status && status.get('shouldLock');\r\n },\r\n isNewStatus: function (statuses) {\r\n let statusId = this.get('statusId'),\r\n status = statuses.get(statusId);\r\n return status && status.get('type') === PJQ.constants.submittals.statusTypes.NEW;\r\n },\r\n isSubmittedStatus: function (statuses) {\r\n let statusId = this.get('statusId'),\r\n status = statuses.get(statusId);\r\n return status && status.get('type') === PJQ.constants.submittals.statusTypes.SUBMITTED;\r\n },\r\n isApprovedStatus: function (statuses) {\r\n let statusId = this.get('statusId'),\r\n status = statuses.get(statusId);\r\n\r\n if (status.get('type') === PJQ.constants.submittals.statusTypes.SUBMITTED) {\r\n // todo: check for submitted status type & partially approved\r\n }\r\n\r\n return status && status.get('type') === PJQ.constants.submittals.statusTypes.APPROVED;\r\n },\r\n isRejectedStatus: function (statuses) {\r\n let statusId = this.get('statusId'),\r\n status = statuses.get(statusId);\r\n return status && status.get('type') === PJQ.constants.submittals.statusTypes.REJECTED;\r\n },\r\n isVoidStatus: function (statuses) {\r\n let statusId = this.get('statusId'),\r\n status = statuses.get(statusId);\r\n return status && status.get('type') === PJQ.constants.submittals.statusTypes.VOID;\r\n },\r\n isPartiallyApproved: function () {\r\n return null != _.find(this.get('approvers'), (approver) => {\r\n return !approver.hasApproved;\r\n }) && null != _.find(this.get('approvers'), (approver) => {\r\n return approver.hasApproved;\r\n });\r\n },\r\n getStatusColor: function (statuses) {\r\n let statusId = this.get('statusId'),\r\n status = statuses.get(statusId);\r\n if (status == null) {\r\n // should never ever happen\r\n return '#000000';\r\n } else if (this.get('isClosed')) {\r\n return PJQ.constants.colors.RED;\r\n }\r\n\r\n if (status.get('type') === PJQ.constants.submittals.statusTypes.SUBMITTED && this.isPartiallyApproved()) {\r\n return PJQ.constants.colors.PURPLE;\r\n }\r\n\r\n return PJQ.constants.submittals.statusTypeColors[status.get('type')];\r\n },\r\n getStatusName: function (settings, statuses, options = {}) {\r\n let statusId = this.get('statusId'),\r\n status = statuses.get(statusId);\r\n if (status == null) {\r\n // should never ever happen\r\n return 'New';\r\n } else if (this.get('isClosed')) {\r\n return 'Closed';\r\n }\r\n\r\n let result = status.get('name');\r\n if (status.get('type') === PJQ.constants.submittals.statusTypes.SUBMITTED && this.isPartiallyApproved()) {\r\n let approveStatusName = settings.getApproveStatusName('ed');\r\n return 'Partially ' + approveStatusName;\r\n }\r\n\r\n // todo: add 'as noted\" if asNoted is enabled and asNotedCommentId is set\r\n if (status.get('asNoted') && this.get('asNotedCommentId') > 0 && (!options || options.includeAsNoted !== false)) {\r\n result += ' as noted';\r\n }\r\n\r\n return result;\r\n },\r\n beforeSave: function () {\r\n this.set({\r\n groups: this.groups.toJSON(),\r\n itemTypes: this.itemTypes.toJSON(),\r\n submitter: this.submitter ? this.submitter.toJSON() : null,\r\n manager: this.manager ? this.manager.toJSON() : null,\r\n // approvers: this.approvers.toJSON(),\r\n distributionList: this.distributionList.toJSON(),\r\n attachments: this.attachments.toJSON(),\r\n comments: this.comments.toJSON()\r\n });\r\n },\r\n approve: function (status, behalfId, callback) {\r\n this.beforeSave();\r\n\r\n let ep = this.endpoint() + '/approve';\r\n if (behalfId && behalfId != 0) {\r\n ep += '?behalf=' + behalfId.toString();\r\n }\r\n if (status && status != 0) {\r\n ep += '?approveStatus=' + status.toString();\r\n }\r\n new PJQ.ajax.Request({\r\n endpoint: ep,\r\n data: this.toJSON()\r\n }).post().done((response) => {\r\n this.reset(response);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }).fail((res) => {\r\n let err = null;\r\n if (res.responseJSON && res.responseJSON.message) {\r\n err = res.responseJSON.message;\r\n }\r\n if (typeof callback === 'function') {\r\n callback(false, err);\r\n }\r\n });\r\n },\r\n void: function (status, callback) {\r\n let prevStatus = this.get('statusId');\r\n if (status > 0) {\r\n this.set('statusId', status);\r\n }\r\n\r\n this.beforeSave();\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/void',\r\n data: this.toJSON()\r\n }).post().done(_.bind(function (response) {\r\n this.reset(response);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }, this)).fail((res) => {\r\n this.set('statusId', prevStatus);\r\n\r\n let err = null;\r\n if (res.responseJSON && res.responseJSON.message) {\r\n err = res.responseJSON.message;\r\n }\r\n if (typeof callback === 'function') {\r\n callback(false, err);\r\n }\r\n });\r\n },\r\n reject: function (status, callback) {\r\n let prevStatus = this.get('statusId');\r\n if (status > 0) {\r\n this.set('statusId', status);\r\n }\r\n\r\n this.beforeSave();\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/reject',\r\n data: this.toJSON()\r\n }).post().done(_.bind(function (response) {\r\n this.reset(response);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }, this)).fail((res) => {\r\n this.set('statusId', prevStatus);\r\n\r\n let err = null;\r\n if (res.responseJSON && res.responseJSON.message) {\r\n err = res.responseJSON.message;\r\n }\r\n if (typeof callback === 'function') {\r\n callback(false, err);\r\n }\r\n });\r\n },\r\n submit: function (status, callback) {\r\n let prevStatus = this.get('statusId');\r\n if (status > 0) {\r\n this.set('statusId', status);\r\n }\r\n\r\n this.beforeSave();\r\n if (this.id > 0) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/submit',\r\n data: this.toJSON()\r\n }).post().done(_.bind(function (response) {\r\n this.reset(response);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }, this)).fail((res) => {\r\n this.set('statusId', prevStatus);\r\n\r\n let err = null;\r\n if (res.responseJSON && res.responseJSON.message) {\r\n err = res.responseJSON.message;\r\n }\r\n if (typeof callback === 'function') {\r\n callback(false, err);\r\n }\r\n });\r\n } else {\r\n this.save(null, {\r\n notify: false,\r\n success: function () {\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n },\r\n error: (model, res) => {\r\n this.set('statusId', prevStatus);\r\n\r\n let err = null;\r\n if (res.responseJSON && res.responseJSON.message) {\r\n err = res.responseJSON.message;\r\n }\r\n\r\n if (typeof callback === 'function') {\r\n callback(false, err);\r\n }\r\n }\r\n })\r\n }\r\n },\r\n respond: function (response, behalfId, callback) {\r\n this.beforeSave();\r\n\r\n let ep = this.endpoint() + '/respond';\r\n if (behalfId && behalfId != 0) {\r\n ep += '?behalf=' + behalfId.toString();\r\n }\r\n\r\n new PJQ.ajax.Request({\r\n endpoint: ep,\r\n data: response.toJSON()\r\n }).post().done((response) => {\r\n this.reset(response);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }).fail((res) => {\r\n let err = null;\r\n if (res.responseJSON && res.responseJSON.message) {\r\n err = res.responseJSON.message;\r\n }\r\n if (typeof callback === 'function') {\r\n callback(false, err);\r\n }\r\n });\r\n },\r\n setBallInCourt: function (stepId, callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/ballincourt' + '?stepId=' + stepId\r\n }).post().done((response) => {\r\n this.reset(response);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }).fail((res) => {\r\n let err = null;\r\n if (res.responseJSON && res.responseJSON.message) {\r\n err = res.responseJSON.message;\r\n }\r\n if (typeof callback === 'function') {\r\n callback(false, err);\r\n }\r\n });\r\n },\r\n close: function (distribute, callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/close?distribute=' + (distribute === true).toString(),\r\n }).post().done((response) => {\r\n this.reset(response);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }).fail((res) => {\r\n let err = null;\r\n if (res.responseJSON && res.responseJSON.message) {\r\n err = res.responseJSON.message;\r\n }\r\n if (typeof callback === 'function') {\r\n callback(false, err);\r\n }\r\n });\r\n },\r\n distribute: function (callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: this.endpoint() + '/distribute',\r\n }).post().done((response) => {\r\n this.reset(response);\r\n if (typeof callback === 'function') {\r\n callback(true);\r\n }\r\n }).fail((res) => {\r\n let err = null;\r\n if (res.responseJSON && res.responseJSON.message) {\r\n err = res.responseJSON.message;\r\n }\r\n if (typeof callback === 'function') {\r\n callback(false, err);\r\n }\r\n });\r\n },\r\n isUserCurrentApprover: function (approvalMode, user) {\r\n if (!user) {\r\n if (approvalMode === PJQ.constants.submittals.approvalModes.SEQUENTIAL) {\r\n return this.get('isNextApprover') && !this.get('hasApproved');\r\n }\r\n\r\n return this.get('isApprover') && !this.get('hasApproved');\r\n }\r\n\r\n let result = false;\r\n if (approvalMode === PJQ.constants.submittals.approvalModes.SEQUENTIAL) {\r\n let foundNextApprover = false;\r\n _.each(this.get('approvers'), function (approver) {\r\n if (foundNextApprover || approver.hasApproved) {\r\n return;\r\n }\r\n\r\n if (approver.id === user.get('id')) {\r\n result = true;\r\n }\r\n foundNextApprover = true;\r\n })\r\n } else {\r\n result = null != _.findWhere(this.get('approvers'), {id: user.get('id'), hasApproved: false});\r\n }\r\n return result;\r\n },\r\n getRemainingApprovers: function () {\r\n return _.filter(this.get('approvers'), (approver) => {\r\n return !approver.hasApproved;\r\n })\r\n },\r\n isLastApprover: function (approvalMode, user) {\r\n if (!user) {\r\n if (approvalMode === PJQ.constants.submittals.approvalModes.SEQUENTIAL) {\r\n return _.size(this.get('approvers')) === 0 || this.get('isLastApprover');\r\n }\r\n\r\n return _.size(this.getRemainingApprovers()) <= 1;\r\n }\r\n\r\n return _.indexOf(this.get('approvers'), user.get('id')) === this.get('approvers').length - 1;\r\n },\r\n fetchNotifications: function (callback) {\r\n if (this.notifications == null) {\r\n this.notifications = new PJQ.collections.submittals.Notifications(null, {\r\n submittal: this\r\n })\r\n }\r\n\r\n this.notifications.fetch({\r\n success: _.bind(function () {\r\n callback(this.notifications);\r\n }, this)\r\n });\r\n },\r\n fetchEditHistory: function (callback) {\r\n if (this.editHistory == null) {\r\n this.editHistory = new PJQ.collections.submittals.EditHistory(null, {\r\n submittal: this\r\n })\r\n }\r\n\r\n this.editHistory.fetch({\r\n success: _.bind(function () {\r\n callback(this.editHistory);\r\n }, this)\r\n });\r\n },\r\n});\r\n\r\nPJQ.models.submittals.Attachment = PJQ.models.files.File.extend({\r\n idAttribute: 'attachmentId',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals',\r\n value: this.get('submittalId')\r\n },\r\n {\r\n endpoint: 'attachments',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.submittals.WorkflowTemplate = PJQ.models.BaseModel.extend({\r\n endpoint: function () {\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: 'submittals'\r\n },\r\n {\r\n endpoint: 'workflows',\r\n value: this.id\r\n }\r\n ]);\r\n },\r\n parse: function (model) {\r\n if (model == null) {\r\n model = {};\r\n }\r\n\r\n this.workflow = new PJQ.models.submittals.Workflow(model.workflow);\r\n return model;\r\n },\r\n beforeSave: function () {\r\n this.set({\r\n workflow: this.workflow.toJSON()\r\n });\r\n },\r\n});\r\n\r\nPJQ.models.submittals.Workflow = PJQ.models.BaseModel.extend({\r\n parse: function (model) {\r\n if (model == null) {\r\n model = {};\r\n }\r\n\r\n this.steps = new PJQ.collections.submittals.WorkflowSteps(model.steps);\r\n\r\n return model;\r\n },\r\n clone: function () {\r\n let cloned = PJQ.models.BaseModel.prototype.clone.call(this);\r\n cloned.set({\r\n submittalId: null,\r\n templateId: null\r\n });\r\n _.each(cloned.steps.models, (step) => {\r\n step.set({\r\n id: null,\r\n isActive: false\r\n })\r\n\r\n let newApprovers = _.map(step.approvers.models, (approver) => {\r\n return {\r\n stepId: approver.get('stepId'),\r\n person: approver.get('person'),\r\n personId: approver.get('personId'),\r\n isRequired: approver.get('isRequired'),\r\n }\r\n });\r\n step.approvers.reset(newApprovers);\r\n });\r\n return cloned;\r\n },\r\n beforeSave: function () {\r\n this.set('steps', this.steps.toJSON());\r\n },\r\n toJSON: function () {\r\n this.beforeSave();\r\n return PJQ.models.BaseModel.prototype.toJSON.call(this);\r\n },\r\n getCurrentStep: function () {\r\n return this.steps.findWhere({isActive: true});\r\n }\r\n});\r\n\r\nPJQ.models.submittals.WorkflowStep = PJQ.models.BaseModel.extend({\r\n parse: function (model) {\r\n model = _.defaults(model, {});\r\n\r\n this.approvers = new PJQ.collections.submittals.WorkflowApprovers(model.approvers);\r\n\r\n return model;\r\n },\r\n beforeSave: function () {\r\n this.set('approvers', this.approvers.toJSON());\r\n },\r\n toJSON: function () {\r\n this.beforeSave();\r\n return PJQ.models.BaseModel.prototype.toJSON.call(this);\r\n }\r\n});\r\n\r\nPJQ.models.submittals.WorkflowApprover = PJQ.models.BaseModel.extend({});\r\n\r\nPJQ.models.submittals.WorkflowResponse = PJQ.models.BaseModel.extend({\r\n parse: function (model) {\r\n model = _.defaults(model, {});\r\n\r\n this.attachments = new PJQ.collections.submittals.Attachments(model.attachments);\r\n\r\n return model;\r\n },\r\n beforeSave: function () {\r\n this.set({\r\n attachments: this.attachments.toJSON()\r\n });\r\n },\r\n toJSON: function () {\r\n this.beforeSave();\r\n return PJQ.models.BaseModel.prototype.toJSON.call(this);\r\n }\r\n});\r\n\r\nPJQ.models.submittals.Notification = PJQ.models.notifications.Notification.extend({\r\n notificationTypeNames: PJQ.constants.submittals.notificationTypeNames,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals',\r\n value: this.collection.options.submittal.id\r\n },\r\n {\r\n endpoint: 'notifications',\r\n value: this.id\r\n }\r\n ])\r\n }\r\n});\r\n\r\nPJQ.models.submittals.Comment = PJQ.models.BaseModel.extend({\r\n notifyName: 'Comment',\r\n idAttribute: 'commentId',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals',\r\n value: this.get('submittalId')\r\n },\r\n {\r\n endpoint: 'comments',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.submittals.EditHistoryItem = PJQ.models.BaseModel.extend({\r\n idAttribute: 'auditId'\r\n});\r\n\r\nPJQ.models.submittals.ItemType = PJQ.models.BaseModel.extend({\r\n idAttribute: 'itemTypeId',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'itemtypes',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.submittals.Settings = PJQ.models.BaseModel.extend({\r\n idAttribute: 'settingId',\r\n endpoint: function () {\r\n if (this.get('projectId') > 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: 'submittals'\r\n },\r\n {\r\n endpoint: 'settings'\r\n }\r\n ]);\r\n }\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'settings'\r\n }\r\n ]);\r\n },\r\n getApproveStatusName: function (suffix) {\r\n let statusName = this.get('approveNameOverride');\r\n if (_.size(statusName) === 0) {\r\n statusName = \"Approve\";\r\n }\r\n\r\n if (_.size(suffix) > 0) {\r\n // if suffix starts with \"e\", and status name ends with \"e\"\r\n // trim the preceding \"e\" from the suffix\r\n if (suffix[0].toLowerCase() === \"e\" && statusName[statusName.length - 1].toLowerCase() === \"e\") {\r\n suffix = suffix.substring(1);\r\n }\r\n\r\n statusName += suffix;\r\n }\r\n\r\n return statusName;\r\n }\r\n});\r\n\r\nPJQ.models.submittals.Status = PJQ.models.BaseModel.extend({\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'statuses',\r\n value: this.id\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.models.submittals.SubmittalUserSettings = PJQ.models.BaseModel.extend({\r\n endpoint: function () {\r\n let params = [];\r\n if (this.options.forCompany) {\r\n params.push({\r\n parameter: 'forCompany',\r\n value: true\r\n });\r\n }\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'settings'\r\n },\r\n {\r\n endpoint: 'user'\r\n }\r\n ], params);\r\n },\r\n getSettings: function (view) {\r\n return _.find(this.attributes.viewSettings, _.bind(function (setting) {\r\n return setting.view === view;\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.models.submittals.SubmittalCustomField = PJQ.models.customFields.CustomField.extend({\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'customFields',\r\n value: this.id\r\n }\r\n ]);\r\n },\r\n});\r\n\r\nPJQ.models.submittals.Template = PJQ.models.BaseModel.extend({\r\n idAttribute: 'templateId',\r\n notifyName: 'Template',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'templates',\r\n value: this.id\r\n }\r\n ], this.get('projectId') > 0 ? [\r\n {\r\n parameter: 'projectId',\r\n value: this.get('projectId')\r\n },\r\n {\r\n parameter: 'copyComments',\r\n value: this.get('copyComments')\r\n },\r\n {\r\n parameter: 'copySubmitter',\r\n value: this.get('copySubmitter')\r\n },\r\n {\r\n parameter: 'copyApprovers',\r\n value: this.get('copyApprovers')\r\n },\r\n {\r\n parameter: 'copyGroups',\r\n value: this.get('copyGroups')\r\n },\r\n {\r\n parameter: 'copyDistribution',\r\n value: this.get('copyDistribution')\r\n },\r\n {\r\n parameter: 'copyItemTypes',\r\n value: this.get('copyItemTypes')\r\n },\r\n {\r\n parameter: 'overwrite',\r\n value: this.get('overwrite')\r\n }\r\n ] : null);\r\n },\r\n parse: function (model) {\r\n if (!model)\r\n return model;\r\n\r\n if (model.project != null) {\r\n this.project = model.project;\r\n } else {\r\n this.user = PJQ.app.session.user;\r\n }\r\n\r\n this.itemTypes = new PJQ.collections.submittals.ItemTypes(model.itemTypes);\r\n\r\n this.groups = new PJQ.collections.groups.Groups(model.groups);\r\n\r\n if (model.createdBy != null) {\r\n this.createdBy = new PJQ.models.projectContacts.ProjectContact(model.createdBy);\r\n } else {\r\n this.createdBy = null;\r\n }\r\n\r\n if (model.ballInCourt != null) {\r\n this.ballInCourt = new PJQ.models.projectContacts.ProjectContact(model.ballInCourt);\r\n } else {\r\n this.ballInCourt = null;\r\n }\r\n\r\n if (model.submitter != null) {\r\n this.submitter = new PJQ.models.projectContacts.ProjectContact(model.submitter);\r\n } else {\r\n this.submitter = null;\r\n }\r\n\r\n this.approvers = new PJQ.collections.projectContacts.ProjectContacts(model.approvers);\r\n\r\n this.distributionList = new PJQ.collections.projectContacts.ProjectContacts(model.distributionList);\r\n\r\n this.comments = new PJQ.collections.submittals.Comments(model.comments);\r\n\r\n this.attachments = new PJQ.collections.submittals.Attachments(model.attachments);\r\n\r\n if (model.submittals)\r\n this.submittals = new PJQ.collections.submittals.Submittals(model.submittals);\r\n\r\n else\r\n this.submittals = new PJQ.collections.submittals.Submittals();\r\n\r\n return model;\r\n }\r\n});\r\n\r\nPJQ.collections.submittals = {};\r\nPJQ.collections.submittals.Submittals = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.Submittals,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.project.id\r\n },\r\n {\r\n endpoint: 'submittals'\r\n }\r\n ])\r\n }\r\n});\r\n\r\nPJQ.collections.submittals.WorkflowTemplates = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.WorkflowTemplate,\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: 'submittals'\r\n },\r\n {\r\n endpoint: 'workflows'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.submittals.WorkflowSteps = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.WorkflowStep\r\n});\r\n\r\nPJQ.collections.submittals.WorkflowApprovers = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.WorkflowApprover\r\n});\r\n\r\nPJQ.collections.submittals.Attachments = PJQ.collections.files.Files.extend({\r\n model: PJQ.models.submittals.Attachment,\r\n});\r\n\r\nPJQ.collections.submittals.Comments = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.Comment\r\n});\r\n\r\nPJQ.collections.submittals.EditHistory = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.EditHistoryItem,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals',\r\n value: this.options.submittal.id\r\n },\r\n {\r\n endpoint: 'edithistory'\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.submittals.ItemTypes = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.ItemType,\r\n endpoint: function () {\r\n if (this.options.project != null) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.project.id\r\n },\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'itemTypes'\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'itemTypes'\r\n }\r\n ]);\r\n }\r\n\r\n }\r\n});\r\n\r\nPJQ.collections.submittals.Statuses = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.Status,\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: 'submittals'\r\n },\r\n {\r\n endpoint: 'statuses'\r\n }\r\n ]);\r\n } else {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'statuses'\r\n }\r\n ]);\r\n }\r\n },\r\n copy: function (callback) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'statuses'\r\n },\r\n {\r\n endpoint: 'copy'\r\n }\r\n ])\r\n }).post().done(_.bind(function (response) {\r\n callback(response);\r\n }, this));\r\n },\r\n});\r\n\r\nPJQ.collections.submittals.Notifications = PJQ.collections.notifications.Notifications.extend({\r\n model: PJQ.models.submittals.Notification,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals',\r\n value: this.options.submittal.id\r\n },\r\n {\r\n endpoint: 'notifications'\r\n }\r\n ])\r\n }\r\n});\r\n\r\nPJQ.collections.submittals.SubmittalCustomFields = PJQ.collections.customFields.CustomFields.extend({\r\n model: PJQ.models.submittals.SubmittalCustomField,\r\n options: {\r\n masterUserId: null\r\n },\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.project ? this.options.project.id : null\r\n },\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'customFields'\r\n }\r\n ], [\r\n {\r\n parameter: 'masterUserId',\r\n value: this.options.masterUserId > 0 ? this.options.masterUserId : PJQ.app.session.get('masterUserId')\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.submittals.SubmittalCustomField = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.SubmittalCustomField,\r\n options: {\r\n masterUserId: null\r\n },\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: 'submittals'\r\n },\r\n {\r\n endpoint: 'customFields'\r\n }\r\n ]);\r\n }\r\n\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'customFields'\r\n }\r\n ],\r\n [\r\n {\r\n parameter: 'masterUserId',\r\n value: this.options.masterUserId > 0 ? this.options.masterUserId : PJQ.app.session.get('masterUserId')\r\n }\r\n ]);\r\n }\r\n});\r\n\r\nPJQ.collections.submittals.Templates = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.submittals.Template,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'templates'\r\n }\r\n ]);\r\n }\r\n});","PJQ.views.submittals.SubmittalsView = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'submittals-management'),\r\n initSubmittalId: null\r\n },\r\n events: {\r\n 'click .btn-delete-submittal': 'deleteClicked',\r\n 'click .btn-edit-submittal': 'editClicked',\r\n 'click .btn-add-submittal': 'addClicked',\r\n 'click .export-detailed': 'exportSubmittals',\r\n 'click .export-list': 'exportList',\r\n 'click .btn-submittal-settings': 'editSettings',\r\n 'click .btn-save-a-template': 'saveTemplate',\r\n 'click .btn-import-template': 'importTemplate'\r\n },\r\n beforeFirstRender: async function () {\r\n this.isFetched = false;\r\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\r\n\r\n this.options.userSettings = await PJQ.app.session.fetchSubmittalUserSettings();\r\n if (this.options.project) {\r\n this.options.settings = await this.options.project.fetchSubmittalSettings();\r\n this.options.itemTypes = await this.options.project.fetchSubmittalItemTypes();\r\n this.options.customFields = await this.options.project.fetchSubmittalCustomFields();\r\n this.options.statuses = await this.options.project.fetchSubmittalStatuses();\r\n } else {\r\n this.options.settings = await PJQ.app.session.fetchSubmittalSettings();\r\n this.options.itemTypes = await PJQ.app.session.fetchSubmittalItemTypes();\r\n this.options.customFields = await PJQ.app.session.fetchSubmittalCustomFields();\r\n this.options.statuses = await PJQ.app.session.fetchSubmittalStatuses();\r\n }\r\n\r\n if (this.collection == null && this.options.project != null) {\r\n this.collection = new PJQ.collections.submittals.Submittals(null, {\r\n project: this.options.project\r\n });\r\n await this.collection.fetch();\r\n }\r\n\r\n this.isFetched = true;\r\n this.render();\r\n },\r\n beforeRender: function () {\r\n this.options.canAdd = this.options.project ? this.options.project.hasPermission('submittals.canAdd') : PJQ.app.session.hasPermission('settings.canManageSubmittals');\r\n this.options.isAdmin = this.options.project ? this.options.project.hasPermission('submittals.isAdmin') : PJQ.app.session.hasPermission('settings.canManageSubmittals');\r\n },\r\n renderData: function () {\r\n return {\r\n project: this.options.project,\r\n statuses: this.options.statuses\r\n };\r\n },\r\n afterRender: function () {\r\n if (!this.isFetched)\r\n return;\r\n\r\n this.renderDataTable();\r\n\r\n if (this.options.initSubmittalId > 0) {\r\n let initSubmittal = this.collection.get(this.options.initSubmittalId);\r\n if (initSubmittal != null) {\r\n this.options.initSubmittalId = null;\r\n this.editSubmittal(initSubmittal);\r\n }\r\n }\r\n },\r\n renderDataTable: function () {\r\n let self = this;\r\n this.dataTable = new PJQ.views.dataTables.DataTable({\r\n el: this.$(\".submittals-table\"),\r\n data: this.collection.models,\r\n rowId: \"cid\",\r\n order: [[2, 'desc']],\r\n pageLength: this.options.userSettings.getSettings(PJQ.constants.submittals.view.SUBMITTALS).rowsPerPage,\r\n orderCookie: PJQ.constants.cookies.SUBMITTAL_ORDER_COOKIE,\r\n settings: this.options.userSettings.getSettings(PJQ.constants.submittals.view.SUBMITTALS),\r\n language: {\r\n zeroRecords: 'Click \"Add New Submittal\" to create a new Submittal'\r\n },\r\n subTemplates: {\r\n header: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'Data-Table-Header-submittals')\r\n },\r\n headerData: () => {\r\n return {\r\n canAdd: this.options.canAdd,\r\n project: this.options.project,\r\n statuses: this.options.statuses\r\n };\r\n },\r\n afterHeaderRender: (view, $header) => {\r\n let statuses = [],\r\n addedPartial = false;\r\n _.each(_.sortBy(this.options.statuses.models, (status) => {\r\n return status.get('sortOrder')\r\n }), (status) => {\r\n if (status.get('type') === PJQ.constants.submittals.statusTypes.APPROVED && !addedPartial) {\r\n statuses.push({\r\n id: '-1',\r\n name: 'Partially Approved',\r\n style: 'color: ' + PJQ.constants.colors.PURPLE\r\n });\r\n addedPartial = true;\r\n }\r\n statuses.push({\r\n id: status.get('id'),\r\n name: status.get('name'),\r\n style: 'color: ' + PJQ.constants.submittals.statusTypeColors[status.get('type')]\r\n });\r\n });\r\n new PJQ.inputs.Selectpicker({\r\n el: $header.find('.submittal-filter'),\r\n onChange: function (value) {\r\n view.setFilter('statusId', value);\r\n },\r\n choices: [\r\n {\r\n name: 'Status',\r\n choices: statuses\r\n },\r\n {\r\n name: '',\r\n choices: [\r\n {\r\n id: '0',\r\n name: 'As Noted'\r\n }\r\n ]\r\n }\r\n ],\r\n isIntChoices: true,\r\n isMultiple: true,\r\n noneSelectedText: 'No Filters'\r\n });\r\n },\r\n getFilterData: function (view, data) {\r\n let statusFilter = view.getFilter('statusId');\r\n if (_.size(statusFilter) === 0) {\r\n return data;\r\n }\r\n\r\n let showPartial = _.contains(statusFilter, -1),\r\n showAsNoted = _.contains(statusFilter, 0);\r\n\r\n // we only want the status filter to have actual statuses in it now\r\n statusFilter = _.filter(statusFilter, (statusId) => {\r\n return statusId > 0;\r\n });\r\n return _.filter(data, function (row) {\r\n let statusMatch = (statusFilter.length > 0 && _.contains(statusFilter, row.get('statusId'))) || (showPartial && row.isPartiallyApproved());\r\n return statusMatch && (!showAsNoted || row.get('asNotedCommentId') > 0);\r\n });\r\n },\r\n onRowDoubleClick: _.bind(function (row) {\r\n this.editSubmittal(row.data());\r\n }, this),\r\n contextMenuOptions: {\r\n actions: [\r\n {\r\n name: 'Edit',\r\n onClick: _.bind(function (row) {\r\n this.editSubmittal(row.data());\r\n }, this)\r\n },\r\n {\r\n name: 'Delete',\r\n isDanger: true,\r\n onClick: _.bind(function (row) {\r\n this.deleteSubmittal(row);\r\n }, this)\r\n\r\n }\r\n ]\r\n },\r\n columns: this.getColumns(false),\r\n colReorder: {\r\n fixedColumnsLeft: 0,\r\n fixedColumnsRight: 1,\r\n realtime: false\r\n },\r\n columnOrderChanged: _.bind(function () {\r\n if (this.options.userSettings != null) {\r\n this.options.userSettings.save();\r\n }\r\n }, this)\r\n });\r\n\r\n },\r\n getColumns: function (includeAllColumns = false) {\r\n let columns = [], includeColumns = [],\r\n viewSettings = this.options.userSettings.getSettings(PJQ.constants.submittals.view.SUBMITTALS);\r\n\r\n if (includeAllColumns) {\r\n includeColumns = [\"submittalNumber\", \"title\", \"itemTypes\", \"dueDate\", \"groupList\", \"submitter\", \"ballInCourt\", \"approverList\", \"distributionList\", \"status\"];\r\n\r\n if (_.size(this.options.customFields) > 0) {\r\n _.each(this.options.customFields.models, function (customField) {\r\n includeColumns.push('fieldValue' + customField.get('fieldNumber'));\r\n });\r\n }\r\n } else\r\n includeColumns = viewSettings.columns;\r\n\r\n _.each(includeColumns, _.bind(function (column) {\r\n if ((PJQ.app.session.project ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.HIDE_SUBMITTAL_ITEM_TYPE) : PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.HIDE_SUBMITTAL_ITEM_TYPE)) && column === 'itemTypes') {\r\n return;\r\n }\r\n switch (column) {\r\n case 'submittalNumber':\r\n columns.push({\r\n \"columnData\": \"submittalNumber\",\r\n \"title\": \"Number\",\r\n \"data\": {\r\n \"_\": \"attributes.submittalNumber\",\r\n \"sort\": _.bind(function (row) {\r\n let number = parseInt(row.attributes.submittalNumber);\r\n if (isNaN(number)) {\r\n return row.attributes.submittalNumber;\r\n } else {\r\n return number\r\n }\r\n }, this),\r\n \"display\": \"attributes.submittalNumber\"\r\n },\r\n 'type': 'natural-ci',\r\n 'visible': viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n case 'title':\r\n columns.push({\r\n \"columnData\": \"title\",\r\n \"title\": \"Title\",\r\n \"data\": \"attributes.title\",\r\n 'visible': viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n case 'itemTypes':\r\n columns.push({\r\n \"columnData\": \"itemTypes\",\r\n \"title\": \"Item Types\",\r\n \"data\": \"itemTypes\",\r\n \"render\": function (data, type, row) {\r\n if (_.size(row.itemTypes.models) > 0) {\r\n let itemTypeNames = [];\r\n _.each(row.itemTypes.models, function (itemType) {\r\n itemTypeNames.push(itemType.get('name'));\r\n });\r\n return itemTypeNames.join(\", \");\r\n }\r\n return '';\r\n },\r\n 'visible': viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n case 'dueDate':\r\n columns.push({\r\n \"columnData\": \"dueDate\",\r\n \"title\": \"Due Date\",\r\n \"data\": \"attributes.dueDate\",\r\n \"render\": (data, type, row) => {\r\n if (data != null) {\r\n let dueDate = new Date(data),\r\n dateString = PJQ.helpers.dateHelpers.getDateString(dueDate, PJQ.helpers.dateHelpers.dateFormats.DATE);\r\n if (row.isNewStatus(this.options.statuses) && PJQ.helpers.dateHelpers.getDateDaysDiff(dueDate, new Date()) < 0) {\r\n return '' + dateString + '';\r\n }\r\n return dateString;\r\n }\r\n return 'Not Set';\r\n },\r\n 'visible': viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n case 'groupList':\r\n columns.push({\r\n \"columnData\": \"groupList\",\r\n \"title\": \"Groups\",\r\n \"data\": \"groups\",\r\n \"render\": function (data, type, row) {\r\n if (_.size(row.groups.models) > 0) {\r\n let groupNames = [];\r\n _.each(row.groups.models, function (group) {\r\n groupNames.push(group.get('groupName'));\r\n });\r\n return groupNames.join(\", \");\r\n }\r\n return '';\r\n },\r\n 'visible': viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n case 'submitter':\r\n columns.push({\r\n \"columnData\": \"submitter\",\r\n \"title\": \"Submitter\",\r\n \"data\": \"submitter\",\r\n render: function (data, type, row) {\r\n let result = '';\r\n if (row.submitter != null) {\r\n return PJQ.helpers.contacts.getContactAnchor({contact: row.submitter});\r\n } else {\r\n result = 'Nobody';\r\n }\r\n return result;\r\n },\r\n 'visible': viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n case 'ballInCourt':\r\n columns.push({\r\n \"columnData\": \"ballInCourt\",\r\n \"title\": \"Ball In Court\",\r\n \"data\": \"ballInCourt\",\r\n render: (data, type, row) => {\r\n let result = '';\r\n if (row.ballInCourt != null && !row.isVoidStatus(this.options.statuses)) {\r\n return PJQ.helpers.contacts.getContactAnchor({contact: row.ballInCourt});\r\n } else if (!this.options.settings.get('enableWorkflow') && row.isSubmittedStatus(this.options.statuses) || row.isPartiallyApproved()) {\r\n result = this.options.settings.getApproveStatusName('ers');\r\n } else if (!row.get('isClosed') && this.options.settings.get('enableWorkflow') && row.isSubmittedStatus(this.options.statuses)) {\r\n result = this.options.settings.getApproveStatusName('ers');\r\n } else {\r\n result = 'Nobody';\r\n }\r\n return result;\r\n },\r\n 'visible': viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n case 'approverList':\r\n columns.push({\r\n columnData: 'approverList',\r\n title: \"Approver List\",\r\n render: function (data, type, row) {\r\n let result = [];\r\n if (_.size(row.get('approvers')) > 0) {\r\n _.each(row.get('approvers'), function (contact) {\r\n result.push(PJQ.helpers.contacts.getContactAnchor({contact: contact}));\r\n });\r\n } else {\r\n result.push('Nobody');\r\n }\r\n return result.join(', ');\r\n },\r\n visible: viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n case 'distributionList':\r\n columns.push({\r\n columnData: 'distributionList',\r\n title: \"Distribution List\",\r\n render: function (data, type, row) {\r\n let result = [];\r\n if (_.size(row.distributionList.models) > 0) {\r\n _.each(row.distributionList.models, function (contact) {\r\n result.push(PJQ.helpers.contacts.getContactAnchor({contact: contact}));\r\n });\r\n } else {\r\n result.push('Nobody');\r\n }\r\n return result.join(', ');\r\n },\r\n visible: viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n case 'status':\r\n columns.push({\r\n \"columnData\": \"status\",\r\n \"title\": \"Status\",\r\n \"data\": \"attributes.statusId\",\r\n \"render\": _.bind(function (data, type, row) {\r\n return '' + row.getStatusName(this.options.settings, this.options.statuses) + '';\r\n }, this),\r\n 'visible': viewSettings.columns.indexOf(column) !== -1\r\n });\r\n break;\r\n default:\r\n if (column.startsWith('fieldValue')) {\r\n _.each(this.options.customFields.models, function (customField) {\r\n if (column === 'fieldValue' + customField.get('fieldNumber')) {\r\n columns.push({\r\n \"columnData\": 'fieldValue' + customField.get('fieldNumber'),\r\n \"title\": customField.get('fieldName'),\r\n \"className\": [PJQ.constants.commitments.customFieldType.INTEGER, PJQ.constants.commitments.customFieldType.MONEY, PJQ.constants.commitments.customFieldType.PERCENT].indexOf(customField.get('fieldTypeId')) !== -1 ? \"text-align-right\" : \"\",\r\n 'visible': viewSettings.columns.indexOf(column) !== -1,\r\n \"render\": function (data, type, row) {\r\n let fieldValue = row.getCustomFieldValue(customField.get('id'));\r\n fieldValue = (fieldValue !== null) ? fieldValue : '';\r\n switch (customField.get('fieldType')) {\r\n case 'BOOL':\r\n if (fieldValue != null)\r\n fieldValue = fieldValue ? 'Yes' : 'No';\r\n break;\r\n case 'CHOICE':\r\n let choices = [];\r\n // convert single choice value into array so that the logic below can work for both types.\r\n if (typeof fieldValue === 'number')\r\n fieldValue = [fieldValue];\r\n\r\n _.each(customField.choices.models, _.bind(function (choice) {\r\n if (_.find(fieldValue, function (value) {\r\n return value === choice.get('id');\r\n }))\r\n choices.push(choice.get('choiceName'));\r\n }, this));\r\n\r\n fieldValue = choices.join((', '));\r\n break;\r\n case 'DATE':\r\n if (fieldValue) {\r\n if (type !== 'sort' && type !== 'type')\r\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n }\r\n if (fieldValue === undefined)\r\n fieldValue = '';\r\n\r\n break;\r\n case 'DATETIME':\r\n if (fieldValue) {\r\n if (type !== 'sort' && type !== 'type')\r\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, false);\r\n }\r\n if (fieldValue === undefined)\r\n fieldValue = '';\r\n\r\n break;\r\n case 'INT':\r\n if (type !== 'sort' && type !== 'type' && fieldValue) {\r\n fieldValue = parseInt(fieldValue).toLocaleString();\r\n }\r\n break;\r\n case 'MONEY':\r\n if (type === 'sort' || type === 'type') {\r\n if (fieldValue && fieldValue !== '$')\r\n fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true));\r\n else\r\n fieldValue = 0;\r\n } else {\r\n fieldValue = PJQ.helpers.formatHelpers.formatCurrency(parseInt(PJQ.helpers.formatHelpers.numbersOnly(fieldValue)));\r\n }\r\n break;\r\n case 'PERCENT':\r\n if (type === 'sort' || type === 'type') {\r\n if (!fieldValue)\r\n fieldValue = 0;\r\n } else {\r\n fieldValue = fieldValue ? PJQ.helpers.formatHelpers.formatCurrency(parseInt(PJQ.helpers.formatHelpers.numbersOnly(fieldValue)), 2, false) + '%' : '';\r\n }\r\n break;\r\n }\r\n\r\n return fieldValue;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n }, this));\r\n\r\n if (!includeAllColumns) {\r\n columns.push({\r\n \"data\": \"\",\r\n \"title\": \"\",\r\n \"orderable\": false,\r\n \"searchable\": false,\r\n \"width\": '80px',\r\n \"render\": _.bind(function () {\r\n let html = '
';\r\n if (this.options.isAdmin) {\r\n html += '';\r\n }\r\n html += '
';\r\n return html;\r\n }, this)\r\n });\r\n }\r\n\r\n return columns;\r\n },\r\n addClicked: function () {\r\n this.editSubmittal(null);\r\n },\r\n editClicked: function (e) {\r\n let target = $(e.currentTarget),\r\n row = this.dataTable.getRow(target.closest('tr')),\r\n submittal = row.data();\r\n this.editSubmittal(submittal);\r\n },\r\n editSubmittal: function (submittal) {\r\n new PJQ.views.submittals.EditSubmittalModal({\r\n model: submittal,\r\n templateId: this.model ? this.model.get('templateId') : null,\r\n project: this.options.project,\r\n onSave: (model, isNew) => {\r\n if (isNew) {\r\n this.collection.add(model);\r\n this.dataTable.addRow(model);\r\n }\r\n this.dataTable.refresh();\r\n },\r\n onClose: () => {\r\n this.dataTable.refresh();\r\n },\r\n onDelete: (submittal) => {\r\n let row = this.dataTable.getRow(submittal.cid);\r\n if (row != null) {\r\n this.dataTable.removeRow(row);\r\n }\r\n submittal.destroy();\r\n }\r\n }, this)\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.deleteSubmittal(row);\r\n },\r\n deleteSubmittal: function (row) {\r\n let submittal = row.data();\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Delete\",\r\n body: \"Are you sure you want to delete this Submittal?\",\r\n onDelete: _.bind(function () {\r\n submittal.destroy();\r\n this.dataTable.removeRow(row);\r\n }, this)\r\n });\r\n },\r\n editSettings: function () {\r\n new PJQ.views.submittals.SettingsModal({\r\n submittalsView: this,\r\n model: this.options.settings,\r\n userSettings: this.options.userSettings,\r\n project: this.options.project ? this.options.project : null,\r\n onSave: _.bind(function () {\r\n this.renderDataTable();\r\n }, this)\r\n });\r\n },\r\n saveTemplate: function () {\r\n new PJQ.views.submittals.SubmittalTemplateCreatorModal({\r\n collection: this.collection,\r\n project: this.options.project\r\n });\r\n },\r\n importTemplate: function () {\r\n new PJQ.views.submittals.ImportTemplateModal({\r\n project: this.options.project,\r\n onImport: _.bind(function (submittals) {\r\n this.collection = submittals;\r\n this.render();\r\n }, this)\r\n });\r\n },\r\n exportSubmittals: function () {\r\n new PJQ.ajax.Request({\r\n endpoint: this.options.project.endpoint() + '/submittals/export',\r\n data: {\r\n isApi2: true\r\n }\r\n }).post().done(_.bind(function (response) {\r\n PJQ.files.downloadFile(response.url, {\r\n isEndpoint: false\r\n });\r\n }, this)).fail(_.bind(function (xhr, err, result) {\r\n }, this));\r\n },\r\n exportList: function () {\r\n if (this.options.project == null) {\r\n return;\r\n }\r\n\r\n let orderCookie = PJQ.helpers.cookieHelpers.getCookie(PJQ.constants.cookies.SUBMITTAL_ORDER_COOKIE),\r\n order = orderCookie != null ? JSON.parse(orderCookie) : null,\r\n report = new PJQ.models.reports.NewReport({\r\n type: PJQ.constants.reports.reportTypes.SUBMITTAL.type,\r\n projectId: this.options.project ? this.options.project.id : null,\r\n options: {\r\n columns: this.options.userSettings.getSettings(PJQ.constants.submittals.view.SUBMITTALS).columns,\r\n columnOrder: order\r\n }\r\n });\r\n report.export({format: 'excel'}).then(() => {\r\n\r\n });\r\n },\r\n});\r\n\r\nPJQ.views.submittals.EditHistoryModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'edit-history-modal'),\r\n subTemplates: {\r\n history: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'edit-history'),\r\n },\r\n width: '50%',\r\n maxWidth: 700,\r\n onSave: _.noop\r\n },\r\n events: {},\r\n afterRender: function () {\r\n this.renderHistory()\r\n },\r\n renderHistory: function () {\r\n this.renderSubTemplate(false, this.options.subTemplates.history, this.$('.history-outer'), {\r\n history: this.options.history.models.reverse()\r\n });\r\n }\r\n});\r\n\r\nPJQ.views.submittals.FileEditorModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'modal-file-editor'),\r\n isNewVersion: false,\r\n isNoteEdit: false\r\n },\r\n events: {\r\n 'click .btn-save': 'save'\r\n },\r\n beforeRender: function () {\r\n this.renderData = {\r\n model: this.model,\r\n isNoteEdit: this.options.isNoteEdit,\r\n isNewVersion: this.options.isNewVersion\r\n };\r\n },\r\n afterRender: function () {\r\n new PJQ.Binder(this.$el, this.model, {\r\n watchElements: [\r\n 'textarea'\r\n ]\r\n });\r\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\r\n el: this.$('.submittal-file-uploader'),\r\n collection: this.collection,\r\n style: 'list',\r\n canUpload: (this.collection.models.length === 0 || !this.options.isNewVersion),\r\n canDelete: true,\r\n canDownload: true,\r\n isRemoveOnComplete: this.options.isNewVersion,\r\n previewImageDimension: 150,\r\n onSuccess: _.bind(function () {\r\n if (this.options.isNewVersion) {\r\n this.render();\r\n }\r\n }, this),\r\n onDelete: _.bind(function (attachment, callback) {\r\n if (attachment.id > 0) {\r\n attachment.set('isDeleted', true);\r\n } else {\r\n attachment.destroy();\r\n }\r\n this.model.isDirty = true;\r\n callback();\r\n }, this)\r\n });\r\n },\r\n save: function () {\r\n if (this.options.isNewVersion) {\r\n this.collection.add(this.model);\r\n }\r\n\r\n this.options.onSave(this.collection);\r\n this.removeModal();\r\n }\r\n});\r\n\r\nPJQ.views.submittals.StatusChangeCommentModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'modal-status-change-comment'),\r\n title: null\r\n },\r\n events: {\r\n 'click .btn-save': 'save'\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model,\r\n title: this.options.title\r\n }\r\n },\r\n afterRender: function () {\r\n new PJQ.Binder(this.$el, this.model, {\r\n watchElements: [\r\n 'textarea'\r\n ]\r\n });\r\n\r\n new PJQ.inputs.Datepicker({\r\n el: this.$('.input-due-date'),\r\n datepickerOptions: {\r\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\r\n defaultDate: this.model.get('dueDate') ? new Date(this.model.get('dueDate')) : null\r\n },\r\n onChange: _.bind(function (newDate) {\r\n this.model.set('dueDate', newDate);\r\n }, this)\r\n });\r\n },\r\n save: function () {\r\n let val = this.$('.item-status-change-comment').val().trim();\r\n if (_.size(val) === 0) {\r\n this.options.onSave(this.model, null);\r\n this.removeModal();\r\n } else {\r\n let comment = new PJQ.models.submittals.Comment({\r\n submittalId: this.model.id,\r\n comment: val,\r\n createdOn: new Date(),\r\n asNoted: true\r\n });\r\n this.model.comments.add(comment);\r\n this.options.onSave(this.model, comment);\r\n this.removeModal();\r\n }\r\n }\r\n});\r\n","PJQ.views.submittals.SubmittalTemplateCreatorModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'modal-create-template'),\r\n width: '30%'\r\n },\r\n events: {\r\n 'click .btn-save' : 'save'\r\n },\r\n beforeModalCreated: function () {\r\n this.model = new PJQ.models.submittals.Template({\r\n projectId: this.options.project.id\r\n });\r\n\r\n this.options.project.fetchSubmittalTemplates(_.bind(function (tmp) {\r\n this.templates = tmp;\r\n this.render();\r\n }, this));\r\n },\r\n renderData: function () {\r\n return {\r\n templates: this.templates,\r\n submittals: this.collection\r\n };\r\n },\r\n afterRender: function () {\r\n if (this.templates != null && this.templates.isFetched) {\r\n new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-submittal'),\r\n isMultiple: true,\r\n noneSelectedText: 'Select Submittal #',\r\n onChange: _.bind(function (value) {\r\n\r\n }, this)\r\n });\r\n\r\n new PJQ.inputs.AutocompleteInput({\r\n el: this.$('.input-template-name'),\r\n source: _.map(this.templates.models, function (template) {\r\n return template.get('name')\r\n })\r\n });\r\n }\r\n },\r\n save: function () {\r\n let $name = this.$('.input-template-name'),\r\n name = $name.val();\r\n if (_.size(name.trim()) === 0) {\r\n PJQ.helpers.inputHelpers.setInputError($name);\r\n return;\r\n }\r\n else {\r\n PJQ.helpers.inputHelpers.setInputError($name, true);\r\n }\r\n\r\n let existingTemplate = this.templates.findWhere({name: name}),\r\n fnSave = _.bind(function () {\r\n this.model.set({\r\n name: name,\r\n copyComments: this.$('.input-copy-comments').prop('checked'),\r\n copySubmitter: this.$('.input-copy-submitter').prop('checked'),\r\n copyApprovers: this.$('.input-copy-approvers').prop('checked'),\r\n copyGroups: this.$('.input-copy-trades').prop('checked'),\r\n copyDistribution: this.$('.input-copy-distribution').prop('checked'),\r\n copyItemTypes: this.$('.input-copy-item-types').prop('checked')\r\n });\r\n this.model.save(null, {\r\n success: _.bind(function () {\r\n this.removeModal();\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Submittal Template Created'\r\n });\r\n }, this)\r\n });\r\n }, this);\r\n if (existingTemplate != null) {\r\n new PJQ.views.modals.YesNo({\r\n header: \"Overwrite Template\",\r\n body: \"A template already exists with this name. Would you like to overwrite it?\",\r\n onYes: _.bind(function () {\r\n this.model.set('templateId', existingTemplate.id);\r\n fnSave();\r\n }, this)\r\n });\r\n }\r\n else {\r\n fnSave();\r\n }\r\n }\r\n});\r\n\r\nPJQ.views.submittals.ImportTemplateModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'modal-import-template'),\r\n maxWidth: 500,\r\n onImport: null\r\n },\r\n events: {\r\n 'click .btn-import': 'save'\r\n },\r\n beforeModalCreated: function () {\r\n this.options.project.fetchSubmittalTemplates(_.bind(function (tmp) {\r\n this.templates = tmp;\r\n this.render();\r\n }, this));\r\n },\r\n renderData: function () {\r\n return {\r\n templates: this.templates\r\n };\r\n },\r\n afterRender: function () {\r\n if (this.templates != null && this.templates.isFetched) {\r\n this.templatePicker = new PJQ.inputs.Selectpicker({\r\n el: this.$('.select-template'),\r\n onChange: _.bind(function (value) {\r\n this.selectedTemplate = this.templates.get(value);\r\n }, this),\r\n isIntChoices: true,\r\n noneSelectedText: 'Select Template'\r\n });\r\n\r\n }\r\n },\r\n save: function () {\r\n let isValid = true;\r\n if (this.selectedTemplate == null) {\r\n this.templatePicker.showError();\r\n isValid = false;\r\n }\r\n else {\r\n this.templatePicker.hideError();\r\n }\r\n\r\n\r\n if (!isValid) {\r\n return;\r\n }\r\n\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.project.id\r\n },\r\n {\r\n endpoint: 'submittals'\r\n },\r\n {\r\n endpoint: 'import',\r\n value: this.selectedTemplate.id\r\n }\r\n ], [\r\n {\r\n parameter: 'importComments',\r\n value: this.$('.input-import-comments').prop('checked')\r\n },\r\n {\r\n parameter: 'importSubmitter',\r\n value: this.$('.input-import-submitter').prop('checked')\r\n },\r\n {\r\n parameter: 'importApprovers',\r\n value: this.$('.input-import-approvers').prop('checked')\r\n },\r\n {\r\n parameter: 'importGroups',\r\n value: this.$('.input-import-trades').prop('checked')\r\n },\r\n {\r\n parameter: 'importDistribution',\r\n value: this.$('.input-import-distribution').prop('checked')\r\n },\r\n {\r\n parameter: 'importItemTypes',\r\n value: this.$('.input-import-item-types').prop('checked')\r\n },\r\n ])\r\n }).put().done(_.bind(function (response) {\r\n if (typeof this.options.onImport === 'function') {\r\n let result = new PJQ.collections.submittals.Submittals(response);\r\n result.isFetched = true;\r\n this.options.onImport(result);\r\n }\r\n this.removeModal();\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Submittal Template Imported'\r\n });\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.views.submittals.EditTemplateModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'Modal-Edit-Template'),\r\n maxWidth: '90%',\r\n fitHeight: true,\r\n onClose: null\r\n },\r\n events: {\r\n 'click .btn-close': 'close',\r\n 'click .btn-delete': 'deleteTemplate'\r\n },\r\n beforeModalCreated: function () {\r\n this.listenTo(this.model, 'fetch', this.render);\r\n this.model.fetch();\r\n },\r\n renderData: function () {\r\n return {\r\n model: this.model\r\n };\r\n },\r\n afterRender: function () {\r\n if (this.model.isFetched) {\r\n\r\n new PJQ.inputs.TextEditorInput({\r\n el: this.$('.edit-template-name'),\r\n label: 'Name',\r\n value: this.model.get('name'),\r\n onSave: _.bind(function (value) {\r\n this.model.patch({\r\n name: value\r\n });\r\n }, this)\r\n });\r\n\r\n new PJQ.views.submittals.SubmittalsView({\r\n el: this.$('.manage-template'),\r\n model: this.model,\r\n collection: this.model.submittals\r\n });\r\n }\r\n },\r\n close: function () {\r\n if (typeof this.options.onClose === 'function') {\r\n this.options.onClose(this.model);\r\n }\r\n },\r\n deleteTemplate: function () {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"Are you sure you want to delete this template?\",\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\n\r\nPJQ.views.submittals.TemplateManagement = PJQ.views.templates.TemplateManagement.extend({\r\n beforeFirstRender: function () {\r\n this.collection = new PJQ.collections.submittals.Templates();\r\n this.listenTo(this.collection, 'fetch', this.render);\r\n this.collection.fetch();\r\n },\r\n addTemplate: function () {\r\n new PJQ.views.templates.NewTemplateModal({\r\n model: new PJQ.models.submittals.Template(),\r\n onSave: _.bind(function (template) {\r\n this.collection.add(template);\r\n this.editTemplate(template);\r\n }, this)\r\n });\r\n },\r\n editTemplate: function (template) {\r\n new PJQ.views.submittals.EditTemplateModal({\r\n model: template,\r\n onClose: _.bind(function () {\r\n this.dataTable.refresh();\r\n }, this),\r\n onDelete: _.bind(function (template) {\r\n if (template.id > 0) {\r\n let row = this.dataTable.getRow(template.cid);\r\n this.collection.remove(template);\r\n template.destroy();\r\n this.dataTable.removeRow(row);\r\n }\r\n }, this)\r\n });\r\n }\r\n});\r\n","PJQ.views.submittals.WorkflowView = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'submittal-workflow'),\n onChange: null,\n canEdit: true,\n canChangeBallInCourt: false,\n canRespond: true,\n onRespond: null,\n onSetBallInCourt: null\n },\n events: {\n 'click .btn-edit-workflow': 'editWorkflow',\n 'change .cb-required': 'approverRequiredChanged',\n 'change .cb-reject-to-manager': 'returnOnRejectChanged',\n 'keyup .input-days-to-respond': 'daysToRespondChanged',\n 'click .btn-add-approver': 'addApprover',\n 'click .btn-delete-approver': 'deleteApprover',\n 'click .btn-add-step': 'addStep',\n 'click .btn-apply-template': 'applyTemplateClicked',\n 'click .btn-delete-step': 'deleteStepClicked',\n 'click .btn-respond': 'respondToSubmittal',\n 'click .btn-update-response': 'respondToSubmittal',\n 'click .btn-set-bic': 'setBallInCourt',\n 'click .dl-approver-attachment': 'downloadApproverAttachment'\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 this.options.userSettings = await PJQ.app.session.fetchSubmittalUserSettings();\n if (this.options.project != null) {\n this.options.settings = await this.options.project.fetchSubmittalSettings();\n this.options.statuses = await this.options.project.fetchSubmittalStatuses();\n } else {\n this.options.settings = await PJQ.app.session.fetchSubmittalSettings();\n this.options.statuses = await PJQ.app.session.fetchSubmittalStatuses();\n }\n\n this.isFetched = true;\n this.render();\n },\n beforeRender: async function () {\n this.options.canAdd = this.options.project ? this.options.project.hasPermission('submittals.canAdd') : PJQ.app.session.hasPermission('settings.canManageSubmittals');\n this.options.isAdmin = this.options.project ? this.options.project.hasPermission('submittals.isAdmin') : PJQ.app.session.hasPermission('settings.canManageSubmittals');\n\n if (this.isFetched && this.options.isEdit && this.workflowTemplates == null) {\n this.isFetched = false;\n this.workflowTemplates = await this.options.project.fetchSubmittalWorkflowTemplates();\n this.isFetched = true;\n this.render();\n }\n },\n renderData: function () {\n return {\n canEdit: this.options.canEdit,\n isEdit: this.options.isEdit === true,\n project: this.options.project,\n submittal: this.options.submittal,\n workflow: this.model,\n workflowTemplates: this.workflowTemplates,\n isFetched: this.isFetched\n };\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n this.renderStepsTable();\n },\n setEdit: function (edit) {\n this.options.isEdit = edit;\n this.render();\n },\n editWorkflow: function () {\n this.setEdit(true);\n },\n approverRequiredChanged: function (e) {\n let $target = $(e.currentTarget),\n $badge = $target.closest('.badge-approver'),\n cid = $badge.data('cid'),\n stepCid = $badge.data('stepCid');\n\n let step = this.model.steps.get(stepCid);\n if (step == null) {\n return;\n }\n\n let approver = step.approvers.get(cid);\n if (approver == null) {\n return;\n }\n\n approver.set('isRequired', $target.prop('checked'));\n this.onChange(step);\n },\n returnOnRejectChanged: function (e) {\n let $target = $(e.currentTarget),\n $tr = $target.closest('tr'),\n row = this.stepsDatatable.getRow($tr),\n step = row.data();\n if (step == null) {\n return;\n }\n\n step.set('returnOnReject', $target.prop('checked'));\n this.onChange(step);\n },\n daysToRespondChanged: function (e) {\n let $target = $(e.currentTarget),\n $tr = $target.closest('tr'),\n row = this.stepsDatatable.getRow($tr),\n step = row.data();\n if (step == null) {\n return;\n }\n\n step.set('daysToRespond', parseInt($target.val()));\n this.onChange(step);\n },\n respondToSubmittal: function (e) {\n let $tr = $(e.currentTarget).closest('tr'),\n row = this.stepsDatatable.getRow($tr),\n approver = row.data();\n new PJQ.views.submittals.WorkflowResponseModal({\n project: this.options.project,\n submittal: this.options.submittal,\n approver: approver,\n onSave: () => {\n if (typeof this.options.onRespond === 'function') {\n this.options.onRespond(approver);\n }\n }\n });\n },\n setBallInCourt: function (e) {\n let $btn = $(e.currentTarget),\n stepCid = $btn.data('stepCid'),\n step = this.model.steps.get(stepCid);\n if (step == null) {\n return;\n }\n\n new PJQ.views.modals.YesNo({\n header: \"Set Ball In Court?\",\n body: \"Are you sure you want to set this workflow step to the ball in court? This will reset all responses on the selected step.\",\n onYes: () => {\n this.options.submittal.setBallInCourt(step.id, (success) => {\n if (success) {\n this.renderStepsTable();\n\n if (typeof this.options.onSetBallInCourt === 'function') {\n this.options.onSetBallInCourt(step);\n }\n\n PJQ.notifications.notify.successNotify({\n message: 'Ball in court changed successfully'\n });\n }\n });\n }\n });\n },\n downloadApproverAttachment: function (e) {\n let cid = $(e.currentTarget).data('cid'),\n attachment = this.options.submittal.attachments.get(cid);\n if (attachment == null) {\n return;\n }\n\n attachment.download();\n },\n addApprover: function (e) {\n let $tr = $(e.currentTarget).closest('tr'),\n row = this.stepsDatatable.getRow($tr),\n step = row.data(),\n approvers = _.map(_.filter(step.approvers.models, (approver) => {\n return !approver.get('delete');\n }), (approver) => {\n return {\n id: approver.get('person').id\n };\n });\n this.selector = new PJQ.views.contacts.SelectContactsModal({\n contacts: this.options.contacts,\n hideContacts: approvers,\n context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\n isSingleChoice: false,\n // saveButtonText: this.options.saveButtonText,\n onSave: (newContacts) => {\n _.each(newContacts, (contact) => {\n step.approvers.add(new PJQ.models.submittals.WorkflowApprover({\n personId: contact.id,\n isRequired: true,\n person: contact.toJSON()\n }));\n });\n this.renderStepsTable();\n this.onChange(step);\n }\n });\n },\n deleteApprover: function (e) {\n let $badge = $(e.currentTarget).closest('.badge-approver'),\n cid = $badge.data('cid'),\n stepCid = $badge.data('stepCid');\n\n let step = this.model.steps.get(stepCid);\n if (step == null) {\n return;\n }\n\n let approver = step.approvers.get(cid);\n if (approver == null) {\n return;\n }\n\n if (approver.id > 0) {\n approver.set('delete', true);\n } else {\n step.approvers.remove(approver);\n }\n\n this.renderStepsTable();\n this.onChange(step);\n },\n applyTemplateClicked: function (e) {\n let $btn = $(e.currentTarget),\n templateId = $btn.data('id'),\n template = this.workflowTemplates.get(templateId);\n\n if (_.find(this.model.steps.models, (step) => {\n return !step.get('delete')\n })) {\n new PJQ.views.modals.YesNo({\n header: \"Apply Workflow Template?\",\n body: \"Are you sure you want to apply this workflow template? All current steps will be removed.\",\n onYes: () => {\n this.applyTemplate(template);\n }\n });\n } else {\n this.applyTemplate(template);\n }\n },\n applyTemplate: function (template) {\n let fnApplyTemplate = () => {\n let cWorkflow = template.workflow.clone();\n _.each(this.model.steps.models, (step) => {\n if (step.id > 0) {\n step.set('delete', true);\n } else {\n step.destroy();\n }\n });\n this.model.steps.add(cWorkflow.steps.models);\n this.renderStepsTable();\n\n this.onChange();\n };\n if (template.isFetched) {\n fnApplyTemplate();\n } else {\n template.fetch({\n success: () => {\n fnApplyTemplate();\n },\n error: () => {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to fetch template'\n });\n }\n })\n }\n },\n addStep: function () {\n let step = new PJQ.models.submittals.WorkflowStep({\n number: _.filter(this.model.steps.models, (step) => {\n return !step.get('delete')\n }).length + 1,\n approvers: []\n });\n this.model.steps.add(step);\n this.renderStepsTable();\n this.onChange(step);\n },\n deleteStepClicked: function (e) {\n let $tr = $(e.currentTarget).closest('tr'),\n row = this.stepsDatatable.getRow($tr),\n step = row.data();\n this.deleteStep(step);\n },\n deleteStep: function (step) {\n if (step == null) {\n return;\n }\n\n if (step.id > 0) {\n step.set('delete', true);\n } else {\n this.model.steps.remove(step);\n }\n\n _.each(_.sortBy(_.filter(this.model.steps.models, (step) => {\n return !step.get('delete')\n }), (step) => {\n return step.id;\n }), (step, index) => {\n step.set('number', index + 1);\n });\n\n this.renderStepsTable();\n this.onChange(step);\n },\n onChange: function (step) {\n this.model.isDirty = true;\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(step);\n }\n },\n renderStepsTable: function () {\n let columns,\n data,\n approveLabel = this.options.settings.getApproveStatusName('ers');\n if (this.options.isEdit) {\n data = _.filter(this.model.steps.models, (step) => {\n return !step.get('delete');\n });\n columns = [\n {\n \"data\": \"attributes.number\",\n \"title\": \"\",\n \"width\": \"20px\",\n \"orderable\": false,\n \"searchable\": false\n },\n {\n \"title\": _.size(approveLabel) > 0 ? approveLabel : \"Approvers\",\n \"data\": \"approvers\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let result = '',\n approvers = row.approvers ? _.filter(row.approvers.models, (approver) => {\n return !approver.get('delete')\n }) : [];\n if (_.size(approvers) === 0) {\n result = 'Nobody';\n } else {\n let fnMakeCheckmark = (isRequired) => {\n return '
';\n };\n _.each(approvers, (approver) => {\n result += '
' + fnMakeCheckmark(approver.get('isRequired')) + approver.get('person').contactName + '
'\n });\n }\n\n return '
' + result + '
';\n }, this)\n },\n {\n \"data\": \"attributes.returnOnReject\",\n \"title\": 'Reject to Manager',\n \"width\": \"100px\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n return '
';\n }, this)\n },\n {\n \"data\": \"attributes.daysToRespond\",\n \"title\": 'Days to Respond',\n \"width\": \"100px\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n return '';\n }, this)\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"40px\",\n \"render\": _.bind(function (data, type, row) {\n let html = '
'\n html += ''\n return html + '
';\n }, this)\n }];\n } else {\n data = [];\n _.each(this.model.steps.models, (step) => {\n let approvers = step.approvers.models;\n _.each(approvers, (approver) => {\n approver.step = step;\n });\n data.push(...approvers);\n });\n columns = [\n {\n \"data\": \"step.attributes.number\",\n \"columnData\": \"step.attributes.number\",\n \"title\": \"\",\n \"width\": \"20px\",\n \"orderable\": false,\n \"searchable\": false,\n \"visible\": false,\n group: (row) => {\n return row.step.cid;\n }\n },\n {\n \"data\": \"attributes.id\",\n \"title\": \"\",\n \"width\": \"20px\",\n \"orderable\": false,\n \"searchable\": false,\n render: (data, type, row) => {\n // show icon if this is the current user\n return '';\n }\n },\n {\n \"data\": \"attributes.person\",\n \"title\": \"Name\",\n \"width\": \"200px\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": (data, type, row) => {\n let personAnchor = PJQ.helpers.contacts.getContactAnchor({contact: row.get('person')}),\n req = '';\n if (row.get('isRequired'))\n req = '';\n return '
' + req + '
' + row.get('person').companyName + '
' + personAnchor + '
';\n }\n },\n {\n \"data\": \"attributes.ballInCourtOn\",\n \"title\": 'Sent',\n \"render\": (data, type, row) => {\n if (data == null) {\n return '';\n }\n\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n },\n {\n \"data\": \"attributes.dueOn\",\n \"title\": 'Due',\n \"width\": '90px',\n \"render\": (data, type, row) => {\n if (data == null) {\n return '';\n }\n\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n },\n {\n \"data\": \"attributes.responseOn\",\n \"title\": \"Responded\",\n \"width\": \"100px\",\n \"render\": (data, type, row) => {\n if (data == null) {\n return '';\n }\n\n return PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n },\n {\n \"data\": \"attributes.statusId\",\n \"title\": \"Response\",\n \"width\": \"120px\",\n \"render\": (data, type, row) => {\n if (data > 0) {\n let status = this.options.statuses.get(data);\n if (status == null) {\n return '';\n }\n\n let sColor = PJQ.constants.submittals.statusTypeColors[status.get('color')];\n return '' + status.get('name') + '';\n } else if (!this.options.canRespond || !row.step.get('isActive') || !row.get('isMe')) {\n return '';\n }\n return '
';\n }\n },\n {\n \"data\": \"attributes.responseText\",\n \"title\": \"Comments\",\n \"orderable\": false,\n \"render\": (data, type, row) => {\n return row.get('responseText') ?? '';\n }\n },\n {\n \"data\": \"attachments\",\n \"title\": \"Attachments\",\n \"orderable\": false,\n \"render\": (data, type, row) => {\n if (this.options.submittal == null || this.options.submittal.attachments == null) {\n return '';\n }\n\n let approverAttachments = [];\n _.each(this.options.submittal.attachments.models, (attachment) => {\n if (attachment.get('approverId') === row.id) {\n approverAttachments.push({\n cid: attachment.cid,\n name: attachment.get('name'),\n newest: _.size(attachment.versions?.models) === 0\n });\n }\n\n if (attachment.versions != null && attachment.versions.models.length > 0) {\n let newestVer = _.max(attachment.versions.models, (ver) => {\n return ver.get('version');\n }).get('version');\n _.each(attachment.versions.models, (ver) => {\n if (ver.get('approverId') !== row.id) {\n return;\n }\n\n approverAttachments.push({\n cid: ver.cid,\n name: ver.get('name'),\n newest: newestVer === ver.get('version')\n });\n })\n }\n });\n if (approverAttachments.length === 0) {\n return '';\n }\n\n let result = '';\n _.each(approverAttachments, (attachment) => {\n result += '' + attachment.name + '
';\n });\n return '
' + result + '
';\n }\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"40px\",\n \"render\": (data, type, row) => {\n if (!this.options.canRespond || !row.step.get('isActive') || (!this.options.isAdmin && (!row.get('isMe') || row.get('statusId') == null))) {\n return '';\n }\n\n return `
\n \n
\n Update Response\n
\n
`;\n }\n }];\n }\n\n this.stepsDatatable = new PJQ.views.dataTables.DataTable({\n el: this.$('.dt-steps'),\n data: data,\n isHideSearch: true,\n groupBy: this.options.isEdit ? null : 'step.attributes.number',\n language: {\n emptyTable: 'No Steps have been created yet',\n zeroRecords: 'No Steps have been created yet'\n },\n isStriped: false,\n paging: false,\n order: [[0, \"asc\"]],\n columns: columns,\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>',\n contextMenuOptions: {\n actions: [\n {\n name: 'Delete',\n isDanger: true,\n onClick: (row) => {\n this.deleteStep(row.data());\n },\n isShown: () => {\n return this.options.isEdit;\n },\n }\n ]\n },\n disableGroupToggle: true,\n getGroupHeader: (group) => {\n let step = this.model.steps.get(group),\n bicBtn = '';\n if (!step.get('isActive') && this.options.canChangeBallInCourt) {\n bicBtn = '';\n }\n\n let activeBadge = '';\n if (step.get('isActive') && this.options.canRespond) {\n activeBadge = 'Active';\n }\n\n return '
#' + step.get('number') + '
' + activeBadge + bicBtn + '
';\n },\n onRowDoubleClick: () => {\n\n },\n });\n }\n});\n\nPJQ.views.submittals.WorkflowResponseModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'modal-workflow-response'),\n maxWidth: 650,\n },\n events: {\n 'keyup .input-comment': 'commentChanged',\n 'click .btn-back': 'previousStep',\n 'click .btn-next': 'nextStep',\n 'click .btn-save': 'save',\n 'click .btn-cancel': 'cancel'\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n this.step = 1;\n\n this.options.statuses = await this.options.project.fetchSubmittalStatuses();\n\n if (this.model == null) {\n this.model = new PJQ.models.submittals.WorkflowResponse({\n submittalId: this.options.submittal.id\n });\n }\n this.isFetched = true;\n this.render();\n },\n renderData: function () {\n return {\n model: this.model,\n approver: this.options.approver,\n statuses: this.options.statuses,\n submittal: this.options.submittal,\n step: this.step\n }\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n new PJQ.StepIndicator(this.$('.steps-outer'), {\n steps: [{\n name: '',\n // name: 'Upload Attachments'\n }, {\n name: '',\n // name: 'Respond'\n }, {\n name: '',\n // name: 'Review & Submit'\n }],\n activeStep: this.step - 1\n });\n\n switch (this.step) {\n case 1:\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.step-uploader'),\n collection: this.model.attachments,\n includeProjectAttachments: true,\n versionByName: true,\n getParentAttachment: (fileModel) => {\n return _.find(this.options.submittal.attachments.models, (file) => {\n return file.get('name') === fileModel.get('name') && !file.get('delete')\n && (file.get('parentAttachmentId') == null || file.get('parentAttachmentId') === file.id);\n });\n },\n onSuccess: _.bind(function () {\n\n }, this),\n onDelete: _.bind(function (attachment, callback) {\n\n }, this)\n });\n break;\n case 2:\n this.statusPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-status'),\n noneSelectedText: 'Select Status',\n isIntChoices: true,\n defaultValue: this.model.get('statusId'),\n choices: _.map(_.filter(this.options.statuses.models, (status) => {\n return status.get('type') === PJQ.constants.submittals.statusTypes.APPROVED || status.get('type') === PJQ.constants.submittals.statusTypes.REJECTED;\n }), (status) => {\n return {\n id: status.id,\n name: status.get('name')\n };\n }),\n onChange: _.bind(function (value) {\n this.model.set('statusId', value);\n }, this)\n });\n break;\n case 3:\n break;\n }\n },\n commentChanged: function (e) {\n this.model.set({\n responseText: this.$('.input-comment').val()\n });\n },\n previousStep: function () {\n this.step--;\n this.render();\n },\n nextStep: function () {\n switch (this.step) {\n case 1:\n break;\n case 2:\n if (this.model.get('statusId') == null) {\n this.statusPicker.showError();\n return;\n }\n break;\n case 3:\n break;\n }\n\n this.step++;\n this.render();\n },\n save: function () {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.options.submittal.respond(this.model, this.options.approver?.get('personId'), (success) => {\n if (!success) {\n loader.remove();\n return;\n }\n\n this.options.onSave(this.model);\n this.removeModal();\n\n PJQ.notifications.notify.successNotify({\n message: 'Response submitted successfully'\n });\n });\n },\n cancel: function () {\n new PJQ.views.modals.YesNo({\n header: \"Cancel Response?\",\n body: \"Are you sure you want to cancel this response? All changes will be lost.\",\n onYes: () => {\n this.removeModal();\n }\n });\n }\n});\n\nPJQ.views.submittals.EditWorkflowTemplateModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.SUBMITTALS, 'modal-edit-workflow-template'),\n maxWidth: 650,\n },\n events: {\n 'click .btn-save': 'save',\n 'click .btn-cancel': 'cancel',\n 'click .btn-delete': 'deleteTemplate'\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n\n if (this.model != null) {\n await this.model.fetch();\n }\n\n this.isFetched = true;\n this.render();\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 if (this.model.isNew()) {\n this.$('.input-template-name').focus();\n }\n\n this.binder = new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input',\n 'textarea'\n ]\n });\n\n this.workflowView = new PJQ.views.submittals.WorkflowView({\n el: this.$('.workflow-outer'),\n model: this.model.workflow,\n project: this.options.project,\n isEdit: true,\n canEdit: true,\n onChange: () => {\n this.model.isDirty = true;\n }\n });\n },\n validate: function () {\n let $name = this.$('.input-template-name');\n PJQ.helpers.inputHelpers.setInputError($name, true);\n if (this.model.get('name') == null || this.model.get('name').trim() === '') {\n PJQ.helpers.inputHelpers.setInputError($name, false);\n return false;\n }\n\n return true;\n },\n save: function () {\n if (!this.validate()) {\n return;\n }\n\n this.model.save(null, {\n success: () => {\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n this.removeModal();\n\n PJQ.notifications.notify.successNotify({\n message: 'Template saved successfully'\n });\n },\n error: () => {\n PJQ.notifications.notify.errorNotify({\n message: 'An error occurred while saving the template'\n });\n }\n });\n },\n cancel: 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 this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n },\n deleteTemplate: function () {\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Submittal Workflow Template?\",\n body: \"Are you sure you want to delete this workflow template? This cannot be undone.\",\n onDelete: () => {\n this.model.destroy({\n success: () => {\n if (typeof this.options.onSave === 'function') {\n this.options.onDelete();\n }\n this.removeModal();\n },\n error: () => {\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to delete workflow template'\n });\n }\n });\n }\n });\n }\n});"]}