{"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","distributionList","ProjectContacts","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","_this$assignedTo","toJSON","getChangedModels","fetchNotifications","notifications","Notifications","actionItem","fetch","success","distribute","_this","ajax","Request","post","done","response","reset","fail","res","err","responseJSON","message","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","itemOrder","handleDownload","remove","xhr","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","click .btn-distribute","beforeModalCreated","canEdit","canUpload","isAssignee","changedAnnotations","drawings","Annotations","_this2","Binder","$el","watchElements","Datepicker","datepickerOptions","datePicker","defaultDate","newDate","currentDueDate","defaultValue","AutocompleteInput","source","renderBallInCourt","renderCustomFields","ContactsSelectInput","context","contexts","PROJECTCONTACTS","selectedContact","isSingleChoice","isReadOnly","renderStatus","canViewContacts","canEditPeople","displayContactsBlock","canSwitchContext","USERS","selectedContacts","isDirty","groupListInput","GroupsSelectInput","isShowAddButton","addButton","groupLevels","GROUP_LEVELS","groupUserId","selectedGroups","onAfterSave","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","_this3","YesNo","onYes","notify","successNotify","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","_this4","isSaving","isUploading","fnSaveAnnotations","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","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 (_.size(model.distributionList) > 0) {\r\n            this.distributionList = new PJQ.collections.projectContacts.ProjectContacts(model.distributionList);\r\n        } else if (!this.distributionList) {\r\n            this.distributionList = new PJQ.collections.projectContacts.ProjectContacts();\r\n        }\r\n\r\n        // if (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({\r\n            groups: this.groups.toJSON(),\r\n            assignedTo: this.assignedTo?.toJSON(),\r\n            distributionList: this.distributionList.toJSON(),\r\n            attachments: this.attachments.getChangedModels(),\r\n            beforeAttachments: this.beforeAttachments.getChangedModels(),\r\n            afterAttachments: this.afterAttachments.getChangedModels(),\r\n            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    distribute: function (callback) {\r\n        new PJQ.ajax.Request({\r\n            endpoint: this.endpoint() + '/distribute',\r\n        }).post().done((response) => {\r\n            this.reset(response);\r\n            if (typeof callback === 'function') {\r\n                callback(true);\r\n            }\r\n        }).fail((res) => {\r\n            let err = null;\r\n            if (res.responseJSON && res.responseJSON.message) {\r\n                err = res.responseJSON.message;\r\n            }\r\n            if (typeof callback === 'function') {\r\n                callback(false, err);\r\n            }\r\n        });\r\n    },\r\n});\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 '<span style=\"color:' + row.getStatusColor() + '\">' + row.getStatusName() + '</span>';\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 '<span style=\"color:' + row.getPriorityColor() + '\">' + row.getPriorityName() + '</span>';\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 '<span class=\"text-danger font-weight-bold\">' + dateString + '</span>';\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 = '<a target=\"_blank\" href=\"' + fieldValue + '\">' + fieldValue + '</a>';\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 = '<div class=\"show-on-row-hover\"><button type=\"button\" data-action-item-id=\"' + data + '\" class=\"btn btn-info btn-edit-action-item\"><i class=\"fal fa-pencil\"></i></button>';\n                    if (this.options.isAdmin) {\n                        html += '<button type=\"button\" data-action-item-id=\"' + data + '\" class=\"btn btn-danger btn-delete-action-item ml-1\"><i class=\"fal fa-trash\"></i></button>';\n                    }\n                    html += '</div>';\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        'click .btn-distribute': 'distribute'\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            if (this.options.isAdmin) {\n                new PJQ.views.contacts.ContactsSelectInput({\n                    el: this.$('.action-item-distribution-list'),\n                    selectedContact: this.model.distributionList.models,\n                    canViewContacts: this.options.project == null || this.options.project.hasPermission('projectContacts.canView'),\n                    canEdit: this.options.canEditPeople,\n                    displayContactsBlock: true,\n                    canSwitchContext: this.options.project == null,\n                    context: this.options.project != null ? PJQ.constants.contacts.contexts.PROJECTCONTACTS : PJQ.constants.contacts.contexts.USERS,\n                    isSingleChoice: false,\n                    onChange: _.bind(function (selectedContacts) {\n                        this.model.distributionList.reset(selectedContacts);\n                        this.model.isDirty = true;\n                    }, this)\n                });\n            }\n\n            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: this.model.id > 0 ? null : (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: this.model.id > 0 ? null : (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: this.model.id > 0 ? null : (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('<div class=\"text-muted font-weight-light mt-1\">Project Managers</div>');\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    distribute: function () {\n        new PJQ.views.modals.YesNo({\n            header: \"Distribute Action Item?\",\n            body: 'Are you sure you want to distribute this action item?',\n            onYes: () => {\n                this.model.distribute(() => {\n                    PJQ.notifications.notify.successNotify({\n                        message: \"Action Item successfully distributed\"\n                    });\n                    this.render();\n                });\n            }\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 <span class='text-danger'>Not Resolved</span>?\",\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 <span class='text-primary'>\" + (workCompleteOverride ? workCompleteOverride : \"Work Completed\") + \"</span>?\",\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 <span class='text-success'>Resolved</span>?\",\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 fnSaveAnnotations = (callback) => {\n                if (_.size(this.changedAnnotations.models) === 0) {\n                    callback();\n                    return;\n                }\n\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.isAdmin) {\n                        this.model.set('isRead', true);\n                    }\n                    callback();\n                });\n            },\n            isNew = this.model.isNew();\n        if (this.model.hasChanged() || isNew) {\n            this.model.save(null, {\n                notify: true,\n                success: () => {\n                    fnSaveAnnotations(() => {\n                        if (typeof this.options.onSave === 'function') {\n                            this.options.onSave(this.model);\n                        }\n\n                        this.removeModal();\n                    });\n                }\n            });\n        } else {\n            fnSaveAnnotations(() => {\n                if (typeof this.options.onSave === 'function') {\n                    this.options.onSave(this.model);\n                }\n\n                PJQ.notifications.notify.successNotify({\n                    message: \"RFI Saved Successfully\"\n                });\n\n                this.removeModal();\n            });\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 ('<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\"' + (data ? ' checked ' : '') + 'class=\"select-column\"/><div class=\"state p-primary\"><label class=\"wd-0\">&nbsp;</label></div></div></div>');\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"]}