{"version":3,"sources":["1Initializers.js","addressbookdatatables.js","addressbookmodels.js","addressbookviews.js","editcompanyviews.js"],"names":["PJQ","views","addressbook","constants","addressBook","approvalFilter","APPROVED","UNAPPROVED","contactStatusFilter","ACTIVE","INACTIVE","directoryFilter","ALL_CONTACTS","PRIVATE_ONLY","PUBLIC_ONLY","laborStatusFilter","UNION","NON_UNION","PREV_WAGE","NOT_AVAILABLE","miscFilter","PRIMARY_CONTACT_ONLY","locationTypeFilter","WORK_AREA","OFFICE_LOCATION","BOTH","view","TRADES_COMPANY","TRADES_COMPANY_GROUP","TRADES_COMPANY_COMPANY","TRADES_COMPANY_COMPANY_CONTACT","TRADES_CONTACT","TRADES_CONTACT_GROUP","TRADES_CONTACT_CONTACT","COMPANY","COMPANY_CONTACT","CONTACT","CONTACT_GROUP","selectionMode","NONE","PROQUAL","MERGE","ADD_TO_PROJECT","UPDATER","app","module","modules","ADDRESSBOOK","addOldRoutes","route","name","callback","router","navigate","trigger","replace","routes","contactId","session","project","initNavigator","activeItem","viewOptions","parseInt","APP","get","renderView","AddressBook","addRoutes","AddressBookDataTable","dataTables","DataTable","extend","defaults","language","zeroRecords","isHideSearch","dom","phoneWidth","events","click .btn-copy-phone","click .btn-copy-fax","click .btn-copy-cell","click .btn-copy-email","beforeDataTableRender","self","this","options","rowCallback","row","data","$","find","css","helpers","objectHelpers","checkNested","abCustomization","portal","customization","getRowColor","color","settings","companyCustomFields","customFields","company","contactCustomFields","contact","_","size","_unused","afterDataTableRender","bind","$el","on","prop","childDataTables","initComplete","json","wrap","contextMenuOptions","actions","getContextMenuItems","isHideNoActions","onRowDoubleClick","editContact","rowsPerPage","indexOf","pageLength","orderBy","columns","columnsDefault","each","getColumns","column","index","columnData","order","orderAscending","fixedColumnsLeft","colReorder","realtime","createdRow","columnOrderChanged","userSettings","save","afterDataTableRenderChild","getRowChildTable","childOpts","getRowChildData","setRowStyle","status","isBlacklisted","orderByChanged","i","set","renderPageHelper","getIsRootView","renderPage","collection","fetch","type","requestData","success","dataTable","clear","rows","add","models","draw","model","fnFetch","fnEdit","approvalUpdates","ApproveAddressBookContactModal","onSave","groups","filter","group","EditCompanyModal","id","contactCompanyId","onSaveContact","isNew","addressBookView","addSelectedContactsAll","addSelectedContactGroups","addSelectedContactsNoGroup","onDelete","isFetched","contacts","Contact","Company","statusChanged","statuses","getCustomFieldColumn","customField","isCompany","title","render","rowField","cf","fieldValue","value","fieldTypes","TEXT","urlHelpers","isURL","DATE","dateHelpers","getDateString","Date","dateFormats","DATETIME","DATE_TIME","BOOL","CHOICE","textColor","choices","choice","push","join","toLowerCase","PERCENT","toString","MONEY","parseFloat","formatHelpers","numbersOnly","formatCurrency","PHONE","html","phoneFormatted","formatPhoneNumber","phoneWrapped","customFieldId","childRowToggle","sender","$target","currentTarget","tr","closest","getRow","child","isShown","hide","removeClass","addClass","childClass","$childTable","class","show","childData","loader","Loader","parent","searchFor","locationFilter","zip","radius","userTypeFilter","undefined","groupId","groupDescription","page","pageSize","isAdvancedSearch","advancedSearch","isFilterApproved","isPrimaryOnly","isFilterUnapproved","proqualFilter","isFilterActive","isFilterInactive","isFilterUnion","isFilterNonUnion","isFilterPrevWage","isFilterNoLaborStatus","isIncludeGroupList","hasGroupListColumn","getChildTableType","includeScreeningPackages","hasScreeningPackagesColumn","includeContactCustomFields","getContactCustomFieldColumns","includeCompanyCustomFields","getCompanyCustomFieldColumns","isSelectionMode","remove","childTable","el","parentId","childDt","cleanup","undelegateEvents","empty","dataIndex","copyPhone","e","inputId","uniqueId","hiddenInput","style","append","select","document","execCommand","notifications","notify","successNotify","message","copyEmail","ContactDataTable","click i.contact-toggle-row","click .select-contact","click .select-all-contacts","click .btn-show-groups","includes","a","hasPermission","iconClass","onClick","exportExcel","apprModel","approve","onApprove","ReportContactModal","ajax","Request","endpoint","generateEndpoint","post","done","fail","xhr","err","result","errorNotify","getVcard","modals","YesNo","header","body","onYes","sendUpdater","logging","Debug","LoggingActions","SEND_PREQUAL_UPDATE","error","preferences","hasPref","preferenceTypes","DISABLE_PREQUAL","isDanger","DeleteCancel","destroy","parentTR","parentDataTable","node","prev","parentRow","currentView","isDirectoryContact","showProjectHistory","includeAllColumns","arguments","length","includeColumns","ENABLE_SCREENINGS","isShowCheckboxes","width","orderable","searchable","renderContactSelect","defaultContent","maxEmailWidth","window","columnName","icons","proQual","screeningStatuses","Complete","InProcess","ADDRESS_BOOK_CONTACT_COMPANY_ID_LABEL","getPref","ADDRESS_BOOK_CONTACT_ID_LABEL","emailFormatted","groupArray","split","rest","reverse","toFixed","userType","userTypes","getByIsCompany","PROJECT_ACTIVITY_RANK_STATUS_LIST","expiresOnDate","checkDateIsBeforeToday","colors","RED","GREEN","packageNames","screeningSettings","pkg","screeningPackageId","packageName","startsWith","substring","getChildTableSettings","paging","ContactGroupDataTable","collections","AddressBookViewResults","isContactSelected","selected","disabledContacts","contactGroups","intersection","disabledContactGroups","selectedContactGroups","selectedContactsNoGroup","selectedContactsAll","isContactIndeterminate","indeterminate","disabledGroups","selectedGroups","isContactDisabled","disabled","isSelected","attributes","isIndeterminate","isDisabled","updateContactSelect","$cb","contactSelectChanged","removeSelectedContactsAll","removeSelectedContactGroups","removeSelectedContactsNoGroup","updateCompanySelect","childDT","input","updateContactGroupSelect","showRowGroups","target","outerHTML","contactSelectAllChanged","selectAll","contactsNoGroup","merge","CompanyDataTable","click i.company-toggle-row","click .select-company","click .select-all-companies","invalidate","renderCompanySelect","getSettings","isCompanySelected","disabledContactsNoGroup","noGroupContacts","selectableContacts","isCompanyIndeterminate","selectedContacts","isCompanyDisabled","allNoGroupContactsDisabled","companySelectChanged","childDTchild","companySelectAllChanged","GroupHeaderDataTable","click i.group-toggle-row","click .select-all-trades","showGroupDescription","visible","GroupHeaderChildDataTable","tradeSelectAllChanged","processViews","contactDT","tradeDT","click .select-all-trades-division","click .select-all-contactgroup","click .select-contactgroup","renderContactGroupSelect","isContactGroupSelected","contactGroupId","isContactGroupDisabled","contactGroupSelectChanged","parentParentTR","parentParentRow","contactGroupSelectAllChanged","AddressBookViewSettings","BaseModel","params","forCompany","parameter","setting","columnFound","AddressBookAdvancedSearchSettings","ProqualStatistics","ProqualSettings","BaseCollection","beforeConstruct","urlOptions","endpointArr","isExport","parse","exportURL","url","totalRows","export","timeout","response","AddressBookSelections","BaseView","template","templating","Template","selectContactGroupsMode","isShowHeader","onSelection","noop","keyup .input-search","click .basic-search","click .advanced-search","click .filter-groups","click .clear-search","click .btn-address-book-settings","click a.import","click a.export","click .merge","click .merge-continue","click .merge-cancel","click .new-contact","click .proqual-screening","click .proqual-filter>div","click .btn-approval-queue","click a.updaters","click .updater-continue","click .updater-cancel","click .qualifications-report","viewApprovalQueue","approvalQueueSelector","setValue","apprCount","renderApprovalHeader","fetchStats","unApprovedContactsCount","$alert","Alert","text","beforeFirstRender","isMerge","showApproval","showLaborStatus","IS_HIDE_UNION_STATUS","isInitialLoad","isSettingsFetched","proqualStatistics","fetchCompanyCustomFields","fetchContactCustomFields","fetchScreeningSettings","renderData","showHeader","showScreenings","showProqual","IS_PROQUAL_CUSTOMER","showGroupCompanyView","showGroupContactView","canAdd","settingsFetched","canExport","canImport","canMerge","afterRender","inputs","Selectpicker","defaultValue","onChange","isIntChoices","isMultiple","noneSelectedText","ADDRESS_BOOK_HIDE_DEFAULT_SEARCH","locationType","ADDRESS_BOOK_DEFAULT_LOCATION_FILTERS","locationTypeSelectPicker","mustSelectValue","radiusSelectPicker","defaultFilters","ADDRESS_BOOK_DEFAULT_FILTERS","map","ADDRESS_BOOK_DEFAULT_DISPLAY_DIRECTORY","filterSelectPicker","exclusiveChoices","isGroup","mustSelectValuePerOptGroup","onHide","lastFilter","getValue","uniq","union","hideNotification","showNotification","content","icon","stayOnPage","clearServerCache","pageCache","tableSettings","dataTableOptions","getPageCallback","getViewData","displayStart","deferRender","showPageSelector","onTableDraw","getDataTableInstance","initContact","updateFilter","val","$exportBtn","pageNumber","orderArr","orderDirection","direction","pageSelectPicker","checked","selections","proqualRequest","selection","enableBasicSearch","enabled","enable","disable","filterGroups","FilterTradesModal","onFilter","searchChanged","keyCode","search","AdvancedSearchModal","onSearch","clearBasicSearch","clearFilter","preventRefresh","AddressBookSettingsModal","import","ContactsImportModal","onClose","isChanged","dateNow","timeZoneOffset","getTimezoneOffset","files","downloadFile","isEndpoint","qualificationsReport","QualificationsReportModal","addContactClicked","proqualFilterClicked","proqualScreening","request","ProqualRequestModal","onAddParticipants","contactIds","_ref","without","apply","concat","_toConsumableArray","contactGroupIds","_ref2","_ref3","_ref4","_ref5","beginMerge","continueMerge","MergeRequestModal","onMerge","cancelMerge","beginSendUpdater","updaterType","continueUpdater","cancelUpdater","onNo","BaseModal","minWidth","click button.clear-all","click button.filter","hasGroupsLinked","HAS_GROUPS_LINKED","showPublic","showPrivate","groupSelector","GroupSelector","isShowNoGroup","selectedGroupIds","groupSelectorPublic","isPublicGroups","clearAll","getGroupsData","removeModal","change .select-column","click .btn-edit-company-default","click button.settings-save","beforeModalCreated","beforeRender","defaultView","selectedColumns","selectView","change","editCompanySettings","columnSelected","fnOnSave","settingTemp","slice","columnTemp","maxWidth","click .save-search","click .delete-search","click .default-search","click .search","keydown .phone","keydown .phone-ext","keydown .fax","keydown .cell","fieldSettingsEnabled","ENABLE_CONTACT_FIELD_SETTINGS","coreFieldSettings","fetchContactFieldSettings","masterUserId","searches","checkFieldVisible","savedSearchSelectPicker","savedSearch","searchId","setInputsFromSearch","companyBlacklistSelectPicker","laborSelectPicker","classificationSelectPicker","sectorSelectPicker","gradeSlider","Slider","ticks","ticks_labels","companyCustomFieldsCollapse","collapse","BaseCollapse","companyCustomFieldsForm","CustomFieldsSearchForm","isAdmin","fieldValues","contactBlacklistSelectPicker","contactTypeSelectPicker","contactPrimarySelectPicker","locationSearchTypeSelectPicker","locationSearchTypeChanged","$radius","searchRadiusSelectPicker","stateSelectPicker","StatePicker","country","countrySelectPicker","CountryPicker","statePicker","zipInput","groupCollapseContainer","onGroupSelected","contactCustomFieldsForm","isDefault","fieldName","prefs","ADDRESS_BOOK_HIDE_SECTOR","ADDRESS_BOOK_HIDE_MINORITY_STATUS","fieldSettings","findWhere","searchName","companyName","isCompanyBlacklisted","laborStatus","isUnion","isNonUnion","isPrevailingWage","classification","isDBE","isDVBE","isMBE","isSBE","isSDVBE","isWBE","sector","isPrivateSector","isPublicSector","minGradeAverage","maxGradeAverage","setValues","contactName","contactTitle","phone","phoneExtension","fax","cell","email","originzip","isCrossStateBoundaries","city","state","selectGroups","expandSelectedParents","createSearchFromInputs","guid","trim","getValues","loc","isWorkAreas","isOffice","regions","validate","isValid","validateSearch","inputHelpers","setInputError","saveSearch","clearSearch","clearFieldValues","focus","deleteSearch","refresh","defaultSearch","isBillSender","processorNotes","uploaderGuid","attachments","Files","onSend","click .add-contacts","click .request-close","click .request-preview","click .request-viewitems","click .request-send","change .proqual-notes","isProqual","isSingleContact","setButtonStates","packageSelectPicker","paymentSelectPicker","uploader","FileUploaderGrid","uuid","attachment","onSuccess","notesChanged","addContacts","previewRequest","ProqualRequestPreviewModal","viewPackageItems","ProqualRequestViewItemsModal","screeningPackage","sendRequest","confirmText","notes","ProqualRequestErrorModal","onContinue","items","packageItems","click .preview-export","previewHTML","click .btn-continue","click .export","invalidContacts","validContacts","continue","click .btn-merge-confirm","companies","item","destinationSelectPicker","mergeContacts","destinationContactId","keyup .email","user","emailChanged","unique","isRequired","EditContactView","BaseEditContactView","GLOBAL","canEdit","alert","EditCompanyView","subTemplates","isShowCloseButton","onCancel","change .contact-edit-phone,.contact-edit-fax,.contact-edit-cell","keyup .contact-edit-phone-ext","keydown .contact-edit-phone-ext","click .contact-edit-add","click .btn-add-contact","click .btn-delete-contact","click .btn-copy-contact","click .btn-set-primary-contact","click .btn-edit-permissions","click .btn-unlock-user","click .btn-unlink-user","click .btn-send-user-reg","click .btn-send-password-reset","click .btn-company-active","click .btn-contact-active","click .btn-edit-contact","click .btn-contact-permissions","click .btn-mirror-trades","click .btn-screening-request-company","click .btn-prequal-audit-log","_this","fieldUserId","fetchERP","fetchERPIntegration","erp","erpIntegration","fetchERPObject","isRendered","renderCompanyCustomFields","renderContactCustomFields","prototype","call","prevailingWageLabel","checkFieldRequired","enablePermissions","canEditCustomFields","showCompanyCustomFields","canDelete","renderERP","renderGrade","renderLaborStatus","renderSector","renderMinority","onShown","renderCompanyAttachments","renderPrequal","renderScreenings","renderCompanyGroups","setContextContact","renderContactsTable","addNewContact","editContactPermissions","contactListTable","permissions","PermissionsEditorModal","viewBidHistory","bidHistory","projects","ProjectParticipantHistoryModal","onGoToProject","closeModal","renderHistory","contactSwitched","hasChanged","SaveDontSave","saveCompanyContact","onDontSave","restore","existingModel","contextId","isPrimary","defaultUserType","ut","ADDRESS_BOOK_PREVENT_DEFAULT_USER_TYPE","userTypeId","address1","address2","ADDRESS_BOOK_DEFAULT_COUNTRY","isAutoSelectDisabled","DEFAULT_AUTO_SELECT_DISABLED","fnRender","renderContact","StarRating","rating","isReadOnly","renderSubTemplate","contactRenderData","showNotes","isGroupsRequired","isUserTypeRequired","showContactCustomFields","groupsChanged","reset","groupViewer","GroupsSelectInput","isShowAddButton","getGroups","limitGroups","sortSettings","SORT_COMPANY_ATTACHMENTS","fileUploader","sortBy","sortDirection","previewImageDimension","canUpload","canDownloadAll","isDirty","scrollY","scrollCollapse","rowId","setPrimary","deleteContact","groupNames","viewEditHistory","fetchEditHistory","editHistory","EditHistoryModal","history","isActiveClicked","button","contactButton","checkIsPrimary","companyButton","SelectNewPrimaryContactModal","currentPrimary","contactSwitchedClicked","we","setPrimaryClicked","addNewContactClicked","contactValidation","newContact","addRow","copyContactClicked","copyContact","cancel","delete","modal","match","fieldNumber","deleteContactClicked","removeRow","companyValidation","saveWithoutApproval","$company","scrollTopError","offset","top","hasCompanyError","companyNameValue","$cac","hasClass","siblings","click","animate","scrollTop","saveCompany","$companyName","$notes","hasError","$scrollTo","validateCoreFields","valid","users","User","$username","$password","mirrorTrades","isAddToProject","isApprove","all","getChanged","isContactNew","fnContinue","ccId","mod","isSelfEdit","responseJSON","okButtonText","secondaryButtonText","isShowCancelButton","isShowSecondaryButton","onOk","onSecondary","viewPrequalAuditLog","stopPropagation","prequal","PrequalAuditLogModal","BaseEditContactModal","click .btn-bid-history","click .btn-edit-history","click .contact-edit-cancel","click .contact-edit-save","click .contact-edit-save-without-approval","click .contact-edit-delete","getContactElement","shouldRenderInnerView","getInnerViewType","getInnerViewOptions","onCompanySave","editView","click .approval-save","click .input-approve-status","change .input-approve-all","hideDisabled","renderDataTable","hasUnapproved","update","cid","approvalStatusChanged","dataset","updateApproveAllInput","approveClicked","approveAll","isApproved","click .primary-contact-card","click .btn-save","click .btn-cancel","renderContacts","contactClicked","newPrimary","attr","savePrimary"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.views.addressbook = {};\n\nPJQ.constants.addressBook = {\n approvalFilter: {\n APPROVED: -3,\n UNAPPROVED: -4\n },\n contactStatusFilter: {\n ACTIVE: -5,\n INACTIVE: -6\n },\n directoryFilter: {\n ALL_CONTACTS: 0,\n PRIVATE_ONLY: -1,\n PUBLIC_ONLY: -2\n },\n laborStatusFilter: {\n UNION: -7,\n NON_UNION: -8,\n PREV_WAGE: -9,\n NOT_AVAILABLE: -10\n },\n miscFilter: {\n PRIMARY_CONTACT_ONLY: -11\n },\n locationTypeFilter: {\n WORK_AREA: 1,\n OFFICE_LOCATION: 2,\n BOTH: 3\n },\n view: {\n TRADES_COMPANY: 'groupcompany',\n TRADES_COMPANY_GROUP: 'groupcompany-group',\n TRADES_COMPANY_COMPANY: 'groupcompany-company',\n TRADES_COMPANY_COMPANY_CONTACT: 'groupcompany-company-contact',\n TRADES_CONTACT: 'groupcontact',\n TRADES_CONTACT_GROUP: 'groupcontact-group',\n TRADES_CONTACT_CONTACT: 'groupcontact-contact',\n COMPANY: 'company',\n COMPANY_CONTACT: 'company-contact',\n CONTACT: 'contact',\n CONTACT_GROUP: 'contactgroup'\n },\n selectionMode: {\n NONE: 'none',\n PROQUAL: 'proqual',\n MERGE: 'merge',\n ADD_TO_PROJECT: 'addToProject',\n UPDATER: 'updater'\n }\n};\n\nif (PJQ.app.module === PJQ.constants.modules.ADDRESSBOOK) {\n PJQ.app.addOldRoutes([\n {\n route: '',\n name: 'default',\n callback: function () {\n PJQ.app.router.navigate('contactsnew', {\n trigger: true,\n replace: true\n });\n }\n }\n ]);\n}\n\nPJQ.modules.addressBook = {\n routes: [\n {\n route: 'contacts/:contactId',\n name: 'contact',\n callback: function (contactId) {\n PJQ.app.session.project = null;\n PJQ.app.initNavigator({\n activeItem: \"contactsnew\",\n viewOptions: {\n contactId: parseInt(contactId)\n }\n });\n }\n },\n {\n route: 'contactsnew',\n name: 'contactsnew',\n callback: function () {\n PJQ.app.session.project = null;\n if (PJQ.app.module === PJQ.constants.modules.APP) {\n if (PJQ.app.session.get('ownsPortal')) {\n PJQ.app.initNavigator({\n activeItem: \"contactsnew\"\n });\n }\n else {\n PJQ.app.initNavigator();\n }\n }\n else {\n PJQ.app.view.renderView(PJQ.views.addressbook.AddressBook);\n }\n }\n }\n ]\n};\n\nPJQ.app.addRoutes(PJQ.modules.addressBook.routes);\n","PJQ.views.addressbook.AddressBookDataTable = PJQ.views.dataTables.DataTable.extend({\n defaults: {\n language: {\n zeroRecords: \"No Results Available\"\n },\n isHideSearch: true,\n dom: '<\"top\"p<\"clear\">>rt<\"bottom\"p<\"clear\">>',\n phoneWidth: '125px'\n },\n events: {\n 'click .btn-copy-phone': 'copyPhone',\n 'click .btn-copy-fax': 'copyPhone',\n 'click .btn-copy-cell': 'copyPhone',\n 'click .btn-copy-email': 'copyEmail'\n },\n beforeDataTableRender: function () {\n let self = this;\n this.options.rowCallback = function (row, data) {\n if (data.get('isBlacklisted') || (data.get('isCompanyBlacklisted') && data.get('contactCompanyId') === data.get('contactId'))) {\n $(row).find('td').css('text-decoration', 'line-through');\n }\n\n if (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'addressBook')) {\n let abCustomization = PJQ.app.portal.customization.addressBook;\n if (typeof abCustomization.getRowColor === 'function') {\n try {\n let color = abCustomization.getRowColor(self.options.settings.view, data, {\n companyCustomFields: PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')],\n contactCustomFields: PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')]\n });\n if (_.size(color) > 0) {\n $(row).css('background-color', color);\n }\n } catch {\n //do nothing, we just dont want an error to happen due to code customizations\n }\n }\n }\n };\n\n this.options.afterDataTableRender = _.bind(function () {\n this.$el.on('draw.dt', _.bind(function () {\n this.$el.find('div.pretty input.indeterminate').prop('indeterminate', true);\n }, this));\n }, this);\n\n this.options.childDataTables = [];\n\n // This is here to wrap the table in case of overflow. ScrollX option for datatables is bad.\n this.options.initComplete = function (settings, json) {\n this.wrap(\"
\");\n }\n\n this.options.contextMenuOptions = {\n actions: this.getContextMenuItems(),\n isHideNoActions: true\n };\n\n this.options.onRowDoubleClick = _.bind(function (row) {\n if (row.data() && row.data().get('contactId')) {\n this.editContact(row.data());\n }\n }, this);\n\n if (this.options.settings) {\n // enable paging for grids that have a setting for it / are not subgrids\n if (this.options.settings.rowsPerPage !== 0 && this.options.view.indexOf('-') === -1)\n this.options.pageLength = this.options.settings.rowsPerPage;\n else\n this.options.pageLength = 2147483646;\n\n if (this.options.settings.orderBy !== 'sortOrder') {\n if (_.size(this.options.settings.columns) === 0) {\n this.options.settings.orderBy = this.options.settings.columnsDefault[0];\n } else if (this.options.settings.columns.indexOf(this.options.settings.orderBy) === -1) {\n this.options.settings.orderBy = this.options.settings.columns[0];\n }\n }\n _.each(this.getColumns(false, this.options.view), _.bind(function (column, index) {\n if (column.columnData === this.options.settings.orderBy) {\n this.options.order = [[index, this.options.settings.orderAscending ? 'asc' : 'desc']];\n }\n }, this));\n\n let fixedColumnsLeft = 0;\n switch (this.options.settings.view) {\n case PJQ.constants.addressBook.view.COMPANY:\n case PJQ.constants.addressBook.view.TRADES_COMPANY:\n case PJQ.constants.addressBook.view.TRADES_COMPANY_GROUP:\n case PJQ.constants.addressBook.view.TRADES_CONTACT:\n case PJQ.constants.addressBook.view.TRADES_CONTACT_GROUP:\n fixedColumnsLeft = 1;\n break;\n case PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY:\n case PJQ.constants.addressBook.view.CONTACT_GROUP:\n fixedColumnsLeft = 2;\n break;\n case PJQ.constants.addressBook.view.CONTACT:\n case PJQ.constants.addressBook.view.COMPANY_CONTACT:\n case PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY_CONTACT:\n case PJQ.constants.addressBook.view.TRADES_CONTACT_CONTACT:\n default:\n break;\n }\n this.options.colReorder = {\n fixedColumnsLeft: fixedColumnsLeft,\n realtime: false\n };\n }\n\n this.options.createdRow = _.bind(this.createdRow, this);\n\n if (typeof this.options.beforeDataTableRender === 'function') {\n this.options.beforeDataTableRender();\n }\n },\n columnOrderChanged: function (columns) {\n if (this.options.userSettings != null) {\n /* #311 - error when drag-drop sorting columns.\n let settings = this.options.userSettings.get('settings');\n for (let i = 0; i < _.size(settings); i++) {\n if (settings[i].view === this.options.view) {\n settings[i].columns = columns;\n }\n }\n this.options.userSettings.set('settings', settings);\n\n */\n this.options.userSettings.save();\n }\n },\n afterDataTableRenderChild: function () {\n },\n getRowChildTable: function (childOpts) {\n },\n getRowChildData: function (row) {\n },\n setRowStyle: function (row, status, isBlacklisted) {\n },\n getContextMenuItems: function () {\n },\n orderByChanged: function() {\n if (this.options.userSettings != null) {\n let settings = this.options.userSettings.get('settings');\n for(let i = 0 ; i < _.size(settings) ; i++){\n if(settings[i].view === this.options.settings.view){\n settings[i].orderBy = this.options.settings.orderBy;\n settings[i].orderAscending = this.options.settings.orderAscending;\n }\n }\n this.options.userSettings.set('settings', settings);\n this.options.userSettings.save();\n }\n },\n renderPageHelper: function() {\n if (this.getIsRootView())\n this.renderPage();\n else {\n //refetch then redraw\n this.options.collection.fetch({\n type: 'POST',\n data: this.options.requestData,\n success: _.bind(function() {\n this.dataTable.clear();\n this.dataTable.rows.add(this.options.collection.models);\n this.dataTable.draw();\n }, this)\n });\n }\n },\n editContact: function (model) {\n let fnFetch = _.bind(function (model, company) {\n let fnEdit = _.bind(function (model, company) {\n if (model.get('isApprovalRequired') && _.size(model.approvalUpdates.models) > 0) {\n new PJQ.views.addressbook.ApproveAddressBookContactModal({\n model: model,\n onSave: _.bind(function (model) {\n\n // remove deleted groups\n model.groups.models = _.filter(model.groups.models, function (group) { return !group.get('isDeleted'); });\n\n new PJQ.views.addressbook.EditCompanyModal({\n model: model,\n company: company,\n contactId: model.get('contactCompanyId') > 0 ? model.id : null,\n contactCompanyId: model.get('contactCompanyId'),\n onSave: _.bind(function () {\n this.renderPageHelper();\n }, this),\n onSaveContact: _.bind(function (contact, isNew) {\n if (isNew) {\n this.options.addressBookView.addSelectedContactsAll([contact.get('contactId')]);\n if (_.size(contact.get('contactGroups')) > 0) {\n this.options.addressBookView.addSelectedContactGroups(contact.get('contactGroups'));\n } else {\n this.options.addressBookView.addSelectedContactsNoGroup([contact.get('contactId')]);\n }\n }\n }, this),\n onDelete: _.bind(function () {\n this.renderPageHelper();\n }, this)\n });\n }, this)\n })\n } else {\n new PJQ.views.addressbook.EditCompanyModal({\n model: model,\n company: company,\n contactId: model.get('contactCompanyId') > 0 ? model.id : null,\n contactCompanyId: model.get('contactCompanyId'),\n onSave: _.bind(function () {\n this.renderPageHelper();\n }, this),\n onSaveContact: _.bind(function (contact, isNew) {\n if (isNew) {\n this.options.addressBookView.addSelectedContactsAll([contact.get('contactId')]);\n if (_.size(contact.get('contactGroups')) > 0) {\n this.options.addressBookView.addSelectedContactGroups(contact.get('contactGroups'));\n } else {\n this.options.addressBookView.addSelectedContactsNoGroup([contact.get('contactId')]);\n }\n }\n }, this),\n onDelete: _.bind(function () {\n this.renderPageHelper();\n }, this)\n });\n }\n }, this);\n if (!model.isFetched) {\n model.fetch({\n success: _.bind(function () {\n fnEdit(model, company);\n }, this)\n })\n } else {\n fnEdit(model, company);\n }\n }, this)\n\n if (!(model.get('contactCompanyId') > 0) || model.get('contactCompanyId') === model.id) {\n let company = new PJQ.models.contacts.Company({\n id: model.id\n });\n company.fetch({\n success: _.bind(function () {\n fnFetch(_.find(company.contacts.models, function (model) {\n return model.get('isPrimary')\n }), company);\n }, this)\n })\n } else if (!(model instanceof PJQ.models.contacts.Contact)) {\n fnFetch(new PJQ.models.contacts.Contact(model));\n } else {\n fnFetch(model);\n }\n },\n statusChanged: function (statuses) {\n },\n getCustomFieldColumn: function (customField, isCompany) {\n return {\n \"columnData\": (isCompany ? 'companyCustomField' : 'contactCustomField') + '_' + customField.get('id'),\n \"title\": customField.get('fieldName'),\n \"data\": (isCompany ? 'CompanyFieldValue' : 'FieldValue') + customField.get('fieldNumber'),\n \"render\": function (data, type, row) {\n let rowField;\n if (isCompany) {\n rowField = _.find(row.get('companyCustomFieldValues'), function (cf) {\n return (cf.id === customField.get('id'));\n });\n } else {\n rowField = _.find(row.get('contactCustomFieldValues'), function (cf) {\n return (cf.id === customField.get('id'));\n });\n }\n\n let fieldValue = null;\n if (rowField != null) {\n fieldValue = rowField.value;\n }\n // if(fieldValue == null && customField.get('defaultValue') !== \"\") {\n // \tfieldValue = customField.get('defaultValue');\n // \tif(!isNaN(parseInt(fieldValue))){\n // \t\tfieldValue = parseInt(fieldValue);\n // \t}\n // }\n switch (customField.get('fieldType')) {\n case PJQ.constants.customFields.fieldTypes.TEXT:\n if (fieldValue && type !== 'sort' && type !== 'type') {\n if (PJQ.helpers.urlHelpers.isURL(fieldValue))\n fieldValue = '' + fieldValue + '';\n }\n break\n case PJQ.constants.customFields.fieldTypes.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 break;\n case PJQ.constants.customFields.fieldTypes.DATETIME:\n if (_.size(fieldValue) > 0) {\n if (type !== 'sort' && type !== 'type')\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }\n break;\n case PJQ.constants.customFields.fieldTypes.BOOL:\n if (fieldValue != null)\n fieldValue = fieldValue ? 'Yes' : 'No';\n else\n fieldValue = '';\n break;\n case PJQ.constants.customFields.fieldTypes.CHOICE:\n if (fieldValue) {\n let choices = [];\n\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\n if (customField.get('fieldName').toLowerCase() === \"approval level\") {\n let textColor;\n if (fieldValue.toLowerCase() === 'green' || fieldValue.toLowerCase() === 'approved') {\n textColor = '#28a745'\n }\n if (fieldValue.toLowerCase() === 'yellow' || fieldValue.toLowerCase() === 'approved limited') {\n textColor = '#ffc107'\n }\n if (fieldValue.toLowerCase() === 'red' || fieldValue.toLowerCase() === 'not approved') {\n textColor = '#dc3545'\n }\n fieldValue = '' + fieldValue + '';\n }\n }\n break;\n case PJQ.constants.customFields.fieldTypes.PERCENT:\n if (type !== 'sort' && type !== 'type') {\n fieldValue = fieldValue ? fieldValue.toString() + '%' : '';\n }\n break;\n case PJQ.constants.customFields.fieldTypes.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\n } else {\n fieldValue = fieldValue ? PJQ.helpers.formatHelpers.formatCurrency(fieldValue, 2) : '';\n }\n break;\n case PJQ.constants.customFields.fieldTypes.PHONE:\n if (type !== 'sort' && type !== 'type') {\n let html = '
',\n phoneFormatted = (fieldValue ? PJQ.helpers.formatHelpers.formatPhoneNumber(fieldValue) : 'N/A'),\n phoneWrapped = (fieldValue ? PJQ.helpers.formatHelpers.formatPhoneNumber(fieldValue, true) : 'N/A');\n\n if (fieldValue !== '')\n html += '';\n\n html += '
' + phoneWrapped + '
';\n html += '
';\n\n fieldValue = html;\n }\n break;\n }\n return fieldValue;\n },\n \"customFieldId\": customField.get('id')\n };\n },\n childRowToggle: function (sender) {\n let $target = $(sender.currentTarget),\n id = $target.data('id'),\n tr = $target.closest('tr'),\n row = this.getRow(tr);\n if (row.child.isShown()) {\n // This row is already open - close it\n row.child.hide();\n tr.removeClass('shown');\n $target.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n } else {\n $target.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n let childClass = 'subgrid-' + id.toString(),\n $childTable = $('
', {\n class: childClass + ' p-2'\n });\n row.child($childTable).show();\n\n let childData = this.getRowChildData(row);\n if (childData != null) {\n let loader = new PJQ.Loader(this.$el.parent());\n childData.fetch({\n type: 'POST',\n data: {\n searchFor: this.options.addressBookView.filter.searchFor,\n locationFilter: this.options.addressBookView.filter.locationFilter,\n zip: this.options.addressBookView.filter.zip,\n radius: this.options.addressBookView.filter.radius,\n directoryFilter: this.options.addressBookView.filter.directoryFilter,\n userTypeFilter: this.options.addressBookView.filter.userTypeFilter,\n groups: (childData.options.groupId != undefined && childData.options.groupId != null) ? [childData.options.groupId] : this.options.addressBookView.filter.groups,\n groupDescription: childData.options.groupDescription,\n page: 1,\n pageSize: 2147483646,\n isAdvancedSearch: this.options.addressBookView.isAdvancedSearch,\n advancedSearch: this.options.addressBookView.advancedSearch,\n contactCompanyId: childData.options.contactCompanyId,\n contactId: childData.options.contactId,\n isFilterApproved: this.options.addressBookView.filter.isFilterApproved,\n isPrimaryOnly: this.options.addressBookView.filter.isPrimaryOnly,\n isFilterUnapproved: this.options.addressBookView.filter.isFilterUnapproved,\n proqualFilter: this.options.addressBookView.filter.proqualFilter,\n isFilterActive: this.options.addressBookView.filter.isFilterActive,\n isFilterInactive: this.options.addressBookView.filter.isFilterInactive,\n isFilterUnion: this.options.addressBookView.filter.isFilterUnion,\n isFilterNonUnion: this.options.addressBookView.filter.isFilterNonUnion,\n isFilterPrevWage: this.options.addressBookView.filter.isFilterPrevWage,\n isFilterNoLaborStatus: this.options.addressBookView.filter.isFilterNoLaborStatus,\n isIncludeGroupList: this.options.addressBookView.settings.hasGroupListColumn(this.getChildTableType()),\n includeScreeningPackages: this.options.addressBookView.settings.hasScreeningPackagesColumn(this.getChildTableType()),\n includeContactCustomFields: this.options.addressBookView.settings.getContactCustomFieldColumns(this.getChildTableType()),\n includeCompanyCustomFields: this.options.addressBookView.settings.getCompanyCustomFieldColumns(this.getChildTableType()),\n isSelectionMode: !(this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.NONE)\n },\n success: _.bind(function () {\n loader.remove();\n let childTable = this.getRowChildTable({\n el: $childTable,\n data: childData.models,\n collection: childData,\n requestData: {\n searchFor: this.options.addressBookView.filter.searchFor,\n locationFilter: this.options.addressBookView.filter.locationFilter,\n zip: this.options.addressBookView.filter.zip,\n radius: this.options.addressBookView.filter.radius,\n directoryFilter: this.options.addressBookView.filter.directoryFilter,\n userTypeFilter: this.options.addressBookView.filter.userTypeFilter,\n groups: childData.options.groupId !== null ? [childData.options.groupId] : this.options.addressBookView.filter.groups,\n groupDescription: childData.options.groupDescription,\n page: 1,\n pageSize: 2147483646,\n isAdvancedSearch: this.options.addressBookView.isAdvancedSearch,\n advancedSearch: this.options.addressBookView.advancedSearch,\n contactCompanyId: childData.options.contactCompanyId,\n contactId: childData.options.contactId,\n isFilterApproved: this.options.addressBookView.filter.isFilterApproved,\n isPrimaryOnly: this.options.addressBookView.filter.isPrimaryOnly,\n isFilterUnapproved: this.options.addressBookView.filter.isFilterUnapproved,\n proqualFilter: this.options.addressBookView.filter.proqualFilter,\n isFilterActive: this.options.addressBookView.filter.isFilterActive,\n isFilterInactive: this.options.addressBookView.filter.isFilterInactive,\n isFilterUnion: this.options.addressBookView.filter.isFilterUnion,\n isFilterNonUnion: this.options.addressBookView.filter.isFilterNonUnion,\n isFilterPrevWage: this.options.addressBookView.filter.isFilterPrevWage,\n isFilterNoLaborStatus: this.options.addressBookView.filter.isFilterNoLaborStatus,\n isIncludeGroupList: this.options.addressBookView.settings.hasGroupListColumn(this.getChildTableType()),\n includeScreeningPackages: this.options.addressBookView.settings.hasScreeningPackagesColumn(this.getChildTableType()),\n includeContactCustomFields: this.options.addressBookView.settings.getContactCustomFieldColumns(this.getChildTableType()),\n includeCompanyCustomFields: this.options.addressBookView.settings.getCompanyCustomFieldColumns(this.getChildTableType()),\n isSelectionMode: !(this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.NONE)\n },\n parentId: id,\n addressBookView: this.options.addressBookView\n });\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== id;\n }, this));\n this.options.childDataTables.push(childTable);\n tr.addClass('shown');\n }, this)\n });\n }\n }\n },\n /*\n childRowToggleAll: function (sender) {\n let $target = $(sender.currentTarget);\n\n this.dataTable.rows().eq(0).each(_.bind(function (index) {\n let row = this.dataTable.row(index), id = row.data().get('groupId');\n\n if ($target.hasClass('fa-plus-circle') && !row.child.isShown()) {\n let childClass = 'subgrid-' + id.toString(),\n $childTable = $('
', {\n class: childClass\n });\n row.child($childTable).show();\n\n let childData = this.getRowChildData(row);\n if (childData != null) {\n childData.fetch({\n success: _.bind(function () {\n let childTable = this.getRowChildTable({\n el: $childTable,\n data: childData.models,\n parentDataTable: this,\n parentId: id,\n addressBookView: this.options.addressBookView\n });\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== id;\n }, this));\n this.options.childDataTables.push(childTable);\n $(row.node()).addClass('shown');\n }, this)\n });\n }\n }\n else if ($target.hasClass('fa-minus-circle') && row.child.isShown()) {\n row.child.hide();\n $(row.node()).removeClass('shown');\n }\n\n }, this));\n\n if ($target.hasClass('fa-plus-circle'))\n $target.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n else\n $target.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n },\n */\n getColumns: function () {\n },\n cleanup: function () {\n this.undelegateEvents();\n $(this.el).empty();\n },\n getIsRootView: function () {\n return (this.options.view.indexOf('-') === -1);\n },\n createdRow: function (row, data, dataIndex) {\n },\n copyPhone: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('', {\n value: $(e.currentTarget).data('phone').replace(/ /g,''),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Number copied to clipboard.'\n });\n },\n copyEmail: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('', {\n value: $(e.currentTarget).data('email'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Email copied to clipboard.'\n });\n }\n});\n\nPJQ.views.addressbook.ContactDataTable = PJQ.views.addressbook.AddressBookDataTable.extend({\n events: {\n 'click i.contact-toggle-row': 'childRowToggle',\n 'click .select-contact': 'contactSelectChanged',\n 'click .select-all-contacts': 'contactSelectAllChanged',\n \"click .btn-show-groups\": \"showRowGroups\",\n 'click .btn-copy-phone': function (e) {\n if (this.options.view === PJQ.constants.addressBook.view.CONTACT || this.options.view.includes('groupcontact')) {\n this.copyPhone(e)\n }\n },\n 'click .btn-copy-fax': function (e) {\n if (this.options.view === PJQ.constants.addressBook.view.CONTACT || this.options.view.includes('groupcontact')) {\n this.copyPhone(e)\n }\n },\n 'click .btn-copy-cell': function (e) {\n if (this.options.view === PJQ.constants.addressBook.view.CONTACT || this.options.view.includes('groupcontact')) {\n this.copyPhone(e)\n }\n },\n 'click .btn-copy-email': function (e) {\n if (this.options.view === PJQ.constants.addressBook.view.CONTACT || this.options.view.includes('groupcontact')) {\n this.copyEmail(e)\n }\n },\n },\n getContextMenuItems: function (a) {\n return [\n {\n name: PJQ.app.session.hasPermission('contacts.canEditContact') ? 'Edit Contact' : 'View Contact',\n iconClass: 'fal fa-user',\n onClick: _.bind(function (row) {\n this.editContact(row.data());\n }, this)\n },\n {\n name: 'Export Excel',\n iconClass: 'fal fa-file-excel',\n onClick: _.bind(function (row) {\n row.data().exportExcel();\n }, this),\n isShown: _.bind(function (row) {\n return PJQ.app.session.hasPermission('contacts.canExport');\n }, this)\n },\n {\n name: 'Approve Contact',\n iconClass: 'fal fa-thumbs-up',\n onClick: _.bind(function (row) {\n let apprModel = row.data();\n apprModel.approve(_.bind(function () {\n if (typeof this.options.onApprove === 'function') {\n this.options.onApprove(apprModel);\n }\n this.render();\n }, this));\n }, this),\n isShown: _.bind(function (row) {\n return row.data().get('isApprovalRequired') && PJQ.app.session.hasPermission('contacts.canApprove');\n }, this)\n },\n {\n name: 'Report',\n iconClass: 'fal fa-flag',\n onClick: _.bind(function (row) {\n new PJQ.views.contacts.ReportContactModal({\n contactId: row.data().get('contactId')\n })\n }, this),\n isShown: _.bind(function (row) {\n let isDirectoryContact = row.data().get('masterUserId') === 39\n return isDirectoryContact;\n }, this)\n },\n {\n name: 'Copy',\n iconClass: 'fal fa-copy',\n onClick: _.bind(function (row) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: row.data().get('contactId')\n },\n {\n endpoint: 'copydirectorycontact'\n },\n ])\n }).post().done(_.bind(function (data) {\n this.render();\n }, this)).fail(function (xhr, err, result) {\n PJQ.notifications.notify.errorNotify({\n message: err.indexOf('Logic') === -1 ? err : 'Something went wrong!'\n });\n });\n }, this),\n isShown: _.bind(function (row) {\n let isDirectoryContact = row.data().get('masterUserId') === 39\n return isDirectoryContact;\n }, this)\n },\n {\n name: 'Export vCard',\n iconClass: 'fal fa-address-card',\n onClick: _.bind(function (row) {\n row.data().getVcard();\n }, this),\n isShown: _.bind(function (row) {\n return PJQ.app.session.hasPermission('contacts.canExport');\n }, this)\n },\n {\n name: 'Send Updater',\n iconClass: 'fal fa-poll-h',\n onClick: _.bind(function (row) {\n\n let callback = function () {\n PJQ.notifications.notify.successNotify({\n message: 'Contact Updater Request sent'\n });\n };\n\n new PJQ.views.modals.YesNo({\n header: \"Send Contact Updater\",\n body: \"Are you sure you want to send this contact an Update Request?\",\n onYes: _.bind(function () {\n row.data().sendUpdater(callback);\n }, this)\n });\n\n }, this)\n },\n {\n name: 'Request Prequal',\n iconClass: 'fal fa-file-invoice',\n onClick: _.bind(function (row) {\n\n new PJQ.views.modals.YesNo({\n header: \"Send Prequalification Request\",\n body: \"Are you sure you want to send this contact an Prequalification Request?\",\n onYes: _.bind(function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: row.data().get('contactId')\n },\n {\n endpoint: 'prequal'\n },\n {\n endpoint: 'request'\n }\n ])\n }).post().done(_.bind(function (data) {\n if (data && data.success) {\n PJQ.notifications.notify.successNotify({\n message: 'Qualification update sent'\n });\n $('.prequal-request-update').html('Update Sent').prop('disabled', true);\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Qualification update failed, invalid email address on contact'\n });\n }\n }, this)).fail(function (xhr, err, result) {\n new PJQ.logging.Debug(PJQ.logging.LoggingActions.SEND_PREQUAL_UPDATE, {\n error: err,\n result: result\n });\n });\n\n }, this)\n });\n\n }, this),\n isShown: _.bind(function (row) {\n return PJQ.app.session.hasPermission('prequal.canView') && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PREQUAL)\n }, this)\n },\n {\n name: 'Delete Contact',\n iconClass: 'fal fa-trash',\n isDanger: true,\n onClick: _.bind(function (row) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Contact\",\n body: \"Are you sure you want to delete this contact from the address book?\",\n onDelete: _.bind(function () {\n row.data().destroy({\n success: _.bind(function() {\n // hide children\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n if (row.child.isShown())\n row.child.hide();\n }\n let parentTR = this.options.parentDataTable ? $(row.node()).parent().closest('tr').prev() : null,\n parentRow = this.options.parentDataTable ? this.options.parentDataTable.getRow(parentTR) : null;\n\n row.remove().draw(false);\n\n if (this.options.parentDataTable && this.options.addressBookView.currentView !== PJQ.constants.addressBook.view.TRADES_CONTACT) {\n if (parentRow.data().get('contactCount') === 1)\n parentRow.remove().draw(false);\n }\n }, this)\n });\n\n }, this)\n });\n }, this),\n isShown: _.bind(function (row) {\n let isDirectoryContact = row.data().get('masterUserId') === 39\n return PJQ.app.session.hasPermission('contacts.canDelete') && !isDirectoryContact;\n }, this)\n },\n {\n name: 'Project History',\n iconClass: 'fal fa-history',\n onClick: _.bind(function (row) {\n row.data().showProjectHistory();\n }, this),\n }\n ]\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [],\n includeColumns = ['icons', 'companyName', 'contactName', 'title', 'address1', 'address2', 'city', 'state', 'zip', 'country', 'phone', 'cell', 'fax', 'email', 'contactId', 'contactCompanyId', 'isAutoSelectDisabled', 'unionStatus', 'sector', 'certifications', 'groupListDisplay', 'gradeAverage', 'userType', 'activityRank', 'prequalPercent', 'prequalExpiresOn'];\n\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_SCREENINGS)) {\n includeColumns.push('screeningPackages');\n }\n\n _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n includeColumns.push('companyCustomField_' + customField.id);\n }, this));\n\n _.each(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n includeColumns.push('contactCustomField_' + customField.id);\n }, this));\n\n if (this.options.isShowCheckboxes) {\n columns.push({\n \"columnData\": '',\n \"title\": '
',\n \"width\": \"20px\",\n \"data\": \"null\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(this.renderContactSelect, this)\n });\n }\n\n if (!includeAllColumns) {\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n if (this.options.addressBookView && this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n columns.push({\n \"columnData\": \"contactGroups\",\n \"data\": null,\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '';\n }\n });\n }\n }\n\n let maxEmailWidth = $(window).width() > 1200 ? 225 : 100;\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'icons':\n columns.push({\n \"columnData\": \"icons\",\n \"data\": null,\n \"title\": 'Info',\n \"width\": '50px',\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let icons = [];\n // proqual stuff\n if (row.get('hasUnpaidInvites'))\n icons.push(\"\");\n else if (row.get('minScreeningStatusId') < PJQ.constants.proQual.screeningStatuses.Complete &&\n row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.Complete &&\n row.get('maxScreeningInviteId') > 0 && row.get('minScreeningGradeId') === 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.Complete &&\n row.get('maxScreeningInviteId') > 0 && row.get('minScreeningGradeId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.InProcess &&\n row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n\n if (row.get('maxScreeningInviteId') > 0 && row.get('screeningCountFeedbackItems') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n\n if (row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) < new Date())\n icons.push(\"\");\n\n // directory stuff\n if (row.get('networkVerificationLevel') === 1)\n icons.push(\"\");\n else if (row.get('networkVerificationLevel') === 2)\n icons.push(\"\");\n else if (row.get('masterUserId') === 39)\n icons.push(\"\");\n\n if (row.get('hasPrequal')) {\n icons.push(\"\");\n }\n\n if (row.get('isApprovalRequired')) {\n icons.push(\"\");\n }\n\n if (row.get('updatedOn') != null) {\n icons.push(\"\");\n }\n\n if (row.get('isPrimary')) {\n icons.push(\"\");\n }\n\n return '
' + icons.join('') + '
';\n }, this)\n });\n break;\n case 'companyName':\n columns.push({\n \"columnData\": \"companyName\",\n \"data\": \"attributes.companyName\",\n \"title\": \"Company\",\n });\n break;\n case 'contactName':\n columns.push({\n \"columnData\": \"contactName\",\n \"data\": \"attributes.contactName\",\n \"title\": \"Contact\",\n });\n break;\n case 'contactCompanyId':\n columns.push({\n \"columnData\": \"contactCompanyId\",\n \"data\": \"attributes.contactCompanyId\",\n \"title\": PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_CONTACT_COMPANY_ID_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_CONTACT_COMPANY_ID_LABEL) : \"Company ID\",\n });\n break;\n case 'contactId':\n columns.push({\n \"columnData\": \"contactId\",\n \"data\": \"attributes.contactId\",\n \"title\": PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_CONTACT_ID_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_CONTACT_ID_LABEL) : \"Contact ID\",\n });\n break;\n case 'isAutoSelectDisabled':\n columns.push({\n \"columnData\": \"isAutoSelectDisabled\",\n \"data\": \"attributes.isAutoSelectDisabled\",\n \"title\": \"Selection Status\",\n \"render\": _.bind(function (data, type, row) {\n return data ? 'Off' : 'On'\n }, this)\n });\n break;\n case 'title':\n columns.push({\n \"columnData\": \"title\",\n \"data\": \"attributes.title\",\n \"title\": \"Title\"\n });\n break;\n case 'address1':\n columns.push({\n \"columnData\": \"address1\",\n \"data\": \"attributes.address1\",\n \"title\": \"Address 1\"\n });\n break;\n case 'address2':\n columns.push({\n \"columnData\": \"address2\",\n \"data\": \"attributes.address2\",\n \"title\": \"Address 2\"\n });\n break;\n case 'city':\n columns.push({\n \"columnData\": \"city\",\n \"data\": \"attributes.city\",\n \"title\": \"City\"\n });\n break;\n case 'state':\n columns.push({\n \"columnData\": \"state\",\n \"data\": \"attributes.state\",\n \"title\": \"State\",\n });\n break;\n case 'zip':\n columns.push({\n \"columnData\": \"zip\",\n \"data\": \"attributes.zip\",\n \"title\": \"Zip\",\n });\n break;\n case 'country':\n columns.push({\n \"columnData\": \"country\",\n \"data\": \"attributes.country\",\n \"title\": \"Country\",\n });\n break;\n case 'phone':\n columns.push({\n \"columnData\": \"phone\",\n \"data\": \"attributes.phone\",\n \"title\": \"Phone\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone')) + (_.size(row.get('phoneExtension')) === 0 ? '' : ' x' + row.get('phoneExtension')) : 'N/A'),\n phoneWrapped = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone'), true) + (_.size(row.get('phoneExtension')) === 0 ? '' : ' x' + row.get('phoneExtension')) : 'N/A');\n\n if (row.get('phone') !== '')\n html += '';\n\n html += '
' + phoneWrapped + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'cell':\n columns.push({\n \"columnData\": \"cell\",\n \"data\": \"attributes.cell\",\n \"title\": \"Cell\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('cell') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('cell')) : 'N/A'),\n phoneWrapped = (row.get('cell') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('cell'), true) : 'N/A');\n\n if (row.get('cell') !== '')\n html += '';\n\n html += '
' + phoneWrapped + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'fax':\n columns.push({\n \"columnData\": \"fax\",\n \"data\": \"attributes.fax\",\n \"title\": \"Fax\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('fax') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('fax')) : 'N/A'),\n phoneWrapped = (row.get('fax') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('fax'), true) : 'N/A');\n\n if (row.get('fax') !== '')\n html += '';\n\n html += '
' + phoneWrapped + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'email':\n columns.push({\n \"columnData\": \"email\",\n \"data\": \"attributes.email\",\n \"title\": \"Email\",\n \"render\": function (data, type, row) {\n let html = '
',\n emailFormatted = (row.get('email') ? ('' + row.get('email') + '') : '');\n\n if (row.get('email') !== '')\n html += '';\n\n html += '
' + emailFormatted + '
';\n return html;\n }\n });\n break;\n case 'unionStatus':\n columns.push({\n \"columnData\": 'unionStatus',\n \"title\": 'Union Status',\n \"data\": 'unionStatus',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isUnion'))\n status.push('Union');\n if (row.get('isNonUnion'))\n status.push('Non-Union');\n if (row.get('isPrevailingWage'))\n status.push('Prevailing Wage');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'sector':\n columns.push({\n \"columnData\": 'sector',\n \"title\": 'Labor Sector',\n \"data\": 'sector',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isPublicSector'))\n status.push('Public');\n if (row.get('isPrivateSector'))\n status.push('Private');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'certifications':\n columns.push({\n \"columnData\": 'certifications',\n \"title\": 'Certification',\n \"data\": 'certifications',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isDBE'))\n status.push('DBE');\n if (row.get('isDVBE'))\n status.push('DVBE');\n if (row.get('isMBE'))\n status.push('MBE');\n if (row.get('isSBE'))\n status.push('SBE');\n if (row.get('isSDVBE'))\n status.push('SDVBE');\n if (row.get('isWBE'))\n status.push('WBE');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'groupListDisplay':\n columns.push({\n \"columnData\": \"groupListDisplay\",\n \"data\": \"attributes.groupListDisplay\",\n \"title\": \"Trades\",\n \"render\": function (data) {\n let groupArray = data.split(',')\n if (_.size(groupArray) > 5) {\n return _.rest(groupArray.reverse(), _.size(groupArray) - 5).reverse().join(', ') + \"
\" +\n \" \" + (_.size(groupArray) - 5) + \" more item(s)\"\n } else {\n return data\n }\n }\n });\n break;\n case 'gradeAverage':\n columns.push({\n \"columnData\": 'gradeAverage',\n \"title\": 'Grade',\n \"data\": 'grade',\n \"render\": function (data, type, row) {\n return row.get('gradeAverage').toFixed(1);\n }\n });\n break;\n case 'userType':\n columns.push({\n \"columnData\": 'userType',\n \"title\": 'Contact Type',\n \"data\": 'userType',\n \"render\": function (data, type, row) {\n let userType = _.filter(PJQ.app.session.userTypes.getByIsCompany(false), _.bind(function (userType) {\n return row.get('userTypeId') === userType.get('userTypeId');\n }, this))[0];\n\n return userType != null ? userType.get('name') : 'N/A';\n }\n });\n break;\n case 'activityRank':\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_ACTIVITY_RANK_STATUS_LIST)) {\n columns.push({\n \"columnData\": 'activityRank',\n \"data\": 'attributes.activityRank',\n \"title\": 'Activity'\n });\n }\n break;\n case 'prequalPercent':\n columns.push({\n \"columnData\": \"prequalPercent\",\n \"data\": \"attributes.prequalPercent\",\n \"title\": \"Prequal Percent\",\n \"render\": function (data, type, row) {\n if (data < 60) {\n return '' + data + ''\n } else if (data === 100) {\n return '' + data + ''\n } else if (data >= 60) {\n return '' + data + ''\n } else {\n return data\n }\n }\n });\n break;\n case 'prequalExpiresOn':\n columns.push({\n \"columnData\": \"prequalExpiresOn\",\n \"data\": \"attributes.prequalExpiresOn\",\n \"title\": \"Prequal Expires\",\n \"render\": function (data, type, row) {\n let expiresOn = data;\n if (expiresOn != null) {\n let expiresOnDate = new Date(expiresOn);\n return '' + PJQ.helpers.dateHelpers.getDateString(expiresOnDate, PJQ.helpers.dateHelpers.dateFormats.DATE) + '';\n } else {\n return 'N/A';\n }\n }\n });\n break;\n case 'screeningPackages':\n columns.push({\n \"columnData\": \"screeningPackages\",\n \"data\": \"attributes.screeningPackages\",\n \"title\": \"Qualification Packages\",\n \"render\": _.bind(function (data, type, row) {\n let ct = _.size(data);\n if (ct > 0) {\n let packageNames = [];\n _.each(this.options.addressBookView.screeningSettings.get('packages'), function (pkg) {\n if (data.indexOf(pkg.screeningPackageId) !== -1) {\n packageNames.push(pkg.packageName);\n }\n });\n return '
' + packageNames.join(', ') + '
'\n }\n return 'None';\n }, this)\n });\n break;\n }\n\n if (columnName.startsWith('companyCustomField_')) {\n let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n\n _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n if (customField.id === customFieldId)\n columns.push(this.getCustomFieldColumn(customField, true));\n }, this));\n }\n\n if (columnName.startsWith('contactCustomField_')) {\n let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n\n _.each(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n if (customField.id === customFieldId)\n columns.push(this.getCustomFieldColumn(customField, false));\n }, this));\n }\n\n }, this));\n\n return columns;\n },\n getChildTableType: function () {\n return PJQ.constants.addressBook.view.CONTACT_GROUP;\n },\n getChildTableSettings: function () {\n return null; //this.options.addressBookView.settings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.userSettings;\n childOpts.addressBookView = this.options.addressBookView;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n childOpts.order = [];\n childOpts.onApprove = this.options.onApprove;\n childOpts.isShowCheckboxes = true;\n childOpts.paging = false;\n return new PJQ.views.addressbook.ContactGroupDataTable(childOpts);\n },\n getRowChildData: function (row) {\n let viewOptions = {\n view: PJQ.constants.addressBook.view.CONTACT_GROUP,\n contactId: row.data().get('contactId'),\n groupId: row.data().collection.options.groupId\n };\n return new PJQ.collections.addressBook.AddressBookViewResults(null, viewOptions);\n },\n afterDataTableRenderChild: function () {\n this.$el.find('.select-contact.indeterminate').prop('indeterminate', true);\n },\n isContactSelected: function (row) {\n let selected = (this.options.addressBookView.options.disabledContacts.indexOf(row.contactId) !== -1);\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n if (_.size(row.contactGroups) > 0) {\n selected = selected || _.size(_.intersection(this.options.addressBookView.options.disabledContactGroups, row.contactGroups)) > 0 ||\n _.size(_.intersection(this.options.addressBookView.selectedContactGroups, row.contactGroups)) > 0;\n } else {\n selected = selected || (this.options.addressBookView.selectedContactsNoGroup.indexOf(row.contactId) !== -1);\n }\n } else\n selected = selected || (this.options.addressBookView.selectedContactsAll.indexOf(row.contactId) !== -1);\n\n return selected;\n },\n isContactIndeterminate: function (row) {\n let indeterminate = false,\n contactGroups = _.size(row.contactGroups),\n disabledGroups = _.size(_.intersection(this.options.addressBookView.options.disabledContactGroups, row.contactGroups)),\n selectedGroups = _.size(_.intersection(this.options.addressBookView.selectedContactGroups, row.contactGroups));\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n if (contactGroups > 0 && (disabledGroups + selectedGroups > 0)) {\n indeterminate = indeterminate || (contactGroups > disabledGroups + selectedGroups);\n }\n }\n\n return indeterminate;\n },\n isContactDisabled: function (row) {\n let disabled = (row.isBlacklisted === true && this.options.addressBookView.options.selectionMode !== PJQ.constants.addressBook.selectionMode.MERGE) || (this.options.addressBookView.options.disabledContacts.indexOf(row.contactId) !== -1);\n if (_.size(row.contactGroups) > 0) {\n disabled = disabled || _.size(_.intersection(this.options.addressBookView.options.disabledContactGroups, row.contactGroups)) === _.size(row.contactGroups);\n }\n\n return disabled;\n },\n renderContactSelect: function (data, type, row) {\n let isSelected = this.isContactSelected(row.attributes),\n isIndeterminate = this.isContactIndeterminate(row.attributes),\n isDisabled = this.isContactDisabled(row.attributes);\n\n let html = '
' +\n '';\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n html += '
' +\n '
';\n } else {\n html += '
';\n }\n\n html += '
';\n\n return (html);\n },\n updateContactSelect: function (row) {\n let isSelected = this.isContactSelected(row.data().attributes),\n isIndeterminate = this.isContactIndeterminate(row.data().attributes),\n isDisabled = this.isContactDisabled(row.data().attributes),\n $cb = $(row.node()).find('div.pretty > input[type=\"checkbox\"]');\n\n if (isIndeterminate)\n $cb.prop('checked', false).prop('indeterminate', true).addClass('indeterminate');\n else if (isSelected)\n $cb.prop('checked', true).prop('indeterminate', false).removeClass('indeterminate');\n else\n $cb.prop('checked', false).prop('indeterminate', false).removeClass('indeterminate');\n },\n contactSelectChanged: function (e) {\n let tr = $(e.currentTarget).closest('tr'),\n parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n row = this.getRow(tr),\n parentRow = this.options.parentDataTable ? this.options.parentDataTable.getRow(parentTR) : null;\n\n if ($(e.currentTarget).prop('checked')) {\n this.options.addressBookView.addSelectedContactsAll([row.data().get('contactId')]);\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n if (_.size(row.data().get('contactGroups')) > 0)\n this.options.addressBookView.addSelectedContactGroups(row.data().get('contactGroups'));\n else\n this.options.addressBookView.addSelectedContactsNoGroup([row.data().get('contactId')]);\n }\n } else {\n this.options.addressBookView.removeSelectedContactsAll([row.data().get('contactId')]);\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n if (_.size(row.data().get('contactGroups')) > 0)\n this.options.addressBookView.removeSelectedContactGroups(row.data().get('contactGroups'));\n else\n this.options.addressBookView.removeSelectedContactsNoGroup([row.data().get('contactId')]);\n }\n }\n\n this.updateContactSelect(row);\n\n // cascade up to parents\n if (this.options.parentDataTable && parentRow) {\n if ([PJQ.constants.addressBook.view.COMPANY, PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY].indexOf(this.options.parentDataTable.options.view) !== -1) {\n this.options.parentDataTable.updateCompanySelect(parentRow);\n }\n }\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT &&\n [PJQ.constants.addressBook.view.CONTACT, PJQ.constants.addressBook.view.COMPANY_CONTACT].indexOf(this.options.view) !== -1) {\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n if (childDT.options.parentId === row.data().get('contactId')) {\n _.each(childDT.$el.find('.select-contactgroup'), _.bind(function (input) {\n childDT.updateContactGroupSelect(childDT.getRow($(input).closest('tr')));\n }, this));\n }\n }, this));\n }\n\n },\n showRowGroups: function (e) {\n let target = $(e.currentTarget),\n row = this.getRow(target.closest('tr')),\n data = row.data(),\n groups = data.get('groupListDisplay').split(',')\n target[0].outerHTML = ' ' + _.rest(groups, 5).join(', ')\n },\n contactSelectAllChanged: function (e) {\n let parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n parentRow = this.options.parentDataTable ? this.options.parentDataTable.getRow(parentTR) : null,\n callback = _.bind(function () {\n _.each(this.$el.find('.select-contact'), _.bind(function (input) {\n this.updateContactSelect(this.getRow($(input).closest('tr')));\n }, this));\n\n if (this.options.parentDataTable && [PJQ.constants.addressBook.view.COMPANY, PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY].indexOf(this.options.parentDataTable.options.view) !== -1) {\n this.options.parentDataTable.updateCompanySelect(parentRow);\n }\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT &&\n [PJQ.constants.addressBook.view.CONTACT, PJQ.constants.addressBook.view.COMPANY_CONTACT].indexOf(this.options.view) !== -1) {\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n _.each(childDT.$el.find('.select-contactgroup'), _.bind(function (input) {\n childDT.updateContactGroupSelect(childDT.getRow($(input).closest('tr')));\n }, this));\n }, this));\n }\n }, this);\n\n if (this.getIsRootView()) {\n this.options.addressBookView.selectAll($(e.currentTarget).prop('checked'), null, _.bind(function () {\n callback();\n }, this));\n } else {\n // loop through our data, add everyone, and update the checkboxes.\n let contacts = [],\n contactGroups = [],\n contactsNoGroup = [];\n\n _.each(this.$el.find('.select-contact'), _.bind(function (input) {\n let row = this.getRow($(input).closest('tr'));\n if (!row.data().get('isAutoSelectDisabled') && !row.data().get('isBlacklisted') && !row.data().get('isCompanyBlacklisted')) {\n contacts.push(row.data().get('contactId'));\n $.merge(contactGroups, row.data().get('contactGroups'));\n if (_.size(row.data().get('contactGroups')) === 0)\n contactsNoGroup.push(row.data().get('contactId'));\n }\n }, this));\n\n if ($(e.currentTarget).prop('checked')) {\n this.options.addressBookView.addSelectedContactsAll(contacts);\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n this.options.addressBookView.addSelectedContactGroups(contactGroups);\n this.options.addressBookView.addSelectedContactsNoGroup(contactsNoGroup)\n }\n } else {\n this.options.addressBookView.removeSelectedContactsAll(contacts);\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n this.options.addressBookView.removeSelectedContactGroups(contactGroups);\n this.options.addressBookView.removeSelectedContactsNoGroup(contactsNoGroup)\n }\n }\n\n callback();\n }\n\n }\n});\n\nPJQ.views.addressbook.CompanyDataTable = PJQ.views.addressbook.AddressBookDataTable.extend({\n events: {\n 'click i.company-toggle-row': 'childRowToggle',\n 'click .select-company': 'companySelectChanged',\n 'click .select-all-companies': 'companySelectAllChanged',\n 'click .btn-copy-phone': 'copyPhone',\n 'click .btn-copy-fax': 'copyPhone',\n 'click .btn-copy-cell': 'copyPhone',\n 'click .btn-copy-email': 'copyEmail',\n \"click .btn-show-groups\": \"showRowGroups\"\n },\n getContextMenuItems: function () {\n return [\n {\n name: PJQ.app.session.hasPermission('contacts.canEditContact') ? 'Edit Contact' : 'View Contact',\n iconClass: 'fal fa-user',\n onClick: _.bind(function (row) {\n this.editContact(row.data());\n }, this)\n },\n {\n name: 'Export Excel',\n iconClass: 'fal fa-file-excel',\n onClick: _.bind(function (row) {\n row.data().exportExcel();\n }, this),\n isShown: _.bind(function (row) {\n return PJQ.app.session.hasPermission('contacts.canExport');\n }, this)\n },\n {\n name: 'Export vCard',\n iconClass: 'fal fa-address-card',\n onClick: _.bind(function (row) {\n let contact = new PJQ.models.contacts.Contact(row.data());\n contact.getVcard();\n }, this),\n },\n {\n name: 'Report',\n iconClass: 'fal fa-flag',\n onClick: _.bind(function (row) {\n new PJQ.views.contacts.ReportContactModal({\n contactId: row.data().get('contactId')\n })\n }, this),\n isShown: _.bind(function (row) {\n let isDirectoryContact = row.data().get('masterUserId') === 39\n return isDirectoryContact;\n }, this)\n },\n {\n name: 'Copy',\n iconClass: 'fal fa-copy',\n onClick: _.bind(function (row) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: row.data().get('contactId')\n },\n {\n endpoint: 'copydirectorycontact'\n },\n ])\n }).post().done(_.bind(function (data) {\n this.render();\n }, this)).fail(function (xhr, err, result) {\n PJQ.notifications.notify.errorNotify({\n message: err.indexOf('Logic') === -1 ? err : 'Something went wrong!'\n });\n });\n }, this),\n isShown: _.bind(function (row) {\n let isDirectoryContact = row.data().get('masterUserId') === 39\n return isDirectoryContact;\n }, this)\n },\n {\n name: 'Delete Company',\n iconClass: 'fal fa-trash',\n isDanger: true,\n onClick: _.bind(function (row) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Company\",\n body: \"Are you sure you want to delete this company from the address book? NOTE: All contacts in this company will also be deleted, including ones that may not be visible due to filters.\",\n onDelete: _.bind(function () {\n let contact = new PJQ.models.contacts.Company(row.data().attributes);\n contact.destroy();\n\n if (row.child.isShown())\n row.child.hide();\n\n row.remove().draw(false);\n this.dataTable.rows().invalidate().draw(false);\n\n }, this)\n });\n }, this),\n isShown: _.bind(function (row) {\n let isDirectoryContact = row.data().get('masterUserId') === 39\n return PJQ.app.session.hasPermission('contacts.canDelete') && !isDirectoryContact;\n }, this)\n },\n {\n name: 'Project History',\n iconClass: 'fal fa-history',\n onClick: _.bind(function (row) {\n let contact = new PJQ.models.contacts.Contact(row.data().attributes);\n contact.showProjectHistory();\n }, this),\n }\n ]\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [],\n includeColumns = ['icons', 'companyName', 'primaryContactName', 'primaryContactTitle', 'primaryContactUserType', 'primaryAddress1', 'primaryAddress2', 'primaryCity', 'primaryState', 'primaryZip', 'primaryCountry', 'primaryPhone', 'primaryCell', 'primaryFax', 'primaryEmail', 'contactCompanyId', 'unionStatus', 'sector', 'certifications', 'groupListDisplay', 'gradeAverage', 'primaryActivityRank', 'companyActivityRank', 'contactCount', 'prequalPercent', 'prequalExpiresOn'];\n\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_SCREENINGS)) {\n includeColumns.push('screeningPackages');\n }\n\n _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n includeColumns.push('companyCustomField_' + customField.id);\n }, this));\n\n _.each(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n includeColumns.push('contactCustomField_' + customField.id);\n }, this));\n\n if (!includeAllColumns) {\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n if (this.options.isShowCheckboxes) {\n columns.push({\n \"columnData\": '',\n \"title\": '
',\n \"width\": \"20px\",\n \"data\": \"null\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(this.renderCompanySelect, this)\n });\n }\n\n columns.push({\n \"columnData\": \"companyContacts\",\n \"data\": null,\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '';\n }\n });\n\n }\n\n let maxEmailWidth = $(window).width() > 1200 ? 225 : 100;\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'icons':\n columns.push({\n \"columnData\": \"icons\",\n \"data\": null,\n \"title\": 'Info',\n \"width\": '50px',\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let icons = [];\n // proqual stuff\n if (row.get('hasUnpaidInvites'))\n icons.push(\"\");\n else if (row.get('minScreeningStatusId') < PJQ.constants.proQual.screeningStatuses.Complete &&\n row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.Complete &&\n row.get('maxScreeningInviteId') > 0 && row.get('minScreeningGradeId') === 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.Complete &&\n row.get('maxScreeningInviteId') > 0 && row.get('minScreeningGradeId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.InProcess &&\n row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n if (row.get('maxScreeningInviteId') > 0 && row.get('screeningCountFeedbackItems') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"\");\n\n if (row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) < new Date())\n icons.push(\"\");\n\n // directory stuff\n if (row.get('networkVerificationLevel') === 1)\n icons.push(\"\");\n else if (row.get('networkVerificationLevel') === 2)\n icons.push(\"\");\n else if (row.get('masterUserId') === 39)\n icons.push(\"\");\n\n if (row.get('hasPrequal')) {\n icons.push(\"\");\n }\n\n\n return '
' + icons.join('') + '
';\n }, this)\n });\n break;\n case 'companyName':\n columns.push({\n \"columnData\": \"companyName\",\n \"data\": \"attributes.companyName\",\n \"title\": \"Company\",\n });\n break;\n case 'primaryContactName':\n columns.push({\n \"columnData\": \"primaryContactName\",\n \"data\": \"attributes.contactName\",\n \"title\": \"Primary Contact\",\n });\n break;\n case 'primaryTitle':\n columns.push({\n \"columnData\": \"primaryTitle\",\n \"data\": \"attributes.title\",\n \"title\": \"Primary Title\"\n });\n break;\n case 'primaryContactUserType':\n columns.push({\n \"columnData\": \"primaryContactUserType\",\n \"data\": \"attributes.defaultContactUserTypeId\",\n \"title\": \"Primary User Type\",\n \"render\": _.bind(function (data, type, row) {\n let userType = PJQ.app.session.userTypes.get(data);\n if(userType){\n return '' + userType.get('name') + '';\n }\n }, this)\n });\n break;\n case 'primaryAddress1':\n columns.push({\n \"columnData\": \"primaryAddress1\",\n \"data\": \"attributes.address1\",\n \"title\": \"Primary Address 1\"\n });\n break;\n case 'primaryAddress2':\n columns.push({\n \"columnData\": \"primaryAddress2\",\n \"data\": \"attributes.address2\",\n \"title\": \"Primary Address 2\"\n });\n break;\n case 'primaryCity':\n columns.push({\n \"columnData\": \"primaryCity\",\n \"data\": \"attributes.city\",\n \"title\": \"Primary City\"\n });\n break;\n case 'primaryState':\n columns.push({\n \"columnData\": \"primaryState\",\n \"data\": \"attributes.state\",\n \"title\": \"Primary State\",\n \"width\": \"100px\",\n });\n break;\n case 'primaryZip':\n columns.push({\n \"columnData\": \"primaryZip\",\n \"data\": \"attributes.zip\",\n \"title\": \"Primary Zip\",\n });\n break;\n case 'primaryCountry':\n columns.push({\n \"columnData\": \"primaryCountry\",\n \"data\": \"attributes.country\",\n \"title\": \"Primary Country\",\n });\n break;\n case 'primaryPhone':\n columns.push({\n \"columnData\": \"primaryPhone\",\n \"data\": \"attributes.phone\",\n \"title\": \"Primary Phone\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone')) + (_.size(row.get('phoneExtension')) === 0 ? '' : ' x' + row.get('phoneExtension')) : 'N/A'),\n phoneWrapped = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone'), true) + (_.size(row.get('phoneExtension')) === 0 ? '' : ' x' + row.get('phoneExtension')) : 'N/A');\n\n if (row.get('phone') !== '')\n html += '';\n\n html += '
' + phoneWrapped + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'primaryCell':\n columns.push({\n \"columnData\": \"primaryCell\",\n \"data\": \"attributes.cell\",\n \"title\": \"Primary Cell\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('cell') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('cell')) : 'N/A'),\n phoneWrapped = (row.get('cell') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('cell'), true) : 'N/A');\n\n if (row.get('cell') !== '')\n html += '';\n\n html += '
' + phoneWrapped + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'primaryFax':\n columns.push({\n \"columnData\": \"primaryFax\",\n \"data\": \"attributes.fax\",\n \"title\": \"Primary Fax\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('fax') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('fax')) : 'N/A'),\n phoneWrapped = (row.get('fax') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('fax'), true) : 'N/A');\n\n if (row.get('fax') !== '')\n html += '';\n\n html += '
' + phoneWrapped + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'primaryEmail':\n columns.push({\n \"columnData\": \"primaryEmail\",\n \"data\": \"attributes.email\",\n \"title\": \"Primary Email\",\n \"render\": function (data, type, row) {\n let html = '
',\n emailFormatted = (row.get('email') ? ('' + row.get('email') + '') : '');\n\n if (row.get('email') !== '')\n html += '';\n\n html += '
' + emailFormatted + '
';\n return html;\n }\n });\n break;\n case 'contactCompanyId':\n columns.push({\n \"columnData\": \"contactCompanyId\",\n \"data\": \"attributes.contactCompanyId\",\n \"title\": PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_CONTACT_COMPANY_ID_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_CONTACT_COMPANY_ID_LABEL) : \"Company ID\",\n });\n break;\n case 'unionStatus':\n columns.push({\n \"columnData\": 'unionStatus',\n \"data\": \"unionStatus\",\n \"title\": 'Union Status',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isUnion'))\n status.push('Union');\n if (row.get('isNonUnion'))\n status.push('Non-Union');\n if (row.get('isPrevailingWage'))\n status.push('Prevailing Wage');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'sector':\n columns.push({\n \"columnData\": 'sector',\n \"data\": \"sector\",\n \"title\": 'Labor Sector',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isPublicSector'))\n status.push('Public');\n if (row.get('isPrivateSector'))\n status.push('Private');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'certifications':\n columns.push({\n \"columnData\": 'certifications',\n \"title\": 'Certification',\n \"data\": \"certifications\",\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isDBE'))\n status.push('DBE');\n if (row.get('isDVBE'))\n status.push('DVBE');\n if (row.get('isMBE'))\n status.push('MBE');\n if (row.get('isSBE'))\n status.push('SBE');\n if (row.get('isSDVBE'))\n status.push('SDVBE');\n if (row.get('isWBE'))\n status.push('WBE');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'groupListDisplay':\n columns.push({\n \"columnData\": \"groupListDisplay\",\n \"data\": \"attributes.groupListDisplay\",\n \"title\": \"Trades\",\n \"render\": function (data) {\n let groupArray = data.split(',')\n if (_.size(groupArray) > 5) {\n return _.rest(groupArray.reverse(), _.size(groupArray) - 5).reverse().join(', ') + \"
\" +\n \" \" + (_.size(groupArray) - 5) + \" more item(s)\"\n } else {\n return data\n }\n }\n });\n break;\n case 'gradeAverage':\n columns.push({\n \"columnData\": 'gradeAverage',\n \"title\": 'Grade',\n \"data\": \"grade\",\n \"render\": function (data, type, row) {\n return row.get('gradeAverage').toFixed(1);\n }\n });\n break;\n case 'primaryActivityRank':\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_ACTIVITY_RANK_STATUS_LIST)) {\n columns.push({\n \"columnData\": 'primaryActivityRank',\n \"data\": 'attributes.activityRank',\n \"title\": 'Primary Activity'\n });\n }\n break;\n case 'companyActivityRank':\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_ACTIVITY_RANK_STATUS_LIST)) {\n columns.push({\n \"columnData\": 'companyActivityRank',\n \"data\": 'attributes.companyActivityRank',\n \"title\": 'Company Activity'\n });\n }\n break;\n case 'contactCount':\n columns.push({\n \"columnData\": \"contactCount\",\n \"data\": \"attributes.contactCount\",\n \"title\": \"Contacts\",\n });\n break;\n case 'prequalPercent':\n columns.push({\n \"columnData\": \"prequalPercent\",\n \"data\": \"attributes.prequalPercent\",\n \"title\": \"Prequal Percent\",\n \"render\": function (data, type, row) {\n if (data < 60) {\n return '' + data + ''\n } else if (data === 100) {\n return '' + data + ''\n } else if (data >= 60) {\n return '' + data + ''\n } else {\n return data\n }\n }\n });\n break;\n case 'prequalExpiresOn':\n columns.push({\n \"columnData\": \"prequalExpiresOn\",\n \"data\": \"attributes.prequalExpiresOn\",\n \"title\": \"Prequal Expires\",\n \"render\": function (data, type, row) {\n let expiresOn = data;\n if (expiresOn != null) {\n let expiresOnDate = new Date(expiresOn);\n return '' + PJQ.helpers.dateHelpers.getDateString(expiresOnDate, PJQ.helpers.dateHelpers.dateFormats.DATE) + '';\n } else {\n return 'N/A';\n }\n }\n });\n break;\n case 'screeningPackages':\n columns.push({\n \"columnData\": \"screeningPackages\",\n \"data\": \"attributes.screeningPackages\",\n \"title\": \"Qualification Packages\",\n \"render\": _.bind(function (data, type, row) {\n let ct = _.size(data);\n if (ct > 0) {\n let packageNames = [];\n _.each(this.options.addressBookView.screeningSettings.get('packages'), function (pkg) {\n if (data.indexOf(pkg.screeningPackageId) !== -1) {\n packageNames.push(pkg.packageName);\n }\n });\n return '
' + packageNames.join(', ') + '
'\n }\n return 'None';\n }, this)\n });\n break;\n }\n\n if (columnName.startsWith('companyCustomField_')) {\n let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n\n _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n if (customField.id === customFieldId)\n columns.push(this.getCustomFieldColumn(customField, true));\n }, this));\n }\n\n if (columnName.startsWith('contactCustomField_')) {\n let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n\n _.each(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n if (customField.id === customFieldId)\n columns.push(this.getCustomFieldColumn(customField, false));\n }, this));\n }\n\n }, this));\n\n return columns;\n },\n getChildTableType: function () {\n return this.options.view + '-contact';\n },\n getChildTableSettings: function () {\n return this.options.addressBookView.settings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.userSettings;\n childOpts.addressBookView = this.options.addressBookView;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n childOpts.onApprove = this.options.onApprove;\n childOpts.isShowCheckboxes = this.options.addressBookView.isShowCheckboxes;\n return new PJQ.views.addressbook.ContactDataTable(childOpts);\n },\n getRowChildData: function (row) {\n let viewOptions = {\n view: 'contact',\n contactCompanyId: row.data().get('contactCompanyId'),\n groupId: row.data().collection.options.groupId\n };\n return new PJQ.collections.addressBook.AddressBookViewResults(null, viewOptions);\n },\n afterDataTableRenderChild: function () {\n this.$el.find('.select-company.indeterminate').prop('indeterminate', 'true');\n },\n isCompanySelected: function (row) {\n let selected = false,\n disabledContactsNoGroup = _.size(_.intersection(this.options.addressBookView.options.disabledContacts, row.noGroupContacts)),\n selectedContactsNoGroup = _.size(_.intersection(this.options.addressBookView.selectedContactsNoGroup, row.noGroupContacts)),\n disabledGroups = _.size(_.intersection(this.options.addressBookView.options.disabledContactGroups, row.contactGroups)),\n selectedGroups = _.size(_.intersection(this.options.addressBookView.selectedContactGroups, row.contactGroups));\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n selected = selected || ((disabledContactsNoGroup + selectedContactsNoGroup + disabledGroups + selectedGroups) > 0);\n } else\n selected = selected || (_.size(_.intersection(this.options.addressBookView.selectedContactsAll, row.selectableContacts)) > 0);\n\n return selected;\n },\n isCompanyIndeterminate: function (row) {\n let indeterminate = false,\n isSelected = this.isCompanySelected(row),\n selectableContacts = _.size(row.selectableContacts),\n selectedContacts = _.size(_.intersection(this.options.addressBookView.selectedContactsAll, row.selectableContacts)),\n contactsNoGroup = _.size(row.noGroupContacts),\n disabledContactsNoGroup = _.size(_.intersection(this.options.addressBookView.options.disabledContacts, row.noGroupContacts)),\n selectedContactsNoGroup = _.size(_.intersection(this.options.addressBookView.selectedContactsNoGroup, row.noGroupContacts)),\n contactGroups = _.size(row.contactGroups),\n disabledGroups = _.size(_.intersection(this.options.addressBookView.options.disabledContactGroups, row.contactGroups)),\n selectedGroups = _.size(_.intersection(this.options.addressBookView.selectedContactGroups, row.contactGroups));\n\n if (isSelected) {\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n\n if (contactsNoGroup === 0 && contactGroups > 0) {\n indeterminate = indeterminate || (contactGroups > disabledGroups + selectedGroups);\n } else if (contactsNoGroup > 0 && contactGroups === 0) {\n indeterminate = indeterminate || (contactsNoGroup > disabledContactsNoGroup + selectedContactsNoGroup);\n } else if (contactsNoGroup > 0 && contactGroups > 0) {\n indeterminate = indeterminate || (contactGroups > disabledGroups + selectedGroups) || (contactsNoGroup > disabledContactsNoGroup + selectedContactsNoGroup);\n }\n } else {\n indeterminate = indeterminate || (selectedContacts > 0 && (selectableContacts > selectedContacts));\n }\n }\n\n return indeterminate;\n },\n isCompanyDisabled: function (row) {\n let disabled = false;\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n\n let allNoGroupContactsDisabled = _.size(row.noGroupContacts) === 0 || (_.size(row.noGroupContacts) === _.size(_.intersection(this.options.addressBookView.options.disabledContacts, row.noGroupContacts))),\n allContactGroupsDisabled = _.size(row.contactGroups) === 0 || (_.size(row.contactGroups) === _.size(_.intersection(this.options.addressBookView.options.disabledContactGroups, row.contactGroups)));\n\n disabled = allContactGroupsDisabled && allNoGroupContactsDisabled;\n\n } else {\n disabled = (_.size(_.intersection(this.options.addressBookView.options.disabledContacts, row.selectableContacts)) === _.size(row.selectableContacts));\n }\n\n return disabled;\n },\n renderCompanySelect: function (data, type, row) {\n let isSelected = this.isCompanySelected(row.attributes),\n isIndeterminate = this.isCompanyIndeterminate(row.attributes),\n isDisabled = this.isCompanyDisabled(row.attributes);\n\n return ('
' +\n '' +\n '
' +\n '
' +\n '
');\n },\n updateCompanySelect: function (row) {\n let selectedCompanyContacts = _.intersection(this.options.addressBookView.selectedContactsAll, row.data().get('selectableContacts')),\n isSelected = this.isCompanySelected(row.data().attributes),\n isIndeterminate = this.isCompanyIndeterminate(row.data().attributes),\n isDisabled = this.isCompanyDisabled(row.data().attributes),\n $cb = $(row.node()).find('div.pretty > input[type=\"checkbox\"]');\n if (isIndeterminate)\n $cb.prop('checked', false).prop('indeterminate', true).addClass('indeterminate');\n else if (isSelected)\n $cb.prop('checked', true).prop('indeterminate', false).removeClass('indeterminate');\n else\n $cb.prop('checked', false).prop('indeterminate', false).removeClass('indeterminate');\n },\n companySelectChanged: function (e) {\n let tr = $(e.currentTarget).closest('tr'),\n parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n row = this.getRow(tr);\n if ($(e.currentTarget).prop('checked')) {\n this.options.addressBookView.addSelectedContactsAll(row.data().get('selectableContacts'));\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n this.options.addressBookView.addSelectedContactsNoGroup(row.data().get('noGroupContacts'));\n this.options.addressBookView.addSelectedContactGroups(row.data().get('contactGroups'));\n }\n } else {\n this.options.addressBookView.removeSelectedContactsAll(row.data().get('selectableContacts'));\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n this.options.addressBookView.removeSelectedContactsNoGroup(row.data().get('noGroupContacts'));\n this.options.addressBookView.removeSelectedContactGroups(row.data().get('contactGroups'));\n }\n }\n\n this.updateCompanySelect(row);\n\n // todo: cascade down to contacts / etc\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n if (childDT.options.parentId === row.data().get('contactId')) {\n _.each(childDT.$el.find('.select-contact'), _.bind(function (input) {\n childDT.updateContactSelect(childDT.getRow($(input).closest('tr')));\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT &&\n this.options.view === PJQ.constants.addressBook.view.COMPANY) {\n _.each(childDT.options.childDataTables, _.bind(function (childDTchild) {\n _.each(childDTchild.$el.find('.select-contactgroup'), _.bind(function (input) {\n childDTchild.updateContactGroupSelect(childDTchild.getRow($(input).closest('tr')));\n }, this));\n }, this));\n }\n }, this));\n }\n }, this));\n },\n showRowGroups: function (e) {\n let target = $(e.currentTarget),\n row = this.getRow(target.closest('tr')),\n data = row.data(),\n groups = data.get('groupListDisplay').split(',')\n target[0].outerHTML = ' ' + _.rest(groups, 5).join(', ')\n },\n companySelectAllChanged: function (e) {\n let callback = _.bind(function () {\n _.each(this.$el.find('.select-company'), _.bind(function (input) {\n this.updateCompanySelect(this.getRow($(input).closest('tr')));\n }, this));\n\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n _.each(childDT.$el.find('.select-contact'), _.bind(function (input) {\n childDT.updateContactSelect(childDT.getRow($(input).closest('tr')));\n\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT &&\n this.options.view === PJQ.constants.addressBook.view.COMPANY) {\n _.each(childDT.options.childDataTables, _.bind(function (childDTchild) {\n _.each(childDTchild.$el.find('.select-contactgroup'), _.bind(function (input) {\n childDTchild.updateContactGroupSelect(childDTchild.getRow($(input).closest('tr')));\n }, this));\n }, this));\n }\n }, this));\n }, this));\n }, this);\n\n if (this.getIsRootView()) {\n this.options.addressBookView.selectAll($(e.currentTarget).prop('checked'), null, _.bind(function () {\n callback();\n }, this));\n } else {\n // loop through our data, add everyone, and update the checkboxes.\n let contacts = [], contactsNoGroup = [], contactGroups = [];\n _.each(this.$el.find('.select-company'), _.bind(function (input) {\n let row = this.getRow($(input).closest('tr'));\n $.merge(contacts, row.data().get('selectableContacts'));\n $.merge(contactsNoGroup, row.data().get('noGroupContacts'));\n $.merge(contactGroups, row.data().get('contactGroups'));\n }, this));\n if ($(e.currentTarget).prop('checked')) {\n this.options.addressBookView.addSelectedContactsAll(contacts);\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n this.options.addressBookView.addSelectedContactsNoGroup(contactsNoGroup);\n this.options.addressBookView.addSelectedContactGroups(contactGroups);\n }\n } else {\n this.options.addressBookView.removeSelectedContactsAll(contacts);\n if (this.options.addressBookView.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n this.options.addressBookView.removeSelectedContactsNoGroup(contactsNoGroup);\n this.options.addressBookView.removeSelectedContactGroups(contactGroups);\n }\n }\n\n callback();\n }\n }\n});\n\nPJQ.views.addressbook.GroupHeaderDataTable = PJQ.views.addressbook.AddressBookDataTable.extend({\n events: {\n 'click i.group-toggle-row': 'childRowToggle',\n 'click .select-all-trades': 'tradeSelectAllChanged'\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [],\n includeColumns = ['groupDescription', 'groupName', 'groupCount', 'childCount'];\n\n if (!includeAllColumns) {\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n columns.push({\n \"columnData\": \"groupChildren\",\n \"data\": null,\n \"title\": this.options.isShowCheckboxes ? '
' : '',\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"30px\",\n \"defaultContent\": '',\n \"render\": _.bind(function (data, type, row) {\n let html = '';\n if (this.options.settings.showGroupDescription)\n html = '';\n else\n html = '';\n\n return html;\n }, this)\n });\n\n columns.push({\n \"columnData\": \"sortOrder\",\n \"data\": \"attributes.sortOrder\",\n \"searchable\": false,\n \"defaultContent\": '',\n \"visible\": false\n });\n\n }\n\n let maxEmailWidth = $(window).width() > 1200 ? 225 : 100;\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'groupName':\n columns.push({\n \"columnData\": \"groupName\",\n \"data\": \"attributes.groupName\",\n \"width\": \"40%\",\n \"title\": \"Trade\",\n });\n break;\n case 'groupDescription':\n columns.push({\n \"columnData\": \"groupDescription\",\n \"data\": \"attributes.groupDescription\",\n \"width\": \"40%\",\n \"title\": \"Division\",\n });\n break;\n case 'childCount':\n columns.push({\n \"columnData\": \"childCount\",\n \"data\": \"attributes.childCount\",\n \"title\": (this.options.view === PJQ.constants.addressBook.view.TRADES_COMPANY || this.options.view === PJQ.constants.addressBook.view.TRADES_COMPANY_GROUP) ? \"Companies\" : \"Contacts\"\n });\n break;\n case 'groupCount':\n columns.push({\n \"columnData\": \"groupCount\",\n \"data\": \"attributes.groupCount\",\n \"width\": \"150px\",\n \"title\": \"Trades\"\n });\n break;\n }\n }, this));\n\n return columns;\n },\n getChildTableType: function () {\n let view = '';\n if (this.options.settings.showGroupDescription)\n view = this.options.view + '-group';\n else {\n switch (this.options.view) {\n case PJQ.constants.addressBook.view.TRADES_COMPANY:\n case PJQ.constants.addressBook.view.TRADES_COMPANY_GROUP:\n view = PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY;\n break;\n case PJQ.constants.addressBook.view.TRADES_CONTACT:\n case PJQ.constants.addressBook.view.TRADES_CONTACT_GROUP:\n view = PJQ.constants.addressBook.view.TRADES_CONTACT_CONTACT;\n break;\n }\n }\n return view;\n },\n getChildTableSettings: function () {\n return this.options.addressBookView.settings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.userSettings;\n childOpts.addressBookView = this.options.addressBookView;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n childOpts.onApprove = this.options.onApprove;\n childOpts.isShowCheckboxes = this.options.addressBookView.isShowCheckboxes;\n\n let result = null;\n if (this.options.settings.showGroupDescription)\n result = new PJQ.views.addressbook.GroupHeaderChildDataTable(childOpts);\n else\n result = (this.options.view === PJQ.constants.addressBook.view.TRADES_COMPANY || this.options.view === PJQ.constants.addressBook.view.TRADES_COMPANY_GROUP) ? new PJQ.views.addressbook.CompanyDataTable(childOpts) : new PJQ.views.addressbook.ContactDataTable(childOpts);\n\n return result;\n },\n getRowChildData: function (row) {\n let view = (this.options.view === PJQ.constants.addressBook.view.TRADES_COMPANY || this.options.view === PJQ.constants.addressBook.view.TRADES_COMPANY_GROUP) ? \"company\" : \"contact\";\n if (this.options.settings.showGroupDescription)\n view = this.options.view;\n\n let viewOptions = {\n view: view,\n groupId: this.options.settings.showGroupDescription ? null : row.data().get('groupId'),\n groupDescription: this.options.settings.showGroupDescription && row.data() ? row.data().get('groupDescription') : null\n };\n return new PJQ.collections.addressBook.AddressBookViewResults(null, viewOptions);\n },\n tradeSelectAllChanged: function (e) {\n let processViews = _.bind(function (childDT) {\n if (childDT.options.view === PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY) {\n\n _.each(childDT.$el.find('.select-company'), _.bind(function (input) {\n childDT.updateCompanySelect(childDT.getRow($(input).closest('tr')));\n }, this));\n\n _.each(childDT.options.childDataTables, _.bind(function (contactDT) {\n _.each(contactDT.$el.find('.select-contact'), _.bind(function (input) {\n contactDT.updateContactSelect(contactDT.getRow($(input).closest('tr')));\n }, this));\n }, this));\n } else {\n _.each(childDT.$el.find('.select-contact'), _.bind(function (input) {\n childDT.updateContactSelect(childDT.getRow($(input).closest('tr')));\n }, this));\n }\n }, this),\n callback = _.bind(function () {\n if (this.options.settings.showGroupDescription) {\n _.each(this.options.childDataTables, _.bind(function (tradeDT) {\n _.each(tradeDT.options.childDataTables, _.bind(function (childDT) {\n processViews(childDT);\n }, this));\n }, this));\n } else {\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n processViews(childDT);\n }, this));\n }\n }, this);\n\n if (this.getIsRootView()) {\n this.options.addressBookView.selectAll($(e.currentTarget).prop('checked'), null, _.bind(function () {\n callback();\n }, this));\n } else {\n // showGroupDescription is ON, so we must figure out only the contacts with this groupDescription.\n this.options.addressBookView.selectAll($(e.currentTarget).prop('checked'), this.options.parentId, _.bind(function () {\n callback();\n }, this));\n }\n }\n});\n\nPJQ.views.addressbook.GroupHeaderChildDataTable = PJQ.views.addressbook.GroupHeaderDataTable.extend({\n events: {\n 'click i.group-toggle-row': 'childRowToggle',\n 'click .select-all-trades-division': 'tradeSelectAllChanged'\n }\n});\n\nPJQ.views.addressbook.ContactGroupDataTable = PJQ.views.addressbook.AddressBookDataTable.extend({\n events: {\n 'click .select-all-contactgroup': 'contactGroupSelectAllChanged',\n 'click .select-contactgroup': 'contactGroupSelectChanged'\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [],\n includeColumns = ['groupName'];\n\n if (!includeAllColumns) {\n columns.push({\n \"columnData\": '',\n \"title\": '
',\n \"width\": \"20px\",\n \"data\": \"null\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(this.renderContactGroupSelect, this)\n });\n }\n\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'groupName':\n columns.push({\n \"columnData\": \"groupName\",\n \"data\": \"attributes.groupName\",\n \"title\": \"Trade\",\n \"orderable\": false\n });\n break;\n }\n }, this));\n\n return columns;\n },\n isContactGroupSelected: function (row) {\n let selected = (this.options.addressBookView.options.disabledContactGroups.indexOf(row.contactGroupId) !== -1) ||\n (this.options.addressBookView.options.disabledContacts.indexOf(this.options.parentId) !== -1 && row.contactGroupId === 0) ||\n (this.options.addressBookView.selectedContactGroups.indexOf(row.contactGroupId) !== -1) ||\n (this.options.addressBookView.selectedContactsNoGroup.indexOf(this.options.parentId) !== -1);\n\n return selected;\n },\n isContactGroupDisabled: function (row) {\n let disabled = (this.options.addressBookView.options.disabledContacts.indexOf(this.options.parentId) !== -1 && row.contactGroupId === 0) ||\n (this.options.addressBookView.options.disabledContactGroups.indexOf(row.contactGroupId) !== -1);\n return disabled;\n },\n renderContactGroupSelect: function (data, type, row) {\n let isSelected = this.isContactGroupSelected(row.attributes),\n isDisabled = this.isContactGroupDisabled(row.attributes);\n\n let html = '
' +\n '' +\n '
' +\n '
';\n\n return (html);\n },\n updateContactGroupSelect: function (row) {\n let isSelected = this.isContactGroupSelected(row.data().attributes),\n isDisabled = this.isContactGroupDisabled(row.data().attributes),\n $cb = $(row.node()).find('div.pretty > input[type=\"checkbox\"]');\n\n $cb.prop('checked', isSelected);\n },\n contactGroupSelectChanged: function (e) {\n let tr = $(e.currentTarget).closest('tr'),\n parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n parentParentTR = parentTR.parent().closest('tr').prev(),\n row = this.getRow(tr),\n parentRow = this.options.parentDataTable ? this.options.parentDataTable.getRow(parentTR) : null,\n parentParentRow = this.options.parentDataTable && this.options.parentDataTable.options.parentDataTable ? this.options.parentDataTable.options.parentDataTable.getRow(parentParentTR) : null;\n\n if ($(e.currentTarget).prop('checked')) {\n\n if (row.data().get('contactGroupId') > 0)\n this.options.addressBookView.addSelectedContactGroups([row.data().get('contactGroupId')]);\n else\n this.options.addressBookView.addSelectedContactsNoGroup([this.options.parentId]);\n } else {\n if (row.data().get('contactGroupId') > 0)\n this.options.addressBookView.removeSelectedContactGroups([row.data().get('contactGroupId')]);\n else\n this.options.addressBookView.removeSelectedContactsNoGroup([this.options.parentId]);\n }\n\n // cascade up to parents\n if (this.options.parentDataTable && parentRow) {\n this.options.parentDataTable.updateContactSelect(parentRow);\n if ([PJQ.constants.addressBook.view.COMPANY_CONTACT].indexOf(this.options.parentDataTable.options.view) !== -1) {\n // find company view that owns the contact view, and update THAT\n this.options.parentDataTable.options.parentDataTable.updateCompanySelect(parentParentRow);\n }\n }\n },\n contactGroupSelectAllChanged: function (e) {\n let tr = $(e.currentTarget).closest('tr'),\n parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n parentParentTR = parentTR.parent().closest('tr').prev(),\n row = this.getRow(tr),\n parentRow = this.options.parentDataTable ? this.options.parentDataTable.getRow(parentTR) : null,\n parentParentRow = this.options.parentDataTable && this.options.parentDataTable.options.parentDataTable ? this.options.parentDataTable.options.parentDataTable.getRow(parentParentTR) : null,\n contactsNoGroup = [],\n contactGroups = [];\n\n // loop through our data, add everyone, and update the checkboxes.\n _.each(this.$el.find('.select-contactgroup'), _.bind(function (input) {\n let row = this.getRow($(input).closest('tr'));\n if (row.data().get('contactGroupId') === 0)\n contactsNoGroup.push(this.options.parentId);\n else\n contactGroups.push(row.data().get('contactGroupId'));\n }, this));\n\n if ($(e.currentTarget).prop('checked')) {\n this.options.addressBookView.addSelectedContactsNoGroup(contactsNoGroup);\n this.options.addressBookView.addSelectedContactGroups(contactGroups);\n } else {\n this.options.addressBookView.removeSelectedContactsNoGroup(contactsNoGroup);\n this.options.addressBookView.removeSelectedContactGroups(contactGroups);\n }\n\n _.each(this.$el.find('.select-contactgroup'), _.bind(function (input) {\n this.updateContactGroupSelect(this.getRow($(input).closest('tr')));\n }, this));\n\n if (this.options.parentDataTable && parentRow) {\n this.options.parentDataTable.updateContactSelect(parentRow);\n if ([PJQ.constants.addressBook.view.COMPANY_CONTACT].indexOf(this.options.parentDataTable.options.view) !== -1) {\n // find company view that owns the contact view, and update THAT\n this.options.parentDataTable.options.parentDataTable.updateCompanySelect(parentParentRow);\n }\n }\n }\n});\n","PJQ.models.addressBook = {};\n\nPJQ.models.addressBook.AddressBookViewSettings = 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: 'addressbook'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'settings'\n\t\t\t}\n\t\t], params);\n\t},\n\tgetSettings: function (view) {\n\t\treturn _.find(this.attributes.settings, _.bind(function (setting) {\n\t\t\treturn setting.view === view;\n\t\t}, this));\n\t},\n\thasGroupListColumn: function (view) {\n\t\tlet setting = this.getSettings(view), columnFound = false;\n\t\t_.each(setting.columns, _.bind(function (column) {\n\t\t\tif (column === 'groupListDisplay') {\n\t\t\t\tcolumnFound = true;\n\t\t\t}\n\t\t}, this));\n\t\treturn columnFound;\n\t},\n\thasScreeningPackagesColumn: function (view) {\n\t\tlet setting = this.getSettings(view), columnFound = false;\n\t\t_.each(setting.columns, _.bind(function (column) {\n\t\t\tif (column === 'screeningPackages') {\n\t\t\t\tcolumnFound = true;\n\t\t\t}\n\t\t}, this));\n\t\treturn columnFound;\n\t},\n\tgetContactCustomFieldColumns: function (view) {\n\t\tlet setting = this.getSettings(view), columns = [];\n\t\t_.each(setting.columns, _.bind(function (column) {\n\t\t\tif (column.startsWith('contactCustomField_')) {\n\t\t\t\tcolumns.push(parseInt(column.substring(column.indexOf('_') + 1)));\n\t\t\t}\n\t\t}, this));\n\n\t\treturn columns;\n\t},\n\tgetCompanyCustomFieldColumns: function (view) {\n\t\tlet setting = this.getSettings(view), columns = [];\n\t\t_.each(setting.columns, _.bind(function (column) {\n\t\t\tif (column.startsWith('companyCustomField_')) {\n\t\t\t\tcolumns.push(parseInt(column.substring(column.indexOf('_') + 1)));\n\t\t\t}\n\t\t}, this));\n\n\t\treturn columns;\n\t}\n});\n\nPJQ.models.addressBook.AddressBookAdvancedSearchSettings = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'addressbook'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'advancedsearch'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'settings'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.models.addressBook.ProqualStatistics = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'addressbook'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'proqual'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'stats'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.models.addressBook.ProqualSettings = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'addressbook'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'proqual'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'settings'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.collections.addressBook = {};\nPJQ.collections.addressBook.AddressBookViewResults = PJQ.collections.BaseCollection.extend({\n\tbeforeConstruct: function (models, options) {\n\t\tswitch (options.view) {\n\t\t\tcase PJQ.constants.addressBook.view.CONTACT:\n\t\t\tcase PJQ.constants.addressBook.view.COMPANY_CONTACT:\n\t\t\tcase PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY_CONTACT:\n\t\t\tcase PJQ.constants.addressBook.view.TRADES_CONTACT_CONTACT:\n\t\t\tcase PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY:\n\t\t\tcase PJQ.constants.addressBook.view.COMPANY:\n\t\t\t\tthis.model = PJQ.models.contacts.Contact;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\tendpoint: function (urlOptions) {\n\t\tlet endpointArr = [\n\t\t\t{\n\t\t\t\tendpoint: 'addressbook'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'views'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: this.options.view\n\t\t\t}\n\t\t];\n\n\t\tif (urlOptions && urlOptions.isExport)\n\t\t\tendpointArr.push({endpoint: 'export'});\n\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint(endpointArr);\n\t},\n\tparse: function (data) {\n\t\tif (this.options.isExport) {\n\t\t\tthis.exportURL = data.url;\n\t\t}\n\t\telse {\n\t\t\tthis.totalRows = 0;\n\t\t\tif (data) {\n\t\t\t\tthis.totalRows = data.totalRows;\n\t\t\t\treturn data.rows;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\texport: function (data, callback) {\n\t\tif (typeof callback !== 'function') {\n\t\t\treturn;\n\t\t}\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: this.endpoint({\n\t\t\t\tisExport: true\n\t\t\t}),\n\t\t\ttype: 'POST',\n\t\t\ttimeout: 600000,\n\t\t\tdata: data\n\t\t}).post().done(function (response) {\n\t\t\tcallback(response);\n\t\t}).fail(function () {\n\t\t\tcallback(null);\n\t\t});\n\t}\n});\n\nPJQ.collections.addressBook.AddressBookSelections = PJQ.collections.BaseCollection.extend({\n\tendpoint: function () {\n\t\tlet endpointArr = [\n\t\t\t{\n\t\t\t\tendpoint: 'addressbook'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'selection'\n\t\t\t}\n\t\t];\n\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint(endpointArr);\n\t}\n});\n","PJQ.views.addressbook.AddressBook = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'AddressBook'),\n selectContactGroupsMode: false,\n isShowHeader: true,\n directoryFilter: PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY,\n selectionMode: PJQ.constants.addressBook.selectionMode.NONE,\n disabledContacts: [],\n disabledContactGroups: [],\n onSelection: _.noop\n },\n events: {\n 'keyup .input-search': 'searchChanged',\n 'click .basic-search': 'search',\n 'click .advanced-search': 'advancedSearch',\n 'click .filter-groups': 'filterGroups',\n 'click .clear-search': 'clearFilter',\n 'click .btn-address-book-settings': 'settings',\n 'click a.import': 'import',\n 'click a.export': 'export',\n 'click .merge': 'beginMerge',\n 'click .merge-continue': 'continueMerge',\n 'click .merge-cancel': 'cancelMerge',\n 'click .new-contact': 'addContactClicked',\n 'click .proqual-screening': 'proqualScreening',\n 'click .proqual-filter>div': 'proqualFilterClicked',\n 'click .btn-approval-queue': 'viewApprovalQueue',\n 'click a.updaters': 'beginSendUpdater',\n 'click .updater-continue': 'continueUpdater',\n 'click .updater-cancel': 'cancelUpdater',\n 'click .qualifications-report': 'qualificationsReport'\n },\n viewApprovalQueue: function () {\n this.approvalQueueSelector.setValue([1]);\n this.renderView();\n },\n onApprove() {\n let apprCount = PJQ.app.session.set('unApprovedContactsCount');\n if (apprCount == null) {\n apprCount = 0;\n } else if (apprCount <= 0) {\n apprCount = 0;\n } else {\n apprCount--;\n }\n PJQ.app.session.set('unApprovedContactsCount', apprCount);\n this.renderApprovalHeader();\n },\n fetchStats: function () {\n new PJQ.ajax.Request({\n endpoint: '/addressbook/stats'\n }).get().done(_.bind(function (data) {\n PJQ.app.session.set('unApprovedContactsCount', data.unApprovedContactsCount);\n this.renderApprovalHeader();\n }, this));\n },\n renderApprovalHeader: function () {\n let $alert = this.$('.approval-alert');\n $alert.empty();\n if (PJQ.app.session.get('unApprovedContactsCount') > 0) {\n new PJQ.Alert($alert, {\n text: PJQ.app.session.get('unApprovedContactsCount').toString() + ' contacts are in the approval queue. Click here or filter to unapproved contacts to review them.'\n });\n }\n },\n beforeFirstRender: function () {\n this.isAdvancedSearch = false;\n this.isShowCheckboxes = false;\n this.isMerge = false;\n this.showApproval = this.options.selectionMode === PJQ.constants.addressBook.selectionMode.NONE && (PJQ.app.session.hasPermission('contacts.canApprove') || PJQ.app.session.hasPermission('contacts.canViewApproval'));\n this.showLaborStatus = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS) !== true;\n this.isInitialLoad = true;\n\n this.advancedSearch = null;\n this.selectedContactsAll = [];\n this.selectedContactGroups = [];\n this.selectedContactsNoGroup = [];\n\n if (this.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n this.isShowCheckboxes = true;\n this.isShowHeader = false;\n }\n\n this.isSettingsFetched = false;\n this.filter = {\n searchFor: '',\n locationFilter: PJQ.constants.addressBook.locationTypeFilter.WORK_AREA,\n zip: '',\n radius: 0,\n directoryFilter: PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY,\n userTypeFilter: 0,\n groups: []\n };\n\n this.proqualStatistics = new PJQ.models.addressBook.ProqualStatistics();\n this.settings = new PJQ.models.addressBook.AddressBookViewSettings();\n this.settings.fetch({\n success: _.bind(function () {\n this.isSettingsFetched = true;\n this.currentView = this.settings.get('defaultView');\n PJQ.app.session.fetchCompanyCustomFields(PJQ.app.session.get(\"masterUserId\"), _.bind(function () {\n PJQ.app.session.fetchContactCustomFields(PJQ.app.session.get(\"masterUserId\"), _.bind(function () {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_SCREENINGS)) {\n this.proqualStatistics.fetch({\n success: _.bind(function () {\n PJQ.app.session.fetchScreeningSettings(_.bind(function (settings) {\n this.screeningSettings = settings;\n this.render();\n }, this))\n }, this)\n });\n } else\n this.render();\n }, this));\n }, this));\n }, this)\n });\n },\n renderData: function () {\n return {\n showHeader: this.options.isShowHeader,\n showScreenings: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_SCREENINGS),\n showProqual: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROQUAL_CUSTOMER),\n proqualStatistics: this.proqualStatistics.attributes,\n showGroupCompanyView: true, // todo: read from preferences\n showGroupContactView: true, // todo: read from preferences\n showApproval: this.showApproval,\n showLaborStatus: this.showLaborStatus,\n canAdd: PJQ.app.session.hasPermission('contacts.canAddContact'),\n settingsFetched: this.isSettingsFetched,\n selectionMode: this.options.selectionMode,\n canExport: PJQ.app.session.hasPermission('contacts.canExport'),\n canImport: PJQ.app.session.hasPermission('contacts.canImport'),\n canMerge: PJQ.app.session.hasPermission('contacts.canMerge')\n };\n },\n afterRender: function () {\n if (!this.isSettingsFetched)\n return;\n\n if (this.options.selectionMode === PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT) {\n this.$('.proqual-screening, .other-actions').prop('disabled', true);\n }\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.address-book-view'),\n defaultValue: this.currentView,\n onChange: _.bind(function (value) {\n this.isInitialLoad = true;\n this.renderView(value);\n }, this)\n });\n\n if (this.showApproval) {\n this.fetchStats();\n this.approvalQueueSelector = new PJQ.inputs.Selectpicker({\n el: this.$('.select-approval'),\n isIntChoices: true,\n defaultValue: [0],\n isMultiple: true,\n noneSelectedText: \"Select Approval Status\",\n onChange: _.bind(function () {\n if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_DEFAULT_SEARCH)) {\n this.renderView();\n }\n }, this)\n });\n }\n\n this.locationType = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_LOCATION_FILTERS) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_LOCATION_FILTERS).split(',') : [PJQ.constants.addressBook.locationTypeFilter.WORK_AREA, PJQ.constants.addressBook.locationTypeFilter.OFFICE_LOCATION]\n this.locationTypeSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-location-type'),\n isIntChoices: true,\n isMultiple: true,\n mustSelectValue: true,\n defaultValue: this.locationType\n });\n\n this.radiusSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-radius'),\n isIntChoices: true,\n defaultValue: 0\n });\n\n /* not sure this is needed given how new UI works\n let publicContactInfo = 'You must enter a search zip code to view public subcontractors.';\n if (this.options.directoryFilter === PJQ.constants.addressBook.directoryFilter.ALL_CONTACTS ||\n this.options.directoryFilter === PJQ.constants.addressBook.directoryFilter.PUBLIC_ONLY) {\n this.showNotification(publicContactInfo, 'info');\n }\n */\n let defaultFilters = null\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_FILTERS)) {\n defaultFilters = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_FILTERS).split(',');\n if (this.showApproval)\n defaultFilters.push(PJQ.constants.addressBook.approvalFilter.APPROVED);\n } else {\n defaultFilters = _.map(PJQ.app.session.userTypes.getByIsCompany(false), function (userType) {\n return userType.get('userTypeId');\n });\n\n $.merge(defaultFilters, [PJQ.constants.addressBook.contactStatusFilter.ACTIVE, PJQ.constants.addressBook.contactStatusFilter.INACTIVE]);\n if (this.showLaborStatus)\n $.merge(defaultFilters, [PJQ.constants.addressBook.laborStatusFilter.UNION, PJQ.constants.addressBook.laborStatusFilter.NON_UNION, PJQ.constants.addressBook.laborStatusFilter.PREV_WAGE, PJQ.constants.addressBook.laborStatusFilter.NOT_AVAILABLE]);\n if (this.showApproval)\n defaultFilters.push(PJQ.constants.addressBook.approvalFilter.APPROVED);\n }\n\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_DISPLAY_DIRECTORY)) {\n switch (PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_DISPLAY_DIRECTORY)) {\n case 0:\n $.merge(defaultFilters, [PJQ.constants.addressBook.directoryFilter.PUBLIC_ONLY, PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY]);\n break;\n case 1 || -1:\n $.merge(defaultFilters, [PJQ.constants.addressBook.directoryFilter.PUBLIC_ONLY]);\n break;\n default:\n $.merge(defaultFilters, [PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY]);\n }\n } else {\n $.merge(defaultFilters, [PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY])\n }\n\n this.filterSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-filter'),\n isIntChoices: true,\n isMultiple: true,\n exclusiveChoices: [-3, -4],\n isGroup: true,\n mustSelectValuePerOptGroup: true,\n defaultValue: defaultFilters,\n onHide: _.bind(function () {\n if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_DEFAULT_SEARCH)) {\n if ((_.size(this.lastFilter) !== _.size(this.filterSelectPicker.getValue())) ||\n (_.size(this.lastFilter) !== _.size(_.uniq(_.union(this.lastFilter, this.filterSelectPicker.getValue())))))\n this.renderView();\n }\n }, this)\n });\n this.renderView();\n },\n hideNotification: function () {\n this.$('.address-book-notifications').hide();\n },\n showNotification: function (content, type) {\n this.$('.address-book-notifications').removeClass('alert-primary').removeClass('alert-secondary').removeClass('alert-info').removeClass('alert-success').removeClass('alert-warning').removeClass('alert-danger');\n this.$('.address-book-notifications').addClass('alert-' + type);\n\n let icon = '';\n switch (type) {\n case 'info':\n icon = '';\n break;\n }\n\n this.$('.address-book-notifications').html(icon + (icon ? ' ' : '') + content);\n this.$('.address-book-notifications').show();\n },\n renderView: function (view, options = {}) {\n this.currentView = view ? view : this.currentView;\n\n let page = null;\n if (options.stayOnPage && this.dataTable != null) {\n page = this.dataTable.dataTable.page();\n }\n\n if (this.dataTable) {\n this.dataTable.cleanup();\n this.dataTable.clearServerCache = true;\n this.dataTable.pageCache = [];\n this.dataTable.remove();\n this.dataTable = null;\n this.$('.addressbook-data').empty();\n }\n\n let tableSettings = this.settings.getSettings(this.currentView),\n dataTableOptions = {\n el: this.$('.addressbook-data'),\n language: {\n zeroRecords: (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_DEFAULT_SEARCH) && this.isInitialLoad) ? \" \" : \"No Results Available\"\n },\n data: null,\n view: this.currentView,\n addressBookView: this,\n userSettings: this.settings,\n settings: tableSettings,\n getPageCallback: _.bind(this.getViewData, this),\n displayStart: page != null ? page * tableSettings.rowsPerPage : null,\n deferRender: true,\n clearServerCache: true,\n isShowCheckboxes: this.isShowCheckboxes,\n onApprove: _.bind(this.onApprove, this),\n showPageSelector: true,\n onTableDraw: _.bind(function (dataTable) {\n this.$('.addressbook-data').css('margin-top', -40);\n }, this)\n };\n\n this.dataTable = this.getDataTableInstance(dataTableOptions);\n\n if (this.options.contactId > 0) {\n let initContact = new PJQ.models.contacts.Contact({\n id: this.options.contactId\n });\n this.options.contactId = null;\n initContact.fetch({\n success: _.bind(function () {\n this.dataTable.editContact(initContact);\n }, this)\n })\n }\n },\n updateFilter: function () {\n if ((PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_DEFAULT_SEARCH) && !this.isInitialLoad) || !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_DEFAULT_SEARCH)) {\n let filter = this.filterSelectPicker.getValue();\n this.lastFilter = filter;\n\n this.filter.searchFor = this.$('.input-search').val();\n\n if (this.filter.searchFor.length <= 15 && PJQ.helpers.formatHelpers.numbersOnly(this.filter.searchFor).length == 10)\n this.filter.searchFor = PJQ.helpers.formatHelpers.numbersOnly(this.filter.searchFor);\n\n this.filter.locationFilter = 0;\n if (this.locationTypeSelectPicker.getValue().indexOf(PJQ.constants.addressBook.locationTypeFilter.WORK_AREA) !== -1 && this.locationTypeSelectPicker.getValue().indexOf(PJQ.constants.addressBook.locationTypeFilter.OFFICE_LOCATION) !== -1)\n this.filter.locationFilter = PJQ.constants.addressBook.locationTypeFilter.BOTH;\n else if (this.locationTypeSelectPicker.getValue().indexOf(PJQ.constants.addressBook.locationTypeFilter.WORK_AREA) !== -1)\n this.filter.locationFilter = PJQ.constants.addressBook.locationTypeFilter.WORK_AREA;\n else if (this.locationTypeSelectPicker.getValue().indexOf(PJQ.constants.addressBook.locationTypeFilter.OFFICE_LOCATION) !== -1)\n this.filter.locationFilter = PJQ.constants.addressBook.locationTypeFilter.OFFICE_LOCATION;\n\n this.filter.zip = this.$('.input-search-zip').val().replace(' ', '').replace('-', '');\n if (_.size(this.filter.zip) === 6) {\n this.filter.zip = this.filter.zip.substring(0, 3) + ' ' + this.filter.zip.substring(3, 6);\n }\n this.filter.radius = this.radiusSelectPicker.getValue();\n\n this.filter.directoryFilter = PJQ.constants.addressBook.directoryFilter.ALL_CONTACTS;\n if (filter.indexOf(PJQ.constants.addressBook.directoryFilter.PUBLIC_ONLY) === -1)\n this.filter.directoryFilter = PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY * -1;\n else if (filter.indexOf(PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY) === -1)\n this.filter.directoryFilter = PJQ.constants.addressBook.directoryFilter.PUBLIC_ONLY * -1;\n\n let $exportBtn = this.$('.dropdown-item.export'),\n $alert = this.$('.public-zip-alert');\n $alert.empty();\n if (this.filter.directoryFilter === PJQ.constants.addressBook.directoryFilter.ALL_CONTACTS || this.filter.directoryFilter === PJQ.constants.addressBook.directoryFilter.PUBLIC_ONLY * -1) {\n new PJQ.Alert($alert, {\n text: 'You must enter a search ZIP Code to view public subcontractors.'\n });\n $exportBtn.addClass('hidden');\n } else {\n $exportBtn.removeClass('hidden');\n }\n\n this.filter.userTypeFilter = _.filter(filter, function (value) {\n return value > 0;\n });\n\n this.filter.isPrimaryOnly = filter.indexOf(PJQ.constants.addressBook.miscFilter.PRIMARY_CONTACT_ONLY) !== -1;\n\n this.filter.isFilterActive = filter.indexOf(PJQ.constants.addressBook.contactStatusFilter.ACTIVE) !== -1;\n this.filter.isFilterInactive = filter.indexOf(PJQ.constants.addressBook.contactStatusFilter.INACTIVE) !== -1;\n\n this.filter.isFilterUnion = filter.indexOf(PJQ.constants.addressBook.laborStatusFilter.UNION) !== -1;\n this.filter.isFilterNonUnion = filter.indexOf(PJQ.constants.addressBook.laborStatusFilter.NON_UNION) !== -1;\n this.filter.isFilterPrevWage = filter.indexOf(PJQ.constants.addressBook.laborStatusFilter.PREV_WAGE) !== -1;\n this.filter.isFilterNoLaborStatus = filter.indexOf(PJQ.constants.addressBook.laborStatusFilter.NOT_AVAILABLE) !== -1;\n\n this.filter.isFilterApproved = this.approvalQueueSelector && this.approvalQueueSelector.getValue().indexOf(0) !== -1;\n this.filter.isFilterUnapproved = this.approvalQueueSelector && this.approvalQueueSelector.getValue().indexOf(1) !== -1;\n\n this.filter.proqualFilter = this.$('div.proqual-filter>div.selected').data('filter');\n } else {\n this.isInitialLoad = false;\n }\n },\n getViewData: function (pageNumber, pageSize, orderArr, callback) {\n this.updateFilter();\n\n let order = orderArr[0];\n this.data = new PJQ.collections.addressBook.AddressBookViewResults(null, {\n view: this.currentView\n });\n\n switch (this.currentView) {\n case PJQ.constants.addressBook.view.COMPANY:\n switch (order.name) {\n case 'contactName':\n order.name = 'primaryContactName';\n break;\n case 'contactTitle':\n order.name = 'primaryContactTitle';\n break;\n case 'contactUserType':\n order.name = 'primaryContactUserType';\n break;\n case 'contactAddress1':\n order.name = 'primaryAddress1';\n break;\n case 'contactAddress2':\n order.name = 'primaryAddress2';\n break;\n case 'city':\n order.name = 'primaryCity';\n break;\n case 'state':\n order.name = 'primaryState';\n break;\n case 'zip':\n order.name = 'primaryZip';\n break;\n case 'country':\n order.name = 'primaryCountry';\n break;\n case 'phone':\n order.name = 'primaryPhone';\n break;\n case 'fax':\n order.name = 'primaryFax';\n break;\n case 'cell':\n order.name = 'primaryCell';\n break;\n case 'email':\n order.name = 'primaryEmail';\n break;\n }\n break;\n }\n\n this.data.fetch({\n data: {\n searchFor: this.filter.searchFor,\n locationFilter: this.filter.locationFilter,\n zip: this.filter.zip,\n radius: this.filter.radius,\n directoryFilter: this.filter.directoryFilter,\n userTypeFilter: this.filter.userTypeFilter,\n groups: this.filter.groups,\n page: pageNumber,\n pageSize: pageSize,\n orderBy: order.name,\n orderDirection: order.direction,\n isAdvancedSearch: this.isAdvancedSearch,\n advancedSearch: this.advancedSearch,\n showGroupDescription: this.settings.getSettings(this.currentView).showGroupDescription,\n isPrimaryOnly: this.filter.isPrimaryOnly,\n isFilterApproved: this.filter.isFilterApproved,\n isFilterUnapproved: this.filter.isFilterUnapproved,\n proqualFilter: this.filter.proqualFilter,\n isFilterActive: this.filter.isFilterActive,\n isFilterInactive: this.filter.isFilterInactive,\n isFilterUnion: this.filter.isFilterUnion,\n isFilterNonUnion: this.filter.isFilterNonUnion,\n isFilterPrevWage: this.filter.isFilterPrevWage,\n isFilterNoLaborStatus: this.filter.isFilterNoLaborStatus,\n isIncludeGroupList: this.settings.hasGroupListColumn(this.currentView),\n includeScreeningPackages: this.settings.hasScreeningPackagesColumn(this.currentView),\n includeContactCustomFields: this.settings.getContactCustomFieldColumns(this.currentView),\n includeCompanyCustomFields: this.settings.getCompanyCustomFieldColumns(this.currentView),\n isSelectionMode: !(this.options.selectionMode === PJQ.constants.addressBook.selectionMode.NONE)\n },\n type: 'POST',\n success: _.bind(function () {\n callback(this.data.models, this.data.totalRows);\n if (this.pageSelectPicker == null) {\n // this.renderPageSelect();\n }\n }, this),\n fail: _.bind(function () {\n callback();\n }, this)\n });\n },\n getDataTableInstance: function (options) {\n let dataTable = null;\n\n switch (options.view) {\n case PJQ.constants.addressBook.view.CONTACT:\n case PJQ.constants.addressBook.view.TRADES_CONTACT_CONTACT:\n case PJQ.constants.addressBook.view.COMPANY_CONTACT:\n case PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY_CONTACT:\n dataTable = new PJQ.views.addressbook.ContactDataTable(options);\n break;\n case PJQ.constants.addressBook.view.COMPANY:\n case PJQ.constants.addressBook.view.TRADES_COMPANY_COMPANY:\n dataTable = new PJQ.views.addressbook.CompanyDataTable(options);\n break;\n case PJQ.constants.addressBook.view.TRADES_COMPANY:\n case PJQ.constants.addressBook.view.TRADES_CONTACT:\n dataTable = new PJQ.views.addressbook.GroupHeaderDataTable(options);\n break;\n case PJQ.constants.addressBook.view.CONTACT_GROUP:\n dataTable = new PJQ.views.addressbook.ContactGroupDataTable(options);\n break;\n }\n return dataTable;\n },\n selectAll: function (checked, groupDescription, callback) {\n let selections = new PJQ.collections.addressBook.AddressBookSelections();\n selections.fetch({\n data: {\n searchFor: this.filter.searchFor,\n locationFilter: this.filter.locationFilter,\n zip: this.filter.zip,\n radius: this.filter.radius,\n directoryFilter: this.filter.directoryFilter,\n userTypeFilter: this.filter.userTypeFilter,\n groups: this.filter.groups,\n isAdvancedSearch: this.isAdvancedSearch,\n advancedSearch: this.advancedSearch,\n showGroupDescription: this.settings.getSettings(this.currentView).showGroupDescription,\n groupDescription: groupDescription,\n isPrimaryOnly: this.filter.isPrimaryOnly || (this.proqualRequest != null),\n isFilterApproved: this.filter.isFilterApproved,\n isFilterUnapproved: this.filter.isFilterUnapproved,\n proqualFilter: this.filter.proqualFilter,\n isFilterActive: this.filter.isFilterActive,\n isFilterInactive: this.filter.isFilterInactive,\n isFilterUnion: this.filter.isFilterUnion,\n isFilterNonUnion: this.filter.isFilterNonUnion,\n isFilterPrevWage: this.filter.isFilterPrevWage,\n isFilterNoLaborStatus: this.filter.isFilterNoLaborStatus,\n isSelectionMode: !(this.options.selectionMode === PJQ.constants.addressBook.selectionMode.NONE)\n },\n type: 'POST',\n success: _.bind(function () {\n\n let contacts = [], contactGroups = [], contactsNoGroup = [];\n _.each(selections.models, _.bind(function (selection) {\n contacts.push(selection.get('contactId'));\n if (_.size(selection.get('groups')) > 0) {\n $.merge(contactGroups, selection.get('groups'));\n } else {\n contactsNoGroup.push(selection.get('contactId'));\n }\n }, this));\n\n if (checked) {\n this.addSelectedContactsAll(contacts);\n this.addSelectedContactGroups(contactGroups);\n this.addSelectedContactsNoGroup(contactsNoGroup);\n } else {\n this.removeSelectedContactsAll(contacts);\n this.removeSelectedContactGroups(contactGroups);\n this.removeSelectedContactsNoGroup(contactsNoGroup);\n }\n\n callback();\n }, this)\n });\n\n },\n enableBasicSearch: function (enabled) {\n this.$('.input-search,.input-search-zip,.filter-groups,.basic-search, input.proqual-filter').prop('disabled', !enabled);\n\n if (!enabled)\n this.$('div.proqual-filters label').removeClass('active');\n\n if (enabled) {\n this.locationTypeSelectPicker.enable();\n this.radiusSelectPicker.enable();\n this.filterSelectPicker.enable();\n } else {\n this.locationTypeSelectPicker.disable();\n this.radiusSelectPicker.disable();\n this.filterSelectPicker.disable();\n }\n },\n filterGroups: function () {\n this.updateFilter();\n new PJQ.views.addressbook.FilterTradesModal({\n directoryFilter: this.filter.directoryFilter,\n selectedGroups: this.filter.groups,\n onFilter: _.bind(function (groups) {\n this.filter.groups = groups;\n this.$('.filter-groups-text').text((groups.length > 0 ? groups.length.toString() : 'All') + ' Trades');\n this.renderView();\n }, this)\n });\n },\n searchChanged: function (e) {\n if (e.keyCode === 13) {\n this.search();\n }\n },\n search: function () {\n this.renderView();\n },\n advancedSearch: function () {\n let settings = new PJQ.models.addressBook.AddressBookAdvancedSearchSettings();\n settings.fetch({\n success: _.bind(function (data) {\n new PJQ.views.addressbook.AdvancedSearchModal({\n advancedSearch: this.advancedSearch,\n settings: settings,\n onSearch: _.bind(function (search) {\n this.isAdvancedSearch = true;\n this.advancedSearch = search;\n this.clearBasicSearch();\n this.enableBasicSearch(false);\n this.renderView();\n }, this)\n });\n }, this)\n });\n\n },\n clearBasicSearch() {\n if ((PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_DEFAULT_SEARCH))) {\n this.isInitialLoad = true;\n }\n this.filter.searchFor = '';\n this.$('.input-search').val(this.filter.searchFor);\n\n this.filter.locationFilter = PJQ.constants.addressBook.locationTypeFilter.BOTH;\n this.locationTypeSelectPicker.setValue([PJQ.constants.addressBook.locationTypeFilter.WORK_AREA, PJQ.constants.addressBook.locationTypeFilter.OFFICE_LOCATION]);\n\n this.filter.zip = '';\n this.$('.input-search-zip').val(this.filter.zip);\n\n this.filter.radius = 0;\n this.radiusSelectPicker.setValue(this.filter.radius);\n\n this.filter.directoryFilter = PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY;\n this.filter.userTypeFilter = PJQ.app.session.userTypes.getByIsCompany(false)[0].get('userTypeId');\n this.filter.isFilterUnapproved = false;\n\n let defaultFilters = null\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_FILTERS)) {\n defaultFilters = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_FILTERS).split(',')\n $.merge(defaultFilters, [PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY])\n if (this.showApproval)\n defaultFilters.push(PJQ.constants.addressBook.approvalFilter.APPROVED);\n } else {\n defaultFilters = _.map(PJQ.app.session.userTypes.getByIsCompany(false), function (userType) {\n return userType.get('userTypeId');\n });\n\n $.merge(defaultFilters, [PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY, PJQ.constants.addressBook.contactStatusFilter.ACTIVE, PJQ.constants.addressBook.contactStatusFilter.INACTIVE]);\n\n if (this.showLaborStatus)\n $.merge(defaultFilters, [PJQ.constants.addressBook.laborStatusFilter.UNION, PJQ.constants.addressBook.laborStatusFilter.NON_UNION, PJQ.constants.addressBook.laborStatusFilter.PREV_WAGE, PJQ.constants.addressBook.laborStatusFilter.NOT_AVAILABLE]);\n if (this.showApproval)\n defaultFilters.push(PJQ.constants.addressBook.approvalFilter.APPROVED);\n }\n this.filterSelectPicker.setValue(defaultFilters);\n\n this.filter.groups = [];\n this.$('.filter-groups-text').text('All Trades');\n\n this.$('div.proqual-filters label').removeClass('active');\n this.$('input.proqual-filter-all').prop('checked', true).closest('label').addClass('active');\n },\n clearFilter: function (preventRefresh) {\n this.clearBasicSearch();\n this.isAdvancedSearch = false;\n this.advancedSearch = null;\n this.selectedContactsAll = [];\n this.selectedContactGroups = [];\n this.selectedContactsNoGroup = [];\n\n if (preventRefresh !== true) {\n this.enableBasicSearch(true);\n this.renderView();\n }\n },\n settings: function () {\n new PJQ.views.addressbook.AddressBookSettingsModal({\n addressBookView: this,\n onSave: _.bind(function () {\n this.renderView();\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n }, this)\n });\n },\n import: function () {\n new PJQ.views.contacts.ContactsImportModal({\n onClose: _.bind(function (isChanged) {\n if (isChanged) {\n this.renderView();\n }\n }, this)\n });\n },\n export: function () {\n this.updateFilter();\n\n let orderBy = '', orderDirection = '', settings = null;\n\n switch (this.currentView) {\n case PJQ.constants.addressBook.view.TRADES_COMPANY:\n case PJQ.constants.addressBook.view.COMPANY:\n settings = this.settings.getSettings(PJQ.constants.addressBook.view.COMPANY);\n\n orderBy = settings.orderBy;\n orderAscending = settings.orderAscending ? 'asc' : 'desc';\n switch (orderBy) {\n case 'contactName':\n orderBy = 'primaryContactName';\n break;\n case 'contactTitle':\n orderBy = 'primaryContactTitle';\n break;\n case 'contactAddress1':\n orderBy = 'primaryAddress1';\n break;\n case 'contactAddress2':\n orderBy = 'primaryAddress2';\n break;\n case 'city':\n orderBy = 'primaryCity';\n break;\n case 'state':\n orderBy = 'primaryState';\n break;\n case 'zip':\n orderBy = 'primaryZip';\n break;\n case 'country':\n orderBy = 'primaryCountry';\n break;\n case 'phone':\n orderBy = 'primaryPhone';\n break;\n case 'fax':\n orderBy = 'primaryFax';\n break;\n case 'cell':\n orderBy = 'primaryCell';\n break;\n case 'email':\n orderBy = 'primaryEmail';\n break;\n }\n break;\n case PJQ.constants.addressBook.view.TRADES_CONTACT:\n case PJQ.constants.addressBook.view.CONTACT:\n settings = this.settings.getSettings(PJQ.constants.addressBook.view.CONTACT);\n orderBy = settings.orderBy;\n orderDirection = settings.orderAscending ? 'asc' : 'desc';\n break;\n }\n\n this.loader = new PJQ.Loader(this.$el);\n let dateNow = new Date(), vw = new PJQ.collections.addressBook.AddressBookViewResults(null, {\n view: this.currentView,\n isExport: true\n });\n vw.export({\n searchFor: this.filter.searchFor,\n locationFilter: this.filter.locationFilter,\n zip: this.filter.zip,\n radius: this.filter.radius,\n directoryFilter: this.filter.directoryFilter,\n userTypeFilter: this.filter.userTypeFilter,\n groups: this.filter.groups,\n page: 1,\n pageSize: 2147483646,\n orderBy: orderBy,\n orderDirection: orderDirection,\n isAdvancedSearch: this.isAdvancedSearch,\n advancedSearch: this.advancedSearch,\n showGroupDescription: this.settings.getSettings(this.currentView).showGroupDescription,\n isPrimaryOnly: this.filter.isPrimaryOnly,\n isFilterApproved: this.filter.isFilterApproved,\n isFilterUnapproved: this.filter.isFilterUnapproved,\n isFilterActive: this.filter.isFilterActive,\n isFilterInactive: this.filter.isFilterInactive,\n proqualFilter: this.filter.proqualFilter,\n isIncludeGroupList: this.settings.hasGroupListColumn(this.currentView),\n includeScreeningPackages: this.settings.hasScreeningPackagesColumn(this.currentView),\n includeContactCustomFields: this.settings.getContactCustomFieldColumns(this.currentView),\n includeCompanyCustomFields: this.settings.getCompanyCustomFieldColumns(this.currentView),\n timeZoneOffset: dateNow.getTimezoneOffset()\n }, _.bind(function (response) {\n this.loader.remove();\n if (response != null) {\n PJQ.files.downloadFile(response.url, {\n isEndpoint: false\n });\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Export failed.'\n });\n }\n }, this));\n },\n qualificationsReport: function() {\n new PJQ.views.addressbook.QualificationsReportModal();\n },\n addContactClicked: function () {\n new PJQ.views.addressbook.EditCompanyModal({\n onSave: _.bind(function () {\n this.renderView(null, {\n stayOnPage: true\n });\n }, this),\n onSaveContact: _.bind(function (contact, isNew) {\n if (isNew) {\n this.addSelectedContactsAll([contact.get('contactId')]);\n if (_.size(contact.get('contactGroups')) > 0) {\n this.addSelectedContactGroups(contact.get('contactGroups'));\n } else {\n this.addSelectedContactsNoGroup([contact.get('contactId')]);\n }\n }\n }, this),\n onApprove: _.bind(function () {\n this.fetchStats();\n }, this),\n onDelete: _.bind(function () {\n this.renderView(null, {\n stayOnPage: true\n });\n }, this)\n });\n },\n proqualFilterClicked: function (e) {\n let $target = $(e.currentTarget),\n filter = $target.data('filter');\n this.$('.proqual-filter>div').removeClass('selected');\n $target.addClass('selected');\n this.renderView();\n },\n proqualScreening: function () {\n let request = this.proqualRequest ? this.proqualRequest : {};\n request.selectedContacts = this.selectedContactsAll;\n this.$('button.other-actions').prop('disabled', true);\n\n new PJQ.views.addressbook.ProqualRequestModal({\n request: request,\n onAddParticipants: _.bind(function (request) {\n // 2020-06-10 Per request they want to SEE all the contacts, but when they do SELECT ALL they want it to only select primary. Therefore removing this auto-filter.\n //this.filterSelectPicker.setValue(_.union(this.filterSelectPicker.getValue(), [PJQ.constants.addressBook.miscFilter.PRIMARY_CONTACT_ONLY]));\n this.proqualRequest = request;\n this.$('.proqual-screening').html('Resume Qualifications');\n if (!this.isShowCheckboxes) {\n this.isShowCheckboxes = true;\n this.options.selectionMode = PJQ.constants.addressBook.selectionMode.PROQUAL;\n this.renderView();\n }\n }, this),\n onClose: _.bind(function () {\n this.$('button.other-actions').prop('disabled', false);\n this.$('.proqual-screening').html('Request Qualifications');\n this.proqualRequest = null;\n if (this.isShowCheckboxes) {\n this.isShowCheckboxes = false;\n this.options.selectionMode = PJQ.constants.addressBook.selectionMode.NONE;\n this.selectedContactsAll = [];\n this.selectedContactGroups = [];\n this.selectedContactsNoGroup = [];\n this.renderView();\n }\n }, this)\n });\n },\n addSelectedContactsAll: function (contactIds) {\n this.selectedContactsAll = _.uniq(_.union(contactIds, this.selectedContactsAll));\n\n if (this.options.selectionMode === PJQ.constants.addressBook.selectionMode.MERGE) {\n this.$('.merge-continue').prop('disabled', (_.size(this.selectedContactsAll) < 2));\n }\n if (this.options.selectionMode === PJQ.constants.addressBook.selectionMode.UPDATER) {\n this.$('.updater-continue').prop('disabled', (_.size(this.selectedContactsAll) < 1));\n }\n\n this.options.onSelection(this.selectedContactsAll, this.selectedContactsNoGroup, this.selectedContactGroups);\n },\n removeSelectedContactsAll: function (contactIds) {\n this.selectedContactsAll = _.without(this.selectedContactsAll, ...contactIds);\n\n if (this.options.selectionMode === PJQ.constants.addressBook.selectionMode.MERGE) {\n this.$('.merge-continue').prop('disabled', (_.size(this.selectedContactsAll) < 2));\n }\n if (this.options.selectionMode === PJQ.constants.addressBook.selectionMode.UPDATER) {\n this.$('.updater-continue').prop('disabled', (_.size(this.selectedContactsAll) < 1));\n }\n\n this.options.onSelection(this.selectedContactsAll, this.selectedContactsNoGroup, this.selectedContactGroups);\n },\n addSelectedContactGroups: function (contactGroupIds) {\n if (this.options.disabledContactGroups == null) {\n this.options.disabledContactGroups = [];\n }\n this.selectedContactGroups = _.without(_.uniq(_.union(contactGroupIds, this.selectedContactGroups)), ...this.options.disabledContactGroups);\n\n this.options.onSelection(this.selectedContactsAll, this.selectedContactsNoGroup, this.selectedContactGroups);\n },\n removeSelectedContactGroups: function (contactGroupIds) {\n this.selectedContactGroups = _.without(this.selectedContactGroups, ...contactGroupIds);\n\n this.options.onSelection(this.selectedContactsAll, this.selectedContactsNoGroup, this.selectedContactGroups);\n },\n addSelectedContactsNoGroup: function (contactIds) {\n this.selectedContactsNoGroup = _.without(_.uniq(_.union(contactIds, this.selectedContactsNoGroup)), ...this.options.disabledContacts);\n\n this.options.onSelection(this.selectedContactsAll, this.selectedContactsNoGroup, this.selectedContactGroups);\n },\n removeSelectedContactsNoGroup: function (contactIds) {\n this.selectedContactsNoGroup = _.without(this.selectedContactsNoGroup, ...contactIds);\n\n this.options.onSelection(this.selectedContactsAll, this.selectedContactsNoGroup, this.selectedContactGroups);\n },\n beginMerge: function () {\n this.isShowCheckboxes = true;\n this.options.selectionMode = PJQ.constants.addressBook.selectionMode.MERGE;\n this.$('.other-actions, .proqual-screening, .merge-continue, .merge').prop('disabled', true);\n this.$('.merge-continue, .merge-cancel').show();\n this.showNotification('Select 2 or more contacts and click \"Continue Merge\" to continue.', 'info');\n this.renderView(null, {\n stayOnPage: true\n });\n },\n continueMerge: function () {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'addressbook',\n },\n {\n endpoint: 'merge'\n },\n {\n endpoint: 'check'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n contacts: this.selectedContactsAll\n }\n }).post().done(_.bind(function (data) {\n if (_.size(data.response) < 2) {\n PJQ.notifications.notify.errorNotify({\n title: 'Nothing to Merge!',\n message: 'All selected contacts already belong to the same company.'\n });\n\n return;\n }\n\n new PJQ.views.addressbook.MergeRequestModal({\n data: data.response,\n addressBookView: this,\n onMerge: _.bind(function () {\n this.cancelMerge();\n }, this)\n });\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n },\n cancelMerge: function () {\n this.isShowCheckboxes = false;\n this.options.selectionMode = PJQ.constants.addressBook.selectionMode.NONE;\n this.selectedContactsAll = [];\n this.selectedContactGroups = [];\n this.selectedContactsNoGroup = [];\n this.$('.other-actions, .proqual-screening, .merge').prop('disabled', false);\n this.$('.merge-continue, .merge-cancel').hide();\n this.hideNotification();\n this.renderView();\n },\n beginSendUpdater: function (e) {\n let $target = $(e.currentTarget);\n this.updaterType = $target.data('updater');\n this.isShowCheckboxes = true;\n this.options.selectionMode = PJQ.constants.addressBook.selectionMode.UPDATER;\n this.$('.other-actions, .proqual-screening, .updater-continue, .btn-merge').prop('disabled', true);\n this.$('.updater-continue, .updater-cancel').show();\n this.showNotification('Select 1 or more contacts and click \"Send Updater\" to continue.', 'info');\n this.renderView(null, {\n stayOnPage: true\n });\n },\n continueUpdater: function () {\n let endpoint,\n header;\n if (this.updaterType === 'contact') {\n endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'updater'\n }\n ]);\n header = \"Send Contact Updaters\"\n } else if (this.updaterType === 'prequal') {\n endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'prequal'\n },\n {\n endpoint: 'request'\n }\n ]);\n header = \"Send Qualification Updaters\"\n }\n new PJQ.views.modals.YesNo({\n header: header,\n body: 'Are you sure you want to send these contacts an Update Request?',\n onYes: _.bind(function () {\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n contacts: this.selectedContactsAll\n }\n }).post().done(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Successfully sent contact updaters'\n });\n this.cancelUpdater();\n }, this)).fail(function (xhr, err, result) {\n });\n }, this),\n onNo: _.bind(function () {\n this.cancelUpdater();\n }, this)\n })\n\n },\n cancelUpdater: function () {\n this.updaterType = null;\n this.isShowCheckboxes = false;\n this.options.selectionMode = PJQ.constants.addressBook.selectionMode.NONE;\n this.selectedContactsAll = [];\n this.selectedContactGroups = [];\n this.selectedContactsNoGroup = [];\n this.$('.other-actions, .proqual-screening, .btn-merge').prop('disabled', false);\n this.$('.updater-continue, .updater-cancel').hide();\n this.hideNotification();\n this.renderView();\n }\n});\n\n// Modals\nPJQ.views.addressbook.FilterTradesModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'Modal-Filter-Trades'),\n minWidth: '800px',\n directoryFilter: -1 * PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY,\n selectedGroups: []\n },\n events: {\n 'click button.clear-all': 'clearAll',\n 'click button.filter': 'filter'\n },\n afterRender: function () {\n let hasGroupsLinked = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.HAS_GROUPS_LINKED),\n showPublic = false, showPrivate = false;\n\n switch (this.options.directoryFilter * -1) {\n case PJQ.constants.addressBook.directoryFilter.ALL_CONTACTS:\n showPrivate = true;\n showPublic = !hasGroupsLinked;\n break;\n case PJQ.constants.addressBook.directoryFilter.PRIVATE_ONLY:\n showPrivate = true;\n showPublic = false;\n break;\n case PJQ.constants.addressBook.directoryFilter.PUBLIC_ONLY:\n showPrivate = hasGroupsLinked;\n showPublic = !hasGroupsLinked;\n break;\n }\n\n if (!showPrivate) {\n this.$('.filter-groups').hide();\n this.$('.filter-groups-public').show();\n }\n\n if (!showPublic || !showPrivate)\n this.$('.trade-type').hide();\n\n if (showPrivate && showPublic) {\n new PJQ.inputs.Selectpicker({\n el: this.$('.trade-type'),\n isIntChoices: true,\n defaultValue: 0,\n onChange: _.bind(function (value) {\n if (value === 0) {\n this.$('.filter-groups').show();\n this.$('.filter-groups-public').hide();\n } else {\n this.$('.filter-groups').hide();\n this.$('.filter-groups-public').show();\n }\n }, this)\n });\n }\n\n if (showPrivate) {\n this.groupSelector = new PJQ.views.groups.GroupSelector({\n el: this.$('.filter-groups'),\n isShowNoGroup: true,\n selectedGroupIds: this.options.selectedGroups\n });\n }\n\n if (showPublic) {\n this.groupSelectorPublic = new PJQ.views.groups.GroupSelector({\n el: this.$('.filter-groups-public'),\n isShowNoGroup: false,\n isPublicGroups: true,\n selectedGroupIds: this.options.selectedGroups\n });\n }\n },\n clearAll: function () {\n if (this.groupSelector)\n this.groupSelector.selectAll(false);\n if (this.groupSelectorPublic)\n this.groupSelectorPublic.selectAll(false);\n\n },\n filter: function () {\n let groups = [];\n\n if (this.groupSelector)\n groups = _.union(groups, _.map(this.groupSelector.getGroupsData().selected, function (group) {\n return group.get('groupId');\n }));\n\n if (this.groupSelectorPublic)\n groups = _.union(groups, _.map(this.groupSelectorPublic.getGroupsData().selected, function (group) {\n return group.get('groupId');\n }));\n\n if (typeof this.options.onFilter === 'function')\n this.options.onFilter(groups);\n\n this.removeModal();\n }\n});\n\nPJQ.views.addressbook.AddressBookSettingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'modal-addressbook-settings'),\n width: '600px',\n },\n events: {\n 'change .select-column': 'columnSelected',\n 'click .btn-edit-company-default': 'editCompanySettings',\n 'click button.settings-save': 'onSave'\n },\n beforeModalCreated: function () {\n this.model = this.options.addressBookView.settings;\n },\n beforeRender: function () {\n // copy settings for our UI; we only update global settings object on save.\n this.options.settings = [];\n this.options.defaultView = this.model.get('defaultView');\n _.each(this.model.attributes.settings, _.bind(function (setting) {\n if (setting.view === PJQ.constants.addressBook.view.TRADES_COMPANY_GROUP ||\n setting.view === PJQ.constants.addressBook.view.TRADES_CONTACT_GROUP)\n return;\n\n let columns = this.options.addressBookView.getDataTableInstance({\n view: setting.view,\n settings: this.model.getSettings(setting.view)\n }).getColumns(true),\n selectedColumns = (_.size(setting.columns) > 0) ? setting.columns : setting.columnsDefault;\n _.each(columns, _.bind(function (column) {\n column.visible = selectedColumns.indexOf(column.columnData) !== -1\n }, this));\n\n this.options.settings.push({\n view: setting.view,\n rowsPerPage: setting.rowsPerPage,\n columns: columns,\n showGroupDescription: setting.showGroupDescription\n });\n }, this));\n },\n renderData: function () {\n return {\n model: this.model,\n showGroupCompanyView: true, // todo: read from preferences\n showGroupContactView: true // todo: read from preferences\n }\n },\n afterRender: function () {\n new PJQ.inputs.Selectpicker({\n el: this.$('select.select-view-default'),\n defaultValue: this.options.defaultView,\n onChange: _.bind(function (value) {\n this.options.defaultView = value;\n }, this)\n\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('select.select-view'),\n defaultValue: this.options.addressBookView.dataTable.options.view,\n onChange: _.bind(function (value) {\n this.selectView(value);\n }, this)\n });\n\n this.rowsPerPage = new PJQ.inputs.Selectpicker({\n el: this.$('select.rows-per-page'),\n isIntChoices: true,\n onChange: _.bind(function (value) {\n this.currentView.rowsPerPage = value;\n }, this)\n\n });\n\n this.$('input.show-group-description').change(_.bind(function () {\n this.currentView.showGroupDescription = this.$('input.show-group-description').prop('checked');\n }, this));\n\n this.selectView(this.options.addressBookView.dataTable.options.view);\n },\n editCompanySettings: function () {\n this.model = new PJQ.models.addressBook.AddressBookViewSettings(null, {\n forCompany: true\n });\n this.model.fetch({\n success: _.bind(function () {\n this.render();\n }, this)\n });\n },\n selectView: function (view) {\n this.currentView = _.find(this.options.settings, _.bind(function (setting) {\n return setting.view === view;\n }, this));\n\n if (view.indexOf('-') === -1) {\n this.$('div.rows-per-page').show();\n this.rowsPerPage.setValue(this.currentView.rowsPerPage);\n } else\n this.$('div.rows-per-page').hide();\n\n if (view === PJQ.constants.addressBook.view.TRADES_COMPANY || view === PJQ.constants.addressBook.view.TRADES_CONTACT) {\n this.$('div.show-group-description').show();\n this.$('input.show-group-description').prop('checked', this.currentView.showGroupDescription);\n this.$('div.select-columns').hide();\n } else {\n this.$('div.show-group-description').hide();\n this.$('div.select-columns').show();\n\n if (this.dataTable) {\n this.dataTable.undelegateEvents();\n $(this.dataTable.el).empty();\n }\n\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('div.select-columns-datatable'),\n data: this.currentView.columns,\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 columnSelected: function (sender) {\n this.dataTable.dataTable.row($(sender.currentTarget).closest('tr')).data().visible = $(sender.currentTarget).prop('checked');\n },\n onSave: function () {\n let forCompany = this.model.get('userId') === PJQ.app.session.get('masterUserId'),\n fnOnSave = _.bind(function () {\n if (typeof this.options.onSave === 'function')\n this.options.onSave();\n this.removeModal();\n }, this);\n\n this.model.set('defaultView', this.options.defaultView);\n\n _.each(this.options.settings, _.bind(function (settingTemp) {\n _.each(this.model.get('settings'), _.bind(function (setting) {\n if (settingTemp.view === setting.view) {\n setting.rowsPerPage = settingTemp.rowsPerPage;\n setting.showGroupDescription = settingTemp.showGroupDescription;\n\n let columns = _.size(setting.columns) > 0 ? setting.columns.slice() : setting.columnsDefault.slice();\n\n // update columns\n if (setting.view === PJQ.constants.addressBook.view.TRADES_COMPANY ||\n setting.view === PJQ.constants.addressBook.view.TRADES_CONTACT) {\n\n columns = setting.showGroupDescription ? ['groupDescription', 'groupCount', 'childCount'] : ['groupName', 'childCount'];\n } else {\n _.each(settingTemp.columns, _.bind(function (column) {\n if (column.visible) {\n if (columns.indexOf(column.columnData) === -1)\n columns.push(column.columnData);\n } else {\n if (columns.indexOf(column.columnData) !== -1)\n columns = _.filter(columns, _.bind(function (columnTemp) {\n return columnTemp != column.columnData;\n }, this));\n }\n }, this));\n }\n\n setting.columns = columns;\n }\n }, this));\n }, this));\n\n //save settings to database\n this.model.save(null, {\n success: _.bind(function () {\n if (forCompany) {\n this.options.addressBookView.settings.fetch({\n success: _.bind(function () {\n fnOnSave();\n }, this)\n })\n } else {\n this.model.set('defaultView', this.options.defaultView);\n fnOnSave();\n }\n }, this)\n });\n }\n});\n\nPJQ.views.addressbook.AdvancedSearchModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'modal-advanced-search'),\n maxWidth: '70%',\n onSearch: _.noop,\n minWidth: 800\n },\n events: {\n 'click .clear-search': 'clearSearch',\n 'click .save-search': 'saveSearch',\n 'click .delete-search': 'deleteSearch',\n 'click .default-search': 'defaultSearch',\n 'click .search': 'search',\n 'keydown .phone': 'numbersOnly',\n 'keydown .phone-ext': 'numbersOnly',\n 'keydown .fax': 'numbersOnly',\n 'keydown .cell': 'numbersOnly'\n },\n beforeModalCreated: function () {\n this.options.fieldSettingsEnabled = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_CONTACT_FIELD_SETTINGS);\n if (this.options.fieldSettingsEnabled && this.coreFieldSettings == null) {\n PJQ.app.session.fetchContactFieldSettings(this.options.masterUserId, _.bind(function (settings) {\n this.coreFieldSettings = settings;\n this.render();\n }, this));\n }\n },\n beforeRender: function () {\n this.renderData = {\n searches: this.options.settings.get('searches'),\n checkFieldVisible: _.bind(this.checkFieldVisible, this),\n fieldSettingsEnabled: this.options.fieldSettingsEnabled,\n coreFieldSettings: this.coreFieldSettings\n };\n },\n afterRender: function () {\n if (this.options.fieldSettingsEnabled && this.coreFieldSettings == null) {\n return;\n }\n\n this.savedSearchSelectPicker = new PJQ.inputs.Selectpicker({\n el: $('.saved-search'),\n noneSelectedText: 'New Search',\n defaultValue: null,\n onChange: _.bind(function () {\n let advancedSearch = _.filter(this.options.settings.get('searches'), _.bind(function (savedSearch) {\n return savedSearch.searchId === this.savedSearchSelectPicker.getValue();\n }, this))[0];\n this.$('.delete-search, .default-search').prop('disabled', false);\n this.setInputsFromSearch(advancedSearch);\n }, this)\n });\n\n if (_.size(this.options.settings.get('searches')) > 0)\n this.savedSearchSelectPicker.enable();\n\n this.companyBlacklistSelectPicker = new PJQ.inputs.Selectpicker({\n el: $('.company-is-blacklisted'),\n isIntChoices: true,\n defaultValue: 0,\n onChange: _.bind(function () {\n }, this)\n });\n\n if (this.checkFieldVisible('laborStatus')) {\n this.laborSelectPicker = new PJQ.inputs.Selectpicker({\n el: $('.labor-status'),\n isMultiple: true,\n onChange: _.bind(function () {\n }, this)\n });\n }\n\n if (this.checkFieldVisible('classifications')) {\n this.classificationSelectPicker = new PJQ.inputs.Selectpicker({\n el: $('.minority-status'),\n isMultiple: true,\n onChange: _.bind(function () {\n }, this)\n });\n }\n\n if (this.checkFieldVisible('sector')) {\n this.sectorSelectPicker = new PJQ.inputs.Selectpicker({\n el: $('.sector'),\n isMultiple: true,\n onChange: _.bind(function () {\n }, this)\n });\n }\n\n this.gradeSlider = new PJQ.Slider(this.$('.grade-slider'), {\n ticks: [0, 1, 2, 3, 4, 5],\n ticks_labels: [0, 1, 2, 3, 4, 5],\n value: [0, 5],\n onChange: _.bind(function (value) {\n }, this)\n });\n\n this.companyCustomFieldsCollapse = new PJQ.views.collapse.BaseCollapse({\n el: this.$('#advancedSearchCompanyCustomFieldsCollapseContainer')\n });\n\n PJQ.app.session.fetchCompanyCustomFields(PJQ.app.session.get('masterUserId'), _.bind(function (customFields) {\n this.companyCustomFields = customFields;\n this.companyCustomFieldsForm = new PJQ.views.customFields.CustomFieldsSearchForm({\n el: this.$('.advanced-search-company-custom-fields'),\n isAdmin: true,\n collection: this.companyCustomFields,\n fieldValues: null\n });\n }, this));\n\n this.contactBlacklistSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.contact-is-blacklisted'),\n isMultiple: false,\n isIntChoices: true,\n defaultValue: 0,\n onChange: _.bind(function () {\n }, this)\n });\n\n this.contactTypeSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.contact-type'),\n isMultiple: true,\n isIntChoices: true,\n defaultValue: null,\n onChange: _.bind(function () {\n }, this)\n });\n\n this.contactPrimarySelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.contact-is-primary'),\n isMultiple: false,\n isIntChoices: true,\n defaultValue: 0,\n onChange: _.bind(function () {\n }, this)\n });\n\n this.locationSearchTypeSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.location-search-type'),\n isIntChoices: true,\n defaultValue: 0,\n onChange: _.bind(function () {\n this.locationSearchTypeChanged();\n }, this)\n });\n this.locationSearchTypeChanged();\n\n this.locationTypeSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.location-type'),\n isIntChoices: true,\n isMultiple: true,\n defaultValue: 1,\n onChange: _.bind(function (value) {\n let $radius = this.$('.search-radius-outer');\n if (value && value.indexOf(2) === -1) {\n $radius.hide();\n } else {\n $radius.show();\n }\n }, this)\n });\n\n this.searchRadiusSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.search-radius'),\n isIntChoices: true,\n defaultValue: 0\n });\n\n this.$('.cross-state-bounds').prop('checked', true);\n\n this.stateSelectPicker = new PJQ.inputs.StatePicker({\n el: this.$('select.state'),\n country: 'US',\n defaultValue: null,\n onChange: _.bind(function (value) {\n }, this)\n });\n\n this.countrySelectPicker = new PJQ.inputs.CountryPicker({\n el: this.$('select.country'),\n defaultValue: 'US',\n statePicker: this.stateSelectPicker,\n zipInput: this.$('.zip-2'),\n onChange: _.bind(function (value) {\n }, this)\n });\n\n this.groupCollapseContainer = new PJQ.views.collapse.BaseCollapse({\n el: this.$('#advancedSearchGroupsCollapseContainer')\n });\n\n this.groupSelector = new PJQ.views.groups.GroupSelector({\n el: this.$('.advanced-search-groups'),\n isShowNoGroup: true,\n onGroupSelected: _.bind(function () {\n //todo: trigger dirty\n }, this)\n });\n\n new PJQ.views.collapse.BaseCollapse({\n el: this.$('#advancedSearchContactCustomFieldsCollapseContainer')\n });\n\n PJQ.app.session.fetchContactCustomFields(PJQ.app.session.get('masterUserId'), _.bind(function (customFields) {\n this.contactCustomFields = customFields;\n this.contactCustomFieldsForm = new PJQ.views.customFields.CustomFieldsSearchForm({\n el: this.$('.advanced-search-contact-custom-fields'),\n isAdmin: true,\n collection: this.contactCustomFields,\n fieldValues: null\n });\n }, this));\n\n if (this.options.advancedSearch)\n this.setInputsFromSearch(this.options.advancedSearch);\n else {\n _.each(this.options.settings.get('searches'), _.bind(function (savedSearch) {\n if (savedSearch.isDefault)\n this.setInputsFromSearch(savedSearch);\n }, this))\n }\n },\n locationSearchTypeChanged: function () {\n if (this.locationSearchTypeSelectPicker.getValue() === 0) {\n this.$('.location-search-zip-radius').removeClass('hidden');\n this.$('.location-search-city-state-zip').addClass('hidden');\n } else {\n this.$('.location-search-zip-radius').addClass('hidden');\n this.$('.location-search-city-state-zip').removeClass('hidden');\n }\n },\n checkFieldVisible: function (fieldName) {\n if (this.coreFieldSettings == null) {\n let prefs;\n if (PJQ.app.session.project != null) {\n prefs = PJQ.app.session.project.preferences;\n } else {\n prefs = PJQ.app.session.preferences;\n }\n let result;\n switch (fieldName) {\n case 'sector':\n result = !prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_SECTOR);\n break;\n case 'laborStatus':\n result = prefs.getPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS) !== true;\n break;\n case 'classifications':\n result = prefs.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_MINORITY_STATUS) === false;\n break;\n default:\n result = true;\n }\n return result;\n } else {\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\n if (fieldSettings != null) {\n return fieldSettings.get('isVisibleContact') || fieldSettings.get('isVisibleAdmin');\n }\n }\n return true;\n },\n setInputsFromSearch: function (advancedSearch) {\n let search = _.filter(this.options.settings.get('searches'), _.bind(function (savedSearch) {\n return savedSearch.searchId === advancedSearch.searchId;\n }, this));\n\n if (_.size(search) > 0) {\n this.savedSearchSelectPicker.setValue(advancedSearch.searchId);\n this.$('.delete-search, .default-search').prop('disabled', false);\n this.$('.default-search').text(advancedSearch.isDefault ? 'Unset Default' : 'Set Default');\n } else {\n this.savedSearchSelectPicker.setValue(null);\n this.$('.delete-search, .default-search').prop('disabled', true);\n this.$('.default-search').text('Set Default');\n }\n\n this.$('input.search-name').val(advancedSearch.searchName);\n this.$('input.company-name').val(advancedSearch.companyName);\n this.companyBlacklistSelectPicker.setValue(advancedSearch.isCompanyBlacklisted ? 1 : 0);\n\n if (this.laborSelectPicker != null) {\n let laborStatus = [];\n if (advancedSearch.isUnion)\n laborStatus.push('isUnion');\n if (advancedSearch.isNonUnion)\n laborStatus.push('isNonUnion');\n if (advancedSearch.isPrevailingWage)\n laborStatus.push('isPrevailingWage');\n this.laborSelectPicker.setValue(laborStatus);\n }\n\n if (this.classificationSelectPicker != null) {\n let classification = [];\n if (advancedSearch.isDBE)\n classification.push('isDBE');\n if (advancedSearch.isDVBE)\n classification.push('isDVBE');\n if (advancedSearch.isMBE)\n classification.push('isMBE');\n if (advancedSearch.isSBE)\n classification.push('isSBE');\n if (advancedSearch.isSDVBE)\n classification.push('isSDVBE');\n if (advancedSearch.isWBE)\n classification.push('isWBE');\n this.classificationSelectPicker.setValue(classification);\n }\n\n if (this.sectorSelectPicker != null) {\n let sector = [];\n if (advancedSearch.isPrivateSector)\n sector.push('isPrivateSector');\n if (advancedSearch.isPublicSector)\n sector.push('isPublicSector');\n this.sectorSelectPicker.setValue(sector);\n }\n\n this.gradeSlider.setValue([advancedSearch.minGradeAverage, advancedSearch.maxGradeAverage]);\n\n this.companyCustomFieldsForm.setValues(advancedSearch.companyCustomFields);\n if (_.size(advancedSearch.companyCustomFields) > 0)\n this.$('#advancedSearchCompanyCustomFieldsCollapse').collapse('show');\n\n this.$('input.contact-name').val(advancedSearch.contactName);\n this.$('input.contact-title').val(advancedSearch.contactTitle);\n this.contactBlacklistSelectPicker.setValue(advancedSearch.isBlacklisted ? 1 : 0);\n\n this.$('input.phone').val(advancedSearch.phone);\n this.$('input.phone-ext').val(advancedSearch.phoneExtension);\n this.$('input.fax').val(advancedSearch.fax);\n this.$('input.cell').val(advancedSearch.cell);\n this.contactTypeSelectPicker.setValue(advancedSearch.userTypes);\n this.contactPrimarySelectPicker.setValue(advancedSearch.isPrimaryOnly ? 1 : 0);\n\n this.$('input.email').val(advancedSearch.email);\n\n if (advancedSearch.locationType > 0) {\n this.locationSearchTypeSelectPicker.setValue(0);\n this.$('.location-search-zip-radius').removeClass('hidden');\n this.$('.location-search-city-state-zip').addClass('hidden');\n\n let locationFilter;\n if (advancedSearch.locationType === 3) {\n locationFilter = [1, 2];\n } else {\n locationFilter = [advancedSearch.locationType];\n }\n this.locationTypeSelectPicker.setValue(locationFilter);\n this.locationTypeSelectPicker.options.onChange(locationFilter);\n\n this.$('input.zip-1').val(advancedSearch.originzip);\n this.searchRadiusSelectPicker.setValue(advancedSearch.radius);\n this.$('.cross-state-bounds').prop('checked', advancedSearch.isCrossStateBoundaries);\n this.$('input.city').val('');\n this.stateSelectPicker.setValue(null);\n this.$('input.zip-2').val('');\n this.countrySelectPicker.setValue('US');\n } else {\n this.locationSearchTypeSelectPicker.setValue(1);\n this.$('.location-search-zip-radius').addClass('hidden');\n this.$('.location-search-city-state-zip').removeClass('hidden');\n\n let locationFilter = [0];\n this.locationTypeSelectPicker.setValue(locationFilter);\n this.locationTypeSelectPicker.options.onChange(locationFilter);\n\n this.locationTypeSelectPicker.options.onChange();\n this.$('input.zip-1').val('');\n this.searchRadiusSelectPicker.setValue(0);\n this.$('.cross-state-bounds').prop('checked', true);\n this.$('input.city').val(advancedSearch.city);\n this.stateSelectPicker.setValue(advancedSearch.state);\n this.$('input.zip-2').val(advancedSearch.zip);\n this.countrySelectPicker.setValue(advancedSearch.country);\n }\n\n if (this.groupSelector.collection)\n this.groupSelector.selectAll(false);\n this.groupSelector.selectGroups(advancedSearch.groups);\n this.groupSelector.expandSelectedParents();\n if (_.size(advancedSearch.groups) > 0)\n this.$('#advancedSearchGroupsCollapse').collapse('show');\n\n this.contactCustomFieldsForm.setValues(advancedSearch.customFields);\n if (_.size(advancedSearch.customFields) > 0)\n this.$('#advancedSearchContactCustomFieldsCollapse').collapse('show');\n },\n createSearchFromInputs: function () {\n let advancedSearch = this.savedSearchSelectPicker.getValue() ? _.filter(this.options.settings.get('searches'), _.bind(function (savedSearch) {\n return savedSearch.searchId === this.savedSearchSelectPicker.getValue();\n }, this))[0] : {};\n\n advancedSearch.searchId = this.savedSearchSelectPicker.getValue() ? this.savedSearchSelectPicker.getValue() : PJQ.helpers.guid();\n advancedSearch.searchName = this.$('input.search-name').val().trim();\n advancedSearch.companyName = this.$('input.company-name').val().trim();\n advancedSearch.isCompanyBlacklisted = this.companyBlacklistSelectPicker.getValue() === 1;\n\n if (this.laborSelectPicker != null) {\n advancedSearch.isUnion = this.laborSelectPicker.getValue().indexOf('isUnion') !== -1;\n advancedSearch.isNonUnion = this.laborSelectPicker.getValue().indexOf('isNonUnion') !== -1;\n advancedSearch.isPrevailingWage = this.laborSelectPicker.getValue().indexOf('isPrevailingWage') !== -1;\n }\n\n if (this.classificationSelectPicker != null) {\n advancedSearch.isDBE = this.classificationSelectPicker.getValue().indexOf('isDBE') !== -1;\n advancedSearch.isDVBE = this.classificationSelectPicker.getValue().indexOf('isDVBE') !== -1;\n advancedSearch.isMBE = this.classificationSelectPicker.getValue().indexOf('isMBE') !== -1;\n advancedSearch.isSBE = this.classificationSelectPicker.getValue().indexOf('isSBE') !== -1;\n advancedSearch.isSDVBE = this.classificationSelectPicker.getValue().indexOf('isSDVBE') !== -1;\n advancedSearch.isWBE = this.classificationSelectPicker.getValue().indexOf('isWBE') !== -1;\n }\n\n if (this.sectorSelectPicker != null) {\n advancedSearch.isPrivateSector = this.sectorSelectPicker.getValue().indexOf('isPrivateSector') !== -1;\n advancedSearch.isPublicSector = this.sectorSelectPicker.getValue().indexOf('isPublicSector') !== -1;\n }\n\n advancedSearch.minGradeAverage = this.gradeSlider.getValue()[0];\n advancedSearch.maxGradeAverage = this.gradeSlider.getValue()[1];\n\n advancedSearch.companyCustomFields = this.companyCustomFieldsForm.getValues();\n\n advancedSearch.contactName = this.$('input.contact-name').val().trim();\n advancedSearch.contactTitle = this.$('input.contact-title').val().trim();\n advancedSearch.isBlacklisted = this.contactBlacklistSelectPicker.getValue() === 1;\n\n advancedSearch.phone = this.$('input.phone').val().trim();\n advancedSearch.phoneExtension = this.$('input.phone-ext').val().trim();\n advancedSearch.fax = this.$('input.fax').val().trim();\n advancedSearch.cell = this.$('input.cell').val().trim();\n advancedSearch.userTypes = this.contactTypeSelectPicker.getValue();\n advancedSearch.isPrimaryOnly = this.contactPrimarySelectPicker.getValue() === 1;\n\n advancedSearch.email = this.$('input.email').val().trim();\n\n if (this.locationSearchTypeSelectPicker.getValue() === 0) {\n let loc = this.locationTypeSelectPicker.getValue(),\n isWorkAreas = loc.indexOf(1) !== -1,\n isOffice = loc.indexOf(2) !== -1,\n locationFilter;\n if (isWorkAreas && isOffice) {\n locationFilter = 3;\n } else if (isWorkAreas) {\n locationFilter = 1;\n } else if (isOffice) {\n locationFilter = 2;\n }\n advancedSearch.locationType = locationFilter;\n advancedSearch.originzip = this.$('input.zip-1').val().trim();\n advancedSearch.radius = this.searchRadiusSelectPicker.getValue();\n advancedSearch.isCrossStateBoundaries = this.$('.cross-state-bounds').prop('checked');\n advancedSearch.city = '';\n advancedSearch.state = '';\n advancedSearch.zip = '';\n advancedSearch.country = '';\n } else {\n advancedSearch.locationType = 0;\n advancedSearch.originzip = '';\n advancedSearch.radius = 0;\n advancedSearch.isCrossStateBoundaries = true;\n advancedSearch.city = this.$('input.city').val().trim();\n advancedSearch.state = this.stateSelectPicker.getValue();\n advancedSearch.zip = this.$('input.zip-2').val().trim();\n advancedSearch.country = this.countrySelectPicker.getValue();\n }\n\n advancedSearch.groups = _.map(this.groupSelector.getGroupsData().selected, function (group) {\n return group.get('groupId');\n });\n advancedSearch.regions = [];\n\n advancedSearch.customFields = this.contactCustomFieldsForm.getValues();\n\n return advancedSearch;\n },\n validate: function (save) {\n let isValid = true;\n\n if (!this.companyCustomFieldsForm.validateSearch()) {\n isValid = false;\n this.$('#advancedSearchCompanyCustomFieldsCollapse').collapse('show');\n }\n\n if (!this.contactCustomFieldsForm.validateSearch()) {\n isValid = false;\n this.$('#advancedSearchContactCustomFieldsCollapse').collapse('show');\n }\n\n PJQ.helpers.inputHelpers.setInputError(this.$('input.search-name'), true);\n if (save && _.size(this.$('input.search-name').val().trim()) === 0) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(this.$('input.search-name'), false);\n }\n\n return isValid;\n },\n saveSearch: function () {\n this.search(null, true);\n },\n search: function (e, save) {\n let advancedSearch = this.createSearchFromInputs(), callback = _.bind(function () {\n this.options.onSearch(advancedSearch);\n this.removeModal();\n }, this);\n\n if (!this.validate(save))\n return;\n\n if (save) {\n if (this.savedSearchSelectPicker.getValue()) {\n _.each(this.options.settings.get('searches'), _.bind(function (search) {\n if (search.searchId === advancedSearch.searchId)\n search = advancedSearch;\n }, this));\n } else {\n this.options.settings.get('searches').push(advancedSearch);\n }\n this.options.settings.save(null, {\n success: _.bind(function () {\n callback();\n }, this)\n });\n } else {\n callback();\n }\n },\n clearSearch: function () {\n this.options.advancedSearch = null;\n this.$('.delete-search, .default-search').prop('disabled', true);\n this.$('.default-search').text('Set Default');\n\n this.savedSearchSelectPicker.setValue(null);\n this.$('.search-name').val('');\n\n this.$('.company-name').val('');\n this.companyBlacklistSelectPicker.setValue(0);\n\n if (this.laborSelectPicker != null) {\n this.laborSelectPicker.setValue(null);\n }\n if (this.classificationSelectPicker != null) {\n this.classificationSelectPicker.setValue(null);\n }\n if (this.sectorSelectPicker != null) {\n this.sectorSelectPicker.setValue(null);\n }\n\n this.gradeSlider.setValue([0, 5]);\n\n this.companyCustomFieldsForm.clearFieldValues();\n this.$('#advancedSearchCompanyCustomFieldsCollapse').collapse('hide');\n\n this.$('.contact-name,.phone,.phone-ext,.fax,.cell,.email').val('');\n this.contactBlacklistSelectPicker.setValue(0);\n\n this.groupSelector.selectAll(false);\n this.$('#advancedSearchGroupsCollapse').collapse('hide');\n\n this.contactCustomFieldsForm.clearFieldValues();\n this.$('#advancedSearchContactCustomFieldsCollapse').collapse('hide');\n\n this.locationSearchTypeSelectPicker.setValue(0);\n this.locationTypeSelectPicker.setValue(1);\n this.$('.zip-1, .zip-2, .city').val('');\n this.countrySelectPicker.setValue('US');\n this.stateSelectPicker.setValue(null);\n this.searchRadiusSelectPicker.setValue(0);\n this.$('.cross-state-bounds').prop('checked', true);\n this.locationSearchTypeChanged();\n\n this.$('.company-name').focus();\n },\n deleteSearch: function () {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this search?\",\n onDelete: _.bind(function () {\n this.options.settings.set('searches', _.filter(this.options.settings.get('searches'), _.bind(function (search) {\n return (search.searchId !== this.savedSearchSelectPicker.getValue());\n }, this)));\n\n this.options.settings.save(null, {\n success: _.bind(function () {\n this.$('select.saved-search option[value=\"' + this.savedSearchSelectPicker.getValue() + '\"]').remove();\n this.savedSearchSelectPicker.setValue(null);\n this.savedSearchSelectPicker.refresh();\n this.clearSearch();\n }, this)\n });\n }, this)\n });\n },\n defaultSearch: function () {\n // find current search\n let search = _.filter(this.options.settings.get('searches'), _.bind(function (savedSearch) {\n return savedSearch.searchId === this.savedSearchSelectPicker.getValue();\n }, this))[0];\n\n if (!this.validate(true))\n return;\n\n // toggle search state / button label\n if (search.isDefault) {\n search.isDefault = false;\n } else {\n _.each(this.options.settings.get('searches'), _.bind(function (savedSearch) {\n savedSearch.isDefault = (savedSearch.searchId === search.searchId);\n }, this));\n }\n\n // save\n this.options.settings.save(null, {\n success: _.bind(function () {\n this.$('.default-search').text(search.isDefault ? 'Unset Default' : 'Set Default');\n PJQ.notifications.notify.successNotify({\n message: 'Default search ' + (search.isDefault ? 'saved' : 'cleared') + ' successfully'\n });\n }, this)\n });\n },\n numbersOnly: function (e) {\n return PJQ.helpers.inputHelpers.numbersOnly(e);\n }\n});\n\nPJQ.views.addressbook.ProqualRequestModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'Modal-Proqual-Request'),\n minWidth: '800px',\n request: {\n screeningPackageId: null,\n isBillSender: null,\n processorNotes: '',\n uploaderGuid: PJQ.helpers.guid(),\n attachments: new PJQ.collections.files.Files(),\n selectedContacts: []\n },\n onAddParticipants: _.noop,\n onSend: _.noop\n },\n events: {\n 'click .add-contacts': 'addContacts',\n 'click .request-close': 'close',\n 'click .request-preview': 'previewRequest',\n 'click .request-viewitems': 'viewPackageItems',\n 'click .request-send': 'sendRequest',\n 'change .proqual-notes': 'notesChanged'\n },\n beforeModalCreated: function () {\n this.options.isProqual = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROQUAL_CUSTOMER);\n this.options.isSingleContact = this.options.contactId > 0;\n if (this.options.isSingleContact) {\n this.options.isSingleContact = true;\n this.options.request.selectedContacts = [this.options.contactId];\n }\n\n PJQ.app.session.fetchScreeningSettings(_.bind(function (settings) {\n this.settings = settings;\n this.render();\n }, this));\n },\n renderData: function () {\n return {\n selectedContacts: this.options.request.selectedContacts,\n settings: this.settings.attributes,\n isProqual: this.options.isProqual,\n isSingleContact: this.options.isSingleContact,\n };\n },\n setButtonStates: function () {\n this.$('.request-preview, .request-viewitems').prop('disabled', !this.packageSelectPicker.getValue());\n this.$('.request-send').prop('disabled', !this.packageSelectPicker.getValue() || (this.paymentSelectPicker != null && !this.paymentSelectPicker.getValue()) || (_.size(this.options.request.selectedContacts) === 0 && _.size(this.options.request.attachments) === 0));\n },\n afterRender: function () {\n if (this.settings == null)\n return;\n\n this.packageSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.proqual-package'),\n noneSelectedText: 'Select Package',\n isIntChoices: true,\n defaultValue: this.options.request.screeningPackageId,\n onChange: _.bind(function (value) {\n this.options.request.screeningPackageId = value;\n this.setButtonStates();\n }, this)\n });\n\n if (this.options.isProqual) {\n this.$('.proqual-payment').prop('disabled', this.settings.get('isPaymentMethodReadOnly'));\n if (this.options.request.isBillSender == null && this.settings.get('defaultPaymentMethod') != null) {\n this.options.request.isBillSender = this.settings.get('defaultPaymentMethod').toLowerCase() === 'sender';\n }\n\n this.paymentSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.proqual-payment'),\n noneSelectedText: 'Select Payment Type',\n isIntChoices: true,\n defaultValue: this.options.request.isBillSender !== undefined ? (this.options.request.isBillSender ? 1 : 2) : null,\n onChange: _.bind(function (value) {\n if (value !== null)\n this.options.request.isBillSender = (value === 1);\n\n this.setButtonStates();\n }, this)\n });\n\n this.$('.proqual-notes').val(this.options.request.processorNotes ? this.options.request.processorNotes : '');\n\n if (!this.options.isSingleContact) {\n this.uploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.request-uploader'),\n collection: this.options.request.attachments,\n uuid: this.options.request.uploaderGuid,\n onDelete: _.bind(function (attachment, callback) {\n attachment.destroy();\n callback();\n this.setButtonStates();\n }, this),\n onSuccess: _.bind(function () {\n this.setButtonStates();\n }, this),\n });\n }\n }\n\n this.setButtonStates();\n },\n notesChanged: function () {\n this.options.request.processorNotes = this.$('.proqual-notes').val();\n },\n addContacts: function () {\n if (this.uploader) {\n this.options.request.attachments = this.uploader.collection;\n }\n this.options.onAddParticipants(this.options.request);\n this.removeModal();\n },\n previewRequest: function () {\n new PJQ.views.addressbook.ProqualRequestPreviewModal({\n screeningPackageId: this.packageSelectPicker.getValue()\n });\n },\n viewPackageItems: function () {\n new PJQ.views.addressbook.ProqualRequestViewItemsModal({\n screeningPackage: _.filter(this.settings.get('packages'), _.bind(function (screeningPackage) {\n return screeningPackage.screeningPackageId === this.packageSelectPicker.getValue();\n }, this))[0]\n });\n },\n sendRequest: function () {\n let confirmText;\n if (this.options.isProqual) {\n confirmText = \"Are you sure you want to \" + (this.paymentSelectPicker.getValue() === 1 ? \"place this order and \" : \"\") + \"send these requests?\";\n } else {\n confirmText = \"Are you sure you want to send this request?\";\n }\n let callback = _.bind(function () {\n new PJQ.views.modals.YesNo({\n header: \"Confirm Request\",\n body: confirmText,\n onYes: _.bind(function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'addressbook'\n },\n {\n endpoint: 'proqual'\n },\n {\n endpoint: 'request'\n }\n ]),\n data: {\n screeningPackageId: this.packageSelectPicker.getValue(),\n isBillSender: this.options.request.isBillSender,\n notes: this.options.request.processorNotes,\n attachments: this.options.request.attachments.models,\n contacts: this.options.request.selectedContacts\n }\n }).post().done(_.bind(function (data) {\n PJQ.notifications.notify.successNotify({\n message: 'Your qualification request is now queued for processing.'\n });\n this.options.onSend();\n this.removeModal();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong.'\n });\n });\n }, this)\n });\n }, this);\n\n if (_.size(this.options.request.selectedContacts) > 0) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'addressbook'\n },\n {\n endpoint: 'proqual'\n },\n {\n endpoint: 'request'\n },\n {\n endpoint: 'check'\n }\n ]),\n data: {\n screeningPackageId: this.options.request.screeningPackageId,\n contacts: this.options.request.selectedContacts\n }\n }).post().done(_.bind(function (data) {\n if (_.size(data.contacts) > 0) {\n new PJQ.views.addressbook.ProqualRequestErrorModal({\n contacts: data.contacts,\n selectedContacts: this.options.request.selectedContacts,\n onContinue: _.bind(function () {\n callback();\n }, this)\n });\n } else\n callback();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong.'\n });\n });\n } else {\n callback();\n }\n }\n});\n\nPJQ.views.addressbook.ProqualRequestViewItemsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'Modal-Proqual-Request-Items'),\n minWidth: '60%',\n screeningPackage: null\n },\n beforeRender: function () {\n this.renderData = {\n items: this.options.screeningPackage.packageItems\n };\n }\n});\n\nPJQ.views.addressbook.ProqualRequestPreviewModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'Modal-Proqual-Request-Preview'),\n minWidth: '60%',\n screeningPackageId: 0\n },\n events: {\n 'click .preview-export': 'export'\n },\n beforeModalCreated: function () {\n this.isFetched = false;\n\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'addressbook',\n },\n {\n endpoint: 'proqual'\n },\n {\n endpoint: 'preview'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n screeningPackageId: this.options.screeningPackageId,\n isExport: false\n }\n }).post().done(_.bind(function (data) {\n this.isFetched = true;\n this.previewHTML = data.html;\n this.render();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n },\n afterRender: function () {\n this.$('.message-body').html(this.previewHTML);\n },\n export: function () {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'addressbook',\n },\n {\n endpoint: 'proqual'\n },\n {\n endpoint: 'preview'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n screeningPackageId: this.options.screeningPackageId,\n isExport: true\n }\n }).post().done(_.bind(function (data) {\n PJQ.files.downloadFile(data.url, {isEndpoint: false});\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n }\n});\n\nPJQ.views.addressbook.ProqualRequestErrorModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'Modal-Proqual-Request-Error-List'),\n minWidth: '90%',\n contacts: null,\n selectedContacts: null,\n onContinue: _.noop\n },\n events: {\n 'click .btn-copy-phone': 'copyPhone',\n 'click .btn-continue': 'continue',\n 'click .export': 'export'\n },\n beforeRender: function () {\n this.renderData = {\n invalidContacts: _.size(this.options.contacts),\n validContacts: _.size(this.options.selectedContacts) - _.size(this.options.contacts)\n };\n },\n afterRender: function () {\n new PJQ.views.dataTables.DataTable({\n el: this.$('.contact-errors'),\n pageLength: 999999,\n isHideSearch: true,\n data: this.options.contacts,\n dom: 't',\n order: [],\n columns: [\n {\n \"data\": \"companyName\",\n \"title\": \"Company\",\n \"orderable\": false\n },\n {\n \"data\": \"contactName\",\n \"title\": \"Contact\",\n \"orderable\": false\n },\n {\n \"data\": \"phone\",\n \"title\": \"Phone\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = row.phone ? (PJQ.helpers.formatHelpers.formatPhoneNumber(row.phone) + (_.size(row.phoneExtension) === 0 ? '' : ' x' + row.phoneExtension)) : 'N/A';\n\n if (row.phone !== '')\n html += '';\n\n html += '
' + phoneFormatted + '
';\n html += '
';\n return html;\n }, this)\n },\n {\n \"data\": \"email\",\n \"title\": \"Email\",\n \"orderable\": false\n },\n {\n \"data\": \"reason\",\n \"title\": \"Reason\",\n \"orderable\": false\n }\n ]\n });\n\n },\n continue: function () {\n if (typeof this.options.onContinue === 'function')\n this.options.onContinue();\n\n this.removeModal();\n },\n export: function () {\n },\n copyPhone: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('', {\n value: $(e.currentTarget).data('phone'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Number copied to clipboard.'\n });\n }\n});\n\nPJQ.views.addressbook.MergeRequestModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'Modal-Merge-Request'),\n minWidth: '70%',\n data: null,\n addressBookView: null,\n onMerge: _.noop\n },\n events: {\n 'click .btn-copy-phone': 'copyPhone',\n 'click .btn-merge-confirm': 'mergeContacts'\n },\n beforeModalCreated: function () {\n this.companies = [];\n this.contacts = [];\n\n _.each(this.options.data, _.bind(function (item) {\n\n if (!item.company.companyName) {\n item.company.companyName = 'Company ' + item.company.contactId.toString();\n _.each(item.contacts, function (contact) {\n contact.companyName = item.company.companyName;\n });\n }\n\n this.companies.push(item.company);\n $.merge(this.contacts, item.contacts);\n }, this));\n },\n beforeRender: function () {\n this.renderData = {\n companies: this.companies\n };\n },\n afterRender: function () {\n this.destinationSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.destination-company'),\n defaultValue: null,\n onChange: _.bind(function (value) {\n this.$('.btn-merge-confirm').prop('disabled', !value);\n }, this)\n });\n\n new PJQ.views.dataTables.DataTable({\n el: this.$('.merge-data'),\n pageLength: 999999,\n isHideSearch: true,\n data: this.contacts,\n dom: 't',\n order: [],\n columns: [\n {\n \"data\": \"companyName\",\n \"title\": \"Company\",\n \"orderable\": false\n },\n {\n \"data\": \"contactName\",\n \"title\": \"Contact\",\n \"orderable\": false\n },\n {\n \"data\": \"phone\",\n \"title\": \"Phone\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = row.phone ? (PJQ.helpers.formatHelpers.formatPhoneNumber(row.phone) + (_.size(row.phoneExtension) === 0 ? '' : ' x' + row.phoneExtension)) : 'N/A';\n\n if (row.phone !== '')\n html += '';\n\n html += '
' + phoneFormatted + '
';\n html += '
';\n return html;\n }, this)\n },\n {\n \"data\": \"email\",\n \"title\": \"Email\",\n \"orderable\": false\n }\n ]\n });\n\n },\n copyPhone: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('', {\n value: $(e.currentTarget).data('phone'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Number copied to clipboard.'\n });\n },\n mergeContacts: function () {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'addressbook',\n },\n {\n endpoint: 'merge'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n destinationContactId: this.destinationSelectPicker.getValue(),\n contacts: this.options.addressBookView.selectedContactsAll\n }\n }).post().done(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Contacts merged successfully.'\n });\n\n if (typeof this.options.onMerge === 'function')\n this.options.onMerge();\n\n this.removeModal();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n\n }\n});\n\nPJQ.views.addressbook.QualificationsReportModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'Modal-Qualifications-Report'),\n minWidth: '500px'\n },\n events: {\n 'click .btn-continue': 'export',\n 'keyup .email': 'emailChanged'\n },\n afterRender: function () {\n new PJQ.Alert(this.$('.email-alert'), {\n text: 'Please enter your email address, and the report will be sent to you when it is ready.'\n });\n\n this.$('.email').val(PJQ.app.session.user.get('email'));\n this.emailChanged();\n },\n emailChanged: function () {\n this.$('.btn-continue').prop('disabled', this.$('.email').val().indexOf('@') <= 0);\n },\n export: function () {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'reports',\n },\n {\n endpoint: 'qualification_screenings'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n options: [\n {\n id: _.unique(),\n type: 'STRING',\n name: 'email',\n isRequired: true,\n defaultValue: {\n email: this.$('.email').val().trim()\n },\n value: this.$('.email').val().trim()\n }\n ]\n }\n }).post().done(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Report processing - you will receive an email with the report attached when it is ready.'\n });\n\n this.removeModal();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n\n }\n});\n","PJQ.views.contacts.EditContactView = PJQ.views.contacts.BaseEditContactView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'edit-company-contact'),\n\t\tcanEdit: true,\n\t\talert: null\n\t}\n});\n\nPJQ.views.addressbook.EditCompanyView = PJQ.views.contacts.BaseEditContactView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'edit-company'),\n\t\tsubTemplates: {\n\t\t\tcontact: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'edit-company-contact')\n\t\t},\n\t\tmaxWidth: 1400,\n\t\tcanEdit: true,\n\t\tisShowCloseButton: true,\n\t\tonDelete: _.noop,\n\t\tonCancel: _.noop,\n\t\tonSave: _.noop,\n\t\tonSaveContact: _.noop,\n\t\tisAdmin: true,\n\t\talert: null\n\t},\n\tevents: {\n\t\t\"change .contact-edit-phone,.contact-edit-fax,.contact-edit-cell\": \"formatPhone\",\n\t\t\"keyup .contact-edit-phone-ext\": \"numbersOnly\",\n\t\t\"keydown .contact-edit-phone-ext\": \"numbersOnly\",\n\t\t\"click .contact-edit-add\": \"addNew\",\n\t\t'click .btn-add-contact': 'addNewContactClicked',\n\t\t'click .btn-delete-contact': 'deleteContactClicked',\n\t\t'click .btn-copy-contact': 'copyContactClicked',\n\t\t'click .btn-set-primary-contact': 'setPrimaryClicked',\n\t\t'click .btn-edit-permissions': 'editPermissions',\n\t\t'click .btn-copy-phone': 'copyPhone',\n\t\t\"click .btn-unlock-user\": \"unlockUser\",\n\t\t'click .btn-unlink-user': 'unlinkContactUser',\n\t\t'click .btn-send-user-reg': 'sendSignUp',\n\t\t\"click .btn-send-password-reset\": \"sendPasswordReset\",\n\t\t\"click .btn-company-active\": \"isActiveClicked\",\n\t\t\"click .btn-contact-active\": \"checkIsPrimary\",\n\t\t\"click .btn-show-groups\": \"showRowGroups\",\n\t\t\"click .btn-edit-contact\": \"contactSwitchedClicked\",\n\t\t\"click .btn-contact-permissions\": \"editContactPermissions\",\n\t\t\"click .btn-mirror-trades\": \"mirrorTrades\",\n\t\t\"click .btn-screening-request-company\": \"newScreeningRequest\",\n\t\t\"click .btn-prequal-audit-log\": \"viewPrequalAuditLog\"\n\t},\n\tbeforeFirstRender: function () {\n\t\tthis.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n\t\tthis.company = this.options.company;\n\n\t\tlet fieldUserId = PJQ.app.session.project != null ? PJQ.app.session.project.get('masterUserId') : null,\n\t\t\tfetchERP = (callback) => {\n\t\t\t\tPJQ.app.session.fetchERPIntegration((erp) => {\n\t\t\t\t\tthis.erpIntegration = erp;\n\t\t\t\t\tif (this.erpIntegration != null) {\n\t\t\t\t\t\tthis.company.fetchERPObject(() => {\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tfnFetch = () => {\n\t\t\t\tif (this.company == null) {\n\t\t\t\t\tthis.company = new PJQ.models.contacts.Company({\n\t\t\t\t\t\tid: this.options.contactCompanyId ? this.options.contactCompanyId : this.options.contactId\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (!this.company.isNew() && !this.company.isFetched) {\n\t\t\t\t\tthis.company.fetch({\n\t\t\t\t\t\tsuccess: () => {\n\t\t\t\t\t\t\tfetchERP(() => {\n\t\t\t\t\t\t\t\tthis.render();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfetchERP(() => {\n\t\t\t\t\t\tthis.render();\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tPJQ.app.session.fetchCompanyCustomFields(fieldUserId, _.bind(function (customFields) {\n\t\t\t\t\tthis.companyCustomFields = customFields;\n\t\t\t\t\tif (this.isRendered) {\n\t\t\t\t\t\tthis.renderCompanyCustomFields();\n\t\t\t\t\t}\n\t\t\t\t}, this));\n\t\t\t\tPJQ.app.session.fetchContactCustomFields(fieldUserId, _.bind(function (customFields) {\n\t\t\t\t\tthis.contactCustomFields = customFields;\n\t\t\t\t\tif (this.isRendered) {\n\t\t\t\t\t\tthis.renderContactCustomFields();\n\t\t\t\t\t}\n\t\t\t\t}, this));\n\t\t\t};\n\n\t\tthis.options.fieldSettingsEnabled = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_CONTACT_FIELD_SETTINGS);\n\t\tif (this.options.fieldSettingsEnabled) {\n\t\t\tPJQ.app.session.fetchContactFieldSettings(fieldUserId, _.bind(function (settings) {\n\t\t\t\tthis.coreFieldSettings = settings;\n\t\t\t\tfnFetch();\n\t\t\t}, this));\n\t\t} else {\n\t\t\tfnFetch();\n\t\t}\n\t},\n\tbeforeRender: function () {\n\t\treturn PJQ.views.contacts.BaseEditContactView.prototype.beforeRender.call(this);\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tcompany: this.company,\n\t\t\tuserTypes: PJQ.app.session.userTypes.getByIsCompany(false),\n\t\t\tprevailingWageLabel: this.options.prevailingWageLabel,\n\t\t\tcheckFieldVisible: _.bind(this.checkFieldVisible, this),\n\t\t\tcheckFieldRequired: _.bind(this.checkFieldRequired, this),\n\t\t\tenablePermissions: this.options.enablePermissions,\n\t\t\tcanEdit: this.options.canEdit,\n\t\t\tcanEditCustomFields: this.options.canEditCustomFields,\n\t\t\tisAdmin: this.options.isAdmin,\n\t\t\tshowScreenings: this.options.showScreenings,\n\t\t\tshowCompanyCustomFields: this.companyCustomFields != null && this.companyCustomFields.length > 0,\n\t\t\tcanDelete: PJQ.app.session.hasPermission('contacts.canDelete')\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.company != null && (this.company.isNew() || this.company.isFetched)) {\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.company-edit-active'),\n\t\t\t\tnoneSelectedText: 'Select Value',\n\t\t\t\tdefaultValue: this.company.get('isBlacklisted') ? 'inactive' : 'active',\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.company.set('isBlacklisted', value === 'inactive');\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.select-approval-level'),\n\t\t\t\tnoneSelectedText: 'Select Value',\n\t\t\t\t// defaultValue: _.size(this.model.get('country')) > 0 ? this.model.get('country').toLowerCase() : null,\n\t\t\t\tonChange: _.bind(function (value) {\n\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tthis.renderERP();\n\t\t\tthis.renderGrade(this.company);\n\t\t\tthis.renderLaborStatus(this.model);\n\t\t\tthis.renderSector(this.model);\n\t\t\tthis.renderMinority(this.model);\n\n\t\t\tnew PJQ.views.collapse.BaseCollapse({\n\t\t\t\tel: this.$('#companyInfoCollapseContainer'),\n\t\t\t\tonShown: _.bind(function (id) {\n\t\t\t\t\tswitch (id) {\n\t\t\t\t\t\tcase 'companyAttachmentsCollapse':\n\t\t\t\t\t\t\tthis.renderCompanyAttachments();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'prequalCollapse':\n\t\t\t\t\t\t\tthis.renderPrequal();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'screeningCollapse':\n\t\t\t\t\t\t\tthis.renderScreenings();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tthis.renderCompanyGroups();\n\t\t\tthis.setContextContact();\n\t\t\tthis.renderContactsTable();\n\t\t}\n\t\telse {\n\t\t\tnew PJQ.Loader(this.$('.modal-body'));\n\t\t}\n\n\t\tif (!this.model) {\n\t\t\tthis.addNewContact();\n\t\t}\n\t},\n\teditContactPermissions: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.contactListTable.getRow(target.closest('tr')),\n\t\t\tcontact = row.data();\n\t\tnew PJQ.views.permissions.PermissionsEditorModal({\n\t\t\tmodel: contact\n\t\t});\n\t},\n\tviewBidHistory: function () {\n\t\tthis.bidHistory = new PJQ.views.projects.ProjectParticipantHistoryModal({\n\t\t\tcontactId: this.model.get('contactId'),\n\t\t\tonGoToProject: _.bind(function () {\n\t\t\t\tif (this.options.closeModal) {\n\t\t\t\t\tthis.options.closeModal();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t\tthis.bidHistory.renderHistory('overall')\n\t},\n\tcontactSwitched: function (contactId = null) {\n\t\tif (this.model && this.model.hasChanged()) {\n\t\t\tnew PJQ.views.modals.SaveDontSave({\n\t\t\t\theader: \"Save current selected contact?\",\n\t\t\t\tbody: \"You have made changes to the current selected contact. Would you like to save this contact before switching contacts?\",\n\t\t\t\tonSave: _.bind(function () {\n\t\t\t\t\tthis.saveCompanyContact(false, _.bind(function () {\n\t\t\t\t\t\tthis.model.set('isNewCopy', false);\n\t\t\t\t\t\tthis.setContextContact(contactId);\n\t\t\t\t\t}, this));\n\t\t\t\t}, this),\n\t\t\t\tonDontSave: _.bind(function () {\n\t\t\t\t\tthis.model.restore();\n\t\t\t\t\tthis.setContextContact(contactId);\n\t\t\t\t}, this)\n\t\t\t})\n\t\t}\n\t\telse {\n\t\t\tthis.setContextContact(contactId);\n\t\t}\n\t},\n\tsetContextContact: function (contactId = null, existingModel) {\n\t\tif (this.model != null && this.model.get('contactId') === this.company.get('contactId')) {\n\t\t\tthis.model = null;\n\t\t}\n\t\tlet contextId = this.options.contactId;\n\t\tif (contactId > 0) {\n\t\t\tcontextId = contactId;\n\t\t}\n\t\tif (contextId > 0 && contextId !== this.company.get('contactId') && this.model.get('contactId') !== contextId) {\n\t\t\tthis.model = this.company.contacts.get(contextId);\n\t\t}\n\n\t\tif (this.model == null) {\n\t\t\tthis.model = this.company.contacts.findWhere({isPrimary: true});\n\t\t\tif (this.model == null && !this.company.isNew()) {\n\t\t\t\tthis.model = this.company.contacts.models[0];\n\t\t\t}\n\t\t\telse if (existingModel) {\n\t\t\t\tthis.model = existingModel;\n\t\t\t}\n\t\t\telse if (this.model == null && this.company.isNew()) {\n\t\t\t\tlet userTypes = PJQ.app.session.userTypes.getByIsCompany(false),\n\t\t\t\t\tdefaultUserType = _.find(userTypes, function (ut) {\n\t\t\t\t\t\treturn ut.get('isDefault');\n\t\t\t\t\t});\n\n\t\t\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_PREVENT_DEFAULT_USER_TYPE))\n\t\t\t\t\tdefaultUserType = null;\n\t\t\t\telse if (defaultUserType == null && _.size(userTypes) > 0) {\n\t\t\t\t\tdefaultUserType = userTypes[0];\n\t\t\t\t}\n\n\n\t\t\t\tthis.model = new PJQ.models.contacts.Contact({\n\t\t\t\t\tcontactName: \"\",\n\t\t\t\t\tuserTypeId: this.company.get('userTypeId') ? this.company.get('userTypeId') : (defaultUserType ? defaultUserType.id : null),\n\t\t\t\t\ttitle: \"\",\n\t\t\t\t\taddress1: \"\",\n\t\t\t\t\taddress2: \"\",\n\t\t\t\t\tisPrimary: true,\n\t\t\t\t\tcity: \"\",\n\t\t\t\t\tzip: \"\",\n\t\t\t\t\tstate: \"\",\n\t\t\t\t\tcountry: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) : 'US',\n\t\t\t\t\tphone: \"\",\n\t\t\t\t\tcell: \"\",\n\t\t\t\t\tfax: \"\",\n\t\t\t\t\temail: \"\",\n\t\t\t\t\tnotes: \"\",\n\t\t\t\t\tisAutoSelectDisabled: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DEFAULT_AUTO_SELECT_DISABLED)\n\t\t\t\t});\n\t\t\t\tthis.company.contacts.add(this.model);\n\t\t\t}\n\t\t}\n\n\t\tthis.options.contactId = this.model ? this.model.get('contactId') : null;\n\t\tlet fnRender = _.bind(function () {\n\t\t\tthis.renderContact();\n\t\t\tif (this.contactListTable) {\n\t\t\t\tthis.contactListTable.render();\n\t\t\t}\n\t\t}, this)\n\t\tif (this.model && !this.model.isFetched && this.model.get('contactId') > 0) {\n\t\t\tthis.model.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tfnRender();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tfnRender();\n\t\t}\n\t},\n\trenderGrade: function (company) {\n\t\tnew PJQ.inputs.StarRating({\n\t\t\tel: this.$('.company-rating'),\n\t\t\trating: company.get('gradeAverage'),\n\t\t\tisReadOnly: true\n\t\t});\n\t},\n\trenderContact: function () {\n\t\tthis.renderSubTemplate(false, this.options.subTemplates.contact, this.$('.contact-outer'), this.contactRenderData(), _.bind(function () {\n\t\t\tif (this.model.get('isApprovalRequired') && !PJQ.app.session.hasPermission('contacts.canApprove')) {\n\t\t\t\t$('.contact-edit-save').hide();\n\t\t\t\t$('.contact-edit-delete').hide();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (this.model.get('isApprovalRequired')) {\n\t\t\t\t\t$('.contact-edit-save-without-approval').removeClass('hidden');\n\t\t\t\t}\n\t\t\t\t$('.contact-edit-save').text(this.model.get('isApprovalRequired') ? \"Approve\" : \"Save\");\n\t\t\t}\n\n\t\t\treturn PJQ.views.contacts.BaseEditContactView.prototype.renderContact.call(this);\n\t\t}, this));\n\t},\n\tcontactRenderData: function () {\n\t\treturn {\n\t\t\tcompany: this.company,\n\t\t\tmodel: this.model,\n\t\t\tuserTypes: PJQ.app.session.userTypes.getByIsCompany(false),\n\t\t\tshowNotes: this.options.showNotes !== false,\n\t\t\tcheckFieldVisible: _.bind(this.checkFieldVisible, this),\n\t\t\tcheckFieldRequired: _.bind(this.checkFieldRequired, this),\n\t\t\tisGroupsRequired: this.options.isGroupsRequired === true,\n\t\t\tcanEdit: this.options.canEdit,\n\t\t\tisUserTypeRequired: true,\n\t\t\tcanEditCustomFields: this.options.canEditCustomFields,\n\t\t\tshowContactCustomFields: this.contactCustomFields != null && this.contactCustomFields.length > 0,\n\t\t\tcanDelete: PJQ.app.session.hasPermission('contacts.canDelete')\n\t\t};\n\t},\n\tgroupsChanged: function (data) {\n\t\tthis.model.groups.reset(data.selected);\n\t\tthis.renderCompanyGroups();\n\t},\n\trenderCompanyGroups: function () {\n\t\tthis.groupViewer = new PJQ.views.groups.GroupsSelectInput({\n\t\t\tel: this.$('.company-groups'),\n\t\t\tisShowAddButton: false,\n\t\t\tselectedGroups: this.company.getGroups(),\n\t\t\tisReadOnly: true,\n\t\t\tlimitGroups: true\n\t\t});\n\t},\n\trenderCompanyAttachments: function () {\n\t\tif (!PJQ.app.session.hasPermission('contacts.canViewAttachments')) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet sortSettings;\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.SORT_COMPANY_ATTACHMENTS))\n\t\t\tsortSettings = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.SORT_COMPANY_ATTACHMENTS);\n\n\t\tthis.fileUploader = new PJQ.views.files.FileUploaderGrid({\n\t\t\tel: this.$('.company-documents'),\n\t\t\tcollection: this.company.attachments,\n\t\t\tsortBy: sortSettings ? sortSettings.sortBy : null,\n\t\t\tsortDirection: sortSettings ? (sortSettings.sortBy ? 'asc' : 'desc') : null,\n\t\t\t// canUpload: this.model.get('status') !== PJQ.constants.rfi.statuses.CLOSED,\n\t\t\t// canDelete: this.options.canEdit && this.options.isAdmin,\n\t\t\tpreviewImageDimension: 150,\n\t\t\tcanUpload: this.options.canEdit,\n\t\t\tcanDownloadAll: true,\n\t\t\tonSuccess: _.bind(function () {\n\t\t\t\tthis.model.isDirty = true;\n\t\t\t}, this),\n\t\t\tonDelete: _.bind(function (attachment, callback) {\n\t\t\t\tif (attachment.id > 0) {\n\t\t\t\t\tattachment.set('isDeleted', true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tattachment.destroy();\n\t\t\t\t}\n\t\t\t\tthis.model.isDirty = true;\n\t\t\t\tcallback();\n\t\t\t}, this)\n\t\t});\n\t},\n\trenderContactsTable: function () {\n\t\tthis.contactListTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$(\".contact-list-table\"),\n\t\t\tdata: this.company.contacts.models,\n\t\t\tisHideSearch: true,\n\t\t\tpaging: false,\n\t\t\tscrollY: \"400px\",\n\t\t\tscrollCollapse: true,\n\t\t\trowId: \"cid\",\n\t\t\trowCallback: function (row, data) {\n\t\t\t\tif (data.get('isBlacklisted')) {\n\t\t\t\t\t$(row).find('td').css('text-decoration', 'line-through');\n\t\t\t\t}\n\t\t\t},\n\t\t\torder: [2, 'desc'],\n\t\t\tlanguage: {\n\t\t\t\tzeroRecords: 'Click \"New Contact\" to create a new Contact'\n\t\t\t},\n\t\t\tcreatedRow: _.bind(function (row, data) {\n\t\t\t\tif (data.get('contactId') === this.options.contactId || data.id === this.options.contactId) {\n\t\t\t\t\tif (this.options.contactId == null && data.get('contactName') === '') {\n\t\t\t\t\t\t$(row).addClass('bg-primary-transparent');\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.options.contactId != null) {\n\t\t\t\t\t\t$(row).addClass('bg-primary-transparent');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\tonRowDoubleClick: _.bind(function (row) {\n\t\t\t\tthis.contactSwitched(row.data().get('contactId'));\n\t\t\t}, this),\n\t\t\tcontextMenuOptions: {\n\t\t\t\tactions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: _.bind(function (row) {\n\t\t\t\t\t\t\treturn row.data().get('masterUserId') === 39 || !this.options.canEdit ? 'View' : 'Edit'\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\tthis.contactSwitched(row.data().get('contactId'));\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Set as Primary',\n\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\tthis.setPrimary(row.data());\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\tisShown: _.bind(function (row) {\n\t\t\t\t\t\t\treturn this.options.canEdit;\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Delete',\n\t\t\t\t\t\tisDanger: true,\n\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\tthis.deleteContact(row)\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\tisShown: _.bind(function (row) {\n\t\t\t\t\t\t\tlet isDirectoryContact = row.data().get('masterUserId') === 39\n\t\t\t\t\t\t\treturn PJQ.app.session.hasPermission('contacts.canDelete') && !isDirectoryContact;\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\t\"title\": \"\",\n\t\t\t\t\t\"data\": \"attributes.isPrimary\",\n\t\t\t\t\t\"render\": function (data) {\n\t\t\t\t\t\treturn data ? '' : '';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": \"Contact Name\",\n\t\t\t\t\t\"data\": \"attributes.contactName\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.phone\",\n\t\t\t\t\t\"title\": \"Phone\",\n\t\t\t\t\t\"width\": \"150px\",\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet html = '
',\n\t\t\t\t\t\t\tphoneFormatted = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone')) + (_.size(row.get('phoneExtension')) === 0 ? '' : ' x' + row.get('phoneExtension')) : 'N/A');\n\n\t\t\t\t\t\tif (row.get('phone') !== '')\n\t\t\t\t\t\t\thtml += '';\n\n\t\t\t\t\t\thtml += '
' + phoneFormatted + '
';\n\t\t\t\t\t\thtml += '
';\n\t\t\t\t\t\treturn html;\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": \"Email\",\n\t\t\t\t\t\"data\": \"attributes.email\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": \"Trades\",\n\t\t\t\t\t\"data\": \"attributes.groups\",\n\t\t\t\t\t\"width\": \"200px\",\n\t\t\t\t\t\"render\": function (data, type, row) {\n\t\t\t\t\t\tif (_.size(row.groups.models) > 0) {\n\t\t\t\t\t\t\tlet groupNames = [];\n\t\t\t\t\t\t\t_.each(row.groups.models, function (group) {\n\t\t\t\t\t\t\t\tgroupNames.push(group.get('groupName'));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (_.size(groupNames) > 5) {\n\t\t\t\t\t\t\t\treturn _.rest(groupNames.reverse(), _.size(groupNames) - 5).reverse().join(', ') + \"
\" +\n\t\t\t\t\t\t\t\t\t\" \" + (_.size(groupNames) - 5) + \" more item(s)\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treturn groupNames.join(', ')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"id\",\n\t\t\t\t\t\"title\": \"\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"width\": '200px',\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet isDirectoryContact = row.get('masterUserId') === 39;\n\t\t\t\t\t\tlet html = '
';\n\t\t\t\t\t\tif (!isDirectoryContact && this.options.canEdit) {\n\t\t\t\t\t\t\tif (!row.get('isPrimary')) {\n\t\t\t\t\t\t\t\thtml += '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (data != null) {\n\t\t\t\t\t\t\t\thtml += '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.model.get('contactId') !== data) {\n\t\t\t\t\t\t\t\thtml += '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thtml += '';\n\t\t\t\t\t\t\tif (PJQ.app.session.hasPermission('contacts.canDelete')) {\n\t\t\t\t\t\t\t\thtml += '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\thtml += '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\thtml += '
';\n\t\t\t\t\t\treturn html;\n\t\t\t\t\t}, this)\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t},\n\tviewEditHistory: function () {\n\t\tthis.model.fetchEditHistory(function (editHistory) {\n\t\t\tnew PJQ.views.addressbook.EditHistoryModal({\n\t\t\t\thistory: editHistory\n\t\t\t});\n\t\t});\n\t},\n\tisActiveClicked: function (e) {\n\t\tif (!this.options.canEdit) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet button = this.$('.btn-company-active'),\n\t\t\tcontactButton = this.$('.btn-contact-active')\n\t\tif (!button[0].checked) {\n\t\t\tnew PJQ.views.modals.YesNo({\n\t\t\t\theader: \"Set company to inactive?\",\n\t\t\t\tbody: \"Marking the company as inactive will also make all contacts in this company inactive. Mark as inactive?\",\n\t\t\t\tonYes: _.bind(function () {\n\t\t\t\t\tthis.company.set('isBlacklisted', !button[0].checked);\n\t\t\t\t\tthis.model.set('isBlacklisted', !button[0].checked);\n\t\t\t\t\tcontactButton[0].checked = false;\n\t\t\t\t}, this),\n\t\t\t\tonNo: _.bind(function () {\n\t\t\t\t\tbutton[0].checked = true;\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\t\telse {\n\t\t\tthis.company.set('isBlacklisted', !button[0].checked);\n\t\t}\n\n\t},\n\tcheckIsPrimary: function () {\n\t\tlet button = this.$('.btn-contact-active'),\n\t\t\tcompanyButton = this.$('.btn-company-active')\n\t\tif (!button[0].checked && _.size(_.filter(this.company.contacts.models, _.bind(function (model) {\n\t\t\treturn !model.get('isBlacklisted') && model.get('contactId') !== this.model.get('contactId');\n\t\t}, this))) >= 1 && this.model.get('isPrimary')) {\n\t\t\tnew PJQ.views.addressbook.SelectNewPrimaryContactModal({\n\t\t\t\tcontacts: this.company.contacts,\n\t\t\t\tcurrentPrimary: this.model,\n\t\t\t\tonSave: _.bind(function (model) {\n\t\t\t\t\tmodel.set('isPrimary', true);\n\t\t\t\t\tmodel.save(null, {\n\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\tthis.model.set('isBlacklisted', true);\n\t\t\t\t\t\t\tthis.model.set('isPrimary', false);\n\t\t\t\t\t\t\tthis.model.save(null, {\n\t\t\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\t\t\tthis.model = model;\n\t\t\t\t\t\t\t\t\tthis.setContextContact(this.model.get('contactId'));\n\t\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t})\n\t\t\t\t}, this),\n\t\t\t\tonCancel: _.bind(function () {\n\t\t\t\t\tbutton[0].checked = true;\n\t\t\t\t}, this)\n\t\t\t})\n\t\t}\n\t\telse if (!button[0].checked && _.size(_.filter(this.company.contacts.models, _.bind(function (model) {\n\t\t\treturn !model.get('isBlacklisted') && model.get('contactId') !== this.model.get('contactId');\n\t\t}, this))) <= 1 && this.model.get('isPrimary')) {\n\t\t\tnew PJQ.views.modals.YesNo({\n\t\t\t\theader: \"Set contact to inactive?\",\n\t\t\t\tbody: \"This contact is the last remaining active contact in this company. Marking the contact as inactive will also set the company as inactive. Would you like to continue?\",\n\t\t\t\tonYes: _.bind(function () {\n\t\t\t\t\tthis.company.set('isBlacklisted', !button[0].checked);\n\t\t\t\t\tthis.model.set('isBlacklisted', !button[0].checked);\n\t\t\t\t\tcompanyButton[0].checked = false;\n\t\t\t\t\tthis.saveCompanyContact();\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this),\n\t\t\t\tonNo: _.bind(function () {\n\t\t\t\t\tbutton[0].checked = true;\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\t},\n\tcontactSwitchedClicked: function (e) {\n\t\twe\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.contactListTable.getRow(target.closest('tr'))\n\t\tthis.contactSwitched(row.data().get('contactId'));\n\t},\n\tshowRowGroups: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.contactListTable.getRow(target.closest('tr')),\n\t\t\tdata = row.data(),\n\t\t\tgroups = [];\n\t\t_.each(data.groups.models, function (group) {\n\t\t\tgroups.push(group.get('groupName'));\n\t\t});\n\t\ttarget[0].outerHTML = ' ' + _.rest(groups, 5).join(', ')\n\t},\n\tsetPrimaryClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.contactListTable.getRow(target.closest('tr')),\n\t\t\tdata = row.data();\n\t\tthis.setPrimary(data);\n\t},\n\tsetPrimary: function (data) {\n\t\t_.each(this.company.contacts.models, function (contact) {\n\t\t\tcontact.set('isPrimary', false);\n\t\t});\n\t\tif (data == null || this.model.get('contactId') === data.get('contactId')) {\n\t\t\tthis.model.set('isPrimary', true);\n\t\t\tthis.model.save(null, {\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.contactListTable.render();\n\t\t\t\t\tthis.renderContact();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.model.set('isPrimary', false);\n\t\t\tdata.set('isPrimary', true);\n\t\t\tdata.save(null, {\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.contactListTable.render();\n\t\t\t\t\tthis.renderContact();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t},\n\taddNewContactClicked: function () {\n\t\tif (this.model.isNew()) {\n\t\t\tnew PJQ.views.modals.YesNo({\n\t\t\t\theader: \"Save Contact?\",\n\t\t\t\tbody: \"You are already editing a new contact. Would you like to save this contact and start a new one?\",\n\t\t\t\tonYes: _.bind(function () {\n\t\t\t\t\tif (this.contactValidation()) {\n\t\t\t\t\t\tthis.saveCompanyContact(null, _.bind(function () {\n\t\t\t\t\t\t\tthis.addNewContact();\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t})\n\t\t}\n\t\telse {\n\t\t\tthis.addNewContact();\n\t\t}\n\t},\n\taddNewContact: function () {\n\t\tlet newContact = new PJQ.models.contacts.Contact({\n\t\t\tcontactName: \"\",\n\t\t\tcontactCompanyId: this.company.id ? this.company.id : 0,\n\t\t\tuserTypeId: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_PREVENT_DEFAULT_USER_TYPE) ? null : (this.company.get('userTypeId') ? this.company.get('userTypeId') : null),\n\t\t\ttitle: \"\",\n\t\t\taddress1: \"\",\n\t\t\taddress2: \"\",\n\t\t\tcity: \"\",\n\t\t\tzip: \"\",\n\t\t\tstate: \"\",\n\t\t\tcountry: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) : 'US',\n\t\t\tphone: \"\",\n\t\t\tcell: \"\",\n\t\t\tfax: \"\",\n\t\t\temail: \"\",\n\t\t\tnotes: \"\"\n\t\t});\n\t\tthis.company.contacts.add(newContact);\n\t\tthis.contactListTable.addRow(newContact);\n\t\tthis.model = newContact;\n\t\tthis.options.contactId = newContact.get('contactId');\n\t\tthis.renderContact();\n\t\tthis.setContextContact(null, newContact);\n\t},\n\tcopyContactClicked: function () {\n\t\tif ((this.model.isNew() || this.model.hasChanged())) {\n\t\t\tif (this.contactValidation()) {\n\t\t\t\tthis.$(\".btn-copy-contact\").prop('disabled', true);\n\t\t\t\tthis.saveCompanyContact(null, _.bind(function () {\n\t\t\t\t\tthis.copyContact();\n\t\t\t\t}, this));\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.$(\".btn-copy-contact\").prop('disabled', true);\n\t\t\tthis.copyContact();\n\t\t}\n\t},\n\tcopyContact: function () {\n\n\t\tthis.model.copyContact(_.bind(function (model) {\n\t\t\tthis.options.contactId = model.contactId;\n\t\t\tthis.model = new PJQ.models.contacts.Contact(model);\n\t\t\tthis.model.set('isNewCopy', true);\n\t\t\tthis.company.contacts.add(this.model);\n\t\t\tthis.contactListTable.addRow(this.model);\n\t\t\tthis.company.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.renderContact(this.options.contactId);\n\t\t\t\t\tthis.setContextContact(this.model.get('contactId'));\n\t\t\t\t\tthis.$(\".btn-copy-contact\").prop('disabled', false);\n\t\t\t\t}, this)\n\t\t\t})\n\t\t}, this))\n\t},\n\tcancel: function () {\n\t\tif ((this.model.isDirty || this.company.isDirty || this.model.get('isNewCopy')) && this.options.canEdit && !this.model.get('isApprovalRequired')) {\n\t\t\tnew PJQ.views.modals.SaveDontSave({\n\t\t\t\theader: \"Unsaved Changes\",\n\t\t\t\tbody: \"Do you want to save changes?\",\n\t\t\t\tonSave: _.bind(function () {\n\t\t\t\t\tthis.save();\n\t\t\t\t}, this),\n\t\t\t\tonDontSave: _.bind(function () {\n\t\t\t\t\tlet callback = _.bind(function() {\n\t\t\t\t\t\tthis.model.restore();\n\t\t\t\t\t\tif (typeof this.options.onCancel === 'function') {\n\t\t\t\t\t\t\tthis.options.onCancel(this.model);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this);\n\n\t\t\t\t\tif (this.model.get('isNewCopy')) {\n\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\t\t\t\t\tvalue: this.model.get('contactId')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t}).delete().done(_.bind(function (data) {\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t/*\n\t\t\t\t\t\tthis.model.destroy({\n\t\t\t\t\t\t\tsuccess: _.bind(function() {\n\t\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t});\n\t\t\t\t\t\t */\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tif (typeof this.options.onCancel === 'function') {\n\t\t\t\tthis.options.onCancel(this.model);\n\t\t\t}\n\t\t\tif (this.options.modal != null) {\n\t\t\t\tthis.options.modal.removeModal();\n\t\t\t}\n\t\t}\n\t},\n\tdelete: function () {\n\n\t\tif (this.model.get(\"masterUserId\") === 39) {\n\t\t\tlet match = _.find(this.model.get(\"contactCustomFieldValues\"), function (cf) {\n\t\t\t\treturn (cf.fieldNumber === 3);\n\t\t\t});\n\n\t\t\tif (match != null && match.value != 8322) {\n\t\t\t\tnew PJQ.views.BaseModal({\n\t\t\t\t\theader: \"Delete Prohibited\",\n\t\t\t\t\tbody: \"Directory Contacts can not be deleted unless their Internal Status is 'New'. Instead, set them to Inactive, and Approve them to remove them from the Approval Queue.\"\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet message = \"Are you sure you want to delete this company?\";\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: message,\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.company.destroy();\n\t\t\t\tif (typeof this.options.onDelete === 'function') {\n\t\t\t\t\tthis.options.onDelete(this.company);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tdeleteContactClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.contactListTable.getRow(target.closest('tr'));\n\t\tthis.deleteContact(row);\n\t},\n\tdeleteContact: function (row) {\n\t\tlet contact = row.data();\n\t\tlet message = \"Are you sure you want to delete this contact?\";\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: message,\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.company.contacts.remove(contact);\n\t\t\t\tcontact.destroy();\n\t\t\t\tthis.contactListTable.removeRow(row);\n\t\t\t\tif (typeof this.options.onDelete === 'function') {\n\t\t\t\t\tthis.options.onDelete(this.model);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tcopyPhone: function (e) {\n\t\tlet inputId = 'h_input_' + _.uniqueId(),\n\t\t\thiddenInput = $('', {\n\t\t\t\tvalue: $(e.currentTarget).data('phone'),\n\t\t\t\tstyle: 'position: absolute;left:-2000px;top:-2000px',\n\t\t\t\tid: inputId\n\t\t\t});\n\t\tthis.$el.append(hiddenInput);\n\t\thiddenInput[0].select();\n\t\tdocument.execCommand(\"copy\");\n\t\thiddenInput.remove();\n\t\tPJQ.notifications.notify.successNotify({\n\t\t\tmessage: 'Number copied to clipboard.'\n\t\t});\n\t},\n\tsave: function () {\n\t\tthis.company.set({\n\t\t\tnotes: this.$('.company-edit-notes').val(),\n\t\t\tcompanyName: this.$('.company-edit-name').val()\n\t\t});\n\t\tif (this.companyValidation() && this.contactValidation()) {\n\t\t\tthis.saveCompanyContact(false, _.bind(function (success) {\n\t\t\t\tif (success) {\n\t\t\t\t\tthis.options.onSave(this.model);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\t},\n\tsaveWithoutApproval: function () {\n\t\tthis.company.set({\n\t\t\tnotes: this.$('.company-edit-notes').val(),\n\t\t\tcompanyName: this.$('.company-edit-name').val()\n\t\t});\n\t\tif (this.companyValidation() && this.contactValidation()) {\n\t\t\tthis.saveCompanyContact(false, _.bind(function (success) {\n\t\t\t\tif (success) {\n\t\t\t\t\tthis.options.onSave(this.model);\n\t\t\t\t}\n\t\t\t}, this), false);\n\t\t}\n\t},\n\tcompanyValidation: function () {\n\t\tlet $company = this.$('.company-edit-name'),\n\t\t\tscrollTopError = $('.validation-error').offset().top,\n\t\t\thasCompanyError = false,\n\t\t\tcompanyNameValue = this.$('.company-edit-name').val();\n\n\t\tPJQ.helpers.inputHelpers.setInputError($company, true);\n\t\tif (_.size(companyNameValue) === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError($company, false);\n\t\t\thasCompanyError = true;\n\t\t}\n\t\tif (this.options.canEditCustomFields) {\n\t\t\tif (this.companyCustomFieldsForm) {\n\t\t\t\tif (!this.companyCustomFieldsForm.validate()) {\n\t\t\t\t\tlet $cac = this.$('#contactEditCompanyCustomFieldsCollapse');\n\t\t\t\t\tif (!$cac.hasClass('show'))\n\t\t\t\t\t\t$cac.siblings('.card-header').click();\n\t\t\t\t\thasCompanyError = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (hasCompanyError) {\n\t\t\tnew PJQ.Alert(this.$('.validation-error'), {\n\t\t\t\ttype: 'danger',\n\t\t\t\ttext: 'Required fields are empty or have an incorrect value'\n\t\t\t});\n\n\t\t\t$('div.modal').animate({\n\t\t\t\tscrollTop: scrollTopError\n\t\t\t}, 500);\n\t\t\treturn false\n\t\t}\n\t\telse {\n\t\t\tthis.$('.validation-error').empty();\n\t\t\treturn true\n\t\t}\n\t},\n\tsaveCompany: function (callback = _.noop) {\n\t\tif (this.company.id === this.model.get('contactId')) {\n\t\t\tcallback(true);\n\t\t\treturn;\n\t\t}\n\n\t\tlet $companyName = this.$('.company-edit-name'),\n\t\t\t$notes = this.$('.company-edit-notes');\n\t\tthis.company.set({\n\t\t\tcompanyName: _.size($companyName) > 0 ? $companyName.val() : this.company.get('companyName'),\n\t\t\tnotes: _.size($notes) > 0 ? $notes.val() : this.company.get('notes')\n\t\t});\n\t\tif (this.company.hasChanged()) {\n\t\t\tthis.company.save({\n\t\t\t\tcompanyName: _.size($companyName) > 0 ? $companyName.val() : this.company.get('companyName'),\n\t\t\t\tnotes: _.size($notes) > 0 ? $notes.val() : this.company.get('notes')\n\t\t\t}, {\n\t\t\t\tsuccess: _.bind(function (model) {\n\t\t\t\t\tcallback(true);\n\t\t\t\t}, this),\n\t\t\t\terror: _.bind(function (model, response) {\n\t\t\t\t\tcallback(true);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t},\n\tcontactValidation: function () {\n\t\tlet hasError = false,\n\t\t\t$scrollTo = null;\n\t\t//only validate core contact information if they can actually edit it\n\t\t//they may only be able to edit the custom fields\n\t\tif (this.options.canEdit) {\n\t\t\tlet validate = this.validateCoreFields();\n\t\t\tif (!validate.valid) {\n\t\t\t\thasError = true;\n\t\t\t\t$scrollTo = validate.$scrollTo;\n\t\t\t}\n\n\t\t\tif (this.model instanceof PJQ.models.users.User && this.model.isNew()) {\n\t\t\t\tlet $username = this.$('.input-username');\n\t\t\t\tPJQ.helpers.inputHelpers.setInputError($username, true);\n\t\t\t\tif (_.size(this.model.get('username')) === 0) {\n\t\t\t\t\tPJQ.helpers.inputHelpers.setInputError($username, false);\n\t\t\t\t\thasError = true;\n\t\t\t\t\tif ($scrollTo == null) {\n\t\t\t\t\t\t$scrollTo = $username;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet $password = this.$('.input-password');\n\t\t\t\tPJQ.helpers.inputHelpers.setInputError($password, true);\n\t\t\t\tif (_.size(this.model.get('password')) === 0) {\n\t\t\t\t\tPJQ.helpers.inputHelpers.setInputError($password, false);\n\t\t\t\t\thasError = true;\n\t\t\t\t\tif ($scrollTo == null) {\n\t\t\t\t\t\t$scrollTo = $password;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.canEditCustomFields) {\n\t\t\tif (this.contactCustomFieldsForm) {\n\t\t\t\tif (!this.contactCustomFieldsForm.validate()) {\n\t\t\t\t\tlet $cac = this.$('#contactEditContactCustomFieldsCollapse');\n\t\t\t\t\tif (!$cac.hasClass('show'))\n\t\t\t\t\t\t$cac.siblings('.card-header').click();\n\t\t\t\t\thasError = true;\n\t\t\t\t\tif ($scrollTo == null) {\n\t\t\t\t\t\t$scrollTo = this.contactCustomFieldsForm.$el;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasError) {\n\t\t\tnew PJQ.Alert(this.$('.validation-error-contact'), {\n\t\t\t\ttype: 'danger',\n\t\t\t\ttext: 'Required fields are empty or have an incorrect value'\n\t\t\t});\n\n\t\t\tif (_.size($scrollTo) > 0) {\n\t\t\t\t$('div.modal').animate({\n\t\t\t\t\tscrollTop: $scrollTo.offset().top\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.$('.validation-error-contact').empty();\n\t\t}\n\t\treturn !hasError;\n\t},\n\tmirrorTrades: function () {\n\t\tnew PJQ.views.modals.YesNo({\n\t\t\theader: \"Mirror Confirmation\",\n\t\t\tbody: \"Are you sure you want to mirror Trades from this contact to all contacts in this company?\",\n\t\t\tonYes: _.bind(function () {\n\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\t\t\tvalue: this.model.get('contactId')\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'mirrortrades'\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t}).post().done(_.bind(function () {\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: 'Trades successfully mirrored'\n\t\t\t\t\t});\n\t\t\t\t\tthis.company.fetch({\n\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\tthis.render();\n\t\t\t\t\t\t\tthis.renderContactsTable()\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t})\n\t\t\t\t}, this)).fail(function (xhr, err, result) {\n\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\tmessage: 'Something went wrong!'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}, this)\n\t\t})\n\t},\n\tsaveCompanyContact: function (isAddToProject, callback = _.noop, isApprove = true) {\n\t\tif (!(this.model instanceof PJQ.models.users.User || this.model.get('contactId') < 0)) {\n\t\t\tif (this.groupSelector != null) {\n\t\t\t\tthis.model.groups.reset(this.groupSelector.getGroupsData().all);\n\t\t\t}\n\t\t}\n\n\t\tlet loader = new PJQ.Loader(this.$('.modal-content')),\n\t\t\tisNew = this.model.isNew();\n\t\tif (this.model.get('isApprovalRequired') && isApprove) {\n\t\t\tthis.model.approve(_.bind(function () {\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: 'Successfully approved contact'\n\t\t\t\t});\n\t\t\t\tloader.remove();\n\t\t\t\tcallback(true);\n\t\t\t}, this))\n\t\t}\n\t\telse {\n\t\t\tthis.model.set('companyCustomFieldValues', this.companyCustomFieldsForm != null ? this.companyCustomFieldsForm.getChanged() : null);\n\t\t\tthis.model.set('contactCustomFieldValues', this.contactCustomFieldsForm != null ? this.contactCustomFieldsForm.getChanged() : null);\n\t\t\tlet isContactNew = this.model.isNew();\n\t\t\tthis.model.save(null, {\n\t\t\t\tnotify: false,\n\t\t\t\tsuccess: _.bind(function (model) {\n\t\t\t\t\tlet fnContinue = _.bind(function() {\n\t\t\t\t\t\tlet ccId = model.get('contactCompanyId');\n\t\t\t\t\t\tthis.company.set({\n\t\t\t\t\t\t\tid: ccId,\n\t\t\t\t\t\t\tcontactId: ccId\n\t\t\t\t\t\t});\n\t\t\t\t\t\t_.each(this.company.models, function (mod) {\n\t\t\t\t\t\t\tmod.set('contactCompanyId', ccId);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.saveCompany(_.bind(function () {\n\t\t\t\t\t\t\tlet message = isAddToProject ? 'Successfully added bid participant' : 'Successfully saved contact';\n\t\t\t\t\t\t\tif (this.options.isSelfEdit) {\n\t\t\t\t\t\t\t\tmessage = 'Successfully saved your info'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (this.model instanceof PJQ.models.users.User) {\n\t\t\t\t\t\t\t\t\tif (isNew) {\n\t\t\t\t\t\t\t\t\t\tPJQ.app.session.users.add(this.model);\n\t\t\t\t\t\t\t\t\t\tmessage = 'Successfully added user';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tmessage = 'Successfully saved user';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\t\t\tmessage: message\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tloader.remove();\n\n\t\t\t\t\t\t\tcallback(true);\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}, this);\n\n\t\t\t\t\tif (typeof this.options.onSaveContact === 'function') {\n\t\t\t\t\t\tif (isContactNew && _.size(this.model.get('groups'))>0) {\n\t\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tendpoint: 'contacts'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tendpoint: 'contactgroupids'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t], [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tparameter: 'contactIds',\n\t\t\t\t\t\t\t\t\t\tvalue: this.model.get('contactId')\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}).get().done(_.bind(function (response) {\n\t\t\t\t\t\t\t\tthis.model.set('contactGroups', response.contactGroupIds);\n\t\t\t\t\t\t\t\tthis.options.onSaveContact(this.model, isContactNew);\n\t\t\t\t\t\t\t\tfnContinue();\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.options.onSaveContact(this.model, isContactNew);\n\t\t\t\t\t\t\tfnContinue();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}, this),\n\t\t\t\terror: _.bind(function (model, response) {\n\t\t\t\t\tif (response.responseJSON && response.responseJSON.message && response.responseJSON.message === 'EmailExists') {\n\t\t\t\t\t\tnew PJQ.views.BaseModal({\n\t\t\t\t\t\t\theader: \"Email Exists\",\n\t\t\t\t\t\t\tbody: \"Another contact in your Address Book has this email address already. Do you still want to save this record?\",\n\t\t\t\t\t\t\tokButtonText: 'Yes',\n\t\t\t\t\t\t\tsecondaryButtonText: 'Go to Contact',\n\t\t\t\t\t\t\tisShowCancelButton: true,\n\t\t\t\t\t\t\tisShowSecondaryButton: true,\n\t\t\t\t\t\t\tonOk: _.bind(function () {\n\t\t\t\t\t\t\t\tloader.remove();\n\t\t\t\t\t\t\t\tthis.model.set('isForceSaveExistingEmail', true);\n\t\t\t\t\t\t\t\tthis.saveCompanyContact(isAddToProject, callback);\n\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\tonSecondary: _.bind(function () {\n\t\t\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tendpoint: 'contacts'\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tendpoint: 'email'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t], [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tparameter: 'email',\n\t\t\t\t\t\t\t\t\t\t\tvalue: this.model.get('email')\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t}).get().done(_.bind(function (data) {\n\t\t\t\t\t\t\t\t\tthis.company = new PJQ.models.contacts.Company(data);\n\t\t\t\t\t\t\t\t\tlet contact = _.find(data.contacts, function (contact) {\n\t\t\t\t\t\t\t\t\t\treturn contact.email === this.model.get('email');\n\t\t\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t\t\t\tthis.options.contactId = contact.contactId;\n\t\t\t\t\t\t\t\t\tthis.render();\n\t\t\t\t\t\t\t\t}, this)).fail(function (xhr, err, result) {\n\t\t\t\t\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\t\t\t\t\tmessage: 'Something went wrong!'\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\t\tmessage: 'Failed to save'\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcallback(false);\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t},\n\tviewPrequalAuditLog: function(e) {\n\t\te.stopPropagation();\n\t\tnew PJQ.views.prequal.PrequalAuditLogModal({\n\t\t\tcontactId: this.model.get('contactId')\n\t\t});\n\t}\n});\n\nPJQ.views.addressbook.EditCompanyModal = PJQ.views.contacts.BaseEditContactModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'Modal-Edit-Company'),\n\t\tcanEdit: true,\n\t\tminWidth: 600,\n\t\tmaxWidth: 1200,\n\t\talert: null,\n\t\tonDelete: _.noop,\n\t\tonCancel: _.noop,\n\t\tonSave: _.noop,\n\t\tonSaveContact: _.noop,\n\t\tisShowCloseButton: true\n\t},\n\tevents: {\n\t\t'click .btn-bid-history': 'viewBidHistory',\n\t\t'click .btn-edit-history': 'viewEditHistory',\n\t\t\"click .contact-edit-cancel\": \"cancel\",\n\t\t\"click .contact-edit-save\": \"save\",\n\t\t\"click .contact-edit-save-without-approval\": \"saveWithoutApproval\",\n\t\t\"click .contact-edit-delete\": \"delete\"\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.company = this.options.company;\n\n\t\tif (this.company == null) {\n\t\t\tthis.company = new PJQ.models.contacts.Company({\n\t\t\t\tid: this.options.contactCompanyId ? this.options.contactCompanyId : this.options.contactId\n\t\t\t});\n\t\t}\n\n\t\tif (!this.company.isNew() && !this.company.isFetched) {\n\t\t\tthis.company.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.render();\n\t\t}\n\t},\n\tgetContactElement: function(){\n\t\treturn this.$('.contact-edit');\n\t},\n\tshouldRenderInnerView: function () {\n\t\treturn this.company != null && (this.company.isNew() || this.company.isFetched);\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tcompany: this.company,\n\t\t\tcanEditCustomFields: this.options.canEditCustomFields,\n\t\t\tcanEdit: this.options.canEdit,\n\t\t\tisAdmin: this.options.isAdmin,\n\t\t\tcanDelete: PJQ.app.session.hasPermission('contacts.canDelete')\n\t\t};\n\t},\n\tgetInnerViewType: function () {\n\t\treturn PJQ.views.addressbook.EditCompanyView;\n\t},\n\tgetInnerViewOptions: function () {\n\t\treturn {\n\t\t\tcompany: this.company,\n\t\t\tmodel: this.options.model,\n\t\t\tcontactId: this.options.contactId,\n\t\t\tcontactCompanyId: this.options.contactCompanyId,\n\t\t\tonCompanySave: this.options.onSave,\n\t\t\tonDelete: this.options.onDelete,\n\t\t\tonSaveContact: this.options.onSaveContact,\n\t\t\tcloseModal: _.bind(function () {\n\t\t\t\tthis.removeModal();\n\t\t\t}, this)\n\t\t};\n\t},\n\tsaveWithoutApproval: function () {\n\t\tthis.editView.saveWithoutApproval();\n\t},\n\tviewEditHistory: function () {\n\t\tthis.editView.viewEditHistory();\n\t},\n\tviewBidHistory: function () {\n\t\tthis.editView.viewBidHistory();\n\t}\n});\n\nPJQ.views.addressbook.ApproveAddressBookContactModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'modal-contact-approval'),\n\t\tminWidth: 600,\n\t\tmaxWidth: \"60%\",\n\t\tisShowCloseButton: true,\n\t\tonSave: _.noop\n\t},\n\tevents: {\n\t\t'click .approval-save': 'approveClicked',\n\t\t'click .input-approve-status': 'approvalStatusChanged',\n\t\t'change .input-approve-all': 'approveAll'\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (!PJQ.app.session.hasPermission('contacts.canApprove')) {\n\t\t\tthis.$('.approval-save').hide();\n\t\t}\n\t\tnew PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.select-merge-company'),\n\t\t\tnoneSelectedText: 'Select Merge Company',\n\t\t\thideDisabled: false,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('contactCompanyId', value);\n\t\t\t}, this)\n\t\t});\n\t\tthis.renderDataTable();\n\t},\n\trenderDataTable: function () {\n\t\tlet hasUnapproved = null != _.find(this.model.approvalUpdates.models, function (update) {\n\t\t\treturn !update.get('isApproved');\n\t\t});\n\t\tthis.dataTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$(\".approval-updates-table\"),\n\t\t\tdata: this.model.approvalUpdates.models,\n\t\t\trowId: \"cid\",\n\t\t\tpaging: false,\n\t\t\tisHideSearch: true,\n\t\t\torder: [0, 'asc'],\n\t\t\tlanguage: {\n\t\t\t\tzeroRecords: 'No Approvals Pending'\n\t\t\t},\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\t\"title\": \"Field\",\n\t\t\t\t\t\"data\": \"attributes.fieldLabel\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": \"Old Value\",\n\t\t\t\t\t\"data\": \"attributes.oldValueDisplay\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": \"New Value\",\n\t\t\t\t\t\"data\": \"attributes.newValueDisplay\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": '
',\n\t\t\t\t\t\"data\": \"attributes.isApproved\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\treturn \"
\\n\" +\n\t\t\t\t\t\t\t\"
\\n\" +\n\t\t\t\t\t\t\t\"
\\n\" +\n\t\t\t\t\t\t\t\" \\n\" +\n\t\t\t\t\t\t\t\"
\\n\" +\n\t\t\t\t\t\t\t// \" ‍ \" is an invisible character. If there is no label the switch's positioning messes up.\n\t\t\t\t\t\t\t\" \\n\" +\n\t\t\t\t\t\t\t\"
\\n\" +\n\t\t\t\t\t\t\t\"
\\n\" +\n\t\t\t\t\t\t\t\"
\\n\" +\n\t\t\t\t\t\t\t\"
\"\n\t\t\t\t\t}, this)\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t},\n\tapprovalStatusChanged: function (e) {\n\t\tlet cid = e.target.dataset.cid,\n\t\t\tvalue = e.target.checked,\n\t\t\tmodel = this.model.approvalUpdates.get(cid);\n\t\tmodel.set('isApproved', value);\n\t\tthis.updateApproveAllInput();\n\t},\n\tapproveClicked: function () {\n\t\tlet loader = new PJQ.Loader(this.$('.modal-content'));\n\t\tthis.approve(_.bind(function (success) {\n\t\t\tif (success) {\n\t\t\t\tloader.remove();\n\t\t\t\tthis.removeModal();\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: 'Successfully approved contact'\n\t\t\t\t});\n\t\t\t\tthis.options.onSave(this.model);\n\t\t\t}\n\t\t}, this));\n\t},\n\tapprove: function (callback = _.noop) {\n\t\tthis.model.approve(_.bind(function () {\n\t\t\tif (this.options.onApprove) {\n\t\t\t\tthis.options.onApprove(this.model);\n\t\t\t}\n\t\t\tcallback(true);\n\t\t}, this));\n\t},\n\tapproveAll: function (e) {\n\t\tlet isApproved = $(e.currentTarget).prop('checked');\n\t\t_.each(this.model.approvalUpdates.models, function (update) {\n\t\t\tupdate.set('isApproved', isApproved);\n\t\t});\n\t\tthis.renderDataTable();\n\t},\n\tupdateApproveAllInput: function () {\n\t\tlet hasUnapproved = null != _.find(this.model.approvalUpdates.models, function (update) {\n\t\t\treturn !update.get('isApproved');\n\t\t});\n\t\tthis.$('.input-approve-all').prop('checked', !hasUnapproved);\n\t},\n});\n\nPJQ.views.addressbook.EditHistoryModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'edit-history-modal'),\n\t\tsubTemplates: {\n\t\t\thistory: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'edit-history'),\n\t\t},\n\t\twidth: '50%',\n\t\tmaxWidth: 700,\n\t\tonSave: _.noop\n\t},\n\tevents: {},\n\tafterRender: function () {\n\t\tthis.renderHistory()\n\t},\n\trenderHistory: function () {\n\t\tthis.renderSubTemplate(false, this.options.subTemplates.history, this.$('.history-outer'), {\n\t\t\thistory: this.options.history.models\n\t\t});\n\t}\n});\n\nPJQ.views.addressbook.SelectNewPrimaryContactModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'select-primary-contact-modal'),\n\t\tsubTemplates: {\n\t\t\tcontacts: new PJQ.templating.Template(PJQ.constants.modules.ADDRESSBOOK, 'primary-contact'),\n\t\t},\n\t\twidth: '50%',\n\t\tmaxWidth: 500,\n\t\tonSave: _.noop\n\t},\n\tevents: {\n\t\t\"click .primary-contact-card\": \"contactClicked\",\n\t\t\"click .btn-save\": \"savePrimary\",\n\t\t\"click .btn-cancel\": \"cancel\"\n\t},\n\tafterRender: function () {\n\t\tthis.renderContacts();\n\t},\n\trenderContacts: function () {\n\t\tthis.renderSubTemplate(false, this.options.subTemplates.contacts, this.$('.contacts-outer'), {\n\t\t\tcontacts: this.options.contacts.models,\n\t\t\tcurrentPrimary: this.options.currentPrimary\n\t\t});\n\t},\n\tcontactClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\tcid = target.data('cid');\n\t\tthis.newPrimary = this.options.contacts.get(cid);\n\t\t$('.primary-contact-card').removeClass('selected');\n\t\ttarget.addClass('selected');\n\n\t\tif (this.newPrimary) {\n\t\t\tthis.$('.btn-save').attr('disabled', false);\n\t\t}\n\t},\n\tcancel: function () {\n\t\tif (this.options.onCancel) {\n\t\t\tthis.options.onCancel();\n\t\t}\n\t\tthis.removeModal();\n\t},\n\tsavePrimary: function () {\n\t\tif (this.options.onSave) {\n\t\t\tthis.options.onSave(this.newPrimary);\n\t\t\tthis.removeModal();\n\t\t}\n\t}\n});\n"]}