{"version":3,"sources":["1initializers.js","punchlistmodels.js","punchlistviews.js","settingsviews.js","templateviews.js"],"names":["PJQ","collections","punchlists","models","views","modules","punchList","routes","route","name","callback","projectId","projectWall","initProjectNavigator","parseInt","punchListItemId","app","addRoutes","PunchlistItem","BaseModel","extend","notifyName","idAttribute","endpoint","arr","this","get","value","id","isNew","helpers","urlHelpers","generateEndpoint","afterInit","set","silent","on","_","bind","assignedTo","projectContacts","ProjectContact","constants","statuses","NEW","NOT_RESOLVED","ballInCourt","parse","model","groups","Groups","createdBy","size","comments","PunchlistItemComments","attachments","PunchlistItemAttachments","beforeAttachments","afterAttachments","customFieldValues","getDeepLink","toString","getStatusColor","statusColors","ASSIGNED","getStatusName","statusNames","WORK_COMPLETED","workCompletedOverride","session","project","preferences","getPref","preferenceTypes","PUNCH_LIST_WORK_COMPLETED_STATUS_OVERRIDE","getPriorityColor","priorities","LOW","priorityColors","getPriorityName","priorityNames","beforeSave","toJSON","getChangedModels","fetchNotifications","notifications","Notifications","punchlistItem","fetch","success","PunchlistItemComment","EditHistoryItem","createdOnDisplay","dateHelpers","getDateString","Date","createdOn","dateFormats","DATE_TIME","createdByDisplay","companyName","contactName","oldValueDisplay","oldValue","newValueDisplay","newValue","fieldType","DATE","PunchlistItemAttachment","files","File","PunchlistCustomField","customFields","CustomField","Notification","notificationTypeNames","collection","options","Settings","ProjectContactSettings","each","setting","matchProjectContact","findWhere","attributes","isSilent","filter","projectContact","hasChanged","PunchListUserSettings","params","forCompany","push","parameter","getSettings","view","find","viewSettings","ProjectContactSetting","Template","user","assignee","submitter","submittals","Comments","Attachments","punchlistItems","PunchlistItems","items","BaseCollection","EditHistoryItems","Files","PunchlistCustomFields","masterUserId","Templates","PunchlistView","BaseView","defaults","template","templating","PUNCHLISTS","events","click .btn-punchlist-settings","click .export-detailed","click .export-list","click .btn-add-punchlist-item","click .btn-edit-punchlist-item","click .btn-delete-punchlist-item","click .btn-save-a-template","click .btn-import-template","beforeFirstRender","isAdmin","hasPermission","isFetched","userSettings","fnFetch","fnRender","punchListItems","render","fetchPunchListCustomFields","hasPref","ENABLE_PROJECT_LOCATIONS","fetchLocations","locations","renderData","afterRender","renderDataTable","item","editPunchlistItem","self","punchlistDataTable","dataTables","DataTable","el","$","rowId","data","language","emptyTable","zeroRecords","subTemplates","header","pageLength","rowsPerPage","orderCookie","cookies","PUNCHLIST_ORDER_COOKIE","settings","headerData","afterHeaderRender","$header","inputs","Selectpicker","onChange","setFilter","isGrouped","isIntChoices","isMultiple","noneSelectedText","locationFilterPicker","ProjectLocationPicker","getFilterData","result","locationFilter","getFilter","row","contains","primaryFilter","statusFilter","status","priorityFilter","priority","hasAssigned","rowStatus","order","deferRender","onRowDoubleClick","contextMenuOptions","actions","onClick","isDanger","isShown","deletePunchlistItem","columns","getColumns","colReorder","fixedColumnsLeft","fixedColumnsRight","realtime","columnOrderChanged","save","includeAllColumns","arguments","length","undefined","includeColumns","customField","column","columnData","title","type","contacts","getContactAnchor","contact","visible","indexOf","width","sort","numStr","number","isNaN","display","group","join","location","getFullName","searchable","itemDueDate","dateString","RESOLVED","getDateDaysDiff","startsWith","className","commitments","customFieldType","INTEGER","MONEY","PERCENT","fieldValue","getCustomFieldValue","fieldTypes","TEXT","isURL","choices","choice","toLocaleString","parseFloat","formatHelpers","numbersOnly","formatCurrency","orderable","html","addClicked","newItem","templateId","editClicked","e","getRow","currentTarget","parents","fnRenderEditor","PunchlistItemEditorModal","onSave","addRow","add","refresh","onClose","restore","onDelete","cid","removeRow","destroy","deleteClicked","modals","DeleteCancel","body","exportList","filters","cookieHelpers","getCookie","JSON","reports","NewReport","reportTypes","PUNCH_LIST","columnOrder","export","format","then","exportDetailedList","orderBy","orderAscending","filterData","getFilteredRowData","map","loader","Loader","loadingText","ajax","Request","itemOrder","post","done","response","handleDownload","remove","fail","xhr","err","viewPunchListSettings","PunchListSettingsModal","punchlistsView","saveTemplate","PunchlistTemplateCreatorModal","importTemplate","ImportTemplateModal","onImport","BaseModal","contactBadge","GLOBAL","maxWidth","isShowCloseButton","noop","click .add-comment","click .item-cancel","click .edit-history","click .btn-notification-history","click .btn-export","click .item-status-not-resolved","click .item-status-work-completed","click .item-status-resolved","click .punchlist-save","click .punchlist-close","click .punchlist-delete","click .delete-comment","beforeModalCreated","_beforeModalCreated","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","changedAnnotations","drawings","Annotations","sent","stop","apply","beforeRender","canEdit","canUpload","isAssignee","_this","isSaving","Binder","$el","watchElements","Datepicker","datepickerOptions","datePicker","defaultDate","newDate","currentDueDate","defaultValue","AutocompleteInput","source","renderBallInCourt","renderCustomFields","ContactsSelectInput","context","contexts","PROJECTCONTACTS","selectedContact","isSingleChoice","isReadOnly","renderStatus","groupListInput","GroupsSelectInput","isShowAddButton","addButton","groupLevels","GROUP_LEVELS","groupUserId","selectedGroups","onAfterSave","reset","isDirty","fileUploader","FileUploaderGrid","contextId","canAddAnnotations","onAnnotationChange","annotation","merge","mergeAnnotations","includeProjectAttachments","previewImageDimension","canDelete","attachment","beforeUploader","offsetTopText","afterUploader","renderComments","css","$ballInCourt","Alert","text","renderSubTemplate","canView","customFieldsForm","CustomFieldsForm","fieldValues","isEdit","exportPDF","addComment","val","trim","comment","punchlistItemId","commentText","deleteComment","commentId","card","closest","isShowCancelButton","okButtonText","onOk","i","deletedOn","hide","markNotResolved","markWorkCompleted","workCompleteOverride","markResolved","validate","isValid","inputHelpers","setInputError","empty","window","scrollTo","viewEditHistory","EditHistoryModal","editHistory","viewNotificationHistory","NotificationHistory","_this2","isUploading","notify","saveAll","removeModal","close","SaveDontSave","onDontSave","minWidth","dataTable","dom","click .history-close","change .select-column","click .settings-save","click .btn-delete-punch-lists","afterModalCreated","fetchProjectContacts","fetchPunchListSettings","onAdd","updateProjectContactsSetting","rowsPerPageSelectPicker","isHideSearch","deleteItems","deleteAllPunchLists","columnSelected","sender","prop","objectHelpers","refinedType","existingSetting","newSetting","getValue","put","error","click .btn-save","fetchPunchlistTemplates","tmp","templates","$name","existingTemplate","fnSave","copyComments","copyAssignee","copyGroups","successNotify","message","YesNo","onYes","click .btn-import","templatePicker","selectedTemplate","showError","hideError","EditTemplateModal","fitHeight","click .btn-close","click .btn-delete","listenTo","TextEditorInput","label","patch","deleteTemplate","TemplateManagement","addTemplate","NewTemplateModal","editTemplate"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.collections.punchlists = {};\r\n\r\nPJQ.models.punchlists = {};\r\n\r\nPJQ.views.punchlists = {};\r\n\r\n//Routes\r\nPJQ.modules.punchList = {\r\n\troutes: [\r\n\t\t{\r\n\t\t\troute: 'projects/:projectId/punchlists',\r\n\t\t\tname: 'punchList',\r\n\t\t\tcallback: function (projectId) {\r\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"punchlists\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\troute: 'projects/:projectId/punchlists/:punchListItemId',\r\n\t\t\tname: 'punchListItem',\r\n\t\t\tcallback: function (projectId, punchListItemId) {\r\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"punchlists\", {\r\n\t\t\t\t\tpunchListItemId: parseInt(punchListItemId)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t]\r\n};\r\n\r\nPJQ.app.addRoutes(PJQ.modules.punchList.routes);","// Models\r\nPJQ.models.punchlists.PunchlistItem = PJQ.models.BaseModel.extend({\r\n notifyName: 'Punch List Item',\r\n idAttribute: \"punchlistItemId\",\r\n endpoint: function () {\r\n let arr;\r\n if (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: 'punchlists',\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: 'punchlists'\r\n },\r\n {\r\n endpoint: 'templates',\r\n value: this.get('templateId')\r\n },\r\n {\r\n endpoint: 'item'\r\n }\r\n ];\r\n } else {\r\n arr = [\r\n {\r\n endpoint: 'punchlists',\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 this.on('change:assignedTo', _.bind(function () {\r\n let assignedTo = this.get('assignedTo');\r\n if (assignedTo instanceof PJQ.models.projectContacts.ProjectContact) {\r\n this.assignedTo = this.get('assignedTo');\r\n } else if (assignedTo != null) {\r\n this.assignedTo = new PJQ.models.projectContacts.ProjectContact(this.get('assignedTo'));\r\n } else {\r\n this.assignedTo = null;\r\n }\r\n\r\n if (this.get('status') === PJQ.constants.punchlists.statuses.NEW || PJQ.constants.punchlists.statuses.NOT_RESOLVED) {\r\n this.ballInCourt = this.assignedTo;\r\n this.set('ballInCourt', this.ballInCourt);\r\n }\r\n }, this));\r\n },\r\n parse: function (model) {\r\n if (!model)\r\n return model;\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.assignedTo) {\r\n this.assignedTo = new PJQ.models.projectContacts.ProjectContact(model.assignedTo);\r\n } else {\r\n this.assignedTo = null;\r\n }\r\n\r\n // if (model.workCompletedBy) {\r\n // this.workCompletedBy = new PJQ.models.projectContacts.ProjectContact(model.workCompletedBy);\r\n // }\r\n // else{\r\n // this.workCompletedBy = null;\r\n // }\r\n //\r\n // if (model.resolvedBy) {\r\n // this.resolvedBy = new PJQ.models.projectContacts.ProjectContact(model.resolvedBy);\r\n // }\r\n // else{\r\n // this.resolvedBy = null;\r\n // }\r\n\r\n if (_.size(model.comments) > 0) {\r\n this.comments = new PJQ.collections.punchlists.PunchlistItemComments(model.comments);\r\n } else {\r\n this.comments = new PJQ.collections.punchlists.PunchlistItemComments();\r\n }\r\n\r\n if (_.size(model.attachments) > 0) {\r\n this.attachments = new PJQ.collections.punchlists.PunchlistItemAttachments(model.attachments);\r\n } else {\r\n this.attachments = new PJQ.collections.punchlists.PunchlistItemAttachments();\r\n }\r\n\r\n if (_.size(model.beforeAttachments) > 0) {\r\n this.beforeAttachments = new PJQ.collections.punchlists.PunchlistItemAttachments(model.beforeAttachments);\r\n } else {\r\n this.beforeAttachments = new PJQ.collections.punchlists.PunchlistItemAttachments();\r\n }\r\n\r\n if (_.size(model.afterAttachments) > 0) {\r\n this.afterAttachments = new PJQ.collections.punchlists.PunchlistItemAttachments(model.afterAttachments);\r\n } else {\r\n this.afterAttachments = new PJQ.collections.punchlists.PunchlistItemAttachments();\r\n }\r\n\r\n if (model.customFieldValues == null) {\r\n model.customFieldValues = [];\r\n }\r\n\r\n return model;\r\n },\r\n getDeepLink: function () {\r\n let projectId = this.get('projectId');\r\n if (!(this.id > 0) || !(projectId > 0)) {\r\n return null;\r\n }\r\n return '#projects/' + projectId.toString() + '/punchlists/' + this.id.toString();\r\n },\r\n getStatusColor: function () {\r\n if (this.get('status') == null) {\r\n this.set('status', PJQ.constants.punchlists.statuses.NEW);\r\n }\r\n\r\n if (this.assignedTo != null && this.get('status') === PJQ.constants.punchlists.statuses.NEW) {\r\n return PJQ.constants.punchlists.statusColors[PJQ.constants.punchlists.statuses.ASSIGNED];\r\n }\r\n return PJQ.constants.punchlists.statusColors[this.get('status')];\r\n },\r\n getStatusName: function () {\r\n if (this.get('status') == null) {\r\n this.set('status', PJQ.constants.punchlists.statuses.NEW);\r\n }\r\n\r\n if (this.assignedTo != null && this.get('status') === PJQ.constants.punchlists.statuses.NEW) {\r\n return PJQ.constants.punchlists.statusNames[PJQ.constants.punchlists.statuses.ASSIGNED];\r\n } else if (this.get('status') === PJQ.constants.punchlists.statuses.WORK_COMPLETED) {\r\n let workCompletedOverride = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PUNCH_LIST_WORK_COMPLETED_STATUS_OVERRIDE);\r\n if (workCompletedOverride != null) {\r\n return workCompletedOverride;\r\n }\r\n }\r\n return PJQ.constants.punchlists.statusNames[this.get('status')];\r\n },\r\n getPriorityColor: function () {\r\n if (this.get('priority') == null) {\r\n this.set('priority', PJQ.constants.punchlists.priorities.LOW);\r\n }\r\n return PJQ.constants.punchlists.priorityColors[this.get('priority')];\r\n },\r\n getPriorityName: function () {\r\n if (this.get('priority') == null) {\r\n this.set('priority', PJQ.constants.punchlists.priorities.LOW);\r\n }\r\n return PJQ.constants.punchlists.priorityNames[this.get('priority')];\r\n },\r\n beforeSave: function () {\r\n this.set('groups', this.groups.toJSON());\r\n this.set('assignedTo', this.assignedTo);\r\n this.set('attachments', this.attachments.getChangedModels());\r\n this.set('beforeAttachments', this.beforeAttachments.getChangedModels())\r\n this.set('afterAttachments', this.afterAttachments.getChangedModels())\r\n if (this.isNew()) {\r\n this.set('comments', this.comments.getChangedModels());\r\n }\r\n },\r\n fetchNotifications: function (callback) {\r\n if (this.notifications == null) {\r\n this.notifications = new PJQ.collections.punchlists.Notifications(null, {\r\n punchlistItem: 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});\r\n\r\nPJQ.models.punchlists.PunchlistItemComment = PJQ.models.BaseModel.extend({\r\n idAttribute: \"commentId\",\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'punchlists',\r\n value: this.get('punchlistItemId')\r\n },\r\n {\r\n endpoint: 'comments',\r\n value: this.get('commentId')\r\n }\r\n ])\r\n },\r\n parse: function (model) {\r\n if (!model) {\r\n return model;\r\n }\r\n\r\n if (model.createdBy != null) {\r\n this.createdBy = new PJQ.models.projectContacts.ProjectContact(model.createdBy);\r\n }\r\n\r\n return model;\r\n }\r\n});\r\n\r\nPJQ.models.punchlists.EditHistoryItem = PJQ.models.BaseModel.extend({\r\n parse: function (model) {\r\n if (!model)\r\n return model;\r\n\r\n this.createdOnDisplay = PJQ.helpers.dateHelpers.getDateString(new Date(model.createdOn), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true);\r\n\r\n this.createdByDisplay = '';\r\n\r\n if (model.createdBy && model.createdBy.companyName)\r\n this.createdByDisplay = model.createdBy.contactName + ' (' + model.createdBy.companyName + ')';\r\n\r\n this.oldValueDisplay = model.oldValue;\r\n this.newValueDisplay = model.newValue;\r\n\r\n if (model.fieldType === 'DATE') {\r\n if (model.oldValue)\r\n this.oldValueDisplay = PJQ.helpers.dateHelpers.getDateString(new Date(model.oldValue), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n if (model.newValue)\r\n this.newValueDisplay = PJQ.helpers.dateHelpers.getDateString(new Date(model.newValue), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\r\n } else if (model.fieldType === 'DATETIME') {\r\n if (model.oldValue)\r\n this.oldValueDisplay = PJQ.helpers.dateHelpers.getDateString(new Date(model.oldValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true);\r\n if (model.newValue)\r\n this.newValueDisplay = PJQ.helpers.dateHelpers.getDateString(new Date(model.newValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true);\r\n }\r\n\r\n return model;\r\n }\r\n});\r\n\r\nPJQ.models.punchlists.PunchlistItemAttachment = 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: 'punchlists',\r\n value: this.get('punchlistItemId')\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.punchlists.PunchlistCustomField = PJQ.models.customFields.CustomField.extend({\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'punchlists'\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.punchlists.Notification = PJQ.models.notifications.Notification.extend({\r\n notificationTypeNames: PJQ.constants.punchlists.notificationTypeNames,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'punchlists',\r\n value: this.collection.options.punchlistItem.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.punchlists.Settings = PJQ.models.BaseModel.extend({\r\n idAttribute: 'settingId',\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.get('project').id\r\n },\r\n {\r\n endpoint: 'punchlists'\r\n },\r\n {\r\n endpoint: 'settings'\r\n }\r\n ])\r\n },\r\n parse: function (model) {\r\n if (!model)\r\n return model;\r\n\r\n this.projectContacts = new PJQ.collections.punchlists.ProjectContactSettings(model.projectContacts);\r\n _.each(this.projectContacts.models, _.bind(function (setting) {\r\n let matchProjectContact = PJQ.app.session.project.projectContacts.findWhere({id: setting.get('id')});\r\n if (matchProjectContact != null) {\r\n setting.set(matchProjectContact.attributes, {\r\n isSilent: true\r\n });\r\n }\r\n }, this));\r\n\r\n return model;\r\n },\r\n beforeSave: function () {\r\n this.set('projectContacts', this.projectContacts.filter(function (projectContact) {\r\n return projectContact.hasChanged();\r\n }));\r\n }\r\n});\r\n\r\nPJQ.models.punchlists.PunchListUserSettings = 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: 'punchlists'\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\n\r\nPJQ.models.punchlists.ProjectContactSetting = PJQ.models.BaseModel.extend({});\r\n\r\nPJQ.models.punchlists.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: 'punchlists'\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: 'copyAssignee',\r\n value: this.get('copyAssignee')\r\n },\r\n {\r\n parameter: 'copyGroups',\r\n value: this.get('copyGroups')\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.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.assignee != null) {\r\n this.assignee = new PJQ.models.projectContacts.ProjectContact(model.assignee);\r\n } else {\r\n this.submitter = null;\r\n }\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.punchlistItems)\r\n this.punchlistItems = new PJQ.collections.punchlists.PunchlistItems(model.punchlistItems);\r\n else if (model.items)\r\n this.punchlistItems = new PJQ.collections.punchlists.PunchlistItems(model.items);\r\n else\r\n this.punchlistItems = new PJQ.collections.punchlists.PunchlistItems();\r\n\r\n return model;\r\n }\r\n});\r\n\r\n\r\n// Collections\r\nPJQ.collections.punchlists.PunchlistItems = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.punchlists.PunchlistItem,\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: 'punchlists'\r\n }\r\n ])\r\n }\r\n});\r\n\r\nPJQ.collections.punchlists.Notifications = PJQ.collections.notifications.Notifications.extend({\r\n model: PJQ.models.punchlists.Notification,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'punchlists',\r\n value: this.options.punchlistItem.id\r\n },\r\n {\r\n endpoint: 'notifications'\r\n }\r\n ])\r\n }\r\n});\r\n\r\nPJQ.collections.punchlists.EditHistoryItems = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.punchlists.EditHistoryItem\r\n});\r\n\r\nPJQ.collections.punchlists.PunchlistItemComments = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.punchlists.PunchlistItemComment\r\n});\r\n\r\nPJQ.collections.punchlists.PunchlistItemAttachments = PJQ.collections.files.Files.extend({\r\n model: PJQ.models.punchlists.PunchlistItemAttachment\r\n});\r\n\r\nPJQ.collections.punchlists.ProjectContactSettings = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.punchlists.ProjectContactSetting\r\n});\r\n\r\nPJQ.collections.punchlists.PunchlistCustomFields = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.punchlists.PunchlistCustomField,\r\n options: {\r\n masterUserId: null\r\n },\r\n endpoint: function () {\r\n let projectId = null;\r\n if (this.options.project != null) {\r\n projectId = this.options.project.id\r\n } else if (this.options.projectId > 0) {\r\n projectId = this.options.projectId;\r\n }\r\n\r\n if (projectId > 0) {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: projectId\r\n },\r\n {\r\n endpoint: 'punchlists'\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: 'punchlists'\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.punchlists.Templates = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.punchlists.Template,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'punchlists'\r\n },\r\n {\r\n endpoint: 'templates'\r\n }\r\n ]);\r\n }\r\n});\r\n","PJQ.views.punchlists.PunchlistView = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PUNCHLISTS, 'Punchlist-Management'),\n punchListItemId: null\n },\n events: {\n 'click .btn-punchlist-settings': 'viewPunchListSettings',\n 'click .export-detailed': 'exportDetailedList',\n 'click .export-list': 'exportList',\n 'click .btn-add-punchlist-item': 'addClicked',\n 'click .btn-edit-punchlist-item': 'editClicked',\n 'click .btn-delete-punchlist-item': 'deleteClicked',\n 'click .btn-save-a-template': 'saveTemplate',\n 'click .btn-import-template': 'importTemplate'\n },\n beforeFirstRender: function () {\n this.options.isAdmin = true;\n if (PJQ.app.session.project != null) {\n this.options.project = PJQ.app.session.project;\n this.options.isAdmin = (PJQ.app.session.user != null && this.options.project.get('masterUserId') === PJQ.app.session.user.get('masterUserId')) && this.options.project.hasPermission('punchList.isAdmin');\n }\n\n this.isFetched = false;\n this.preferences = this.options.project ? this.options.project.preferences : PJQ.app.session.preferences;\n this.options.userSettings = new PJQ.models.punchlists.PunchListUserSettings();\n let fnFetch = _.bind(function () {\n this.options.userSettings.fetch({\n success: _.bind(function () {\n let fnRender = _.bind(function (customFields) {\n this.options.customFields = customFields;\n if (this.collection == null && this.options.project != null) {\n let punchListItems = new PJQ.collections.punchlists.PunchlistItems(null, {\n project: this.options.project\n });\n punchListItems.fetch({\n success: _.bind(function () {\n this.collection = punchListItems;\n this.isFetched = true;\n this.render();\n }, this)\n });\n return false;\n } else {\n this.isFetched = true;\n this.render();\n }\n }, this);\n if (this.options.project != null) {\n this.options.project.fetchPunchListCustomFields(_.bind(function (customFields) {\n fnRender(customFields);\n }, this));\n } else {\n PJQ.app.session.fetchPunchListCustomFields(null, _.bind(function (customFields) {\n fnRender(customFields);\n }, this));\n }\n }, this)\n });\n }, this)\n\n if (this.options.project != null && this.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_LOCATIONS)) {\n this.options.project.fetchLocations(_.bind(function (locations) {\n this.locations = locations;\n fnFetch();\n }, this));\n } else {\n fnFetch();\n }\n },\n renderData: function () {\n return {\n project: this.options.project\n };\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n this.renderDataTable();\n\n //If there was a passed in item to be shown (for a route), show it now\n if (this.options.punchListItemId > 0) {\n let item = this.collection.get(this.options.punchListItemId);\n this.options.punchListItemId = null;\n if (item != null) {\n this.editPunchlistItem(item);\n }\n }\n },\n renderDataTable() {\n let self = this,\n userSettings = this.options.userSettings.getSettings(PJQ.constants.punchlists.view.PUNCHLISTS);\n this.punchlistDataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.punch-list-items'),\n rowId: \"cid\",\n data: this.collection.models,\n language: {\n emptyTable: 'Click \"Add Item\" to create a Punch List Item',\n zeroRecords: \"No items matched the search criteria\"\n },\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.PUNCHLISTS, 'Data-Table-Header-Punch-List')\n },\n pageLength: userSettings != null ? userSettings.rowsPerPage : 50,\n orderCookie: PJQ.constants.cookies.PUNCHLIST_ORDER_COOKIE,\n settings: this.options.userSettings.getSettings(PJQ.constants.punchlists.view.PUNCHLISTS),\n headerData: function () {\n return {\n project: self.options.project,\n preferences: self.preferences\n };\n },\n afterHeaderRender: _.bind(function (view, $header) {\n new PJQ.inputs.Selectpicker({\n el: $header.find('.punch-list-filter'),\n onChange: function (value) {\n view.setFilter('primary', value);\n },\n isGrouped: true,\n isIntChoices: true,\n isMultiple: true,\n noneSelectedText: 'No Filters'\n });\n\n if (this.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_LOCATIONS)) {\n this.locationFilterPicker = new PJQ.inputs.ProjectLocationPicker({\n el: this.$('.filter-location'),\n project: this.options.project,\n isMultiple: true,\n onChange: _.bind(function (value) {\n view.setFilter('location', value);\n }, this)\n });\n }\n }, this),\n getFilterData: function (view, data) {\n let result = data,\n locationFilter = view.getFilter('location');\n if (_.size(locationFilter) > 0) {\n result = _.filter(data, function (row) {\n return _.contains(locationFilter, row.get('locationId'));\n }, this);\n }\n\n let primaryFilter = view.getFilter('primary');\n if (_.size(primaryFilter) === 0) {\n return result;\n }\n\n let statusFilter = primaryFilter.status,\n priorityFilter = primaryFilter.priority,\n hasAssigned = _.contains(statusFilter, PJQ.constants.punchlists.statuses.ASSIGNED);\n return _.filter(result, function (row) {\n let rowStatus = row.get('status');\n return (_.size(priorityFilter) === 0 || _.contains(priorityFilter, row.get('priority')))\n && (_.size(statusFilter) === 0 || (hasAssigned && rowStatus === PJQ.constants.punchlists.statuses.NEW && row.assignedTo != null) || _.contains(statusFilter, rowStatus));\n });\n },\n order: [[0, \"asc\"]],\n deferRender: true,\n onRowDoubleClick: _.bind(function (row) {\n this.editPunchlistItem(row.data());\n }, this),\n contextMenuOptions: {\n actions: [\n {\n name: 'Edit',\n onClick: _.bind(function (row) {\n this.editPunchlistItem(row.data());\n }, this)\n },\n {\n name: 'Delete',\n isDanger: true,\n isShown: _.bind(function () {\n return this.options.isAdmin;\n }, this),\n onClick: _.bind(function (row) {\n this.deletePunchlistItem(row);\n }, this)\n }\n ]\n },\n columns: this.getColumns(false),\n colReorder: {\n fixedColumnsLeft: 0,\n fixedColumnsRight: 1,\n realtime: false\n },\n columnOrderChanged: _.bind(function () {\n if (this.options.userSettings != null) {\n this.options.userSettings.save();\n }\n }, this)\n });\n },\n getColumns(includeAllColumns = false) {\n let columns = [], includeColumns = [],\n viewSettings = this.options.userSettings.getSettings(PJQ.constants.punchlists.view.PUNCHLISTS);\n\n if (includeAllColumns || viewSettings == null) {\n includeColumns = [\"createdBy\", \"status\", \"priority\", \"itemNumber\", \"title\", \"assignedTo\", \"ballInCourt\", \"groupList\", \"category\", \"location\", \"dueDate\"];\n\n if (_.size(this.options.customFields) > 0) {\n _.each(this.options.customFields.models, function (customField) {\n includeColumns.push('fieldValue' + customField.get('fieldNumber'));\n });\n }\n } else\n includeColumns = viewSettings.columns;\n\n _.each(includeColumns, _.bind(function (column) {\n switch (column) {\n case \"createdBy\":\n columns.push({\n columnData: 'createdBy',\n title: \"Created By\",\n render: function (data, type, row) {\n return PJQ.helpers.contacts.getContactAnchor({contact: row.createdBy});\n },\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : false\n });\n break;\n case \"status\":\n columns.push({\n columnData: \"status\",\n data: \"attributes.status\",\n title: \"Status\",\n width: \"80px\",\n render: function (data, type, row) {\n return '' + row.getStatusName() + '';\n },\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : true\n });\n break;\n case \"priority\":\n columns.push({\n columnData: \"priority\",\n data: \"attributes.priority\",\n title: \"Priority\",\n width: \"40px\",\n render: function (data, type, row) {\n return '' + row.getPriorityName() + '';\n },\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : true\n });\n break;\n case \"itemNumber\":\n columns.push({\n columnData: \"itemNumber\",\n data: {\n \"_\": \"attributes.itemNumber\",\n \"sort\": _.bind(function (row) {\n let numStr = row.get('itemNumber');\n if (_.size(numStr) > 0) {\n let number = parseInt(numStr);\n if (isNaN(number)) {\n return numStr;\n }\n return number\n }\n return 0;\n }, this),\n \"display\": \"attributes.itemNumber\"\n },\n title: \"Item #\",\n width: \"60px\",\n type: \"natural-ci\",\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : true\n });\n break;\n case \"title\":\n columns.push({\n columnData: \"title\",\n data: \"attributes.title\",\n title: \"Title\",\n width: \"20%\",\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : true\n });\n break;\n case \"assignedTo\":\n columns.push({\n columnData: \"assignedTo\",\n data: \"attributes.assignedTo\",\n title: \"Assigned To\",\n render: function (data, type, row) {\n let result = 'Nobody';\n if (row.assignedTo) {\n result = PJQ.helpers.contacts.getContactAnchor({contact: row.assignedTo});\n }\n return result;\n },\n width: \"20%\",\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : true\n });\n break;\n case \"ballInCourt\":\n columns.push({\n columnData: \"ballInCourt\",\n title: \"Ball In Court\",\n render: function (data, type, row) {\n let result = 'Nobody';\n\n if ((row.get('status') === PJQ.constants.punchlists.statuses.NEW || row.get('status') === PJQ.constants.punchlists.statuses.NOT_RESOLVED) && row.assignedTo != null) {\n result = PJQ.helpers.contacts.getContactAnchor({contact: row.assignedTo});\n } else if (row.get('status') === PJQ.constants.punchlists.statuses.WORK_COMPLETED) {\n result = 'Project Managers';\n }\n\n return result;\n },\n width: \"20%\",\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : false\n });\n break;\n case 'groupList':\n columns.push({\n columnData: 'groupList',\n title: \"Trades\",\n render: function (data, type, row) {\n let result = [];\n if (_.size(row.groups.models) > 0) {\n _.each(row.groups.models, function (group) {\n result.push(group.get('groupName'));\n });\n } else {\n result.push('None');\n }\n return result.join(', ');\n },\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : false\n });\n break;\n case 'category':\n columns.push({\n columnData: 'category',\n data: \"attributes.category\",\n title: \"Category\",\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : false\n });\n break;\n case 'location':\n columns.push({\n columnData: 'location',\n data: \"attributes.location\",\n title: \"Location\",\n render: _.bind(function (data, type, row) {\n if (this.locations != null && this.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_LOCATIONS)) {\n let location = this.locations.get(row.get('locationId'));\n return location ? this.locations.getFullName(location) : '';\n }\n return data;\n }, this),\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : false\n });\n break;\n case \"dueDate\":\n columns.push({\n columnData: \"dueDate\",\n \"data\": \"attributes.dueDate\",\n \"title\": \"Due\",\n \"searchable\": false,\n \"width\": \"80px\",\n \"render\": function (data, type, row) {\n if (data != null) {\n let itemDueDate = new Date(data),\n dateString = PJQ.helpers.dateHelpers.getDateString(itemDueDate, PJQ.helpers.dateHelpers.dateFormats.DATE);\n if (row.get('status') !== PJQ.constants.punchlists.statuses.RESOLVED && PJQ.helpers.dateHelpers.getDateDaysDiff(itemDueDate, new Date()) < 0) {\n return '' + dateString + '';\n }\n return dateString;\n }\n return 'Not Set';\n },\n visible: viewSettings != null ? viewSettings.columns.indexOf(column) !== -1 : true\n });\n break;\n default:\n if (column.startsWith('fieldValue')) {\n _.each(this.options.customFields.models, function (customField) {\n if (column === 'fieldValue' + customField.get('fieldNumber')) {\n columns.push({\n \"columnData\": 'fieldValue' + customField.get('fieldNumber'),\n \"title\": customField.get('fieldName'),\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\" : \"\",\n 'visible': viewSettings.columns.indexOf(column) !== -1,\n \"render\": function (data, type, row) {\n let fieldValue = row.getCustomFieldValue(customField.get('id'));\n fieldValue = (fieldValue !== null) ? fieldValue : '';\n switch (customField.get('fieldType')) {\n case PJQ.constants.customFields.fieldTypes.TEXT:\n if (fieldValue && type !== 'sort' && type !== 'type') {\n if (PJQ.helpers.urlHelpers.isURL(fieldValue))\n fieldValue = '' + fieldValue + '';\n }\n break\n case 'BOOL':\n if (fieldValue != null)\n fieldValue = fieldValue ? 'Yes' : 'No';\n break;\n case 'CHOICE':\n let choices = [];\n // convert single choice value into array so that the logic below can work for both types.\n if (typeof fieldValue === 'number')\n fieldValue = [fieldValue];\n\n _.each(customField.choices.models, _.bind(function (choice) {\n if (_.find(fieldValue, function (value) {\n return value === choice.get('id');\n }))\n choices.push(choice.get('choiceName'));\n }, this));\n\n fieldValue = choices.join((', '));\n break;\n case 'DATE':\n if (fieldValue) {\n if (type !== 'sort' && type !== 'type')\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n if (fieldValue === undefined)\n fieldValue = '';\n\n break;\n case 'DATETIME':\n if (fieldValue) {\n if (type !== 'sort' && type !== 'type')\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, false);\n }\n if (fieldValue === undefined)\n fieldValue = '';\n\n break;\n case 'INT':\n if (type !== 'sort' && type !== 'type' && fieldValue) {\n fieldValue = parseInt(fieldValue).toLocaleString();\n }\n break;\n case 'MONEY':\n if (type === 'sort' || type === 'type') {\n if (fieldValue && fieldValue !== '$')\n fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true));\n else\n fieldValue = 0;\n } else {\n fieldValue = PJQ.helpers.formatHelpers.formatCurrency(parseInt(PJQ.helpers.formatHelpers.numbersOnly(fieldValue)));\n }\n break;\n case 'PERCENT':\n if (type === 'sort' || type === 'type') {\n if (!fieldValue)\n fieldValue = 0;\n } else {\n fieldValue = fieldValue ? PJQ.helpers.formatHelpers.formatCurrency(parseInt(PJQ.helpers.formatHelpers.numbersOnly(fieldValue)), 2, false) + '%' : '';\n }\n break;\n }\n\n return fieldValue;\n }\n });\n }\n });\n }\n break;\n }\n }, this)\n );\n\n if (!includeAllColumns) {\n columns.push({\n columnData: \"punchlistItemId\",\n data: \"attributes.punchlistItemId\",\n title: \"\",\n width: '80px',\n orderable: false,\n searchable: false,\n className: 'text-align-center',\n render: _.bind(function (data) {\n let html = '
';\n if (this.options.isAdmin) {\n html += '';\n }\n html += '
';\n return html;\n }, this)\n });\n }\n\n return columns;\n },\n addClicked() {\n let newItem = new PJQ.models.punchlists.PunchlistItem({\n projectId: this.options.project ? this.options.project.id : null,\n templateId: this.model != null ? this.model.get('templateId') : null\n });\n this.editPunchlistItem(newItem);\n },\n editClicked(e) {\n let row = this.punchlistDataTable.getRow($(e.currentTarget).parents('tr'));\n this.editPunchlistItem(row.data());\n },\n editPunchlistItem: function (item) {\n let isNew = item.isNew();\n let fnRenderEditor = _.bind(function () {\n new PJQ.views.punchlists.PunchlistItemEditorModal({\n model: item,\n collection: this.collection,\n project: this.options.project,\n onSave: _.bind(function (item) {\n if (isNew) {\n this.punchlistDataTable.addRow(item);\n this.collection.add(item);\n }\n this.punchlistDataTable.refresh();\n }, this),\n onClose: _.bind(function (item) {\n if (item.hasChanged()) {\n item.restore();\n }\n }, this),\n onDelete: _.bind(function (item) {\n if (item.id > 0) {\n let row = this.punchlistDataTable.getRow(item.cid);\n if (row != null) {\n this.punchlistDataTable.removeRow(row);\n }\n }\n item.destroy();\n }, this)\n });\n }, this)\n if (!item.isNew()) {\n item.fetch({\n success: _.bind(function () {\n fnRenderEditor();\n }, this)\n });\n } else {\n fnRenderEditor();\n }\n },\n deleteClicked(e) {\n let row = this.punchlistDataTable.getRow($(e.currentTarget).parents('tr'));\n this.deletePunchlistItem(row);\n },\n deletePunchlistItem: function (row) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Delete\",\n body: \"Are you sure you want to delete this punch list item?\",\n onDelete: _.bind(function () {\n row.data().destroy();\n this.punchlistDataTable.removeRow(row);\n }, this)\n });\n },\n exportList: function () {\n if (this.options.project == null) {\n return;\n }\n\n let filters = {},\n primaryFilter = this.punchlistDataTable.getFilter('primary');\n if (_.size(primaryFilter) > 0) {\n let statusFilter = primaryFilter.status,\n priorityFilter = primaryFilter.priority,\n hasAssigned = _.contains(statusFilter, PJQ.constants.punchlists.statuses.ASSIGNED);\n\n if (_.size(statusFilter) > 0) {\n filters.statuses = statusFilter;\n }\n\n if (_.size(priorityFilter) > 0) {\n filters.priority = priorityFilter;\n }\n }\n\n let orderCookie = PJQ.helpers.cookieHelpers.getCookie(PJQ.constants.cookies.PUNCHLIST_ORDER_COOKIE),\n order = orderCookie != null ? JSON.parse(orderCookie) : null,\n report = new PJQ.models.reports.NewReport({\n type: PJQ.constants.reports.reportTypes.PUNCH_LIST.type,\n projectId: this.options.project ? this.options.project.id : null,\n options: {\n filters: filters,\n columns: this.options.userSettings.getSettings(PJQ.constants.punchlists.view.PUNCHLISTS).columns,\n columnOrder: order\n }\n });\n report.export({format: 'excel'}).then(() => {\n\n });\n },\n exportDetailedList: function () {\n if (this.options.project == null) {\n return;\n }\n\n let params = [\n {\n parameter: 'orderBy',\n value: this.punchlistDataTable.options.settings.orderBy\n },\n {\n parameter: 'orderAscending',\n value: this.punchlistDataTable.options.settings.orderAscending\n }\n ],\n filterData = this.punchlistDataTable.getFilteredRowData();\n if (_.size(filterData) < _.size(this.collection.models)) {\n params.push(\n {\n parameter: 'ids',\n value: _.map(filterData, function (item) {\n return item.id;\n })\n }\n );\n }\n\n let loader = new PJQ.Loader(this.$('.btn-export'), {\n loadingText: \"\"\n });\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'punchlists',\n },\n {\n endpoint: 'export'\n },\n {\n endpoint: 'detailed'\n }\n ], params),\n data: {\n itemOrder: _.map(filterData, (item) => {\n return item.id\n })\n }\n }).post().done(_.bind(function (response) {\n PJQ.files.handleDownload(response);\n loader.remove();\n }, this)).fail(_.bind(function (xhr, err, result) {\n loader.remove();\n }, this));\n },\n viewPunchListSettings: function () {\n new PJQ.views.punchlists.PunchListSettingsModal({\n punchlistsView: this,\n project: this.options.project,\n userSettings: this.options.userSettings,\n onSave: _.bind(function () {\n this.renderDataTable();\n }, this)\n });\n },\n saveTemplate: function () {\n new PJQ.views.punchlists.PunchlistTemplateCreatorModal({\n collection: this.collection,\n project: this.options.project\n });\n },\n importTemplate: function () {\n new PJQ.views.punchlists.ImportTemplateModal({\n project: this.options.project,\n onImport: _.bind(function (submittals) {\n this.collection = submittals;\n this.render();\n }, this)\n });\n },\n});\n\nPJQ.views.punchlists.PunchlistItemEditorModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PUNCHLISTS, 'Modal-Punchlist-Item-Editor'),\n subTemplates: {\n comments: new PJQ.templating.Template(PJQ.constants.modules.PUNCHLISTS, 'Punchlist-Item-Comments'),\n contactBadge: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Contacts-Select-Input-Contacts')\n },\n width: '90%',\n maxWidth: 1200,\n isShowCloseButton: true,\n onSave: _.noop\n },\n events: {\n 'click .add-comment': 'addComment',\n 'click .item-cancel': 'cancel',\n 'click .edit-history': 'viewEditHistory',\n 'click .btn-notification-history': 'viewNotificationHistory',\n 'click .btn-export': 'exportPDF',\n 'click .item-status-not-resolved': 'markNotResolved',\n 'click .item-status-work-completed': 'markWorkCompleted',\n 'click .item-status-resolved': 'markResolved',\n 'click .punchlist-save': 'save',\n 'click .punchlist-close': 'close',\n 'click .punchlist-delete': 'onDelete',\n 'click .delete-comment': 'deleteComment'\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n\n this.preferences = this.options.project ? this.options.project.preferences : PJQ.app.session.preferences;\n this.changedAnnotations = new PJQ.collections.drawings.Annotations();\n\n if (this.options.project != null) {\n this.options.customFields = await this.options.project.fetchPunchListCustomFields();\n } else {\n this.options.customFields = await PJQ.app.session.fetchPunchListCustomFields();\n }\n\n if (!this.model.isNew() && !this.model.isFetched) {\n await this.model.fetch();\n }\n\n this.isFetched = true;\n this.render();\n },\n beforeRender: function () {\n this.options.canEdit = true;\n this.options.canUpload = true;\n this.options.isAdmin = true;\n\n let isAssignee = this.model.get('isAssignee') || (this.model.assignedTo != null && (PJQ.app.session.contact != null && this.model.assignedTo.id === PJQ.app.session.contact.id || PJQ.app.session.user != null && this.model.assignedTo.id === PJQ.app.session.user.get('id')));\n if (this.options.project != null) {\n this.options.canEdit = this.model.isNew() || this.options.project.hasPermission('punchList.isAdmin') && this.model.get('status') !== PJQ.constants.punchlists.statuses.RESOLVED;\n this.options.canUpload = this.options.canEdit || isAssignee;\n this.options.isAdmin = PJQ.app.session.user != null && this.options.project.get('masterUserId') === PJQ.app.session.user.get('masterUserId') && this.options.project.hasPermission('punchList.isAdmin');\n }\n },\n renderData: function () {\n return {\n canEdit: this.options.canEdit,\n canUpload: this.options.canUpload,\n isAdmin: this.options.isAdmin,\n model: this.model,\n preferences: this.preferences\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n this.isSaving = false;\n if (this.options.canEdit) {\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input',\n 'textarea'\n ]\n });\n }\n\n new PJQ.inputs.Datepicker({\n el: this.$('.punch-list-due-date'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: this.model.get('dueDate')\n },\n onChange: _.bind(function (newDate) {\n let currentDueDate = this.model.get('dueDate');\n if (currentDueDate == null || PJQ.helpers.dateHelpers.getDateDaysDiff(newDate, new Date(currentDueDate)) !== 0) {\n this.model.set('dueDate', newDate);\n }\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.punch-list-priority'),\n isIntChoices: true,\n onChange: _.bind(function (value) {\n this.model.set('priority', value);\n }, this),\n defaultValue: this.model.get('priority')\n });\n\n if (this.options.canEdit) {\n new PJQ.inputs.AutocompleteInput({\n el: this.$('input.item-category'),\n source: this.collection == null ? [] : _.map(_.filter(this.collection.models, _.bind(function (item) {\n return _.size(item.get('category')) > 0 && item.id !== this.model.id;\n }, this)), function (item) {\n return item.get('category');\n })\n });\n }\n\n if (this.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_LOCATIONS)) {\n new PJQ.inputs.ProjectLocationPicker({\n el: this.$('.select-location'),\n project: this.options.project,\n canEdit: this.options.canEdit,\n onChange: _.bind(function (value) {\n this.model.set('locationId', value);\n }, this),\n defaultValue: this.model.get('locationId')\n });\n } else {\n new PJQ.inputs.AutocompleteInput({\n el: this.$('input.item-location'),\n source: this.collection == null ? [] : _.map(_.filter(this.collection.models, _.bind(function (item) {\n return _.size(item.get('location')) > 0 && item.id !== this.model.id;\n }, this)), function (item) {\n return item.get('location');\n })\n });\n }\n\n this.renderBallInCourt();\n\n this.renderCustomFields();\n\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.punchlist-assigned'),\n context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\n selectedContact: this.model.assignedTo,\n isSingleChoice: true,\n isReadOnly: !this.options.canEdit || !this.options.isAdmin,\n onChange: _.bind(function (selectedContact) {\n this.model.assignedTo = selectedContact;\n this.renderBallInCourt();\n this.renderStatus();\n }, this)\n });\n\n this.groupListInput = new PJQ.views.groups.GroupsSelectInput({\n el: this.$('.punchlist-groups'),\n isShowAddButton: false,\n addButton: this.$('.btn-edit-groups'),\n groupLevels: this.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS),\n groupUserId: this.options.project ? this.options.project.get('masterUserId') : null,\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 this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.punchlist-file-uploader'),\n context: 'punchlist',\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 includeProjectAttachments: true,\n previewImageDimension: 150,\n // includeProjectAttachments: true,\n canUpload: this.options.canUpload,\n canDelete: this.options.canEdit && this.options.isAdmin,\n onDelete: _.bind(function (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 }, this)\n });\n\n this.beforeUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.punchlist-before-file-uploader'),\n context: 'punchlist',\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.beforeAttachments,\n includeProjectAttachments: true,\n offsetTopText: true,\n previewImageDimension: 150,\n // includeProjectAttachments: true,\n canUpload: this.options.canUpload,\n canDelete: this.options.canEdit && this.options.isAdmin,\n onDelete: _.bind(function (attachment, callback) {\n if (attachment.id > 0) {\n attachment.set('isDeleted', true);\n } else {\n attachment.destroy();\n }\n this.model.isDirty = true;\n callback();\n }, this)\n });\n\n this.afterUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.punchlist-after-file-uploader'),\n context: 'punchlist',\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.afterAttachments,\n includeProjectAttachments: true,\n offsetTopText: true,\n previewImageDimension: 150,\n // includeProjectAttachments: true,\n canUpload: this.options.canUpload,\n canDelete: this.options.canEdit && this.options.isAdmin,\n onDelete: _.bind(function (attachment, callback) {\n if (attachment.id > 0) {\n attachment.set('isDeleted', true);\n } else {\n attachment.destroy();\n }\n this.model.isDirty = true;\n callback();\n }, this)\n });\n\n this.renderComments();\n },\n renderStatus: function () {\n this.$('.punch-list-status').css('background-color', this.model.getStatusColor());\n this.$('.punch-list-status-name').html(this.model.getStatusName());\n },\n renderBallInCourt: function () {\n let $ballInCourt = this.$('.punch-list-ball-in-court');\n if ((this.model.get('status') === PJQ.constants.punchlists.statuses.NEW || this.model.get('status') === PJQ.constants.punchlists.statuses.NOT_RESOLVED) && this.model.assignedTo != null) {\n this.renderSubTemplate(false, this.options.subTemplates.contactBadge, $ballInCourt,\n {\n models: [this.model.assignedTo],\n isReadOnly: true,\n canEdit: false,\n canView: false\n });\n } else if (this.model.get('status') === PJQ.constants.punchlists.statuses.WORK_COMPLETED) {\n $ballInCourt.html('
Project Managers
');\n } else {\n new PJQ.Alert($ballInCourt, {\n type: 'warning',\n text: 'The ball in court will set automatically'\n });\n }\n },\n renderCustomFields: function () {\n this.customFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\n el: this.$('.punchlist-custom-fields'),\n collection: this.options.customFields,\n fieldValues: this.model.get('customFieldValues'),\n isEdit: this.options.canEdit\n });\n },\n exportPDF: function () {\n let loader = new PJQ.Loader(this.$('.btn-export'), {\n loadingText: \"\"\n });\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'punchlists',\n value: this.model.id\n },\n {\n endpoint: 'export'\n },\n {\n endpoint: 'pdf'\n }\n ])\n }).get().done(_.bind(function (response) {\n PJQ.files.handleDownload(response);\n loader.remove();\n }, this)).fail(_.bind(function (xhr, err, result) {\n loader.remove();\n }, this));\n },\n addComment: function () {\n let val = this.$('.item-new-comment').val().trim();\n if (_.size(val) === 0)\n return;\n\n let comment = new PJQ.models.punchlists.PunchlistItemComment({\n punchlistItemId: this.model.id,\n commentText: val,\n createdOn: new Date()\n });\n if (!this.model.isNew()) {\n comment.save(null, {\n success: _.bind(function () {\n this.model.comments.add(comment);\n this.renderComments();\n }, this)\n });\n } else {\n comment.createdBy = PJQ.app.session.user;\n this.model.comments.add(comment);\n this.renderComments();\n }\n\n this.$('.item-new-comment').val('');\n },\n renderComments: function () {\n this.renderSubTemplate(false, this.options.subTemplates.comments, this.$('.item-comments'), {\n comments: this.model.comments.models,\n canDelete: PJQ.app.session.hasPermission('punchList.isAdmin') || (this.options.project && this.options.project.hasPermission('punchList.isAdmin'))\n });\n },\n deleteComment: function (e) {\n let cid = $(e.currentTarget).data('cid'), commentId = $(e.currentTarget).data('commentId'),\n card = $(e.currentTarget).closest('div.card');\n new PJQ.views.BaseModal({\n header: \"Confirm Delete Comment\",\n body: \"Are you sure you want to delete this comment?\",\n isShowCancelButton: true,\n okButtonText: \"Confirm\",\n onOk: _.bind(function () {\n let comments = _.filter(this.model.comments.models, _.bind(function (comment, i) {\n return (comment.cid === cid);\n }, this));\n\n if (_.size(comments) > 0) {\n comments[0].set('deletedOn', new Date());\n if (!comments[0].isNew()) {\n comments[0].destroy();\n }\n }\n\n _.each(this.model.get('comments'), _.bind(function (comment, i) {\n if (comment.commentId === commentId) {\n this.model.get('comments')[i].deletedOn = new Date();\n }\n }, this));\n\n card.hide();\n }, this)\n });\n },\n markNotResolved: function () {\n new PJQ.views.BaseModal({\n header: \"Confirm Status Change\",\n body: \"Are you sure you want to mark this Punch List Item as Not Resolved?\",\n isShowCancelButton: true,\n okButtonText: \"Confirm\",\n onOk: _.bind(function () {\n this.model.set('status', PJQ.constants.punchlists.statuses.NOT_RESOLVED);\n this.save();\n }, this)\n });\n },\n markWorkCompleted: function () {\n let workCompleteOverride = this.preferences.getPref(PJQ.constants.preferenceTypes.PUNCH_LIST_WORK_COMPLETED_STATUS_OVERRIDE);\n new PJQ.views.BaseModal({\n header: \"Confirm Status Change\",\n body: \"Are you sure you want to mark this Punch List Item as \" + (workCompleteOverride ? workCompleteOverride : \"Work Completed\") + \"?\",\n isShowCancelButton: true,\n okButtonText: \"Confirm\",\n onOk: _.bind(function () {\n this.model.set('status', PJQ.constants.punchlists.statuses.WORK_COMPLETED);\n this.save();\n }, this)\n });\n },\n markResolved: function () {\n new PJQ.views.BaseModal({\n header: \"Confirm Status Change\",\n body: \"Are you sure you want to mark this Punch List Item as Resolved?\",\n isShowCancelButton: true,\n okButtonText: \"Confirm\",\n onOk: _.bind(function () {\n this.model.set('status', PJQ.constants.punchlists.statuses.RESOLVED);\n this.save();\n }, this)\n });\n },\n validate: function () {\n let isValid = true;\n\n PJQ.helpers.inputHelpers.setInputError(this.$('.item-title'), true);\n if (_.size(this.$('.item-title').val()) === 0) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(this.$('.item-title'), false);\n }\n\n isValid = isValid && this.customFieldsForm.validate();\n\n // display/clear banner on top of page\n if (!isValid) {\n new PJQ.Alert(this.$('.validation-error'), {\n type: 'danger',\n text: 'Required fields are empty'\n });\n\n window.scrollTo(0, 0);\n } else {\n this.$('.validation-error').empty();\n }\n\n return isValid;\n },\n viewEditHistory: function () {\n new PJQ.views.punchlists.EditHistoryModal({\n collection: this.model.editHistory\n });\n },\n viewNotificationHistory: function () {\n this.model.fetchNotifications(function (notifications) {\n new PJQ.views.notifications.NotificationHistory({\n collection: notifications\n });\n })\n },\n save: function () {\n if (this.isSaving) {\n return;\n }\n this.isSaving = true;\n\n this.model.set('groups', this.groupListInput.selectedGroups);\n if (!this.validate()) {\n this.isSaving = false;\n return;\n }\n\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 this.isSaving = false;\n return;\n }\n\n let isNew = this.model.isNew();\n if (this.model.hasChanged() || isNew) {\n this.model.save(null, {\n notify: true,\n success: () => {\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);\n }\n this.isSaving = false;\n this.removeModal();\n });\n }\n });\n } else {\n this.isSaving = false;\n this.removeModal();\n }\n },\n close: function () {\n if (this.options.canEdit && 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.onClose(this.model);\n this.removeModal();\n }, this)\n });\n } else {\n this.onClose(this.model);\n this.removeModal();\n }\n },\n onDelete: function () {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this punch list item?\",\n onDelete: _.bind(function () {\n if (this.options.onDelete) {\n this.options.onDelete(this.model);\n }\n this.removeModal();\n }, this)\n });\n }\n});\n\nPJQ.views.punchlists.EditHistoryModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PUNCHLISTS, 'Modal-Punchlist-History'),\n minWidth: 700\n },\n afterRender: function () {\n this.$('.modal-header span').text(this.options.context + ' History');\n\n let columns = [\n {data: \"createdOnDisplay\", title: \"Changed\"},\n {data: \"createdByDisplay\", title: \"Changed By\"},\n {data: \"attributes.fieldNameDisplay\", title: \"Field Name\"},\n {data: \"oldValueDisplay\", title: \"Old Value\"},\n {data: \"newValueDisplay\", title: \"New Value\"}\n ];\n\n this.dataTable = this.$('.history-table').DataTable({\n data: this.collection.models,\n language: {\n zeroRecords: \"No history found\"\n },\n columns: columns,\n dom: '<\"top\"p>rt<\"bottom\"p><\"clear\">'\n });\n },\n events: {\n \"click .history-close\": \"close\"\n },\n close: function () {\n this.removeModal();\n }\n});\n","PJQ.views.punchlists.PunchListSettingsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PUNCHLISTS, 'Modal-Punch-List-Settings'),\n\t\tsubTemplates: {},\n\t\tmaxWidth: 500,\n\t\tonSave: _.noop\n\t},\n\tevents: {\n\t\t'change .select-column': 'columnSelected',\n\t\t'click .settings-save': 'onSave',\n\t\t'click .btn-delete-punch-lists': 'deleteItems'\n\t},\n\tafterModalCreated: function () {\n\t\tnew PJQ.Loader(this.$('.modal-body'));\n\t\tPJQ.app.session.project.fetchProjectContacts(_.bind(function(projectContacts){\n\t\t\tthis.projectContacts = projectContacts;\n\t\t\tPJQ.app.session.project.fetchPunchListSettings(_.bind(function (settings) {\n\t\t\t\tthis.model = settings;\n\t\t\t\tthis.render();\n\t\t\t}, this));\n\t\t}, this))\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tmodel: this.model,\n\t\t\tproject: this.options.project\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif(this.model){\n\t\t\tnew PJQ.views.contacts.ContactsSelectInput({\n\t\t\t\tel: this.$('.punch-list-creators'),\n\t\t\t\tcontacts: this.projectContacts,\n\t\t\t\tselectedContact: this.model.projectContacts.filter(function(projectContact){\n\t\t\t\t\treturn projectContact.get('canAdd');\n\t\t\t\t}),\n\t\t\t\tisSingleChoice: false,\n\t\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contacts, 'canAdd', true);\n\t\t\t\t}, this),\n\t\t\t\tonDelete: _.bind(function (contact) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contact, 'canAdd', false);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tnew PJQ.views.contacts.ContactsSelectInput({\n\t\t\t\tel: this.$('.punch-list-notify-created'),\n\t\t\t\tcontacts: this.projectContacts,\n\t\t\t\tselectedContact: this.model.projectContacts.filter(function(projectContact){\n\t\t\t\t\treturn projectContact.get('notifyAdded');\n\t\t\t\t}),\n\t\t\t\tisSingleChoice: false,\n\t\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contacts, 'notifyAdded', true);\n\t\t\t\t}, this),\n\t\t\t\tonDelete: _.bind(function (contact) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contact, 'notifyAdded', false);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tnew PJQ.views.contacts.ContactsSelectInput({\n\t\t\t\tel: this.$('.punch-list-notify-comment'),\n\t\t\t\tcontacts: this.projectContacts,\n\t\t\t\tselectedContact: this.model.projectContacts.filter(function(projectContact){\n\t\t\t\t\treturn projectContact.get('notifyComment');\n\t\t\t\t}),\n\t\t\t\tisSingleChoice: false,\n\t\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contacts, 'notifyComment', true);\n\t\t\t\t}, this),\n\t\t\t\tonDelete: _.bind(function (contact) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contact, 'notifyComment', false);\n\t\t\t\t}, this)\n\t\t\t});\n\n\n\t\t\tnew PJQ.views.contacts.ContactsSelectInput({\n\t\t\t\tel: this.$('.punch-list-notify-work-completed'),\n\t\t\t\tcontacts: this.projectContacts,\n\t\t\t\tselectedContact: this.model.projectContacts.filter(function(projectContact){\n\t\t\t\t\treturn projectContact.get('notifyWorkCompleted');\n\t\t\t\t}),\n\t\t\t\tisSingleChoice: false,\n\t\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contacts, 'notifyWorkCompleted', true);\n\t\t\t\t}, this),\n\t\t\t\tonDelete: _.bind(function (contact) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contact, 'notifyWorkCompleted', false);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tnew PJQ.views.contacts.ContactsSelectInput({\n\t\t\t\tel: this.$('.punch-list-notify-not-resolved'),\n\t\t\t\tcontacts: this.projectContacts,\n\t\t\t\tselectedContact: this.model.projectContacts.filter(function(projectContact){\n\t\t\t\t\treturn projectContact.get('notifyNotResolved');\n\t\t\t\t}),\n\t\t\t\tisSingleChoice: false,\n\t\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contacts, 'notifyNotResolved', true);\n\t\t\t\t}, this),\n\t\t\t\tonDelete: _.bind(function (contact) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contact, 'notifyNotResolved', false);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tnew PJQ.views.contacts.ContactsSelectInput({\n\t\t\t\tel: this.$('.punch-list-notify-resolved'),\n\t\t\t\tcontacts: this.projectContacts,\n\t\t\t\tselectedContact: this.model.projectContacts.filter(function(projectContact){\n\t\t\t\t\treturn projectContact.get('notifyResolved');\n\t\t\t\t}),\n\t\t\t\tisSingleChoice: false,\n\t\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contacts, 'notifyResolved', true);\n\t\t\t\t}, this),\n\t\t\t\tonDelete: _.bind(function (contact) {\n\t\t\t\t\tthis.updateProjectContactsSetting(contact, 'notifyResolved', false);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tthis.rowsPerPageSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.rows-per-page'),\n\t\t\t\tdefaultValue: this.options.userSettings.getSettings(PJQ.constants.punchlists.view.PUNCHLISTS).rowsPerPage,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.onChange();\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tthis.dataTable = new PJQ.views.dataTables.DataTable({\n\t\t\t\tel: this.$('div.column-settings'),\n\t\t\t\tdata: this.options.punchlistsView.getColumns(true),\n\t\t\t\tisHideSearch: true,\n\t\t\t\torder: [],\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\"data\": \"title\", \"title\": \"Column\", \"orderable\": false},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"data\": \"visible\",\n\t\t\t\t\t\t\"title\": \"Show\",\n\t\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\t\"render\": _.bind(function (data) {\n\t\t\t\t\t\t\treturn ('
');\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\"width\": '10%'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tdom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n\t\t\t});\n\n\t\t}\n\t},\n\tdeleteItems: function() {\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: \"Are you sure you want to delete all punch list items on this project?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.options.project.deleteAllPunchLists(_.bind(function () {\n\t\t\t\t\tthis.options.punchlistsView.collection.remove(this.options.punchlistsView.collection.models);\n\t\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\t\tthis.options.onSave(this.model);\n\t\t\t\t\t}\n\t\t\t\t\tthis.removeModal();\n\t\t\t\t}, this));\n\t\t\t}, this)\n\t\t});\n\t},\n\tcolumnSelected: function (sender) {\n\t\tthis.dataTable.dataTable.row($(sender.currentTarget).closest('tr')).data().visible = $(sender.currentTarget).prop('checked');\n\t},\n\tupdateProjectContactsSetting: function(contacts, setting, value){\n\t\tcontacts = PJQ.helpers.objectHelpers.refinedType(contacts) === 'array' ? contacts : [contacts];\n\t\t_.each(contacts, _.bind(function(contact){\n\t\t\tlet existingSetting = this.model.projectContacts.findWhere({ id: contact.id });\n\t\t\tif(existingSetting != null){\n\t\t\t\texistingSetting.set(setting, value);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tlet newSetting = new PJQ.models.punchlists.ProjectContactSetting(contact.attributes);\n\t\t\t\tnewSetting.set(setting, value);\n\t\t\t\tthis.model.projectContacts.add(newSetting);\n\t\t\t}\n\t\t}, this));\n\t},\n\tonSave: function () {\n\t\tlet loader = new PJQ.Loader(this.$('.modal-content'));\n\n\t\tthis.options.punchlistsView.options.userSettings.getSettings(PJQ.constants.punchlists.view.PUNCHLISTS).rowsPerPage = parseInt(this.rowsPerPageSelectPicker.getValue());\n\t\tlet columns = this.options.punchlistsView.options.userSettings.getSettings(PJQ.constants.punchlists.view.PUNCHLISTS).columns;\n\t\t_.each(this.dataTable.dataTable.data(), function (row) {\n\t\t\tif (row.visible) {\n\t\t\t\tif (columns.indexOf(row.columnData) === -1)\n\t\t\t\t\tcolumns.push(row.columnData);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcolumns = _.filter(columns, function(column) {\n\t\t\t\t\treturn (column != row.columnData);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tthis.options.punchlistsView.options.userSettings.getSettings(PJQ.constants.punchlists.view.PUNCHLISTS).columns = columns;\n\n\t\tthis.options.punchlistsView.options.userSettings.save(null, {\n\t\t\tsuccess: _.bind(function() {\n\t\t\t\tthis.model.put(null, {\n\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\tthis.options.onSave();\n\t\t\t\t\t\tthis.removeModal();\n\t\t\t\t\t}, this),\n\t\t\t\t\terror: function () {\n\t\t\t\t\t\tloader.remove();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, this)\n\t\t});\n\t}\n});","PJQ.views.punchlists.PunchlistTemplateCreatorModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.PUNCHLISTS, '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.punchlists.Template({\r\n projectId: this.options.project.id\r\n });\r\n\r\n this.options.project.fetchPunchlistTemplates(_.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 punchlists: 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-punchlist'),\r\n isMultiple: true,\r\n noneSelectedText: 'Select Punchlist #',\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 copyAssignee: this.$('.input-copy-assignee').prop('checked'),\r\n copyGroups: this.$('.input-copy-trades').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: 'Punchlist 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.punchlists.ImportTemplateModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.PUNCHLISTS, '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.fetchPunchlistTemplates(_.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: 'punchlists'\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: 'importAssignee',\r\n value: this.$('.input-import-assignee').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: 'importAttachments',\r\n value: this.$('.input-import-attachments').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.punchlists.PunchlistItems(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: 'Punchlist Template Imported'\r\n });\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.views.punchlists.EditTemplateModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.PUNCHLISTS, '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.punchlists.PunchlistView({\r\n el: this.$('.manage-template'),\r\n model: this.model,\r\n collection: this.model.punchlistItems\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.punchlists.TemplateManagement = PJQ.views.templates.TemplateManagement.extend({\r\n beforeFirstRender: function () {\r\n this.collection = new PJQ.collections.punchlists.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.punchlists.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.punchlists.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"]}