{"version":3,"sources":["1initializers.js","rfimodels.js","rfiviews.js","settingsviews.js"],"names":["PJQ","collections","rfi","models","views","modules","routes","route","name","callback","projectId","projectWall","initProjectNavigator","parseInt","rfiId","app","addRoutes","RFI","BaseModel","extend","notifyName","idAttribute","endpoint","urlOptions","arr","this","isNew","value","get","id","params","noNotify","push","parameter","draft","helpers","urlHelpers","generateEndpoint","parse","model","groups","Groups","createdBy","projectContacts","ProjectContact","requestedBy","assigneeList","ProjectContacts","distributionList","ballInCourt","responses","Responses","attachments","Attachments","customFieldValues","fetchNotifications","notifications","Notifications","fetch","success","_","bind","getStatusColor","set","constants","statuses","DRAFT","statusColors","getStatusName","statusNames","checkIsAssignee","user","checkIsDistribution","beforeSave","toJSON","getChangedModels","open","arguments","length","undefined","save","status","OPEN","notify","successNotify","message","error","close","CLOSED","Settings","defaults","type","project","UserSettings","options","forCompany","getSettings","view","find","attributes","viewSettings","setting","Notification","notificationTypeNames","collection","Attachment","files","File","CustomField","customFields","Response","accept","isAccepted","RFIS","BaseCollection","Files","CustomFields","masterUserId","session","RFIManagement","BaseView","template","templating","Template","events","click .btn-export-summary","click .btn-export-detailed","click .btn-rfi-settings","click .btn-add-rfi","click .btn-edit-rfi","click .btn-delete-rfi","beforeFirstRender","isAdmin","hasPermission","isFetched","preferences","userSettings","fnFetch","fnRender","fetchRFIs","rfis","render","fetchRFICustomFields","hasPref","preferenceTypes","ENABLE_PROJECT_LOCATIONS","fetchLocations","locations","renderData","settings","afterRender","editRFI","renderDataTable","self","rfiDataTable","dataTables","DataTable","el","$","rowId","pageLength","rowsPerPage","data","onPageSizeChange","language","emptyTable","zeroRecords","rowCallback","row","addClass","removeClass","subTemplates","header","headerData","afterHeaderRender","$header","inputs","Selectpicker","onChange","setFilter","isIntChoices","isMultiple","noneSelectedText","locationFilterPicker","ProjectLocationPicker","getFilterData","result","locationFilter","getFilter","size","filter","contains","statusFilter","order","deferRender","onRowDoubleClick","selectedRFI","contextMenuOptions","actions","onClick","isDanger","isShown","deleteRFI","columns","getColumns","colReorder","fixedColumnsLeft","fixedColumnsRight","realtime","columnOrderChanged","includeAllColumns","includeColumns","columnData","title","width","orderData","searchable","defaultContent","each","column","sort","number","isNaN","display","visible","indexOf","location","getFullName","group","join","contact","contacts","getContactAnchor","itemDueDate","Date","dateString","dateHelpers","getDateString","dateFormats","DATE","overdueDays","getDateDaysDiff","toString","orderable","className","html","addRFI","newRFI","editRFIClicked","e","getRow","currentTarget","parents","EditRFIModal","onClose","refresh","onSave","add","addRow","onDelete","cid","removeRow","destroy","deleteRFIClicked","modals","DeleteCancel","body","exportSummary","exportList","exportDetailed","loader","Loader","loadingText","map","getFilteredRowData","getTimezoneOffset","ajax","Request","isAPI2","done","response","downloadFile","url","isEndpoint","remove","fail","xhr","err","errorNotify","viewRFISettings","RFISettingsModal","rfiView","BaseModal","contactBadge","GLOBAL","maxWidth","isShowCloseButton","noop","click .add-response","click .edit-history","click .btn-notification-history","click .btn-export","click .btn-save","click .btn-save-open","click .btn-save-draft","click .btn-close","click .rfi-delete","click .btn-rfi-open","click .btn-rfi-close","click .btn-accept-response","click .btn-un-accept-response","click .btn-download-all-attachments","beforeModalCreated","isPublic","RFI_DEFAULT_PUBLIC","shouldNotifyProjectContacts","RFI_DEFAULT_NOTIFY_PROJECT_CONTACTS","shouldNotifyParticipants","RFI_DEFAULT_NOTIFY_PARTICIPANTS","changedAnnotations","drawings","Annotations","beforeRender","etcPerms","canAddComment","canAddAttachment","canEdit","_this","Binder","$el","watchElements","afterChange","$e","attr","val","$ph","prop","Datepicker","datepickerOptions","format","datePicker","defaultDate","newDate","currentDueDate","defaultValue","AutocompleteInput","source","item","ballInCourtInput","ContactsSelectInput","Contacts","union","selectedContact","isSingleChoice","isReadOnly","selectedContacts","reset","isDirty","context","contexts","PARTICIPANTS","PROJECTCONTACTS","refreshBallInCourtInput","renderCustomFields","renderStatus","GroupsSelectInput","isShowAddButton","groupLevels","getPref","GROUP_LEVELS","groupUserId","addButton","selectedGroups","onAfterSave","fileUploader","FileUploaderGrid","contextId","canAddAnnotations","onAnnotationChange","annotation","merge","mergeAnnotations","canUpload","canDelete","includeProjectAttachments","previewImageDimension","onSuccess","attachment","renderResponses","customFieldsForm","CustomFieldsForm","fieldValues","isEdit","css","statusActions","exportPDF","addResponseClicked","addResponse","trim","responseText","createdOn","renderAcceptedResponses","acceptedResponses","$responses","renderSubTemplate","validate","isValid","inputHelpers","setInputError","empty","Alert","text","window","scrollTo","viewEditHistory","punchlists","EditHistoryModal","editHistory","viewNotificationHistory","NotificationHistory","unAcceptResponse","closest","acceptResponse","checkNotify","modalBody","YesNo","onYes","onNo","openRFI","closeRFI","checkActiveResponse","aRes","saveDraftClicked","saveAndOpenClicked","saveClicked","_this2","isUploading","hasChanged","saveAll","removeModal","SaveDontSave","onDontSave","delete","downloadAllAttachments","downloadAttachments","entryId","guid","AttachmentManagement","click .rfi-attachment","file","attachmentClicked","selectedAttachment","viewAttachment","renderPhotoViewer","RFISettings","change .select-column","click .settings-save","listenTo","tooltip","rowsPerPageSelectPicker","dataTable","isHideSearch","dom","columnSelected","sender","fetchRFISettings","settingsView","getValue","put"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.collections.rfi = {};\n\nPJQ.models.rfi = {};\n\nPJQ.views.rfi = {};\n\nPJQ.modules.rfi = {\n\troutes: [\n\t\t{\n\t\t\troute: 'projects/:projectId/rfi',\n\t\t\tname: 'rfiList',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"rfi\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/rfi/:rfiId',\n\t\t\tname: 'rfiItem',\n\t\t\tcallback: function (projectId, rfiId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"rfi\", {\n\t\t\t\t\trfiId: parseInt(rfiId)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t]\n};\n\nPJQ.app.addRoutes(PJQ.modules.rfi.routes);","// Models\nPJQ.models.rfi.RFI = PJQ.models.BaseModel.extend({\n\tnotifyName: 'RFI',\n\tidAttribute: \"rfiId\",\n\tendpoint: function (urlOptions) {\n\t\tlet arr;\n\t\tif (this.isNew()) {\n\t\t\tarr = [\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.get('projectId')\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'rfi',\n\t\t\t\t\tvalue: this.id\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t\telse {\n\t\t\tarr = [\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'rfi',\n\t\t\t\t\tvalue: this.id\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t\tlet params = [];\n\t\tif (urlOptions != null) {\n\t\t\tif (urlOptions.noNotify) {\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'noNotify',\n\t\t\t\t\tvalue: true\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (urlOptions.draft === true) {\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'draft',\n\t\t\t\t\tvalue: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint(arr, params);\n\t},\n\tparse: function (model) {\n\t\tif (!model)\n\t\t\treturn model;\n\n\t\tthis.groups = new PJQ.collections.groups.Groups(model.groups);\n\n\t\tif (model.createdBy != null) {\n\t\t\tthis.createdBy = new PJQ.models.projectContacts.ProjectContact(model.createdBy);\n\t\t}\n\t\telse {\n\t\t\tthis.createdBy = null;\n\t\t}\n\n\t\tif (model.requestedBy != null) {\n\t\t\tthis.requestedBy = new PJQ.models.projectContacts.ProjectContact(model.requestedBy);\n\t\t}\n\t\telse {\n\t\t\tthis.requestedBy = null;\n\t\t}\n\n\t\tthis.assigneeList = new PJQ.collections.projectContacts.ProjectContacts(model.assigneeList);\n\n\t\tthis.distributionList = new PJQ.collections.projectContacts.ProjectContacts(model.distributionList);\n\n\t\tthis.ballInCourt = new PJQ.collections.projectContacts.ProjectContacts(model.ballInCourt);\n\n\t\tthis.responses = new PJQ.collections.rfi.Responses(model.responses);\n\n\t\tthis.attachments = new PJQ.collections.rfi.Attachments(model.attachments);\n\n\t\tif (model.customFieldValues == null) {\n\t\t\tmodel.customFieldValues = [];\n\t\t}\n\n\t\treturn model;\n\t},\n\tfetchNotifications: function (callback) {\n\t\tif (this.notifications == null) {\n\t\t\tthis.notifications = new PJQ.collections.rfi.Notifications(null, {\n\t\t\t\trfi: this\n\t\t\t})\n\t\t}\n\n\t\tthis.notifications.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tcallback(this.notifications);\n\t\t\t}, this)\n\t\t});\n\t},\n\tgetStatusColor: function () {\n\t\tif (this.get('status') == null) {\n\t\t\tthis.set('status', PJQ.constants.rfi.statuses.DRAFT);\n\t\t}\n\t\treturn PJQ.constants.rfi.statusColors[this.get('status')];\n\t},\n\tgetStatusName: function () {\n\t\tif (this.get('status') == null) {\n\t\t\tthis.set('status', PJQ.constants.rfi.statuses.DRAFT);\n\t\t}\n\t\treturn PJQ.constants.rfi.statusNames[this.get('status')];\n\t},\n\tcheckIsAssignee: function (user) {\n\t\treturn user && (this.get('isAssignee') || this.assigneeList.get(user.id) != null);\n\t},\n\tcheckIsDistribution: function (user) {\n\t\treturn user && (this.get('isDistribution') || this.distributionList.get(user.id) != null);\n\t},\n\tbeforeSave: function () {\n\t\tthis.set('assigneeList', this.assigneeList.toJSON());\n\t\tthis.set('distributionList', this.distributionList.toJSON());\n\t\tthis.set('ballInCourt', this.ballInCourt.toJSON());\n\t\tthis.set('requestedBy', this.requestedBy);\n\t\tthis.set('groups', this.groups.toJSON());\n\t\tthis.set('attachments', this.attachments.getChangedModels());\n\t\tif (this.isNew()) {\n\t\t\tthis.set('responses', this.responses.getChangedModels());\n\t\t}\n\t},\n\topen: function (callback, noNotify = false) {\n\t\tthis.save({\n\t\t\tstatus: PJQ.constants.rfi.statuses.OPEN,\n\t\t}, {\n\t\t\turlOptions: {\n\t\t\t\tnoNotify: noNotify\n\t\t\t},\n\t\t\tsuccess: function () {\n\t\t\t\tcallback(true);\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: 'RFI opened'\n\t\t\t\t});\n\t\t\t},\n\t\t\terror: function () {\n\t\t\t\tcallback(true);\n\t\t\t}\n\t\t});\n\t},\n\tclose: function (callback, noNotify = false) {\n\t\tthis.save({\n\t\t\tstatus: PJQ.constants.rfi.statuses.CLOSED,\n\t\t}, {\n\t\t\turlOptions: {\n\t\t\t\tnoNotify: noNotify\n\t\t\t},\n\t\t\tsuccess: function () {\n\t\t\t\tcallback(true);\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: 'RFI closed'\n\t\t\t\t});\n\t\t\t},\n\t\t\terror: function () {\n\t\t\t\tcallback(true);\n\t\t\t}\n\t\t});\n\t}\n});\n\nPJQ.models.rfi.Settings = PJQ.models.BaseModel.extend({\n\tidAttribute: 'settingId',\n\tdefaults: {\n\t\ttype: 'RFI'\n\t},\n\tendpoint: function () {\n\t\tlet project = this.get('project');\n\t\tif (project != null && project.id > 0) {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: project.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'rfi'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'settings'\n\t\t\t\t}\n\t\t\t])\n\t\t}\n\t\telse {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'users'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'rfi'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'settings'\n\t\t\t\t}\n\t\t\t])\n\t\t}\n\t}\n});\n\nPJQ.models.rfi.UserSettings = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\tlet params = [];\n\t\tif (this.options.forCompany) {\n\t\t\tparams.push({\n\t\t\t\tparameter: 'forCompany',\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t}\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'rfi'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'settings'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'user'\n\t\t\t}\n\t\t], params);\n\t},\n\tgetSettings: function (view) {\n\t\treturn _.find(this.attributes.viewSettings, _.bind(function (setting) {\n\t\t\treturn setting.view === view;\n\t\t}, this));\n\t}\n});\n\nPJQ.models.rfi.Notification = PJQ.models.notifications.Notification.extend({\n\tnotificationTypeNames: PJQ.constants.rfi.notificationTypeNames,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'rfi',\n\t\t\t\tvalue: this.collection.options.rfi.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'notifications',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.models.rfi.Attachment = PJQ.models.files.File.extend({\n\tidAttribute: 'attachmentId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'rfi',\n\t\t\t\tvalue: this.get('rfiId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'attachments',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.models.rfi.CustomField = PJQ.models.customFields.CustomField.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'rfi'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'customFields',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.models.rfi.Response = PJQ.models.BaseModel.extend({\n\tidAttribute: \"responseId\",\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'rfi',\n\t\t\t\tvalue: this.get('rfiId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'responses',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t])\n\t},\n\tparse: function (model) {\n\t\tif (!model) {\n\t\t\treturn model;\n\t\t}\n\n\t\tif (model.createdBy != null) {\n\t\t\tthis.createdBy = new PJQ.models.projectContacts.ProjectContact(model.createdBy);\n\t\t}\n\n\t\treturn model;\n\t},\n\taccept: function (isAccepted, callback) {\n\t\tthis.set();\n\t\tthis.save({\n\t\t\tisAccepted: isAccepted\n\t\t}, {\n\t\t\tsuccess: function () {\n\t\t\t\tcallback(true);\n\t\t\t\tlet message;\n\t\t\t\tif (isAccepted) {\n\t\t\t\t\tmessage = 'Response marked as accepted';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmessage = 'Response marked as not accepted';\n\t\t\t\t}\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: message\n\t\t\t\t});\n\t\t\t},\n\t\t\terror: function () {\n\t\t\t\tcallback(false);\n\t\t\t}\n\t\t});\n\t}\n});\n\n\n// Collections\nPJQ.collections.rfi = {};\nPJQ.collections.rfi.RFIS = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.rfi.RFI,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'rfi'\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.collections.rfi.Notifications = PJQ.collections.notifications.Notifications.extend({\n\tmodel: PJQ.models.rfi.Notification,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'rfi',\n\t\t\t\tvalue: this.options.rfi.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'notifications'\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.collections.rfi.Attachments = PJQ.collections.files.Files.extend({\n\tmodel: PJQ.models.rfi.Attachment,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'rfi',\n\t\t\t\tvalue: this.options.rfiId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'attachments'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.collections.rfi.CustomFields = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.rfi.CustomField,\n\toptions: {\n\t\tmasterUserId: null\n\t},\n\tendpoint: function () {\n\t\tlet projectId = null;\n\t\tif(this.options.project != null){\n\t\t\tprojectId = this.options.project.id\n\t\t} else if(this.options.projectId > 0){\n\t\t\tprojectId = this.options.projectId;\n\t\t}\n\n\t\tif(projectId > 0){\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\tvalue: projectId\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'rfi'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'customFields'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tparameter: 'masterUserId',\n\t\t\t\t\t\tvalue: this.options.masterUserId > 0 ? this.options.masterUserId : PJQ.app.session.get('masterUserId')\n\t\t\t\t\t}\n\t\t\t\t]);\n\t\t}\n\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'rfi'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'customFields'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tparameter: 'masterUserId',\n\t\t\t\t\tvalue: this.options.masterUserId > 0 ? this.options.masterUserId : PJQ.app.session.get('masterUserId')\n\t\t\t\t}\n\t\t\t]);\n\t}\n});\n\nPJQ.collections.rfi.Responses = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.rfi.Response,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'rfi',\n\t\t\t\tvalue: this.options.rfiId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'responses'\n\t\t\t}\n\t\t]);\n\t}\n});\n","PJQ.views.rfi.RFIManagement = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.RFI, 'RFI-Management')\n },\n events: {\n 'click .btn-export-summary': 'exportSummary',\n 'click .btn-export-detailed': 'exportDetailed',\n 'click .btn-rfi-settings': 'viewRFISettings',\n 'click .btn-add-rfi': 'addRFI',\n 'click .btn-edit-rfi': 'editRFIClicked',\n 'click .btn-delete-rfi': 'deleteRFIClicked'\n },\n beforeFirstRender: function () {\n if (PJQ.app.session.user == null) {\n this.options.isAdmin = false;\n } else {\n this.options.isAdmin = this.options.project.get('masterUserId') === PJQ.app.session.user.get('masterUserId')\n && this.options.project.hasPermission('rfi.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.rfi.UserSettings();\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 this.options.project.fetchRFIs(_.bind(function (rfis) {\n this.collection = rfis;\n this.isFetched = true;\n this.render();\n }, this));\n } else {\n this.isFetched = true;\n }\n }, this);\n if (this.options.project != null) {\n this.options.project.fetchRFICustomFields(_.bind(function (customFields) {\n fnRender(customFields);\n }, this));\n } else {\n PJQ.app.session.fetchRFICustomFields(null, _.bind(function (customFields) {\n fnRender(customFields);\n }, this));\n }\n }, this)\n });\n }, this)\n\n if (this.options.project.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 settings: this.options.settings\n };\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n if (this.options.rfiId > 0) {\n let rfi = this.collection.get(this.options.rfiId);\n this.options.rfiId = null;\n if (rfi != null) {\n rfi.fetch({\n success: _.bind(function () {\n this.editRFI(rfi);\n }, this)\n });\n }\n }\n\n this.renderDataTable();\n },\n renderDataTable() {\n let self = this;\n this.rfiDataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.rfi-table'),\n rowId: \"cid\",\n pageLength: this.options.userSettings.getSettings(PJQ.constants.rfi.view.RFIS).rowsPerPage,\n data: this.collection.models,\n onPageSizeChange: _.bind(function (value) {\n this.options.userSettings.getSettings(PJQ.constants.rfi.view.RFIS).rowsPerPage = value;\n this.options.userSettings.save();\n }, this),\n settings: this.options.userSettings.getSettings(PJQ.constants.rfi.view.RFIS),\n language: {\n emptyTable: 'Click \"Add RFI\" to create a new RFI',\n zeroRecords: \"No RFI matched the search criteria\"\n },\n rowCallback: function (row, data) {\n if (!data.get('isRead') && self.options.isAdmin) {\n $(row).addClass('unread-highlight')\n } else {\n $(row).removeClass('unread-highlight')\n }\n },\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.RFI, 'Data-Table-Header-RFI')\n },\n headerData: function () {\n return {\n project: self.options.project,\n settings: self.options.settings,\n preferences: self.preferences\n };\n },\n afterHeaderRender: _.bind(function (view, $header) {\n new PJQ.inputs.Selectpicker({\n el: $header.find('.rfi-status-filter'),\n onChange: function (value) {\n view.setFilter('status', value);\n },\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 statusFilter = view.getFilter('status');\n if (_.size(statusFilter) === 0) {\n return result;\n }\n\n return _.filter(result, function (row) {\n return _.contains(statusFilter, row.get('status'));\n });\n },\n order: [[0, \"asc\"]],\n deferRender: true,\n onRowDoubleClick: _.bind(function (row) {\n let selectedRFI = row.data();\n selectedRFI.fetch({\n success: _.bind(function () {\n this.editRFI(selectedRFI);\n }, this)\n });\n }, this),\n contextMenuOptions: {\n actions: [\n {\n name: 'Edit',\n onClick: _.bind(function (row) {\n this.editRFI(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.deleteRFI(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) {\n let columns = [], includeColumns = [],\n viewSettings = this.options.userSettings.getSettings(PJQ.constants.rfi.view.RFIS);\n\n if (includeAllColumns) {\n includeColumns = [\"number\", \"title\", \"question\", \"location\", \"groupList\", \"requestedBy\", \"assigneeList\", \"ballInCourt\", \"distributionList\", \"dueDate\", \"status\"];\n } else\n includeColumns = viewSettings.columns;\n\n if (this.options.isAdmin && !includeAllColumns) {\n columns.push({\n \"columnData\": \"\",\n \"data\": null,\n \"title\": \"\",\n \"width\": \"20px\",\n \"orderData\": [0, 1],\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n if (!row.get('isRead')) {\n return '';\n }\n return '';\n }\n })\n }\n\n _.each(includeColumns, _.bind(function (column) {\n switch (column) {\n case 'number':\n columns.push({\n \"columnData\": \"number\",\n \"data\": {\n \"_\": \"attributes.number\",\n \"sort\": _.bind(function (row) {\n let number = parseInt(row.attributes.number);\n if (isNaN(number)) {\n return row.attributes.number;\n } else {\n return number\n }\n }, this),\n \"display\": \"attributes.number\"\n },\n \"title\": \"Number\",\n \"width\": \"80px\",\n \"type\": 'natural-ci',\n visible: viewSettings.columns.indexOf(column) !== -1\n });\n break;\n case 'title':\n columns.push({\n columnData: 'title',\n data: \"attributes.title\",\n title: \"Title\",\n visible: viewSettings.columns.indexOf(column) !== -1\n });\n break;\n case 'question':\n columns.push({\n columnData: 'question',\n data: \"attributes.question\",\n title: \"Question\",\n visible: viewSettings.columns.indexOf(column) !== -1\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 data;\n }, this),\n visible: viewSettings.columns.indexOf(column) !== -1\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.columns.indexOf(column) !== -1\n });\n break;\n case 'assigneeList':\n columns.push({\n columnData: 'assigneeList',\n title: \"Assignee\",\n render: function (data, type, row) {\n let result = [];\n if (_.size(row.assigneeList.models) > 0) {\n _.each(row.assigneeList.models, function (contact) {\n result.push(PJQ.helpers.contacts.getContactAnchor({contact: contact}));\n });\n } else {\n result.push('Nobody');\n }\n return result.join(', ');\n },\n visible: viewSettings.columns.indexOf(column) !== -1\n });\n break;\n case 'ballInCourt':\n columns.push({\n columnData: 'ballInCourt',\n data: \"attributes.ballInCourt\",\n title: \"Ball In Court\",\n render: function (data, type, row) {\n let result = [];\n if (_.size(row.ballInCourt.models) > 0) {\n _.each(row.ballInCourt.models, function (contact) {\n result.push(PJQ.helpers.contacts.getContactAnchor({contact: contact}));\n });\n } else {\n result.push('Nobody');\n }\n return result.join(', ');\n },\n visible: viewSettings.columns.indexOf(column) !== -1\n });\n break;\n case 'distributionList':\n columns.push({\n columnData: 'distributionList',\n title: \"Distribution List\",\n render: function (data, type, row) {\n let result = [];\n if (_.size(row.distributionList.models) > 0) {\n _.each(row.distributionList.models, function (contact) {\n result.push(PJQ.helpers.contacts.getContactAnchor({contact: contact}));\n });\n } else {\n result.push('Nobody');\n }\n return result.join(', ');\n },\n visible: viewSettings.columns.indexOf(column) !== -1\n });\n break;\n case 'dueDate':\n columns.push({\n columnData: \"dueDate\",\n data: \"attributes.dueDate\",\n title: \"Response Due\",\n searchable: false,\n width: '220px',\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 overdueDays = PJQ.helpers.dateHelpers.getDateDaysDiff(new Date(), itemDueDate);\n if (row.get('status') !== PJQ.constants.rfi.statuses.CLOSED && overdueDays > 0) {\n return '' + dateString + '(' + overdueDays.toString() + 'd overdue)' + '';\n }\n return dateString;\n }\n return 'Not Set';\n },\n visible: viewSettings.columns.indexOf(column) !== -1\n });\n break;\n case 'requestedBy':\n columns.push({\n columnData: 'requestedBy',\n title: \"Requested By\",\n render: function (data, type, row) {\n return PJQ.helpers.contacts.getContactAnchor({contact: row.requestedBy});\n },\n visible: viewSettings.columns.indexOf(column) !== -1\n });\n break;\n case 'status':\n columns.push({\n columnData: 'status',\n data: \"attributes.status\",\n title: \"Status\",\n width: \"80px\",\n render: function (data, type, row) {\n return '' + row.getStatusName() + '';\n },\n visible: viewSettings.columns.indexOf(column) !== -1\n });\n break;\n }\n }, this));\n\n if (!includeAllColumns) {\n columns.push({\n data: \"attributes.rfiId\",\n title: \"\",\n width: '80px',\n orderable: false,\n searchable: false,\n className: 'text-align-center',\n render: _.bind(function () {\n let html = '
';\n if (this.options.isAdmin) {\n html += '';\n }\n html += '
';\n return html;\n }, this)\n });\n }\n\n return columns;\n },\n addRFI() {\n let newRFI = new PJQ.models.rfi.RFI({\n projectId: PJQ.app.session.project.id\n });\n this.editRFI(newRFI);\n },\n editRFIClicked(e) {\n let row = this.rfiDataTable.getRow($(e.currentTarget).parents('tr')),\n selectedRFI = row.data();\n selectedRFI.fetch({\n success: _.bind(function () {\n this.editRFI(selectedRFI);\n }, this)\n });\n },\n editRFI(rfi) {\n let isNew = rfi.isNew();\n new PJQ.views.rfi.EditRFIModal({\n model: rfi,\n project: this.options.project,\n onClose: _.bind(function (rfi) {\n this.rfiDataTable.refresh();\n }, this),\n onSave: _.bind(function (rfi) {\n if (isNew) {\n this.collection.add(rfi);\n this.rfiDataTable.addRow(rfi);\n }\n this.rfiDataTable.refresh();\n }, this),\n onDelete: _.bind(function (rfi) {\n let row = this.rfiDataTable.getRow(rfi.cid);\n if (row != null) {\n this.rfiDataTable.removeRow(row);\n }\n rfi.destroy();\n this.rfiDataTable.refresh();\n }, this)\n });\n },\n deleteRFIClicked: function (e) {\n let row = this.rfiDataTable.getRow($(e.currentTarget).parents('tr'));\n this.deleteRFI(row);\n },\n deleteRFI(row) {\n let rfi = row.data();\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Delete\",\n body: \"Are you sure you want to delete this RFI?\",\n onDelete: _.bind(function () {\n rfi.destroy();\n this.rfiDataTable.removeRow(row);\n }, this)\n });\n },\n exportSummary: function () {\n this.exportList(\"SUMMARY\");\n },\n exportDetailed: function () {\n this.exportList();\n },\n exportList: function (type) {\n let loader = new PJQ.Loader(this.$('.btn-rfi-export'), {\n loadingText: \"Exporting...\"\n });\n let params = [];\n if (_.size(type) > 0) {\n params.push({\n parameter: 'type',\n value: type\n });\n }\n\n let statusFilter = this.rfiDataTable.getFilter('status');\n //if (_.size(this.rfiDataTable.getSearchText()) > 0 || _.size(statusFilter) > 0) {\n params.push({\n parameter: 'ids',\n value: _.map(this.rfiDataTable.getFilteredRowData(), function (rfi) {\n return rfi.id;\n })\n });\n //}\n\n params.push({\n parameter: 'timeZoneOffset',\n value: new Date().getTimezoneOffset()\n })\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'rfi',\n },\n {\n endpoint: 'export'\n }\n ], params),\n isAPI2: true\n }).get().done(_.bind(function (response) {\n PJQ.files.downloadFile(response.url, {\n isEndpoint: false\n });\n PJQ.notifications.notify.successNotify({\n message: 'RFIs Successfully Exported'\n });\n loader.remove();\n }, this)).fail(_.bind(function (xhr, err, result) {\n loader.remove();\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to export RFIs'\n });\n }, this));\n },\n viewRFISettings: function () {\n new PJQ.views.rfi.RFISettingsModal({\n rfiView: this,\n userSettings: this.options.userSettings,\n onSave: _.bind(function () {\n this.renderDataTable();\n }, this)\n });\n }\n});\n\nPJQ.views.rfi.EditRFIModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.RFI, 'Modal-Edit-RFI'),\n subTemplates: {\n responses: new PJQ.templating.Template(PJQ.constants.modules.RFI, 'Responses'),\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-response': 'addResponseClicked',\n 'click .edit-history': 'viewEditHistory',\n 'click .btn-notification-history': 'viewNotificationHistory',\n 'click .btn-export': 'exportPDF',\n 'click .btn-save': 'saveClicked',\n 'click .btn-save-open': 'saveAndOpenClicked',\n 'click .btn-save-draft': 'saveDraftClicked',\n 'click .btn-close': 'close',\n 'click .rfi-delete': 'delete',\n 'click .btn-rfi-open': 'openRFI',\n 'click .btn-rfi-close': 'closeRFI',\n 'click .btn-accept-response': 'acceptResponse',\n 'click .btn-un-accept-response': 'unAcceptResponse',\n 'click .btn-download-all-attachments': 'downloadAllAttachments'\n },\n beforeModalCreated: function () {\n this.isFetched = false;\n this.preferences = this.options.project ? this.options.project.preferences : PJQ.app.session.preferences;\n let fnRender = _.bind(function (customFields) {\n this.options.customFields = customFields;\n this.isFetched = true;\n\n if(this.model.isNew() && this.options.project && this.options.project.hasPermission('rfi.isAdmin')){\n this.model.set({\n isPublic: this.preferences.hasPref(PJQ.constants.preferenceTypes.RFI_DEFAULT_PUBLIC),\n shouldNotifyProjectContacts: this.preferences.hasPref(PJQ.constants.preferenceTypes.RFI_DEFAULT_NOTIFY_PROJECT_CONTACTS),\n shouldNotifyParticipants: this.preferences.hasPref(PJQ.constants.preferenceTypes.RFI_DEFAULT_NOTIFY_PARTICIPANTS)\n });\n }\n\n this.render();\n }, this);\n if (this.options.project != null) {\n this.options.project.fetchRFICustomFields(_.bind(function (customFields) {\n fnRender(customFields);\n }, this));\n } else {\n PJQ.app.session.fetchRFICustomFields(null, _.bind(function (customFields) {\n fnRender(customFields);\n }, this));\n }\n this.changedAnnotations = new PJQ.collections.drawings.Annotations();\n },\n beforeRender: function () {\n if (PJQ.app.session.user == null) {\n let etcPerms = this.model.get('status') !== PJQ.constants.rfi.statuses.CLOSED && (this.model.isNew()\n || this.model.checkIsAssignee(PJQ.app.session.contact ? PJQ.app.session.contact : PJQ.app.session.user)\n || this.model.checkIsDistribution(PJQ.app.session.contact ? PJQ.app.session.contact : PJQ.app.session.user));\n this.options.canAddComment = etcPerms;\n this.options.canAddAttachment = etcPerms;\n this.options.canEdit = this.model.isNew();\n this.options.isAdmin = false;\n } else {\n this.options.isAdmin = this.options.project.get('masterUserId') === PJQ.app.session.user.get('masterUserId') && this.options.project.hasPermission('rfi.isAdmin');\n let etcPerms = this.model.get('status') !== PJQ.constants.rfi.statuses.CLOSED && (this.options.isAdmin || this.model.isNew()\n || this.model.checkIsAssignee(PJQ.app.session.contact ? PJQ.app.session.contact : PJQ.app.session.user)\n || this.model.checkIsDistribution(PJQ.app.session.contact ? PJQ.app.session.contact : PJQ.app.session.user));\n this.options.canAddComment = etcPerms;\n this.options.canAddAttachment = etcPerms;\n this.options.canEdit = this.model.isNew()\n || (this.model.get('status') !== PJQ.constants.rfi.statuses.CLOSED && this.options.isAdmin);\n }\n },\n renderData: function () {\n return {\n model: this.model,\n canAddComment: this.options.canAddComment,\n canAddAttachment: this.options.canAddAttachment,\n canEdit: this.options.canEdit,\n isAdmin: this.options.isAdmin,\n preferences: this.preferences\n };\n },\n afterRender: function () {\n if (this.isFetched) {\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input',\n 'textarea'\n ],\n afterChange: _.bind(function ($e, attr, val) {\n if (attr === 'isPublic') {\n let $ph = this.$('.public-hide');\n if (val) {\n $ph.removeClass('hidden');\n } else {\n this.model.set({\n shouldNotifyProjectContacts: false,\n shouldNotifyParticipants: false\n });\n $ph.addClass('hidden');\n $ph.prop('checked', false);\n }\n }\n }, this)\n });\n\n new PJQ.inputs.Datepicker({\n el: this.$('.rfi-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 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 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.$('.rfi-location'),\n source: _.map(_.filter(this.model.collection != null ? this.model.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 if (this.options.isAdmin) {\n this.model.set('isRead', true);\n this.ballInCourtInput = new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.rfi-ball-in-court'),\n contacts: new PJQ.collections.contacts.Contacts(_.union(this.model.assigneeList.models, this.model.distributionList.models)),\n selectedContact: this.model.ballInCourt.models,\n isSingleChoice: false,\n isReadOnly: !this.options.canEdit,\n onChange: _.bind(function (selectedContacts) {\n this.model.ballInCourt.reset(selectedContacts);\n this.model.isDirty = true;\n }, this)\n });\n\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.rfi-assigned'),\n context: [PJQ.constants.contacts.contexts.PARTICIPANTS, PJQ.constants.contacts.contexts.PROJECTCONTACTS],\n selectedContact: this.model.assigneeList.models,\n isSingleChoice: false,\n isReadOnly: !this.options.canEdit,\n onChange: _.bind(function (selectedContacts) {\n this.model.assigneeList.reset(selectedContacts);\n this.model.isDirty = true;\n this.refreshBallInCourtInput();\n }, this)\n });\n\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.rfi-distribution'),\n context: [PJQ.constants.contacts.contexts.PARTICIPANTS, PJQ.constants.contacts.contexts.PROJECTCONTACTS],\n selectedContact: this.model.distributionList.models,\n isSingleChoice: false,\n isReadOnly: !this.options.canEdit,\n onChange: _.bind(function (selectedContacts) {\n this.model.distributionList.reset(selectedContacts);\n this.model.isDirty = true;\n this.refreshBallInCourtInput();\n }, this)\n });\n\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.rfi-requested-by'),\n context: [PJQ.constants.contacts.contexts.PARTICIPANTS, PJQ.constants.contacts.contexts.PROJECTCONTACTS],\n selectedContact: this.model.requestedBy,\n isReadOnly: !this.options.canEdit,\n onChange: _.bind(function (selectedContact) {\n this.model.requestedBy = selectedContact;\n this.model.isDirty = true;\n }, this)\n });\n }\n\n this.renderCustomFields();\n\n this.renderStatus();\n\n new PJQ.views.groups.GroupsSelectInput({\n el: this.$('.rfi-groups'),\n isShowAddButton: false,\n groupLevels: PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS),\n groupUserId: PJQ.app.session.project.get('masterUserId'),\n isReadOnly: !this.options.canEdit,\n addButton: this.$('.btn-edit-groups'),\n selectedGroups: this.model.groups.models,\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.$('.rfi-file-uploader'),\n context: 'rfi',\n contextId: this.model.id,\n canAddAnnotations: this.options.canEdit,\n onAnnotationChange: (annotation) => {\n this.changedAnnotations.merge(annotation);\n },\n mergeAnnotations: this.changedAnnotations,\n collection: this.model.attachments,\n canUpload: this.options.canAddAttachment,\n canDelete: this.options.canEdit && this.options.isAdmin,\n includeProjectAttachments: true,\n previewImageDimension: 150,\n onSuccess: _.bind(function () {\n this.model.isDirty = true;\n }, this),\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 this.renderResponses();\n }\n },\n renderCustomFields: function () {\n this.customFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\n el: this.$('.rfi-custom-fields'),\n collection: this.options.customFields,\n fieldValues: this.model.get('customFieldValues'),\n isEdit: this.options.canEdit\n });\n },\n refreshBallInCourtInput: function () {\n this.ballInCourtInput.options.contacts = new PJQ.collections.contacts.Contacts(_.union(this.model.assigneeList.models, this.model.distributionList.models));\n },\n renderStatus: function () {\n this.$('.rfi-status').css('background-color', this.model.getStatusColor());\n this.$('.rfi-status-name').html(this.model.getStatusName());\n\n let statusActions,\n status = this.model.get('status');\n if (status === PJQ.constants.rfi.statuses.CLOSED) {\n statusActions = '';\n } else if (status === PJQ.constants.rfi.statuses.OPEN) {\n statusActions = '';\n } else {\n statusActions = '';\n }\n this.$('.rfi-status-actions').html(statusActions);\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: 'rfi',\n value: this.model.id\n },\n {\n endpoint: 'export'\n }\n ], [\n {\n parameter: 'timeZoneOffset',\n value: new Date(this.model.get('createdOn')).getTimezoneOffset()\n }\n ]));\n },\n addResponseClicked: function () {\n this.addResponse();\n },\n addResponse: function (callback) {\n let val = this.$('.item-new-response').val().trim();\n if (_.size(val) === 0)\n return;\n\n let response = new PJQ.models.rfi.Response({\n rfiId: this.model.id,\n responseText: val,\n createdOn: new Date()\n });\n if (!this.model.isNew()) {\n response.save(null, {\n success: _.bind(function () {\n this.model.responses.add(response);\n this.renderResponses();\n\n if (typeof callback === 'function') {\n callback();\n }\n }, this)\n });\n } else {\n response.createdBy = PJQ.app.session.user;\n this.model.responses.add(response);\n this.renderResponses();\n\n if (typeof callback === 'function') {\n callback();\n }\n }\n\n this.$('.item-new-response').val('');\n },\n renderAcceptedResponses: function () {\n let acceptedResponses = _.filter(this.model.responses.models, function (response) {\n return response.get('isAccepted');\n }),\n $responses = this.$('.rfi-accepted-responses');\n if (_.size(acceptedResponses) > 0) {\n this.renderSubTemplate(false, this.options.subTemplates.responses, $responses, {\n responses: acceptedResponses,\n canEdit: this.options.canEdit\n });\n } else {\n $responses.html('
No Accepted Responses
');\n }\n },\n renderResponses: function () {\n this.renderAcceptedResponses();\n this.renderSubTemplate(false, this.options.subTemplates.responses, this.$('.rfi-responses'), {\n responses: this.model.responses.models,\n canEdit: this.options.canEdit\n });\n },\n validate: function () {\n let isValid = true;\n\n PJQ.helpers.inputHelpers.setInputError(this.$('.item-title'), true);\n if (_.size(this.$('.item-title').val()) === 0) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(this.$('.item-title'), false);\n }\n\n isValid = isValid && this.customFieldsForm.validate();\n\n // display/clear banner on top of page\n if (!isValid) {\n new PJQ.Alert(this.$('.validation-error'), {\n type: 'danger',\n text: 'Required fields are empty'\n });\n\n window.scrollTo(0, 0);\n } else {\n this.$('.validation-error').empty();\n }\n\n return isValid;\n },\n viewEditHistory: function () {\n new PJQ.views.punchlists.EditHistoryModal({\n collection: this.model.editHistory\n });\n },\n viewNotificationHistory: function () {\n this.model.fetchNotifications(function (notifications) {\n new PJQ.views.notifications.NotificationHistory({\n collection: notifications\n });\n })\n },\n unAcceptResponse: function (e) {\n let cid = $(e.currentTarget).closest('.card').data('cid'),\n response = this.model.responses.get(cid);\n response.accept(false, _.bind(function () {\n this.renderResponses();\n }, this));\n },\n acceptResponse: function (e) {\n let cid = $(e.currentTarget).closest('.card').data('cid'),\n response = this.model.responses.get(cid);\n response.accept(true, _.bind(function () {\n this.renderResponses();\n }, this));\n },\n checkNotify: function (modalBody, callback) {\n new PJQ.views.modals.YesNo({\n header: \"Send Notifications?\",\n body: modalBody,\n onYes: _.bind(function () {\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this),\n onNo: _.bind(function () {\n if (typeof callback === 'function') {\n }\n callback(false);\n }, this)\n });\n },\n openRFI: function () {\n this.checkNotify('Would you like to notify users that this RFI has been opened?', _.bind(function (notify) {\n this.model.set('closedOn', null);\n this.model.open(_.bind(function () {\n this.render();\n this.options.onSave(this.model)\n }, this), !notify);\n }, this));\n },\n closeRFI: function () {\n this.checkNotify('Would you like to notify users that this RFI has been closed?', _.bind(function (notify) {\n this.model.set('closedOn', new Date());\n this.model.close(_.bind(function () {\n this.render();\n this.options.onSave(this.model)\n }, this), !notify);\n }, this));\n },\n checkActiveResponse: function (callback) {\n let aRes = this.$('.item-new-response').val();\n if (_.size(aRes) > 0) {\n new PJQ.views.modals.YesNo({\n header: \"Post Response?\",\n body: 'You typed a response but did not click Post Response. Would you like to post this response before continuing?',\n onYes: _.bind(function () {\n this.addResponse(callback);\n }, this),\n onNo: _.bind(function () {\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)\n });\n } else {\n if (typeof callback === 'function') {\n callback(true);\n }\n }\n },\n saveDraftClicked: function () {\n this.save(true);\n },\n saveAndOpenClicked: function () {\n this.model.set('status', PJQ.constants.rfi.statuses.OPEN);\n this.save();\n },\n saveClicked: function () {\n this.save();\n },\n save: function (draft = false) {\n if (!this.validate())\n return;\n\n this.checkActiveResponse(() => {\n if (this.fileUploader.isUploading()) {\n new PJQ.views.BaseModal({\n header: \"Files Uploading\",\n body: \"You can't save while files are uploading\"\n });\n } else {\n if (this.model.hasChanged() || this.model.isNew()) {\n this.model.save(null, {\n notify: true,\n urlOptions: {\n draft: draft\n },\n success: () => {\n _.each(this.changedAnnotations.models, (annotation) =>{\n if(annotation.isNew()){\n annotation.set('contextId', this.model.id);\n }\n });\n this.changedAnnotations.saveAll(() => {\n if (this.options.isAdmin) {\n this.model.set('isRead', true);\n }\n if (this.options.onSave) {\n this.options.onSave(this.model);\n }\n this.removeModal();\n });\n }\n });\n } else {\n this.removeModal();\n }\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.checkActiveResponse(_.bind(function () {\n this.onClose(this.model);\n if (typeof this.options.onClose === 'function') {\n this.options.onClose(this.model);\n }\n this.removeModal();\n }, this));\n }, this)\n });\n } else {\n this.checkActiveResponse(_.bind(function () {\n this.onClose(this.model);\n this.removeModal();\n }, this));\n }\n },\n delete: function () {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this RFI?\",\n onDelete: _.bind(function () {\n if (this.options.onDelete) {\n this.options.onDelete(this.model);\n }\n this.removeModal();\n }, this)\n });\n },\n downloadAllAttachments: function () {\n this.options.project.downloadAttachments(_.map(this.model.attachments.models, function (attachment) {\n return new PJQ.models.files.File({\n entryId: attachment.get('entryId'),\n guid: attachment.get('guid')\n });\n }));\n }\n});\n\nPJQ.views.rfi.AttachmentManagement = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.RFI, 'Attachment-Management')\n },\n events: {\n 'click .rfi-attachment': 'attachmentClicked'\n },\n afterRender: function () {\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.rfi-attachment-file-upload'),\n endpoint: this.options.endpoint,\n collection: this.collection,\n onDelete: function (file, callback) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this attachment?\",\n onDelete: _.bind(function () {\n file.destroy();\n callback();\n }, this)\n });\n }\n });\n },\n attachmentClicked: function (e) {\n let selectedAttachment = this.model.attachments.get($(e.currentTarget).data('cid'));\n this.viewAttachment(selectedAttachment);\n },\n viewAttachment: function (attachment) {\n PJQ.app.view.renderPhotoViewer({\n model: attachment\n });\n }\n});\n","PJQ.views.rfi.RFISettings = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.RFI, 'RFI-Settings'),\n onChange: null\n },\n events: {\n 'change .select-column': 'columnSelected',\n 'click .settings-save': 'onSave'\n },\n beforeFirstRender: function () {\n this.listenTo(this.model, 'fetch', this.render);\n },\n beforeRender: function () {\n this.renderData = {\n model: this.model,\n userSettings: this.options.userSettings\n };\n },\n afterRender: function () {\n $(function () {\n $('[data-toggle=\"tooltip\"]').tooltip()\n });\n if (this.model) {\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input'\n ],\n afterChange: _.bind(function () {\n this.onChange();\n }, this)\n });\n }\n\n if (this.options.userSettings != null) {\n this.rowsPerPageSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.rows-per-page'),\n defaultValue: this.options.userSettings.getSettings(PJQ.constants.rfi.view.RFIS).rowsPerPage,\n onChange: _.bind(function (value) {\n this.onChange();\n }, this)\n });\n\n if (this.options.rfiView != null) {\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('div.column-settings'),\n data: this.options.rfiView.getColumns(true),\n isHideSearch: true,\n order: [],\n columns: [\n {\"data\": \"title\", \"title\": \"Column\", \"orderable\": false},\n {\n \"data\": \"visible\",\n \"title\": \"Show\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('
');\n }, this),\n \"width\": '10%'\n }\n ],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n }\n }\n },\n columnSelected: function (sender) {\n this.dataTable.dataTable.row($(sender.currentTarget).closest('tr')).data().visible = $(sender.currentTarget).prop('checked');\n },\n onChange: function () {\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(this.model);\n }\n }\n});\n\nPJQ.views.rfi.RFISettingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.RFI, 'Modal-RFI-Settings'),\n subTemplates: {},\n maxWidth: 500,\n onSave: _.noop\n },\n events: {\n 'click .settings-save': 'onSave'\n },\n beforeModalCreated: function () {\n PJQ.app.session.project.fetchRFISettings(_.bind(function (settings) {\n this.model = settings;\n this.render();\n }, this));\n },\n beforeRender: function () {\n this.renderData = {\n model: this.model\n };\n },\n afterRender: function () {\n if (typeof this.model !== 'undefined' && this.model.isFetched) {\n this.settingsView = new PJQ.views.rfi.RFISettings({\n el: this.$('.modal-body'),\n model: this.model,\n userSettings: this.options.userSettings,\n rfiView: this.options.rfiView\n })\n }\n },\n onSave: function () {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.options.rfiView.options.userSettings.getSettings(PJQ.constants.rfi.view.RFIS).rowsPerPage = parseInt(this.settingsView.rowsPerPageSelectPicker.getValue());\n let columns = this.options.rfiView.options.userSettings.getSettings(PJQ.constants.rfi.view.RFIS).columns;\n _.each(this.settingsView.dataTable.dataTable.data(), function (row) {\n if (row.visible) {\n if (columns.indexOf(row.columnData) === -1)\n columns.push(row.columnData);\n } else {\n columns = _.filter(columns, function (column) {\n return (column != row.columnData);\n });\n }\n });\n this.options.rfiView.options.userSettings.getSettings(PJQ.constants.rfi.view.RFIS).columns = columns;\n this.options.rfiView.options.userSettings.save(null, {\n success: _.bind(function () {\n this.model.put(null, {\n success: _.bind(function () {\n this.options.onSave();\n PJQ.notifications.notify.successNotify({\n message: 'RFI settings saved'\n });\n this.removeModal();\n }, this),\n error: function () {\n loader.remove();\n }\n });\n }, this),\n error: function () {\n loader.remove();\n }\n });\n }\n});\n"]}