{"version":3,"sources":["1Initializers.js","actionitemmodels.js","actionitemviews.js","settingsviews.js","templateviews.js"],"names":["PJQ","collections","actionItems","models","views","modules","routes","route","name","callback","projectId","projectWall","initProjectNavigator","parseInt","actionItemId","app","addRoutes","ActionItem","BaseModel","extend","notifyName","idAttribute","endpoint","arr","this","isNew","get","value","id","helpers","urlHelpers","generateEndpoint","afterInit","set","silent","on","_","bind","assignedTo","projectContacts","ProjectContact","constants","statuses","NEW","NOT_RESOLVED","ballInCourt","parse","model","groups","Groups","createdBy","size","comments","ActionItemComments","attachments","ActionItemAttachments","beforeAttachments","afterAttachments","getDeepLink","toString","getStatusColor","statusColors","ASSIGNED","getStatusName","statusNames","WORK_COMPLETED","workCompletedOverride","session","project","preferences","getPref","preferenceTypes","ACTION_ITEM_WORK_COMPLETED_STATUS_OVERRIDE","getPriorityColor","priorities","LOW","priorityColors","getPriorityName","priorityNames","beforeSave","toJSON","getChangedModels","fetchNotifications","notifications","Notifications","actionItem","fetch","success","ActionItemComment","EditHistoryItem","createdOnDisplay","dateHelpers","getDateString","Date","createdOn","dateFormats","DATE_TIME","createdByDisplay","companyName","contactName","oldValueDisplay","oldValue","newValueDisplay","newValue","fieldType","DATE","ActionItemAttachment","files","File","ActionItemCustomField","customFields","CustomField","Notification","notificationTypeNames","collection","options","Settings","ProjectContactSettings","each","setting","matchProjectContact","findWhere","attributes","isSilent","filter","projectContact","hasChanged","ActionItemUserSettings","params","forCompany","push","parameter","getSettings","view","find","viewSettings","ProjectContactSetting","Template","user","assignee","submitter","ActionItems","items","BaseCollection","EditHistoryItems","Files","ActionItemCustomFields","masterUserId","Templates","ActionItemView","BaseView","defaults","template","templating","ACTIONITEMS","events","click .btn-action-item-settings","click .export-detailed","click .export-list","click .btn-add-action-item","click .btn-edit-action-item","click .btn-delete-action-item","click .btn-save-a-template","click .btn-import-template","beforeFirstRender","isAdmin","hasPermission","isFetched","userSettings","fnFetch","fnRender","render","fetchActionItemCustomFields","hasPref","ENABLE_PROJECT_LOCATIONS","fetchLocations","locations","renderData","afterRender","renderDataTable","item","editActionItem","self","actionItemDataTable","dataTables","DataTable","el","$","rowId","data","language","emptyTable","zeroRecords","subTemplates","header","pageLength","rowsPerPage","orderCookie","cookies","ACTION_ITEM_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","deleteActionItem","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","ActionItemEditorModal","onSave","addRow","add","refresh","onClose","restore","onDelete","cid","removeRow","destroy","deleteClicked","modals","DeleteCancel","body","exportList","cookieHelpers","getCookie","JSON","reports","NewReport","reportTypes","ACTION_ITEM","columnOrder","export","format","then","exportDetailedList","orderBy","orderAscending","filterData","getFilteredRowData","map","loader","Loader","loadingText","ajax","Request","itemOrder","post","done","response","handleDownload","remove","fail","xhr","err","viewActionItemSettings","ActionItemSettingsModal","actionItemsView","saveTemplate","ActionItemTemplateCreatorModal","importTemplate","ImportTemplateModal","onImport","submittals","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 .action-item-save","click .action-item-close","click .action-item-delete","click .delete-comment","beforeModalCreated","canEdit","canUpload","isAssignee","changedAnnotations","drawings","Annotations","_this","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","downloadFile","addComment","val","trim","comment","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","isSaving","isUploading","notify","saveAll","removeModal","close","SaveDontSave","onDontSave","minWidth","dataTable","dom","click .history-close","change .select-column","click .settings-save","click .btn-delete-action-items","afterModalCreated","fetchProjectContacts","fetchActionItemSettings","beforeRender","onAdd","updateProjectContactsSetting","rowsPerPageSelectPicker","isHideSearch","deleteItems","deleteAllActionItems","columnSelected","sender","prop","objectHelpers","refinedType","existingSetting","newSetting","getValue","put","error","click .btn-save","fetchActionItemTemplates","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.actionItems = {};\r\n\r\nPJQ.models.actionItems = {};\r\n\r\nPJQ.views.actionItems = {};\r\n\r\n//Routes\r\nPJQ.modules.actionItems = {\r\n routes: [\r\n {\r\n route: 'projects/:projectId/actionitems',\r\n name: 'actionItems',\r\n callback: function (projectId) {\r\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"actionitems\");\r\n }\r\n },\r\n {\r\n route: 'projects/:projectId/actionitems/:actionItemId',\r\n name: 'actionItem',\r\n callback: function (projectId, actionItemId) {\r\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"actionitems\", {\r\n actionItemId: parseInt(actionItemId)\r\n });\r\n }\r\n }\r\n ]\r\n};\r\n\r\nPJQ.app.addRoutes(PJQ.modules.actionItems.routes);","// Models\r\nPJQ.models.actionItems.ActionItem = PJQ.models.BaseModel.extend({\r\n notifyName: 'Action Item',\r\n idAttribute: \"actionItemId\",\r\n endpoint: function () {\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: 'actionitems',\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: 'actionitems'\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: 'actionitems',\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.actionItems.statuses.NEW || PJQ.constants.actionItems.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.actionItems.ActionItemComments(model.comments);\r\n } else {\r\n this.comments = new PJQ.collections.actionItems.ActionItemComments();\r\n }\r\n\r\n if (_.size(model.attachments) > 0) {\r\n this.attachments = new PJQ.collections.actionItems.ActionItemAttachments(model.attachments);\r\n } else {\r\n this.attachments = new PJQ.collections.actionItems.ActionItemAttachments();\r\n }\r\n\r\n if (_.size(model.beforeAttachments) > 0) {\r\n this.beforeAttachments = new PJQ.collections.actionItems.ActionItemAttachments(model.beforeAttachments);\r\n } else {\r\n this.beforeAttachments = new PJQ.collections.actionItems.ActionItemAttachments();\r\n }\r\n\r\n if (_.size(model.afterAttachments) > 0) {\r\n this.afterAttachments = new PJQ.collections.actionItems.ActionItemAttachments(model.afterAttachments);\r\n } else {\r\n this.afterAttachments = new PJQ.collections.actionItems.ActionItemAttachments();\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() + '/actionitems/' + this.id.toString();\r\n },\r\n getStatusColor: function () {\r\n if (this.get('status') == null) {\r\n this.set('status', PJQ.constants.actionItems.statuses.NEW);\r\n }\r\n\r\n if (this.assignedTo != null && this.get('status') === PJQ.constants.actionItems.statuses.NEW) {\r\n return PJQ.constants.actionItems.statusColors[PJQ.constants.actionItems.statuses.ASSIGNED];\r\n }\r\n return PJQ.constants.actionItems.statusColors[this.get('status')];\r\n },\r\n getStatusName: function () {\r\n if (this.get('status') == null) {\r\n this.set('status', PJQ.constants.actionItems.statuses.NEW);\r\n }\r\n\r\n if (this.assignedTo != null && this.get('status') === PJQ.constants.actionItems.statuses.NEW) {\r\n return PJQ.constants.actionItems.statusNames[PJQ.constants.actionItems.statuses.ASSIGNED];\r\n } else if (this.get('status') === PJQ.constants.actionItems.statuses.WORK_COMPLETED) {\r\n let workCompletedOverride = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.ACTION_ITEM_WORK_COMPLETED_STATUS_OVERRIDE);\r\n if (workCompletedOverride != null) {\r\n return workCompletedOverride;\r\n }\r\n }\r\n return PJQ.constants.actionItems.statusNames[this.get('status')];\r\n },\r\n getPriorityColor: function () {\r\n if (this.get('priority') == null) {\r\n this.set('priority', PJQ.constants.actionItems.priorities.LOW);\r\n }\r\n return PJQ.constants.actionItems.priorityColors[this.get('priority')];\r\n },\r\n getPriorityName: function () {\r\n if (this.get('priority') == null) {\r\n this.set('priority', PJQ.constants.actionItems.priorities.LOW);\r\n }\r\n return PJQ.constants.actionItems.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.actionItems.Notifications(null, {\r\n actionItem: 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.actionItems.ActionItemComment = PJQ.models.BaseModel.extend({\r\n idAttribute: \"commentId\",\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'actionitems',\r\n value: this.get('actionItemId')\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.actionItems.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.actionItems.ActionItemAttachment = 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: 'actionitems',\r\n value: this.get('actionItemId')\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.actionItems.ActionItemCustomField = PJQ.models.customFields.CustomField.extend({\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'actionitems'\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.actionItems.Notification = PJQ.models.notifications.Notification.extend({\r\n notificationTypeNames: PJQ.constants.actionItems.notificationTypeNames,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'actionitems',\r\n value: this.collection.options.actionItem.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.actionItems.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: 'actionitems'\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.actionItems.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.actionItems.ActionItemUserSettings = 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: 'actionitems'\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.actionItems.ProjectContactSetting = PJQ.models.BaseModel.extend({});\r\n\r\nPJQ.models.actionItems.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: 'actionitems'\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.actionItems.ActionItemComments(model.comments);\r\n\r\n this.attachments = new PJQ.collections.actionItems.ActionItemAttachments(model.attachments);\r\n\r\n if (model.actionItems)\r\n this.actionItems = new PJQ.collections.actionItems.ActionItems(model.actionItems);\r\n else if (model.items)\r\n this.actionItems = new PJQ.collections.actionItems.ActionItems(model.items);\r\n else\r\n this.actionItems = new PJQ.collections.actionItems.ActionItems();\r\n\r\n return model;\r\n }\r\n});\r\n\r\n\r\n// Collections\r\nPJQ.collections.actionItems.ActionItems = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.actionItems.ActionItem,\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: 'actionitems'\r\n }\r\n ])\r\n }\r\n});\r\n\r\nPJQ.collections.actionItems.Notifications = PJQ.collections.notifications.Notifications.extend({\r\n model: PJQ.models.actionItems.Notification,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'actionitems',\r\n value: this.options.actionItem.id\r\n },\r\n {\r\n endpoint: 'notifications'\r\n }\r\n ])\r\n }\r\n});\r\n\r\nPJQ.collections.actionItems.EditHistoryItems = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.actionItems.EditHistoryItem\r\n});\r\n\r\nPJQ.collections.actionItems.ActionItemComments = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.actionItems.ActionItemComment\r\n});\r\n\r\nPJQ.collections.actionItems.ActionItemAttachments = PJQ.collections.files.Files.extend({\r\n model: PJQ.models.actionItems.ActionItemAttachment\r\n});\r\n\r\nPJQ.collections.actionItems.ProjectContactSettings = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.actionItems.ProjectContactSetting\r\n});\r\n\r\nPJQ.collections.actionItems.ActionItemCustomFields = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.actionItems.ActionItemCustomField,\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: 'actionitems'\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.actionItems.ActionItemCustomField = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.actionItems.ActionItemCustomField,\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: 'actionitems'\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.actionItems.Templates = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.actionItems.Template,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'actionitems'\r\n },\r\n {\r\n endpoint: 'templates'\r\n }\r\n ]);\r\n }\r\n});\r\n","PJQ.views.actionItems.ActionItemView = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ACTIONITEMS, 'Action-Item-Management'),\n actionItemId: null\n },\n events: {\n 'click .btn-action-item-settings': 'viewActionItemSettings',\n 'click .export-detailed': 'exportDetailedList',\n 'click .export-list': 'exportList',\n 'click .btn-add-action-item': 'addClicked',\n 'click .btn-edit-action-item': 'editClicked',\n 'click .btn-delete-action-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.isAdmin = (PJQ.app.session.user != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.user.get('masterUserId')) && this.options.project.hasPermission('actionItems.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.actionItems.ActionItemUserSettings();\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 actionItems = new PJQ.collections.actionItems.ActionItems(null, {\n project: this.options.project\n });\n actionItems.fetch({\n success: _.bind(function () {\n this.collection = actionItems;\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.fetchActionItemCustomFields(_.bind(function (customFields) {\n fnRender(customFields);\n }, this));\n } else {\n PJQ.app.session.fetchActionItemCustomFields(null, _.bind(function (customFields) {\n fnRender(customFields);\n }, this));\n }\n }, this)\n });\n }, this)\n\n if (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.actionItemId > 0) {\n let item = this.collection.get(this.options.actionItemId);\n this.options.actionItemId = null;\n if (item != null) {\n this.editActionItem(item);\n }\n }\n },\n renderDataTable() {\n let self = this,\n userSettings = this.options.userSettings.getSettings(PJQ.constants.actionItems.view.ACTIONITEMS);\n this.actionItemDataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.action-items'),\n rowId: \"cid\",\n data: this.collection.models,\n language: {\n emptyTable: 'Click \"Add Item\" to create an Action Item',\n zeroRecords: \"No items matched the search criteria\"\n },\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.ACTIONITEMS, 'Data-Table-Header-Action-Items')\n },\n pageLength: userSettings != null ? userSettings.rowsPerPage : 50,\n orderCookie: PJQ.constants.cookies.ACTION_ITEM_ORDER_COOKIE,\n settings: this.options.userSettings.getSettings(PJQ.constants.actionItems.view.ACTIONITEMS),\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('.action-item-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.actionItems.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.actionItems.statuses.NEW && row.assignedTo != null) || _.contains(statusFilter, rowStatus));\n });\n },\n order: [[0, \"asc\"]],\n deferRender: true,\n onRowDoubleClick: _.bind(function (row) {\n this.editActionItem(row.data());\n }, this),\n contextMenuOptions: {\n actions: [\n {\n name: 'Edit',\n onClick: _.bind(function (row) {\n this.editActionItem(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.deleteActionItem(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.actionItems.view.ACTIONITEMS);\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.actionItems.statuses.NEW || row.get('status') === PJQ.constants.actionItems.statuses.NOT_RESOLVED) && row.assignedTo != null) {\n result = PJQ.helpers.contacts.getContactAnchor({contact: row.assignedTo});\n } else if (row.get('status') === PJQ.constants.actionItems.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.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 typeof data === 'string' ? 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.actionItems.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: \"actionItemId\",\n data: \"attributes.actionItemId\",\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.actionItems.ActionItem({\n projectId: PJQ.app.session.project ? PJQ.app.session.project.id : null,\n templateId: this.model != null ? this.model.get('templateId') : null\n });\n this.editActionItem(newItem);\n },\n editClicked(e) {\n let row = this.actionItemDataTable.getRow($(e.currentTarget).parents('tr'));\n this.editActionItem(row.data());\n },\n editActionItem: function (item) {\n let isNew = item.isNew();\n let fnRenderEditor = _.bind(function () {\n new PJQ.views.actionItems.ActionItemEditorModal({\n model: item,\n collection: this.collection,\n project: this.options.project,\n onSave: _.bind(function (item) {\n if (isNew) {\n this.actionItemDataTable.addRow(item);\n this.collection.add(item);\n }\n this.actionItemDataTable.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.actionItemDataTable.getRow(item.cid);\n if (row != null) {\n this.actionItemDataTable.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.actionItemDataTable.getRow($(e.currentTarget).parents('tr'));\n this.deleteActionItem(row);\n },\n deleteActionItem: function (row) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Delete\",\n body: \"Are you sure you want to delete this action item?\",\n onDelete: _.bind(function () {\n row.data().destroy();\n this.actionItemDataTable.removeRow(row);\n }, this)\n });\n },\n exportList: function () {\n if (this.options.project == null) {\n return;\n }\n\n let orderCookie = PJQ.helpers.cookieHelpers.getCookie(PJQ.constants.cookies.ACTION_ITEM_ORDER_COOKIE),\n order = orderCookie != null ? JSON.parse(orderCookie) : null,\n report = new PJQ.models.reports.NewReport({\n type: PJQ.constants.reports.reportTypes.ACTION_ITEM.type,\n projectId: this.options.project ? this.options.project.id : null,\n options: {\n columns: this.options.userSettings.getSettings(PJQ.constants.actionItems.view.ACTIONITEMS).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.actionItemDataTable.options.settings.orderBy\n },\n {\n parameter: 'orderAscending',\n value: this.actionItemDataTable.options.settings.orderAscending\n }\n ],\n filterData = this.actionItemDataTable.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: 'actionitems',\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 viewActionItemSettings: function () {\n new PJQ.views.actionItems.ActionItemSettingsModal({\n actionItemsView: 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.actionItems.ActionItemTemplateCreatorModal({\n collection: this.collection,\n project: this.options.project\n });\n },\n importTemplate: function () {\n new PJQ.views.actionItems.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.actionItems.ActionItemEditorModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ACTIONITEMS, 'Modal-Action-Item-Editor'),\n subTemplates: {\n comments: new PJQ.templating.Template(PJQ.constants.modules.ACTIONITEMS, 'Action-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 .action-item-save': 'save',\n 'click .action-item-close': 'close',\n 'click .action-item-delete': 'onDelete',\n 'click .delete-comment': 'deleteComment'\n },\n beforeModalCreated: function () {\n this.preferences = this.options.project ? this.options.project.preferences : PJQ.app.session.preferences;\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('actionItems.isAdmin') && this.model.get('status') !== PJQ.constants.actionItems.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('actionItems.isAdmin');\n }\n\n this.changedAnnotations = new PJQ.collections.drawings.Annotations();\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.model) {\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.$('.action-item-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.$('.action-item-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 if (PJQ.app.session.project != null) {\n PJQ.app.session.project.fetchActionItemCustomFields(_.bind(function (customFields) {\n this.customFields = customFields;\n this.renderCustomFields();\n }, this));\n } else {\n PJQ.app.session.fetchActionItemCustomFields(_.bind(function (customFields) {\n this.customFields = customFields;\n this.renderCustomFields();\n }, this));\n }\n\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.action-item-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.$('.action-item-groups'),\n isShowAddButton: false,\n addButton: this.$('.btn-edit-groups'),\n groupLevels: PJQ.app.session.project.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.$('.action-item-file-uploader'),\n context: 'actionItems',\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.$('.action-item-before-file-uploader'),\n context: 'actionItems',\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.$('.action-item-after-file-uploader'),\n context: 'actionItems',\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 },\n renderStatus: function () {\n this.$('.action-item-status').css('background-color', this.model.getStatusColor());\n this.$('.action-item-status-name').html(this.model.getStatusName());\n },\n renderBallInCourt: function () {\n let $ballInCourt = this.$('.action-item-ball-in-court');\n if ((this.model.get('status') === PJQ.constants.actionItems.statuses.NEW || this.model.get('status') === PJQ.constants.actionItems.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.actionItems.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.$('.action-item-custom-fields'),\n collection: this.customFields,\n fieldValues: this.model.get('customFieldValues'),\n isEdit: this.options.canEdit\n });\n },\n exportPDF: function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'actionitems',\n value: this.model.id\n },\n {\n endpoint: 'export'\n },\n {\n endpoint: 'pdf'\n }\n ]));\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.actionItems.ActionItemComment({\n actionItemId: 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('actionItems.isAdmin') || (this.options.project && this.options.project.hasPermission('actionItems.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 Action Item as Not Resolved?\",\n isShowCancelButton: true,\n okButtonText: \"Confirm\",\n onOk: _.bind(function () {\n this.model.set('status', PJQ.constants.actionItems.statuses.NOT_RESOLVED);\n this.save();\n }, this)\n });\n },\n markWorkCompleted: function () {\n let workCompleteOverride = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.ACTION_ITEM_WORK_COMPLETED_STATUS_OVERRIDE);\n new PJQ.views.BaseModal({\n header: \"Confirm Status Change\",\n body: \"Are you sure you want to mark this Action Item as \" + (workCompleteOverride ? workCompleteOverride : \"Work Completed\") + \"?\",\n isShowCancelButton: true,\n okButtonText: \"Confirm\",\n onOk: _.bind(function () {\n this.model.set('status', PJQ.constants.actionItems.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 Action Item as Resolved?\",\n isShowCancelButton: true,\n okButtonText: \"Confirm\",\n onOk: _.bind(function () {\n this.model.set('status', PJQ.constants.actionItems.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 //todo: validate custom fields\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.actionItems.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 action 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.actionItems.EditHistoryModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ACTIONITEMS, 'Modal-Action-Item-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.actionItems.ActionItemSettingsModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.ACTIONITEMS, 'Modal-Action-Item-Settings'),\r\n subTemplates: {},\r\n maxWidth: 500,\r\n onSave: _.noop\r\n },\r\n events: {\r\n 'change .select-column': 'columnSelected',\r\n 'click .settings-save': 'onSave',\r\n 'click .btn-delete-action-items': 'deleteItems'\r\n },\r\n afterModalCreated: function () {\r\n new PJQ.Loader(this.$('.modal-body'));\r\n PJQ.app.session.project.fetchProjectContacts(_.bind(function(projectContacts){\r\n this.projectContacts = projectContacts;\r\n PJQ.app.session.project.fetchActionItemSettings(_.bind(function (settings) {\r\n this.model = settings;\r\n this.render();\r\n }, this));\r\n }, this))\r\n },\r\n beforeRender: function () {\r\n this.renderData = {\r\n model: this.model,\r\n project: this.options.project\r\n };\r\n },\r\n afterRender: function () {\r\n if(this.model){\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.action-item-creators'),\r\n contacts: this.projectContacts,\r\n selectedContact: this.model.projectContacts.filter(function(projectContact){\r\n return projectContact.get('canAdd');\r\n }),\r\n isSingleChoice: false,\r\n onAdd: _.bind(function (contacts) {\r\n this.updateProjectContactsSetting(contacts, 'canAdd', true);\r\n }, this),\r\n onDelete: _.bind(function (contact) {\r\n this.updateProjectContactsSetting(contact, 'canAdd', false);\r\n }, this)\r\n });\r\n\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.action-item-notify-created'),\r\n contacts: this.projectContacts,\r\n selectedContact: this.model.projectContacts.filter(function(projectContact){\r\n return projectContact.get('notifyAdded');\r\n }),\r\n isSingleChoice: false,\r\n onAdd: _.bind(function (contacts) {\r\n this.updateProjectContactsSetting(contacts, 'notifyAdded', true);\r\n }, this),\r\n onDelete: _.bind(function (contact) {\r\n this.updateProjectContactsSetting(contact, 'notifyAdded', false);\r\n }, this)\r\n });\r\n\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.action-item-notify-comment'),\r\n contacts: this.projectContacts,\r\n selectedContact: this.model.projectContacts.filter(function(projectContact){\r\n return projectContact.get('notifyComment');\r\n }),\r\n isSingleChoice: false,\r\n onAdd: _.bind(function (contacts) {\r\n this.updateProjectContactsSetting(contacts, 'notifyComment', true);\r\n }, this),\r\n onDelete: _.bind(function (contact) {\r\n this.updateProjectContactsSetting(contact, 'notifyComment', false);\r\n }, this)\r\n });\r\n\r\n\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.action-item-notify-work-completed'),\r\n contacts: this.projectContacts,\r\n selectedContact: this.model.projectContacts.filter(function(projectContact){\r\n return projectContact.get('notifyWorkCompleted');\r\n }),\r\n isSingleChoice: false,\r\n onAdd: _.bind(function (contacts) {\r\n this.updateProjectContactsSetting(contacts, 'notifyWorkCompleted', true);\r\n }, this),\r\n onDelete: _.bind(function (contact) {\r\n this.updateProjectContactsSetting(contact, 'notifyWorkCompleted', false);\r\n }, this)\r\n });\r\n\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.action-item-notify-not-resolved'),\r\n contacts: this.projectContacts,\r\n selectedContact: this.model.projectContacts.filter(function(projectContact){\r\n return projectContact.get('notifyNotResolved');\r\n }),\r\n isSingleChoice: false,\r\n onAdd: _.bind(function (contacts) {\r\n this.updateProjectContactsSetting(contacts, 'notifyNotResolved', true);\r\n }, this),\r\n onDelete: _.bind(function (contact) {\r\n this.updateProjectContactsSetting(contact, 'notifyNotResolved', false);\r\n }, this)\r\n });\r\n\r\n new PJQ.views.contacts.ContactsSelectInput({\r\n el: this.$('.action-item-notify-resolved'),\r\n contacts: this.projectContacts,\r\n selectedContact: this.model.projectContacts.filter(function(projectContact){\r\n return projectContact.get('notifyResolved');\r\n }),\r\n isSingleChoice: false,\r\n onAdd: _.bind(function (contacts) {\r\n this.updateProjectContactsSetting(contacts, 'notifyResolved', true);\r\n }, this),\r\n onDelete: _.bind(function (contact) {\r\n this.updateProjectContactsSetting(contact, 'notifyResolved', false);\r\n }, this)\r\n });\r\n\r\n this.rowsPerPageSelectPicker = new PJQ.inputs.Selectpicker({\r\n el: this.$('.rows-per-page'),\r\n defaultValue: this.options.userSettings.getSettings(PJQ.constants.actionItems.view.ACTIONITEMS).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.actionItemsView.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 deleteItems: function() {\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"Are you sure you want to delete all action items on this project?\",\r\n onDelete: _.bind(function () {\r\n this.options.project.deleteAllActionItems(_.bind(function () {\r\n this.options.actionItemsView.collection.remove(this.options.actionItemsView.collection.models);\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(this.model);\r\n }\r\n this.removeModal();\r\n }, this));\r\n }, this)\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 updateProjectContactsSetting: function(contacts, setting, value){\r\n contacts = PJQ.helpers.objectHelpers.refinedType(contacts) === 'array' ? contacts : [contacts];\r\n _.each(contacts, _.bind(function(contact){\r\n let existingSetting = this.model.projectContacts.findWhere({ id: contact.id });\r\n if(existingSetting != null){\r\n existingSetting.set(setting, value);\r\n }\r\n else{\r\n let newSetting = new PJQ.models.actionItems.ProjectContactSetting(contact.attributes);\r\n newSetting.set(setting, value);\r\n this.model.projectContacts.add(newSetting);\r\n }\r\n }, this));\r\n },\r\n onSave: function () {\r\n let loader = new PJQ.Loader(this.$('.modal-content'));\r\n\r\n this.options.actionItemsView.options.userSettings.getSettings(PJQ.constants.actionItems.view.ACTIONITEMS).rowsPerPage = parseInt(this.rowsPerPageSelectPicker.getValue());\r\n let columns = this.options.actionItemsView.options.userSettings.getSettings(PJQ.constants.actionItems.view.ACTIONITEMS).columns;\r\n _.each(this.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 }\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.actionItemsView.options.userSettings.getSettings(PJQ.constants.actionItems.view.ACTIONITEMS).columns = columns;\r\n\r\n this.options.actionItemsView.options.userSettings.save(null, {\r\n success: _.bind(function() {\r\n this.model.put(null, {\r\n success: _.bind(function () {\r\n this.options.onSave();\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});","PJQ.views.actionItems.ActionItemTemplateCreatorModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.ACTIONITEMS, '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.actionItems.Template({\r\n projectId: this.options.project.id\r\n });\r\n\r\n this.options.project.fetchActionItemTemplates(_.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 actionItems: 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-action-item'),\r\n isMultiple: true,\r\n noneSelectedText: 'Select Action Items #',\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: 'Action Item 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.actionItems.ImportTemplateModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.ACTIONITEMS, '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.fetchActionItemTemplates(_.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: 'actionitems'\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.actionItems.ActionItems(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: 'Action Item Template Imported'\r\n });\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.views.actionItems.EditTemplateModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.ACTIONITEMS, '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.actionItems.ActionItemView({\r\n el: this.$('.manage-template'),\r\n model: this.model,\r\n collection: this.model.actionItems\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.actionItems.TemplateManagement = PJQ.views.templates.TemplateManagement.extend({\r\n beforeFirstRender: function () {\r\n this.collection = new PJQ.collections.actionItems.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.actionItems.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.actionItems.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"]}