{"version":3,"sources":["1initializers.js","prequal/prequaleditorviews.js","prequal/prequalmodels.js","prequal/prequalviewerviews.js","profile/profilemodels.js","profile/profileviews.js","screening/screeningmodels.js","screening/screeningviews.js"],"names":["PJQ","app","attachReadyEvent","module","constants","modules","PROFILE_OLD","addOldRoutes","route","name","callback","session","isLoggedIn","router","navigate","trigger","replace","APP","views","auth","AuthModal","contactId","contact","id","defaultSignUpUsername","get","profile","routes","key","initNavigator","activeItem","view","renderProfile","viewOptions","shouldDoFirstRoute","tab","accessKey","initScreenings","oldRoutes","terms","collections","screenings","ScreeningTerms","fetch","success","_","find","models","term","ScreeningTermsModal","collection","onComplete","renderScreeningDashboard","helpers","prequalHelpers","addAll","result","each","arguments","arg","flArg","parseFloat","isNaN","toString","multiplyAll","size","addRoutes","prequal","PrequalEditor","BaseView","extend","defaults","template","templating","Template","PROFILE","subTemplates","fieldCategory","field","fieldInput","otherOffice","projectReference","faq","nav","requestedBy","comments","tokens","currentYear","dateHelpers","getCurrentYear","baseFaqItems","q","a","proqualFaqItems","commentsExpanded","canEdit","isAdmin","onContactChange","onCompanyCustomFieldChange","onContactCustomFieldChange","events","keydown .input-zip","keydown .input-dollars-full,.input-numeric,.input-percent","change .input-percent","click .add-other-office","click .delete-other-office","click .add-owner-contact","click .delete-owner-contact","click .add-operations-contact","click .delete-operations-contact","click .add-estimating-contact","click .delete-estimating-contact","click .add-safety-contact","click .delete-safety-contact","click .add-project-reference","click .delete-project-reference","click .network-upgrade","click .edit-profile","click .view-prequal-faq","shown.bs.tab .prequal-nav-item","click .download-prequal-field-file","click .prequal-tab-next","click .prequal-tab-previous","click .btn-continue","beforeFirstRender","this","model","attributes","contactCustomFieldValues","companyCustomFieldValues","clients","options","listenTo","render","$pru","$","off","on","bind","requestUpdate","beforeRender","ajax","Request","endpoint","urlHelpers","generateEndpoint","value","post","done","data","notifications","notify","successNotify","message","html","prop","set","lastRequestedBy","user","toJSON","lastRequestedOn","Date","silent","renderRequestedBy","errorNotify","fail","xhr","err","logging","Debug","LoggingActions","SEND_PREQUAL_UPDATE","error","renderData","renderTokens","afterRender","renderNav","preferences","hasPref","preferenceTypes","ENABLE_PREQUAL_COMMENTS","hasPermission","renderComments","renderForm","$nav","animateCSS","Loader","type","$comments","navContainer","parent","removeClass","addComment","addClass","renderSubTemplate","expand","canDelete","$comm","expandComments","deleteComment","CommentsModal","onAddComment","commentText","newComment","Comment","contactCompanyId","masterUserId","save","add","remove","e","cid","currentTarget","closest","comment","modals","DeleteCancel","header","body","onDelete","destroy","class","addElements","prepend","unlockPrequal","lockPrequal","navClicked","empty","contactsGridsAutcompletes","headerPref","getPref","PREQUAL_HEADER","Alert","text","isPrepend","alertType","helpAlertText","alertCookie","cookies","CLOSE_PREQUAL_HELP_ALERT","hasItems","sigAlertPref","PREQUAL_SIGNATURE_ALERT","cookie","dp","inputs","Datepicker","el","isShowTimezone","datePickerOptions","format","dateFormats","datePicker","DATE","widgetPositioning","vertical","horizontal","defaultDate","onChange","expiresOn","patch","renderExpiration","hide","renderSigned","formulaFields","tabChanged","fillDefaults","sortBy","filter","tabs","tabFields","fields","isHidden","allowedUserTypeIds","indexOf","sortOrder","index","tabEl","getTabElement","prequalTabId","note","fnParsed","parseFormula","args","cfId","parseInt","uniq","union","prequalFieldId","fieldDestination","category","length","categoryId","categories","push","getCategoryElement","overrideCanEdit","adminUserTypeIds","coreFieldName","toLowerCase","PREQUAL_PROJECT_REFERENCE_COUNT","refCount","description","formatHelpers","numberToWords","PREQUAL_TAX_ID_MASK","inputmask","placeholder","renderOtherOffices","renderOwnerContacts","renderOperationsContacts","renderEstimatingContacts","renderSafetyContacts","renderProjectReferences","renderGroups","renderRegions","attachFormEvents","updateCalcFields","updateFormulaFields","validateForm","IS_DODGE_CRM","IS_DODGE_WG","updateLastSavedDate","percentComplete","$expiresOn","expiresOnDate","getDateString","css","color","checkDateIsBeforeToday","colors","RED","GREEN","signedOn","$signedOn","DATE_TIME","continue","requireSignature","hasScreenings","PREQUAL_TERMS","onSubmit","signature","sign","viewScreenings","signatures","SignatureTermsModal","fitHeight","SignatureSubmitModal","fnView","dashboard","renderClientScreenings","window","location","href","substring","pjqScreeningAccessKey","dirtyAttributes","prequalCoreId","updateViewScreeningButton","screeningButton","allowSignatureAlways","PREQUAL_ALLOW_SIGNATURE_ALWAYS","self","selectPickers","input","fieldId","attribute","isContactInput","isABCustomField","selectPicker","Selectpicker","isIntChoices","hasClass","exclusiveChoices","map","where","choices","isExclusive","choice","prequalFieldChoiceId","renderContactStateCountyPickers","prequalChanged","contactStatePicker","fieldEl","isDateTime","datepickerOptions","undefined","toUpperCase","$input","fnInput","attachments","params","screeningItemId","relatedScreeningItemId","parameter","DISABLE_PREQUAL_CONTACT_ATTACHMENT_LINK","files","FileUploaderGrid","canUpload","DISABLE_PREQUAL_ATTACHMENT_DELETE","onSuccess","file","fileData","getFieldTab","findWhere","isValid","fieldValue","guids","guid","attachment","delAttachments","split","Files","Binder","$el","watchElements","changeEl","numericMinValue","numericMaxValue","inputHelpers","attachNumericInputMinMax","inputMaskCurrency","inputMaskPhone","country","states","us","ca","updateChoices","state","abbreviation","setValue","getNewDateAddMonths","date","months","dt","moment","checkFieldValueChanged","fieldType","currentValue","newValue","hasChanged","fId","isUpdate","getFieldElement","fieldNumber","patchValues","fnParse","fn","eval","evl","argId","fieldTab","argField","flVal","evalVal","val","valArgs","displayValue","apply","_typeof","display","sp","inputVal","dateFormat","customFields","exValue","cfValues","customFieldNumber","customFieldValues","calcIds","calcId","lowerCaseFirstLetter","queueSave","isUnion","isNonUnion","laborStatus","addPatchValue","renderContactsGridsAutocompletes","queueValidation","formula","g0","g1","objectHelpers","checkNested","portal","customization","formulas","noop","clearTimeout","validateTimeout","validateQueue","setTimeout","queueItem","isPatch","inputTab","inputField","completionData","validationData","progress","filterTab","filterField","tabObj","isCalculate","validationTab","isRequired","checkConstraintsMet","validateField","omit","omitField","renderFieldConstraints","fieldCount","externalFieldCount","saveProgress","Math","floor","viewTotal","saveTotal","calcTabCount","initCalculationDone","notificationText","createNotifyModal","notification","NOTIFY_PREQUAL_VIEW_REQUESTED","cData","calc","hideEmptyCategories","hideEmptyTabs","renderCompletion","trim","otherOffices","office","row","isCityValid","isStateValid","isZipValid","setInputError","contacts","ownerContacts","operationsContacts","estimatingContacts","safetyContacts","isContactNameValid","isEmailValid","isPhoneValid","isTitleValid","projectReferenceRequirementCount","projectReferences","reference","checkIsRecent","isGCValid","isGCContactValid","isGCPhoneValid","isProjectNameValid","isDateCompletedValid","isContractValueValid","groups","workAreas","updateFieldValidationState","constraints","controlledByCustomFieldId","control","controlField","customFieldId","fieldContainer","categoryEl","$category","$tab","$menuItem","navItem","getTabNavElement","makeCompletionBadge","colorClass","getCompletionColorClass","totalProgressBar","ProgressBar","isShowPercentage","height","updateProgress","modifiedOn","TemplateRenderer","parseMarkup","percent","includeCompleteText","tabId","textClass","maxGroups","RESTRICT_GROUP_COUNT","maxGroupsPref","GroupSelector","isSync","groupUserId","ENABLE_PREQUAL_PRIVATE_GROUPS","publicUserId","groupLevels","GROUP_LEVELS","isDisableParents","selectedGroupIds","getGroupIds","isEnableSelectAll","groupLabel","GROUP_LABEL","onGroupSelected","all","newGroup","existingGroup","isGroupDeleted","$regions","regionsMap","WorkAreaMap","isEdit","obj","renderOtherOffice","item","isViewer","content","afterChange","noneSelectedText","defaultValue","addOtherOffice","newOffice","OtherOffice","city","stateProvince","postalCode","deleteOtherOffice","renderContactsGrid","renderContactsGridItem","acContacts","getAllPrequalContacts","renderContactsGridAutocomplete","allContacts","prequalContact","contactNames","findDistinct","ac","acElement","reloadSource","acInput","AutocompleteInput","dataDisplayProperty","delay","onSelect","match","contactName","contactTitle","email","phone","addOwnerContact","newContact","OwnerContact","deleteOwnerContact","addOperationsContact","OperationsContact","deleteOperationsContact","addEstimatingContact","EstimatingContact","deleteEstimatingContact","addSafetyContact","SafetyContact","deleteSafetyContact","renderProjectReference","addProjectReference","newReference","ProjectReference","generalContractor","generalContractorContactName","generalContractorContactPhone","projectName","dateCompleted","contractValue","deleteProjectReference","allowZip","numbersOnly","formatPercent","networkUpgrade","redirectURL","IS_PROQUAL_PORTAL","directorySettings","IsNetworkContact","NetworkVerificationLevel","open","editProfile","viewFaq","faqItems","BaseModal","isShowOkButton","isShowCancelButton","cancelButtonText","parseTemplate","okButtonText","target","attr","refresh","updateLocked","previousTab","changeTab","nextTab","currentTabId","tabIndex","incompleteTab","jump","currentTab","newTab","scrollTo","checkTab","downloadFieldFile","downloadFile","isEndpoint","preventInitCalc","linkedIds","sFieldId","changedField","calcField","updateCalcField","equation","calcFieldsVars","calcFieldVarString","calcFieldVarId","RegExp","calcFieldVar","calcFieldVarValue","isNumber","solution","math","Form","BaseModel","idAttribute","parse","Preferences","Prequal","fnSuccess","prototype","call","cbArgs","fetchPrequalForm","form","parseForm","_toConsumableArray","i","customField","tempVal","tryParse","choiceIds","choiceVal","Contact","Comments","reset","EstimatingContacts","mod","OperationsContacts","OwnerContacts","SafetyContacts","OtherOffices","ProjectReferences","put","res","isLocked","updateCompletion","calculateCompletion","_this","completionTab","fullTotal","completion","totalComplete","getCompletionData","isConstraintsMet","constraint","controllerField","constraintInfo","refinedType","choiceId","theme","defaultTheme","photos","ProjectReferencePhotos","createdOn","getDateMillisecondsDiff","time","millis","ONE_YEAR","ProjectReferencePhoto","createdBy","projectContacts","ProjectContact","AuditLog","getValue","formatCurrency","BaseCollection","PrequalAuditLog","PrequalViewer","ignoreFieldTypes","click .prequal-export-pdf","click .prequal-export-excel","click .prequal-request-update","fieldDest","exportPDF","export","exportExcel","isExcel","PrequalViewerModal","maxWidth","width","PrequalAuditLogModal","minWidth","beforeModalCreated","isFetched","loader","renderAuditLog","dataTables","DataTable","pageLength","isHideSearch","columns","title","orderable","companyName","tabName","fieldName","oldValue","CompanyProfile","isFileAPI","headerBackgroundColor","navMenuTextColor","sectionHeaderTextColor","sectionBodyTextColor","Groups","companyPhotos","CompanyPhotos","beforeSave","restoreDefaultTheme","click .profile-edit","click .profile-view-qualification","click .profile-add-logo","click .profile-nav-item","click .profile-project-reference-photo","click .profile-project-reference-photo-delete","click .profile-company-photo","click .profile-company-photo-delete","click .profile-cancel-edit","click .profile-theme-restore-defaults","click .profile-save","profileKey","mapId","uniqueId","activateTabId","activateTab","renderLogo","renderTheme","renderOfficeLocationMap","renderWorkAreaMap","renderThemeEditor","renderGroupSelector","renderToolbar","renderProjectReferencePhotoUploaders","renderCompanyPhotoUploader","projectReferenceId","projectReferencePhotoId","photo","viewReferencePhoto","tabActivated","workAreaMap","refreshWindow","base64","$logo","buildAPIURL","dispatchEvent","Event","ColorPicker","toolbar","autoShowToolbar","groupSelector","renderChangedCount","isPublicGroups","officeLocationMap","maps","GoogleMap","addMarker","latitude","longitude","zip","infoWindowContent","isMapOnly","isInline","onFetch","fetchModel","toolbars","ProfileSaveToolbar","onSave","onClose","idealTextColor","colorHelpers","idealLinkColorForBackground","cancelEditButton","uploader","FileUploader","allowedExtensions","imageExtensions","uuid","viewReferencePhotoClick","referenceCid","renderPhotoViewer","image","deleteReferencePhoto","deleteButton","photoContainer","siblings","deletedReferencePhotos","viewCompanyPhotoClick","viewCompanyPhoto","deleteCompanyPhoto","deletedCompanyPhotos","addLogo","fileUploaderModal","FileUploaderModal","maxFiles","onDone","dataUrl","removeModal","cancelEdit","edit","hideError","getGroupsData","selected","showError","ScreeningClient","products","payment","Products","ScreeningCategories","items","screeningInviteItemId","questions","question","sampleDocuments","SampleDocuments","getItemStatusStats","statuses","screeningStatusId","textColor","count","getAttentionItems","attentionItems","checkNeedsTerms","ScreeningCategory","ScreeningItems","grades","Grades","needsAttention","Grade","ScreeningItem","ScreeningInviteItem","submitProcessing","setStatus","IN_PROCESS","moveWaiting","WAITING","statusId","updateExpiresOn","ScreeningComments","ScreeningItemAttachments","ScreeningClientQuestions","ScreeningComment","ScreeningItemAttachment","File","ScreeningQuestion","ScreeningClientQuestion","SampleDocument","download","ScreeningTerm","ScreeningClients","client","getItems","ScreeningQuestions","queueDownload","ScreeningDashboard","click .screening-back-to-dashboard","click .screening-dashboard-view-client","click .prequal-export-pdf-user","click .prequal-export-excel-user","renderClients","logoURL","publicClient","renderClientPrequal","publicLogoURL","response","url","renderNavClient","src","dashboardClients","ScreeningDashboardClients","contextClient","checkPayment","checkTerms","headerAlert","prequalEditor","screeningEditor","ScreeningClientEditor","PaymentModal","renderClientPrequalUI","renderCriteriaButton","animation","in","out","PJQPROFILE_GET_SCREENINGS","backToDashboard","click .btn-screening-view-prequal","click .btn-screening-view-client","click .screening-view-client-attention","$clientElement","getClientElement","statusStats","statusLabels","statusCounts","statusColors","progressBar","attentionItemsCount","$attentionContainer","$element","status","charts","Chart","labels","datasets","backgroundColor","onClick","clickedSegments","clickedStatuses","segment","_model","label","viewClientPrequal","viewClientScreenings","viewClientScreeningsAttention","canManage","click .btn-view-packages","keyup .screening-items-search","click .screening-items-clear-filters","filterItemStatuses","filterPicker","filterItems","isMultiple","isGrouped","renderCategories","viewPackages","ScreeningInvitePackagesModal","packages","downloadAllSampleDocuments","downloadSampleDocument","$categoriesContainer","categoryViews","data-cid","append","categoryView","itemCids","getFilteredItems","$item","contains","showNav","first","renderHeader","searchFilter","getSearchFilter","filters","getStatusFilter","general","categoryItemIds","clearFilters","deselectAll","$itemsContainer","itemChanged","collapse","BaseCollapse","renderItemTabStatusBadge","role","grade","gradeSelector","newGrade","updateGrade","changedItem","badgeContainer","badge","style","questionInput","footer","change .screening-item-cant-provide","click .screening-item-in-process","click .screening-item-expired","click .screening-item-incomplete","click .screening-item-complete","click .screening-item-done","keyup .screening-item-comment-input","click .screening-item-comment-add","renderFooter","renderFileUploader","renderQuestions","$questionContainer","questionValueChanged","expires","isExpired","DateEditorInput","fileUploader","isRemoveOnComplete","showCreatedByLink","autoProcessQueue","onDrop","onOk","dropzone","processQueue","cantProvideChanged","reasonModal","ProvideReasonModal","onConfirm","reason","onCancel","reverse","Pagination","dataSource","pageSize","pageItemTemplate","commentChanged","isVisibleContact","resetCommentInput","validate","fileUploadValidationError","isFieldValid","updateItemInProcess","updateItemExpired","EXPIRED","updateItemIncomplete","INCOMPLETE","updateItemComplete","COMPLETE","submitItem","keyup .provide-reason-input","click .provide-reason-cancel","click .provide-reason-confirm","reasonChanged","cancel","confirm","click .terms-accept","renderNextTerm","currentTerm","getNextTerm","accept","isAccepted","dataTable","rowId","order","language","zeroRecords","width:"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.app.attachReadyEvent(function () {\n\tif (PJQ.app.module === PJQ.constants.modules.PROFILE_OLD) {\n\t\tPJQ.app.addOldRoutes([\n\t\t\t{\n\t\t\t\troute: '',\n\t\t\t\tname: 'default',\n\t\t\t\tcallback: function () {\n\t\t\t\t\tif (PJQ.app.session.isLoggedIn()) {\n\t\t\t\t\t\tPJQ.app.router.navigate('profile', {\n\t\t\t\t\t\t\ttrigger: true,\n\t\t\t\t\t\t\treplace: true\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\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\t\t\t\tPJQ.app.router.navigate('signin', {\n\t\t\t\t\t\t\t\ttrigger: true,\n\t\t\t\t\t\t\t\treplace: true\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\tnew PJQ.views.auth.AuthModal({\n\t\t\t\t\t\t\t\tcontactId: PJQ.app.session.contact.id,\n\t\t\t\t\t\t\t\tdefaultSignUpUsername: PJQ.app.session.contact.get('email')\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}\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.modules.profile = {\n\troutes: [\n\t\t{\n\t\t\troute: 'profile',\n\t\t\tname: 'myProfile',\n\t\t\tcallback: function (key) {\n\t\t\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\t\tPJQ.app.initNavigator({\n\t\t\t\t\t\tactiveItem: \"profile\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tPJQ.app.view.renderProfile();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'profiles/:key',\n\t\t\tname: 'profiles',\n\t\t\tcallback: function (key) {\n\t\t\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\t\tPJQ.app.initNavigator({\n\t\t\t\t\t\tactiveItem: \"profile\",\n\t\t\t\t\t\tviewOptions: {\n\t\t\t\t\t\t\tkey: key,\n\t\t\t\t\t\t\tshouldDoFirstRoute: false\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tPJQ.app.view.renderProfile(key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'profiles/:key/:tab',\n\t\t\tname: 'profiles',\n\t\t\tcallback: function (key, tab) {\n\t\t\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\t\tPJQ.app.initNavigator({\n\t\t\t\t\t\tactiveItem: \"profile\",\n\t\t\t\t\t\tviewOptions: {\n\t\t\t\t\t\t\tkey: key,\n\t\t\t\t\t\t\ttab: tab,\n\t\t\t\t\t\t\tshouldDoFirstRoute: false\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tPJQ.app.view.renderProfile(key, tab);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'prequal',\n\t\t\tname: 'myPrequal',\n\t\t\tcallback: function (accessKey) {\n\t\t\t\tif (PJQ.app.session.isLoggedIn()) {\n\t\t\t\t\tPJQ.app.initNavigator({\n\t\t\t\t\t\tactiveItem: \"prequal\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tnew PJQ.views.auth.AuthModal({\n\t\t\t\t\t\tcontactId: PJQ.app.session.contact.id,\n\t\t\t\t\t\tdefaultSignUpUsername: PJQ.app.session.contact.get('email')\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'screenings/:accessKey',\n\t\t\tname: 'screenings',\n\t\t\tcallback: function (accessKey) {\n\t\t\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\t\tPJQ.app.initNavigator({\n\t\t\t\t\t\tactiveItem: \"screenings\",\n\t\t\t\t\t\tviewOptions: {\n\t\t\t\t\t\t\tkey: key,\n\t\t\t\t\t\t\ttab: tab,\n\t\t\t\t\t\t\tshouldDoFirstRoute: false\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tPJQ.modules.profile.initScreenings();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'screenings',\n\t\t\tname: 'screenings',\n\t\t\tcallback: function () {\n\t\t\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\t\tPJQ.app.initNavigator({\n\t\t\t\t\t\tactiveItem: \"screenings\",\n\t\t\t\t\t\tviewOptions: {\n\t\t\t\t\t\t\tshouldDoFirstRoute: false\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tPJQ.modules.profile.initScreenings();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t],\n\toldRoutes: [\n\t\t{\n\t\t\troute: \"?cid\",\n\t\t\tcallback: function () {\n\t\t\t\tif (PJQ.app.session.isLoggedIn()) {\n\t\t\t\t\tPJQ.app.router.navigate('profile', {\n\t\t\t\t\t\ttrigger: true,\n\t\t\t\t\t\treplace: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnew PJQ.views.auth.AuthModal({\n\t\t\t\t\t\tcontactId: PJQ.app.session.contact.id,\n\t\t\t\t\t\tdefaultSignUpUsername: PJQ.app.session.contact.get('email')\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: \"?dir ?pid ?sid\",\n\t\t\tcallback: function () {\n\t\t\t\tif (PJQ.app.session.isLoggedIn()) {\n\t\t\t\t\tPJQ.app.router.navigate('screenings', {\n\t\t\t\t\t\ttrigger: true,\n\t\t\t\t\t\treplace: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnew PJQ.views.auth.AuthModal({\n\t\t\t\t\t\tcontactId: PJQ.app.session.contact.id,\n\t\t\t\t\t\tdefaultSignUpUsername: PJQ.app.session.contact.get('email')\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t],\n\tinitScreenings: function () {\n\t\tif (PJQ.app.session.isLoggedIn()) {\n\t\t\tlet terms = new PJQ.collections.screenings.ScreeningTerms();\n\t\t\tterms.fetch({\n\t\t\t\tsuccess: function () {\n\t\t\t\t\tif (_.find(terms.models, function (term) {\n\t\t\t\t\t\treturn term.get('isActive') && !term.get('isAccepted')\n\t\t\t\t\t}) != null) {\n\t\t\t\t\t\tnew PJQ.views.screenings.ScreeningTermsModal({\n\t\t\t\t\t\t\tcollection: terms,\n\t\t\t\t\t\t\tonComplete: function () {\n\t\t\t\t\t\t\t\tPJQ.modules.profile.renderScreeningDashboard();\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\telse {\n\t\t\t\t\t\tPJQ.modules.profile.renderScreeningDashboard();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t//if they dont have a userid > 0, show the login/registration form\n\t\t\tnew PJQ.views.auth.AuthModal({\n\t\t\t\tcontactId: PJQ.app.session.contact.id,\n\t\t\t\tdefaultSignUpUsername: PJQ.app.session.contact.get('email')\n\t\t\t});\n\t\t}\n\t},\n\trenderScreeningDashboard: function () {\n\t\tPJQ.app.view.renderScreeningDashboard();\n\t}\n};\n\nPJQ.helpers.prequalHelpers = {\n\taddAll: function () {\n\t\tlet result = 0;\n\t\t_.each(arguments, function (arg) {\n\t\t\tlet flArg = parseFloat(arg);\n\t\t\tresult += isNaN(flArg) ? 0 : flArg;\n\t\t});\n\t\treturn result.toString();\n\t},\n\tmultiplyAll: function () {\n\t\tif (_.size(arguments) <= 1) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet result = null;\n\t\t_.each(arguments, function (arg) {\n\t\t\tlet flArg = parseFloat(arg);\n\t\t\tif (isNaN(flArg)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = result != null ? (flArg * result) : flArg\n\t\t});\n\t\treturn result.toString();\n\t}\n};\n\nPJQ.app.addRoutes(PJQ.modules.profile.routes);\n\n//We need to support old routes for all the old links floating around\nPJQ.app.addOldRoutes(PJQ.modules.profile.oldRoutes);","//Views\nPJQ.views.prequal = {};\n\nPJQ.views.prequal.PrequalEditor = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Editor'),\n subTemplates: {\n tab: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Tab'),\n fieldCategory: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Field-Category'),\n field: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Field'),\n fieldInput: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Field-Input'),\n otherOffice: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Other-Office'),\n contact: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Contact'),\n projectReference: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Project-Reference'),\n faq: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-FAQ'),\n nav: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Nav'),\n requestedBy: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'requested-by'),\n comments: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'prequal-comments')\n },\n tokens: {\n currentYear: PJQ.helpers.dateHelpers.getCurrentYear()\n },\n baseFaqItems: [\n {\n q: \"Why am I being asked to complete this form?\",\n a: \"The requesting General Contractor, in an effort to improve their bidding process and ensure data consistency among their subcontractors have asked all subcontractors to keep on file updated company qualification data.\"\n },\n {\n q: \"How often do I need to update this information?\",\n a: \"You have the ability to update your information at any time. Only certain performance data will be required to updated annually as a majority of your company information may not change.\"\n },\n {\n q: \"I've worked with the requesting General Contractor many times in the past, why am I being asked to complete this now?\",\n a: \"The requesting General Contractor is updating their database so that all subcontractors have current and consistent company and performance information on file regardless of previous contract awards.\"\n },\n {\n q: \"What if I don’t know the answers to all the questions being asked?\",\n a: \"If you do not have the information on hand, you may return to the form once you are ready. All of your previously entered information will remain intact.\"\n },\n {\n q: \"I've completed every field but the form is not at 100%.\",\n a: \"Fields that are incomplete will be highlighted in red. Common fields that are overlooked as complete are phone number fields which require all 10 digits to be considered complete. You can view the left hand menu to determine which section is incomplete.\"\n },\n {\n q: \"One of our divisions/offices already filled in this information and it's all the same. Do I need to do it again?\",\n a: \"If you have received the request multiple times to your same email address, please contact the General Contractor as this means you have been entered twice in the address book of the General Contractor. If the requests have gone to different contacts within your company and each contact is responsible for submitting bids for their respective office/division, then yes each contact will need to fill out the form.\"\n }\n ],\n proqualFaqItems: [\n {\n q: \"I've already completed this form for another GC, can I transfer that info to this form?\",\n a: \"The information you fill out for the requesting General Contractor is for their eyes only. However if you would like to share your current information and not have to fill out the full form for another party, please click here to find out how.\"\n },\n {\n q: \"I have never received a bid or job from this GC, why should I complete this form?\",\n a: \"In an effort to make better subcontracting decisions and provide subcontractors with the right opportunities, the data on this form will help us get you the requests that match your specialties with our upcoming work. Filling out this form will increase the likelihood that you will be considered for a project in the future.\"\n },\n {\n q: \"I only want to complete this form if I'm awarded a job.\",\n a: \"The requesting General Contractor is utilizing the this data in addition to information provided with bids. By taking the 15 minutes to complete this now will them know who is serious about bidding.\"\n }\n ],\n commentsExpanded: false,\n canEdit: true,\n isAdmin: false,\n onContactChange: null,\n onCompanyCustomFieldChange: null,\n onContactCustomFieldChange: null\n },\n events: {\n 'keydown .input-zip': 'allowZip',\n 'keydown .input-dollars-full,.input-numeric,.input-percent': 'numbersOnly',\n 'change .input-percent': 'formatPercent',\n 'click .add-other-office': 'addOtherOffice',\n 'click .delete-other-office': 'deleteOtherOffice',\n 'click .add-owner-contact': 'addOwnerContact',\n 'click .delete-owner-contact': 'deleteOwnerContact',\n 'click .add-operations-contact': 'addOperationsContact',\n 'click .delete-operations-contact': 'deleteOperationsContact',\n 'click .add-estimating-contact': 'addEstimatingContact',\n 'click .delete-estimating-contact': 'deleteEstimatingContact',\n 'click .add-safety-contact': 'addSafetyContact',\n 'click .delete-safety-contact': 'deleteSafetyContact',\n 'click .add-project-reference': 'addProjectReference',\n 'click .delete-project-reference': 'deleteProjectReference',\n 'click .network-upgrade': 'networkUpgrade',\n 'click .edit-profile': 'editProfile',\n 'click .view-prequal-faq': 'viewFaq',\n 'shown.bs.tab .prequal-nav-item': 'navClicked',\n 'click .download-prequal-field-file': 'downloadFieldFile',\n 'click .prequal-tab-next': 'nextTab',\n 'click .prequal-tab-previous': 'previousTab',\n //todo: remove this once prequal is moved to dialog on screenings page\n 'click .btn-continue': \"continue\"\n },\n beforeFirstRender: function () {\n if (this.model.contact != null) {\n this.model.contact.attributes.contactCustomFieldValues = null;\n this.model.contact.attributes.companyCustomFieldValues = null;\n }\n\n this.clients = this.options.clients;\n\n this.listenTo(this.model, \"fetch\", this.render);\n\n let $pru = $('.prequal-request-update');\n $pru.off();\n $pru.on('click', _.bind(this.requestUpdate, this));\n },\n beforeRender: function () {\n this.options.canEdit = this.options.canEdit && (this.options.isAdmin || !this.model.get('isLocked'));\n },\n requestUpdate: function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.model.contact.id\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: 'Prequalification update sent'\n });\n $('.prequal-request-update').html('Update Sent').prop('disabled', true);\n this.model.set({\n lastRequestedBy: PJQ.app.session.user.toJSON(),\n lastRequestedOn: new Date()\n }, {silent: true});\n this.renderRequestedBy();\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 renderData: function () {\n return {\n model: this.model,\n renderTokens: _.bind(this.renderTokens, this),\n isAdmin: this.options.isAdmin\n };\n },\n afterRender: function () {\n if (this.model.id > 0) {\n this.renderNav(_.bind(function () {\n if (this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PREQUAL_COMMENTS) && PJQ.app.session.hasPermission('prequal.canViewComments')) {\n this.renderComments();\n }\n this.renderForm();\n this.$nav.animateCSS('slideDown');\n this.$('.prequal-form-container').animateCSS('fadeIn');\n }, this));\n } else {\n new PJQ.Loader(this.$('.prequal-loader'), {\n type: 'block'\n });\n }\n },\n renderComments: function () {\n this.$comments = this.options.navContainer.parent().find('.comments-outer');\n this.$comments.removeClass('hidden');\n if (!PJQ.app.session.hasPermission('prequal.canAddComments')) {\n this.$comments.find('.btn-add-comment').addClass('hidden');\n } else {\n this.$comments.find('.btn-add-comment').off().on('click', _.bind(this.addComment, this));\n }\n this.renderSubTemplate(false, this.options.subTemplates.comments, this.$comments.find('.prequal-comments'), {\n comments: this.model.comments.models,\n expand: this.options.commentsExpanded,\n canDelete: PJQ.app.session.hasPermission('prequal.canDeleteComments')\n }, _.bind(function ($comm) {\n $comm.find('.btn-expand-comments').on('click', _.bind(this.expandComments, this));\n $comm.find('.btn-delete-comment').off().on('click', _.bind(this.deleteComment, this));\n }, this));\n },\n addComment: function () {\n new PJQ.views.comments.CommentsModal({\n onAddComment: _.bind(function (commentText) {\n let newComment = new PJQ.models.prequal.Comment({\n contactCompanyId: this.model.get('contactCompanyId'),\n commentText: commentText,\n masterUserId: this.model.get('masterUserId')\n });\n newComment.save(null, {\n success: _.bind(function () {\n this.model.comments.add(newComment);\n this.renderComments();\n }, this)\n });\n }, this)\n });\n },\n expandComments: function () {\n this.options.commentsExpanded = true;\n this.$comments.find('.expand-comments-outer').remove();\n this.$comments.find('.comments-extra').animateCSS('slideDown');\n },\n deleteComment: function(e) {\n let target = $(e.currentTarget),\n $comment = target.closest('.card'),\n cid = $comment.data().cid,\n comment = this.model.comments.get(cid);\n\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this comment?\",\n onDelete: _.bind(function () {\n this.model.comments.remove(comment);\n comment.destroy();\n this.renderComments();\n }, this)\n });\n },\n renderNav: function (callback) {\n if (this.$nav != null) {\n this.$nav.remove();\n this.$nav = null;\n }\n\n this.$nav = $('
', {\n class: 'prequal-nav-container hidden'\n });\n this.addElements(this.$nav);\n this.options.navContainer.prepend(this.$nav);\n this.renderSubTemplate(true, this.options.subTemplates.nav, this.$nav, {\n model: this.model,\n options: this.options,\n renderTokens: _.bind(this.renderTokens, this)\n }, _.bind(function () {\n this.$nav.find('.btn-unlock').off().on('click', _.bind(this.unlockPrequal, this));\n this.$nav.find('.btn-lock').off().on('click', _.bind(this.lockPrequal, this));\n this.$nav.find('.prequal-nav-item').on('shown.bs.tab', _.bind(this.navClicked, this));\n this.renderRequestedBy();\n callback();\n }, this));\n },\n renderRequestedBy: function () {\n this.renderSubTemplate(false, this.options.subTemplates.requestedBy, this.$nav.find('.requested-by'), {\n model: this.model,\n isAdmin: this.options.isAdmin\n });\n },\n renderForm: function () {\n this.$('.prequal-header').empty();\n this.$('.prequal-tabs').empty();\n this.contactsGridsAutcompletes = null;\n\n let headerPref = this.model.preferences.getPref(PJQ.constants.preferenceTypes.PREQUAL_HEADER);\n if (_.size(headerPref) > 0) {\n new PJQ.Alert(this.$('.prequal-header'), {\n text: headerPref,\n isPrepend: true,\n type: 'warning'\n });\n }\n\n if (!this.options.isAdmin) {\n let alertCookie = null, alertType, helpAlertText;\n if (this.model.get('isLocked')) {\n alertType = 'warning';\n helpAlertText = 'Your prequalification form is currently locked and cannot be changed until it is unlocked by the client'\n } else {\n alertType = 'primary';\n alertCookie = PJQ.constants.cookies.CLOSE_PREQUAL_HELP_ALERT;\n helpAlertText = 'Thank you for updating your Qualification Statement. Please refer to the FAQ found to the left for additional details.'\n if (this.clients.hasItems()) {\n helpAlertText += '
Click \"View Requested Criteria\" after completing this form.';\n } else if (this.model.get('isRequireSignature')) {\n let sigAlertPref = this.model.preferences.getPref(PJQ.constants.preferenceTypes.PREQUAL_SIGNATURE_ALERT);\n if (_.size(sigAlertPref) > 0) {\n helpAlertText = sigAlertPref;\n } else {\n helpAlertText += '
Click \"Sign and Submit\" after completing this form.';\n }\n }\n }\n new PJQ.Alert(this.$('.prequal-header'), {\n text: helpAlertText,\n type: alertType,\n isPrepend: true,\n cookie: alertCookie\n });\n\n if (this.options.navContainer != null) {\n this.options.navContainer.parent().find('.btn-export-prequal').animateCSS('slideDown');\n }\n }\n\n if (this.options.isAdmin) {\n let dp = new PJQ.inputs.Datepicker({\n el: this.$nav.find('.edit-expiration'),\n isShowTimezone: false,\n datePickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n widgetPositioning: {\n vertical: 'bottom',\n horizontal: 'auto'\n },\n defaultDate: this.model.get('expiresOn')\n },\n onChange: _.bind(function (expiresOn) {\n this.model.patch({\n expiresOn: expiresOn\n });\n this.renderExpiration();\n dp.hide();\n }, this)\n });\n }\n this.renderExpiration();\n\n if (this.model.get('isRequireSignature')) {\n this.renderSigned();\n }\n\n //Render all of the tabs\n this.formulaFields = {};\n this.tabChanged();\n\n this.fillDefaults();\n\n _.each(_.sortBy(_.filter(this.model.tabs, function (tab) {\n let tabFields = _.filter(tab.fields, function (field) {\n if (field.isHidden || (field.isAdmin && !this.options.isAdmin)) {\n return false;\n }\n\n if (this.options.isAdmin && _.size(field.allowedUserTypeIds) > 0) {\n return field.allowedUserTypeIds.indexOf(PJQ.app.session.user.get('userTypeId')) !== -1;\n }\n\n return true;\n }, this);\n return _.size(tabFields) > 0 && !tab.isHidden\n }, this), function (tab) {\n return tab.sortOrder\n }), _.bind(function (tab, index) {\n this.renderSubTemplate(true, this.options.subTemplates.tab, this.$('.prequal-tabs'), {\n index: index,\n tab: tab\n });\n\n let tabEl = this.getTabElement(tab.prequalTabId);\n if (_.size(tab.note) > 0) {\n new PJQ.Alert(tabEl, {\n text: tab.note,\n isPrepend: true\n });\n }\n\n //Render all of the fields for this tab\n _.each(_.sortBy(tab.fields, function (field) {\n return field.sortOrder;\n }), _.bind(function (field) {\n let fnParsed = this.parseFormula(field);\n if (_.size(fnParsed.args) > 0) {\n _.each(fnParsed.args, function (arg) {\n if (arg != null && arg.indexOf('[') !== -1) {\n let cfId = parseInt(arg.replace('[', '').replace(']', ''));\n this.formulaFields[cfId] = _.uniq(_.union(this.formulaFields[cfId], [field.prequalFieldId]));\n }\n }, this);\n }\n\n // don't render the field, but we want to add it as a formula field above\n if (field.isHidden || (field.isAdmin && !this.options.isAdmin)\n || (this.options.isAdmin && _.size(field.allowedUserTypeIds) > 0 && field.allowedUserTypeIds.indexOf(PJQ.app.session.user.get('userTypeId')) === -1)) {\n return;\n }\n\n let fieldDestination = tabEl;\n if (field.category.length > 0) {\n let categoryId = this.model.categories.indexOf(field.category);\n if (categoryId < 0) {\n this.model.categories.push(field.category);\n categoryId = this.model.categories.indexOf(field.category);\n }\n if (this.getCategoryElement(tab.prequalTabId, categoryId).length === 0) {\n this.renderSubTemplate(true, this.options.subTemplates.fieldCategory, fieldDestination, {\n category: this.renderTokens(field.category),\n categoryId: categoryId\n });\n }\n fieldDestination = this.getCategoryElement(tab.prequalTabId, categoryId);\n }\n\n let overrideCanEdit = false;\n if (!this.options.canEdit && _.size(field.adminUserTypeIds) > 0 && field.adminUserTypeIds.indexOf(PJQ.app.session.user.get('userTypeId')) !== -1) {\n overrideCanEdit = true;\n }\n\n // If the user has changed the amount of project references required, we need to replace any reference to 3 (default value) to the new required amount.\n if (field.coreFieldName.toLowerCase() === 'projectreferences' && this.model.preferences.hasPref(PJQ.constants.preferenceTypes.PREQUAL_PROJECT_REFERENCE_COUNT)) {\n let refCount = this.model.preferences.getPref(PJQ.constants.preferenceTypes.PREQUAL_PROJECT_REFERENCE_COUNT);\n field.description = field.description.replace(\"three (3)\", (PJQ.helpers.formatHelpers.numberToWords(refCount)) + ' (' + (refCount) + ')').replace(\"3\", refCount);\n }\n\n this.renderSubTemplate(true, this.options.subTemplates.field, fieldDestination, {\n field: field,\n isAdmin: this.options.isAdmin === true,\n subTemplates: this.options.subTemplates,\n renderTokens: _.bind(this.renderTokens, this),\n canEdit: this.options.canEdit || overrideCanEdit\n });\n\n if (field.coreFieldName.toLowerCase() === 'federaltaxid' && this.model.preferences.hasPref(PJQ.constants.preferenceTypes.PREQUAL_TAX_ID_MASK)) {\n $(fieldDestination).find('input[data-p-bind=\"federalTaxId\"]').inputmask(this.model.preferences.getPref(PJQ.constants.preferenceTypes.PREQUAL_TAX_ID_MASK), {\n placeholder: ''\n });\n }\n\n if (field.coreFieldName.toLowerCase() === 'otheroffices')\n this.renderOtherOffices(field);\n else if (field.coreFieldName.toLowerCase() === 'ownercontacts')\n this.renderOwnerContacts(field);\n else if (field.coreFieldName.toLowerCase() === 'operationscontacts')\n this.renderOperationsContacts(field);\n else if (field.coreFieldName.toLowerCase() === 'estimatingcontacts')\n this.renderEstimatingContacts(field);\n else if (field.coreFieldName.toLowerCase() === 'safetycontacts')\n this.renderSafetyContacts(field);\n else if (field.coreFieldName.toLowerCase() === 'projectreferences')\n this.renderProjectReferences(field);\n }, this));\n }, this));\n this.renderGroups();\n this.renderRegions();\n this.attachFormEvents();\n this.updateCalcFields();\n this.updateFormulaFields();\n this.validateForm();\n if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DODGE_CRM) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DODGE_WG)) {\n this.$('.network-upgrade,.edit-profile').removeClass('hidden');\n }\n this.updateLastSavedDate();\n\n //Update the prequal form percent complete on first load - we want to be sure this is up to date in the database as much as possible\n this.model.patch({\n percentComplete: this.model.get('percentComplete'),\n masterUserId: this.model.get('masterUserId')\n });\n },\n renderExpiration: function () {\n let expiresOn = this.model.get('expiresOn'),\n $expiresOn = this.$nav.find('.prequal-expires-on');\n if (expiresOn != null) {\n let expiresOnDate = new Date(expiresOn);\n $expiresOn.text(PJQ.helpers.dateHelpers.getDateString(expiresOnDate, PJQ.helpers.dateHelpers.dateFormats.DATE)).css({\n color: PJQ.helpers.dateHelpers.checkDateIsBeforeToday(expiresOnDate) ? PJQ.constants.colors.RED : PJQ.constants.colors.GREEN\n });\n } else {\n $expiresOn.text(\"Not Set\").css({\n color: PJQ.constants.colors.RED\n });\n }\n },\n renderSigned: function () {\n let signedOn = this.model.get('signedOn'),\n $signedOn = this.$nav.find('.prequal-signed-on');\n if (signedOn != null) {\n $signedOn.text(PJQ.helpers.dateHelpers.getDateString(new Date(signedOn), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME)).css({\n color: PJQ.constants.colors.GREEN\n });\n } else {\n $signedOn.text(\"Never\").css({\n color: PJQ.constants.colors.RED\n });\n }\n },\n continue: function () {\n let requireSignature = this.model.get('isRequireSignature'),\n hasScreenings = this.clients.hasItems();\n if (requireSignature) {\n let terms = this.model.preferences.getPref(PJQ.constants.preferenceTypes.PREQUAL_TERMS),\n onSubmit = _.bind(function (signature, callback) {\n this.model.sign(signature, _.bind(function () {\n if (hasScreenings) {\n this.viewScreenings();\n this.renderSigned();\n } else if (this.model.get('isLocked')) {\n this.render();\n } else {\n this.renderSigned();\n }\n PJQ.notifications.notify.successNotify({\n message: 'Qualification Statement signed'\n });\n callback();\n }, this));\n }, this);\n if (terms != null) {\n new PJQ.views.signatures.SignatureTermsModal({\n terms: terms,\n onSubmit: onSubmit,\n fitHeight: false\n });\n } else {\n new PJQ.views.signatures.SignatureSubmitModal({\n onSubmit: onSubmit\n });\n }\n } else if (hasScreenings) {\n this.viewScreenings();\n }\n },\n viewScreenings: function () {\n let fnView = _.bind(function () {\n if (this.options.dashboard) {\n this.options.dashboard.renderClientScreenings();\n } else {\n window.location = (window.location.href.toLowerCase().substring(0, window.location.href.toLowerCase().indexOf('&')) + '&sId=' + pjqScreeningAccessKey);\n }\n }, this);\n if (_.size(this.model.dirtyAttributes) > 0) {\n this.model.patch({\n prequalCoreId: this.model.id,\n masterUserId: this.model.get('masterUserId')\n }, {\n success: _.bind(function () {\n fnView();\n }, this)\n });\n } else {\n fnView();\n }\n },\n updateViewScreeningButton() {\n let requireSignature = this.model.get('isRequireSignature');\n if (requireSignature) {\n let screeningButton = this.$('.btn-continue'),\n allowSignatureAlways = this.model.preferences.getPref(PJQ.constants.preferenceTypes.PREQUAL_ALLOW_SIGNATURE_ALWAYS);\n screeningButton.removeClass('hidden');\n if (this.model.get(\"percentComplete\") < 100 && !allowSignatureAlways) {\n screeningButton.prop('disabled', true);\n } else {\n screeningButton.prop('disabled', false);\n }\n\n screeningButton.text(\"Sign and Submit\");\n }\n },\n attachFormEvents: function () {\n let self = this;\n this.selectPickers = {};\n //Init select inputs and attach events\n this.$('.input-select[data-p-bind],.input-bool[data-p-bind]').each(function () {\n let input = $(this),\n fieldId = input.data('fieldId'),\n field = self.model.fields[fieldId],\n attribute = input.data('pBind') ? input.data('pBind') : '',\n isContactInput = attribute.indexOf('contact.') !== -1,\n isABCustomField = attribute.indexOf('contact.cf_') !== -1 || attribute.indexOf('contact.ccf_') !== -1,\n selectPicker = new PJQ.inputs.Selectpicker({\n el: input,\n isIntChoices: !input.hasClass('input-bool') && !input.hasClass('input-state') && (isABCustomField || !isContactInput) && attribute.toLowerCase() !== 'isunion|isnonunion',\n exclusiveChoices: _.map(_.where(field.choices, {isExclusive: true}), function (choice) {\n return choice.prequalFieldChoiceId;\n }),\n onChange: function (value) {\n if (input.hasClass('input-bool')) {\n if (_.size(value) > 0) {\n value = value.toLowerCase() === 'true';\n } else {\n value = null;\n }\n }\n\n //Custom logic for contact state/country\n if (isContactInput) {\n if (attribute.toLowerCase() === 'contact.country') {\n self.renderContactStateCountyPickers(value);\n }\n }\n\n self.prequalChanged(input, value);\n }\n });\n\n if (attribute.toLowerCase() === 'contact.state') {\n self.contactStatePicker = selectPicker;\n } else {\n let fieldId = input.data('fieldId');\n self.selectPickers[fieldId] = selectPicker;\n }\n });\n this.renderContactStateCountyPickers(this.model.contact.get('country'));\n\n this.$('.input-date[data-p-bind],.input-date-time[data-p-bind]').each(function () {\n let fieldEl = $(this),\n isDateTime = $(this).hasClass('.input-date-time');\n new PJQ.inputs.Datepicker({\n el: fieldEl,\n datepickerOptions: {\n format: !isDateTime ? PJQ.helpers.dateHelpers.dateFormats.DATE.toUpperCase() : undefined\n },\n onChange: function (value) {\n self.prequalChanged(fieldEl, value);\n }\n });\n });\n\n this.$('.input-file-upload').each(function () {\n let $input = $(this),\n field = self.model.fields[$input.data('fieldId')],\n fnInput = function (attachments) {\n let endpoint,\n screeningItemId = field.relatedScreeningItemId;\n if (screeningItemId > 0) {\n endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: self.options.contact != null ? self.options.contact.id : PJQ.app.session.contact.id\n },\n {\n endpoint: 'screenings'\n },\n {\n endpoint: 'items',\n value: screeningItemId\n },\n {\n endpoint: 'attachments'\n }\n ],\n [\n {\n parameter: 'masterUserId',\n value: self.model.get('masterUserId')\n }\n ]);\n } else {\n let params;\n if (self.model.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PREQUAL_CONTACT_ATTACHMENT_LINK)) {\n params = [\n {\n parameter: 'fromPrequal',\n value: true\n }\n ];\n } else {\n params = null\n }\n\n endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: self.options.contact != null ? self.options.contact.id : PJQ.app.session.contact.id\n },\n {\n endpoint: 'attachments'\n }\n ], params);\n }\n\n let overrideCanEdit = false;\n if (!self.options.canEdit && _.size(field.adminUserTypeIds) > 0 && field.adminUserTypeIds.indexOf(PJQ.app.session.user.get('userTypeId')) !== -1) {\n overrideCanEdit = true;\n }\n new PJQ.views.files.FileUploaderGrid({\n el: $input,\n canUpload: (self.options.canEdit || overrideCanEdit),\n canDelete: !(screeningItemId > 0) && (self.options.canEdit || overrideCanEdit) && (self.options.isAdmin || overrideCanEdit || !self.model.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PREQUAL_ATTACHMENT_DELETE)),\n collection: attachments,\n endpoint: endpoint,\n onSuccess: function (file) {\n if (!(screeningItemId > 0)) {\n let guids = [file.guid];\n if (attachments != null) {\n _.each(attachments.models, function (attachment) {\n if (_.size(attachment.get('guid')) > 0) {\n guids.push(attachment.get('guid'));\n }\n });\n }\n self.prequalChanged($input, guids);\n } else if (file.fileData != null) {\n let fieldId = $input.data('fieldId'),\n tab = self.getFieldTab(fieldId),\n field = _.findWhere(tab.fields, {\n prequalFieldId: fieldId\n });\n if (field != null) {\n field.isValid = true;\n self.prequalChanged($input, field.fieldValue);\n }\n }\n },\n onDelete: function (file, callback) {\n let guids = [],\n delAttachments = [];\n if (attachments != null) {\n _.each(attachments.models, function (attachment) {\n if (_.size(attachment.get('guid')) > 0 && file.get('guid') !== attachment.get('guid')) {\n guids.push(attachment.get('guid'));\n } else {\n delAttachments.push(attachment);\n }\n });\n attachments.remove(delAttachments);\n }\n self.prequalChanged($input, guids);\n callback();\n }\n });\n };\n if (_.size(field.fieldValue) > 0) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n },\n {\n endpoint: 'details'\n }\n ]),\n data: {\n guids: field.fieldValue ? ((typeof field.fieldValue === 'string') ? field.fieldValue.split('|') : field.fieldValue) : null\n }\n }).post().done(_.bind(function (result) {\n let attachments = new PJQ.collections.files.Files(result);\n fnInput(attachments);\n }, this));\n } else {\n fnInput(new PJQ.collections.files.Files());\n }\n });\n\n //Init the binder but override the change event\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input',\n 'textarea'\n ],\n onChange: _.bind(function (changeEl, attribute, value) {\n this.prequalChanged(changeEl, value);\n }, this)\n });\n\n this.$('.input-dollars-full[data-p-bind],.input-numeric[data-p-bind],.input-percent[data-p-bind]').each(function () {\n let input = $(this),\n field = self.model.fields[input.data('fieldId')];\n\n if (field.numericMinValue != null || field.numericMaxValue != null) {\n PJQ.helpers.inputHelpers.attachNumericInputMinMax(input, field.numericMinValue, field.numericMaxValue, function () {\n input.trigger('keyup');\n });\n }\n });\n PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.input-dollars-full'), 2);\n PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.input-phone'));\n },\n renderContactStateCountyPickers: function (country) {\n let states = PJQ.constants.states.us;\n if (country.toLowerCase() === 'ca') {\n states = PJQ.constants.states.ca;\n }\n if (this.contactStatePicker) {\n this.contactStatePicker.updateChoices(_.union([\"\"], _.map(states, function (state) {\n return state.abbreviation;\n })));\n this.contactStatePicker.setValue(this.model.contact.get('state'));\n }\n },\n getNewDateAddMonths: function (date, months) {\n if (date == null) {\n return null;\n }\n\n let dt = new Date(date);\n if (months > 0) {\n return new moment(dt).add(months, 'months').format('MM/DD/YYYY');\n } else {\n return new moment(dt).format('MM/DD/YYYY');\n }\n },\n checkFieldValueChanged: function (fieldType, currentValue, newValue) {\n let hasChanged;\n switch (fieldType.toLowerCase()) {\n case 'int':\n case 'money':\n case 'percent':\n case 'state':\n case 'text':\n case 'textarea':\n case 'phone':\n case 'bool':\n hasChanged = currentValue == null || currentValue !== newValue;\n break;\n case 'choice':\n case 'upload':\n case 'date':\n case 'grid':\n case 'groupselect':\n case 'regionselect':\n default:\n // any change event on these fields is assumed to be a data change\n hasChanged = true;\n break;\n }\n return hasChanged;\n },\n prequalChanged: function (input, value, fId = null, isUpdate = true) {\n let attribute, fieldId;\n if (fId > 0) {\n fieldId = fId;\n if (_.size(input) === 0) {\n input = this.getFieldElement(fieldId);\n }\n } else {\n fieldId = input.data('fieldId');\n }\n\n let tab = this.getFieldTab(fieldId);\n if (tab == null) {\n return;\n }\n\n let field = _.findWhere(tab.fields, {\n prequalFieldId: fieldId\n }),\n fieldType = field.fieldType.toLowerCase();\n\n if (_.size(input) > 0) {\n attribute = input.data('pBind');\n } else if (field != null) {\n if (field.fieldNumber > 0) {\n attribute = \"cf_\" + field.fieldNumber.toString();\n } else if (_.size(field.coreFieldName) > 0) {\n attribute = field.coreFieldName.toLowerCase();\n }\n }\n\n if (_.size(attribute) === 0 || fieldId == null) {\n if(tab && field) {\n this.queueValidation(tab, field, isUpdate);\n }\n return;\n }\n\n if (fieldType === \"percent\" && value > 0) {\n value = value / 100;\n }\n\n value = value != null ? value : \"\";\n\n //Check if the changed value is for a grid field - if its a grid the attribute will be null\n if (attribute != null) {\n if (this.model.attributes.patchValues == null) {\n this.model.attributes.patchValues = [];\n }\n\n //Check if the changed value is for a custom field\n if (attribute.indexOf('cf_') > -1) {\n let fnParse = this.parseFormula(field);\n if (typeof fnParse.fn === 'function' && (value == null || _.size(value.toString()) === 0)) {\n let valArgs = [];\n _.each(fnParse.args, function (arg) {\n if (arg != null) {\n if (arg.indexOf('[') !== -1) {\n let argId = arg.replace('[', '').replace(']', ''),\n argField = this.model.fields[parseInt(argId)];\n if (argField != null) {\n if (argField.fieldType.toLowerCase() === 'bool') {\n valArgs.push(argField.fieldValue != null ? argField.fieldValue : '');\n } else {\n valArgs.push(argField.fieldValue != null ? argField.fieldValue : 0);\n }\n }\n } else {\n valArgs.push(arg);\n }\n }\n }, this);\n value = fnParse.fn(...valArgs);\n\n let displayValue;\n if (value != null && typeof value === 'object' && typeof value.display !== 'undefined') {\n displayValue = value.display;\n value = value.value;\n } else {\n displayValue = value;\n }\n\n if (fieldType === 'bool' || fieldType === 'choice') {\n let sp = this.selectPickers[fieldId];\n if (sp != null) {\n sp.setValue(displayValue);\n }\n } else if (_.size(input) > 0) {\n let inputVal = displayValue;\n if (fieldType === 'money') {\n inputVal = displayValue != null ? parseFloat(displayValue / 100) : '';\n } else if (fieldType === 'date' || fieldType === 'datetime') {\n let dateFormat = fieldType === 'date' ? PJQ.helpers.dateHelpers.dateFormats.DATE : PJQ.helpers.dateHelpers.dateFormats.DATE_TIME;\n inputVal = displayValue != null ? PJQ.helpers.dateHelpers.getDateString(inputVal, dateFormat) : '';\n }\n input.val(inputVal);\n }\n } else if (_.size(fnParse.eval) > 0) {\n let evl = fnParse.eval;\n _.each(fnParse.args, function (arg) {\n if (arg.indexOf('[') !== -1) {\n let argId = parseInt(arg.replace('[', '').replace(']', '')),\n fieldTab = this.getFieldTab(argId);\n if (fieldTab != null) {\n let argField = _.findWhere(fieldTab.fields, {\n prequalFieldId: argId\n });\n if (argField != null) {\n let flVal = parseFloat(argField.fieldValue);\n evl = evl.replace(arg, '(' + (isNaN(flVal) ? 0 : flVal) + ')');\n }\n }\n }\n }, this);\n let evalVal = eval(evl);\n value = isNaN(evalVal) ? 0 : evalVal;\n\n if (_.size(input) > 0) {\n input.val(field.fieldType.toLowerCase() === 'money' ? parseFloat(value / 100) : value);\n }\n }\n\n field.fieldValue = value\n let customFields = {};\n if (attribute.indexOf('contact.ccf_') > -1) {\n let fieldId = parseInt(attribute.replace('contact.ccf_', '')),\n newValue = {\n id: fieldId,\n prequalFieldId: field.prequalFieldId,\n value: value\n },\n currentValue = _.find(this.model.get('companyCustomFieldValues'), function (exValue) {\n return newValue.id === exValue.id;\n });\n if (currentValue != null) {\n if (!this.checkFieldValueChanged(field.fieldType, currentValue.value, newValue.value)) {\n return;\n }\n }\n if (typeof this.options.onCompanyCustomFieldChange === 'function') {\n this.options.onCompanyCustomFieldChange(newValue);\n }\n\n let cfValues = _.filter(this.model.get('companyCustomFieldValues'), function (exValue) {\n return newValue.id !== exValue.id;\n });\n cfValues.push(newValue);\n this.model.set('companyCustomFieldValues', cfValues);\n\n if (this.model.contact != null) {\n this.model.contact.set('companyCustomFieldValues', cfValues, {silent: true});\n }\n } else {\n let customFieldNumber = parseInt(attribute.replace('cf_', ''));\n if (customFields[customFieldNumber] !== value) {\n customFields[customFieldNumber] = value;\n this.model.set('customFieldValues', _.defaults(customFields, this.model.dirtyAttributes.customFieldValues));\n }\n }\n\n let calcIds = this.formulaFields[field.prequalFieldId];\n if (_.size(calcIds) > 0) {\n _.each(calcIds, function (calcId) {\n if (calcId !== fieldId) {\n this.prequalChanged(null, null, calcId, isUpdate);\n }\n }, this);\n }\n }\n //Check if the changed value is for a contact field\n else if (attribute.indexOf('contact.') > -1) {\n let prop = PJQ.helpers.formatHelpers.lowerCaseFirstLetter(attribute.replace('contact.', ''));\n this.model.contact.set(prop, value);\n this.model.contact.queueSave({}, {}, 800);\n if (typeof this.options.onContactChange === 'function') {\n this.options.onContactChange(this.model.contact, {\n prop: prop,\n value: value\n });\n }\n }\n //If its not a contact or grid field, then its a prequal core/custom field\n else {\n //Check if the changed value is labor status, if it is set isUnion/isNonUnion accordingly\n if (attribute.toLowerCase() === 'isunion|isnonunion') {\n let isUnion = _.find(value, function (choice) {\n return choice.toLowerCase() === 'union';\n }) != null,\n isNonUnion = _.find(value, function (choice) {\n return choice.toLowerCase() === 'non-union';\n }) != null,\n laborStatus = {\n isUnion: isUnion,\n isNonUnion: isNonUnion\n };\n this.model.contact.set(laborStatus);\n this.model.contact.queueSave({}, {}, 800);\n if (typeof this.options.onContactChange === 'function') {\n this.options.onContactChange(this.model.contact, {\n prop: 'isUnion',\n value: isUnion\n });\n this.options.onContactChange(this.model.contact, {\n prop: 'isNonUnion',\n value: isNonUnion\n });\n }\n\n this.model.set(laborStatus);\n } else {\n //Set the value for the core model\n this.model.set(attribute, value);\n\n // we are only using the patchValues property for boolean and choice at the moment\n // it works for every type of value, but has not been tested for production on anything but boolean and choice\n // this is to fix the issue where the API doesnt know that a boolean or choice value has been updated to null\n // the API expects that supplying null in the request model means that the value was not updated\n if (fieldType === 'bool') {\n value = typeof value === 'boolean' ? value : \"\";\n if (typeof value === 'string' && _.size(value) > 0) {\n value = value.toLowerCase() === 'true';\n } else if (typeof value !== 'boolean') {\n value = null;\n }\n\n this.model.addPatchValue({\n attribute: attribute,\n value: value\n });\n } else if (fieldType === 'choice' && value == null) {\n this.model.addPatchValue({\n attribute: attribute,\n value: _.size(value) > 0 || typeof value === 'number' ? value : null\n });\n }\n }\n }\n\n // We must now apply the same value as above to the field and tab structure which is used for easier rendering and validating\n field.fieldValue = value;\n\n //It is a custom field\n if (field.fieldNumber > 0) {\n if (field.fieldType.toLowerCase() === 'int') {\n this.updateCalcFields(field);\n }\n }\n } else {\n //If the attribute is null, it could be one of the grids\n if (_.size(field.coreFieldName) > 0) {\n if (field.fieldType.toLowerCase() === 'grid' && field.coreFieldName.toLowerCase().indexOf(\"contact\") !== -1) {\n this.renderContactsGridsAutocompletes();\n }\n }\n }\n\n this.queueValidation(tab, field, isUpdate);\n },\n parseFormula: function (field) {\n let result = {\n fn: null,\n eval: null,\n args: null\n };\n if (_.size(field.formula) > 0) {\n if (field.formula.indexOf('eval_') !== -1) {\n result.args = [];\n field.formula.replace(/\\[(.*?)\\]/g, function (g0, g1) {\n result.args.push('[' + g1 + ']');\n });\n result.eval = field.formula.replace('eval_', '');\n } else {\n let sp = field.formula.split('(');\n if (_.size(sp) === 2) {\n if (field.formula.indexOf('fn_') !== -1) {\n if (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'prequal', 'formulas')) {\n result.fn = PJQ.app.portal.customization.prequal.formulas[sp[0].replace('fn_', '')];\n } else {\n result.fn = _.noop;\n }\n } else if (field.formula.indexOf('monthadd_') !== -1) {\n result.fn = this.getNewDateAddMonths;\n } else if (field.formula.indexOf('helper_') !== -1) {\n result.fn = PJQ.helpers.prequalHelpers[sp[0].replace('helper_', '')];\n }\n if (typeof result.fn === 'function') {\n result.args = sp[1].replace(')', '').replace(/\\s/g, '').split(',');\n }\n }\n }\n }\n return result;\n },\n queueValidation: function (tab, field, isUpdate = true) {\n //Set a timeout for validation\n //if a user is inputting data in a text field, this will execute on keyup and that is too much for the browser to handle\n clearTimeout(this.validateTimeout);\n this.validateQueue = this.validateQueue != null ? this.validateQueue : [];\n if (_.findWhere(this.validateQueue, {\n prequalTabId: tab.prequalTabId,\n prequalFieldId: field ? field.prequalFieldId : null\n }) == null)\n this.validateQueue.push({\n tab: tab,\n field: field\n });\n this.validateTimeout = setTimeout(_.bind(function () {\n _.each(this.validateQueue, _.bind(function (queueItem) {\n this.validateForm(queueItem.tab, queueItem.field);\n }, this));\n this.validateQueue = [];\n\n this.model.queueSave({\n prequalCoreId: this.model.id,\n masterUserId: this.model.get('masterUserId')\n }, {\n isPatch: true,\n success: _.bind(function () {\n if (isUpdate) {\n this.model.set('modifiedOn', new Date(), {silent: true});\n this.updateLastSavedDate();\n }\n }, this)\n }, 800);\n }, this), 300);\n },\n validateForm: function (inputTab, inputField) {\n //validates the form, calculates its completion, and renders field constraints\n this.model.completionData = this.model.completionData ? this.model.completionData : {};\n if (this.validationData == null) {\n this.validationData = {\n tabs: {},\n progress: 0\n };\n }\n _.each(_.filter(this.model.tabs, function (filterTab) {\n if (inputTab == null || (inputTab.prequalTabId === filterTab.prequalTabId && !filterTab.isHidden)) {\n return null != _.find(filterTab.fields, function (filterField) {\n if (filterField.isAdmin && !this.options.isAdmin) {\n return false;\n } else if (this.options.isAdmin && _.size(filterField.allowedUserTypeIds) > 0) {\n return filterField.allowedUserTypeIds.indexOf(PJQ.app.session.user.get('userTypeId')) !== -1;\n }\n return true;\n }, this);\n }\n }, this), _.bind(function (tabObj) {\n if (this.validationData.tabs[tabObj.prequalTabId] == null) {\n this.validationData.tabs[tabObj.prequalTabId] = {\n fields: {},\n tab: tabObj,\n progress: 0,\n isCalculate: tabObj.isCalculate\n }\n }\n let validationTab = this.validationData.tabs[tabObj.prequalTabId];\n _.each(_.filter(tabObj.fields, function (field) {\n return inputField == null || inputField.prequalFieldId === field.prequalFieldId;\n }, this), _.bind(function (field) {\n if (!field.isHidden && field.isRequired) {\n if (!this.model.checkConstraintsMet(field)) {\n validationTab.fields = _.omit(validationTab.fields, function (omitField) {\n return omitField.field.prequalFieldId === field.prequalFieldId;\n });\n } else {\n validationTab.fields[field.prequalFieldId] = {\n field: field,\n isValid: this.validateField(tabObj, field),\n isAdmin: field.isAdmin\n };\n }\n }\n this.renderFieldConstraints(field);\n }, this));\n let fieldCount = _.size(validationTab.fields),\n externalFieldCount = _.size(_.where(validationTab.fields, {\n isAdmin: false\n }));\n if (fieldCount === 0) {\n validationTab.progress = 100;\n validationTab.saveProgress = 100;\n } else {\n if(externalFieldCount === 0){\n validationTab.saveProgress = 100;\n } else{\n validationTab.saveProgress = Math.floor((_.size(_.where(validationTab.fields, {\n isValid: true,\n isAdmin: false\n })) / externalFieldCount) * 100);\n }\n\n if (this.options.isAdmin) {\n validationTab.progress = Math.floor((_.size(_.where(validationTab.fields, {\n isValid: true\n })) / fieldCount) * 100);\n } else {\n validationTab.progress = validationTab.saveProgress;\n }\n }\n }, this));\n this.model.completionData.tabs = this.validationData.tabs = _.defaults(this.validationData.tabs, this.model.completionData.tabs ? this.model.completionData.tabs : {});\n\n let viewTotal = 0,\n saveTotal = 0,\n calcTabCount = 0;\n _.each(this.validationData.tabs, function (tab) {\n if (tab.isCalculate !== false) {\n saveTotal += tab.saveProgress;\n calcTabCount++;\n }\n viewTotal += this.options.isAdmin ? tab.progress : tab.saveProgress;\n }, this);\n this.validationData.progress = Math.floor(viewTotal / _.size(this.validationData.tabs));\n\n if (inputTab == null) {\n this.initCalculationDone = true;\n }\n\n let percentComplete = Math.floor(saveTotal / calcTabCount);\n if ((typeof this.initCalculationDone === 'boolean' && this.initCalculationDone) && this.model.get('percentComplete') < 100 && percentComplete >= 100 && this.clients != null && this.clients.hasItems()) {\n let notificationText;\n if (this.model.get('isRequireSignature')) {\n notificationText = 'Please click \"Sign and Submit\" when you are ready to proceed. After signing, click \"View Requested Criteria\" to continue submitting requested items.';\n } else {\n notificationText = 'Please click \"View Requested Criteria\" when you are ready to proceed.';\n }\n PJQ.notifications.createNotifyModal({\n header: 'Your prequal is 100% complete',\n notification: notificationText,\n cookie: PJQ.constants.cookies.NOTIFY_PREQUAL_VIEW_REQUESTED\n });\n }\n\n let cData = {\n tabs: _.map(this.model.completionData.tabs, (calc) => {\n return {\n id: calc.tab.prequalTabId,\n progress: calc.progress\n };\n })\n };\n this.model.set({\n completionData: cData,\n percentComplete: percentComplete\n });\n this.hideEmptyCategories();\n this.hideEmptyTabs();\n this.renderCompletion(this.validationData);\n this.updateViewScreeningButton();\n },\n validateField: function (tab, field) {\n if (!field.isRequired || field.isValid)\n return true;\n\n let isValid = false;\n switch (field.fieldType.toLowerCase()) {\n case 'upload':\n isValid = field.fieldValue != null && _.size(field.fieldValue) > 0;\n break;\n case 'int':\n case 'money':\n case 'percent':\n isValid = field.fieldValue != null && !isNaN(parseFloat(field.fieldValue));\n break;\n case 'state':\n isValid = _.size(field.fieldValue) > 0;\n break;\n case 'choice':\n isValid = field.fieldValue != null && ((!isNaN(field.fieldValue) && field.fieldValue > 0) || _.size(field.fieldValue) > 0);\n break;\n case 'text':\n case 'textarea':\n case 'phone':\n isValid = field.fieldValue != null && field.fieldValue.toString().trim().length > 0;\n\n if (field.coreFieldName.toLowerCase() === 'federaltaxid' && this.model.preferences.hasPref(PJQ.constants.preferenceTypes.PREQUAL_TAX_ID_MASK)) {\n isValid = field.fieldValue != null && field.fieldValue.toString().trim().length === 9;\n }\n break;\n case 'date':\n isValid = typeof field.fieldValue === 'object' || _.size(field.fieldValue) > 0;\n break;\n case 'bool':\n isValid = (field.fieldValue === true || field.fieldValue === false);\n break;\n case 'grid':\n if (field.coreFieldName.toLowerCase() === 'otheroffices') {\n isValid = _.size(_.filter(this.model.otherOffices.models, _.bind(function (office) {\n let row = this.$('div[data-cid=' + office.cid + ']'),\n isCityValid = office.get('city').trim().length > 0,\n isStateValid = office.get('stateProvince').length > 0,\n isZipValid = office.get('postalCode').trim().length > 0;\n PJQ.helpers.inputHelpers.setInputError(row.find('.other-office-city'), isCityValid);\n PJQ.helpers.inputHelpers.setInputError(row.find('select.other-office-state'), isStateValid);\n PJQ.helpers.inputHelpers.setInputError(row.find('.other-office-zip'), isZipValid);\n return isCityValid && isStateValid && isZipValid;\n }, this))) >= 1;\n\n let fieldEl = this.getFieldElement(field.prequalFieldId);\n fieldEl.find('.alert').remove();\n if (!isValid && this.options.canEdit) {\n new PJQ.Alert(fieldEl, {\n type: 'danger',\n text: 'You must include at least one (1) valid office.',\n isPrepend: true\n });\n }\n } else if (field.coreFieldName.toLowerCase() === 'ownercontacts' || field.coreFieldName.toLowerCase() === 'operationscontacts' || field.coreFieldName.toLowerCase() === 'estimatingcontacts' || field.coreFieldName.toLowerCase() === 'safetycontacts') {\n let contacts;\n if (field.coreFieldName.toLowerCase() === 'ownercontacts') {\n contacts = this.model.ownerContacts;\n } else if (field.coreFieldName.toLowerCase() === 'operationscontacts') {\n contacts = this.model.operationsContacts;\n } else if (field.coreFieldName.toLowerCase() === 'estimatingcontacts') {\n contacts = this.model.estimatingContacts;\n } else if (field.coreFieldName.toLowerCase() === 'safetycontacts') {\n contacts = this.model.safetyContacts;\n }\n isValid = _.size(_.filter(contacts.models, _.bind(function (contact) {\n let row = $('div[data-cid=' + contact.cid + ']'),\n isContactNameValid = contact.get('contactName').length > 0,\n isEmailValid = contact.get('email').trim().length > 0,\n isPhoneValid = contact.get('phone').length > 0;\n PJQ.helpers.inputHelpers.setInputError(row.find('.contact-name'), isContactNameValid);\n PJQ.helpers.inputHelpers.setInputError(row.find('.contact-email'), isEmailValid);\n PJQ.helpers.inputHelpers.setInputError(row.find('.contact-phone'), isPhoneValid);\n if (field.coreFieldName.toLowerCase() === 'ownercontacts') {\n let isTitleValid = contact.get('contactTitle').length > 0;\n PJQ.helpers.inputHelpers.setInputError(row.find('.contact-title'), isTitleValid);\n return isContactNameValid && isEmailValid && isPhoneValid && isTitleValid;\n } else {\n return isContactNameValid && isEmailValid && isPhoneValid;\n }\n }, this))) >= 1;\n\n let fieldEl = this.getFieldElement(field.prequalFieldId);\n fieldEl.find('.alert').remove();\n if (!isValid && this.options.canEdit) {\n new PJQ.Alert(fieldEl, {\n type: 'danger',\n text: 'You must include at least one (1) valid contact.',\n isPrepend: true\n });\n }\n } else if (field.coreFieldName.toLowerCase() === 'projectreferences') {\n let projectReferenceRequirementCount = this.model.preferences.hasPref(PJQ.constants.preferenceTypes.PREQUAL_PROJECT_REFERENCE_COUNT) ? this.model.preferences.getPref(PJQ.constants.preferenceTypes.PREQUAL_PROJECT_REFERENCE_COUNT) : 3\n isValid = _.size(_.filter(this.model.projectReferences.models, function (reference) {\n return reference.checkIsRecent();\n })) >= 3;\n\n isValid = _.size(_.filter(this.model.projectReferences.models, _.bind(function (reference) {\n if (!reference.checkIsRecent())\n return false;\n\n let row = $('div[data-cid=' + reference.cid + ']'),\n isGCValid = reference.get('generalContractor').trim().length > 0,\n isGCContactValid = reference.get('generalContractorContactName').trim().length > 0,\n isGCPhoneValid = reference.get('generalContractorContactPhone').trim().length > 0,\n isProjectNameValid = reference.get('projectName').trim().length > 0,\n isDateCompletedValid = reference.get('dateCompleted') !== null,\n isContractValueValid = reference.get('contractValue') > 0;\n PJQ.helpers.inputHelpers.setInputError(row.find('.project-reference-gc'), isGCValid);\n PJQ.helpers.inputHelpers.setInputError(row.find('.project-reference-gc-contact'), isGCContactValid);\n PJQ.helpers.inputHelpers.setInputError(row.find('.project-reference-gc-phone'), isGCPhoneValid);\n PJQ.helpers.inputHelpers.setInputError(row.find('.project-reference-project-name'), isProjectNameValid);\n PJQ.helpers.inputHelpers.setInputError(row.find('.project-reference-date-completed'), isDateCompletedValid);\n PJQ.helpers.inputHelpers.setInputError(row.find('.project-reference-contract-value'), isContractValueValid);\n return isGCValid && isGCContactValid && isGCPhoneValid && isProjectNameValid && isDateCompletedValid && isContractValueValid;\n }, this))) >= projectReferenceRequirementCount;\n\n let fieldEl = this.getFieldElement(field.prequalFieldId);\n fieldEl.find('.alert').remove();\n if (!isValid && this.options.canEdit) {\n new PJQ.Alert(fieldEl, {\n type: 'danger',\n text: 'You must include at least ' + (PJQ.helpers.formatHelpers.numberToWords(projectReferenceRequirementCount)) + ' (' + (projectReferenceRequirementCount) + ')' + ' valid references.',\n isPrepend: true\n });\n }\n }\n break;\n case 'groupselect':\n isValid = _.find(this.model.contact.groups.models, function (model) {\n return model.get('isDeleted') !== true\n }) != null;\n break;\n case 'regionselect':\n isValid = _.size(this.model.contact.workAreas.models) > 0;\n break;\n }\n this.updateFieldValidationState(field, isValid);\n return isValid;\n },\n updateFieldValidationState: function (field, isValid) {\n if (!this.options.canEdit) {\n return;\n }\n\n let fieldEl = this.getFieldElement(field.prequalFieldId);\n switch (field.fieldType.toLowerCase()) {\n case 'groupselect':\n //todo: show validation error for groups\n break;\n case 'regionselect':\n //todo: show validation error for regions\n break;\n default:\n PJQ.helpers.inputHelpers.setInputError(fieldEl, isValid);\n break;\n }\n },\n renderFieldConstraints: function (field) {\n if (!field.constraints || field.constraints.length === 0)\n return;\n //Loop through all of the fields which are controlled by this field\n _.each(_.where(field.constraints, {controlledByCustomFieldId: field.prequalFieldId}), _.bind(function (control) {\n //We cant loop through the constraints on the controller custom field because the custom field being controlled may have other constraints\n //So instead we check all of the fields which this constraint field relies on\n let controlField = this.model.fields[control.customFieldId],\n fieldContainer = this.getFieldElement(controlField.prequalFieldId).closest('.prequal-field-container');\n if (this.model.checkConstraintsMet(controlField)) {\n fieldContainer.removeClass('hidden');\n } else {\n fieldContainer.addClass('hidden');\n }\n this.validateForm(this.getFieldTab(controlField.prequalFieldId), controlField);\n }, this));\n },\n hideEmptyCategories: function () {\n _.each(this.$('.prequal-category-container'), function (categoryEl) {\n let $category = $(categoryEl);\n if (_.size($category.find('.prequal-field-container:not(.hidden):not(.admin-field)')) === 0) {\n $category.addClass('hidden');\n } else {\n $category.removeClass('hidden');\n }\n });\n },\n hideEmptyTabs: function () {\n _.each(this.$('.prequal-tab'), function (tabEl) {\n let $tab = $(tabEl),\n $menuItem = $('.nav-link[data-nav-tab-id=\"' + $tab.data('tabId').toString() + '\"]');\n if (_.size($tab.find('.prequal-field-container:not(.hidden):not(.admin-field)')) === 0) {\n $menuItem.addClass('hidden');\n } else {\n $menuItem.removeClass('hidden');\n }\n }, this);\n },\n renderCompletion: function (data) {\n _.each(data.tabs, _.bind(function (tabObj) {\n let navItem = this.getTabNavElement(tabObj.tab.prequalTabId);\n navItem.find('.prequal-complete-badge').remove();\n navItem.prepend(this.makeCompletionBadge(tabObj.progress));\n }, this));\n this.$('.prequal-complete-text').remove();\n\n let colorClass = this.getCompletionColorClass(data.progress);\n if (this.totalProgressBar == null) {\n this.totalProgressBar = new PJQ.progress.ProgressBar(this.$nav.find('.prequal-progress'), {\n isShowPercentage: true,\n height: 25,\n colorClass: colorClass,\n progress: data.progress\n });\n } else {\n this.totalProgressBar.updateProgress(data.progress, colorClass);\n }\n },\n updateLastSavedDate: function () {\n let modifiedOn = this.model.get('modifiedOn');\n if (modifiedOn != null) {\n this.$nav.find('.prequal-last-save').text(PJQ.helpers.dateHelpers.getDateString(new Date(modifiedOn), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME));\n this.$nav.find('.prequal-last-save-container').removeClass('hidden');\n }\n },\n renderTokens: function (input) {\n return PJQ.templating.TemplateRenderer.parseMarkup(input, this.options.tokens);\n },\n makeCompletionBadge: function (percent, includeCompleteText) {\n return $('' + percent.toString() + (includeCompleteText ? '% Complete' : '%') + '');\n },\n getTabNavElement: function (tabId) {\n return this.$nav.find('[data-nav-tab-id=' + tabId + ']');\n },\n getTabElement: function (tabId) {\n return this.$('[data-tab-id=' + tabId + ']');\n },\n getCategoryElement: function (tabId, categoryId) {\n return this.getTabElement(tabId).find('[data-field-category-id=' + categoryId + ']')\n },\n getFieldElement: function (fieldId) {\n return this.$('[data-field-id=' + fieldId + ']');\n },\n getFieldTab: function (fieldId) {\n let field = _.findWhere(this.model.fields, {\n prequalFieldId: fieldId\n });\n return field ? _.findWhere(this.model.tabs, {\n prequalTabId: field.prequalTabId\n }) : null;\n },\n getCompletionColorClass: function (percent) {\n let textClass = 'danger';\n if (percent === 100)\n textClass = 'success';\n else if (percent > 60)\n textClass = 'warning';\n\n return textClass;\n },\n renderGroups: function () {\n if (this.$('.prequal-groups').length > 0) {\n let maxGroups = 10;\n if(this.model.preferences.hasPref(PJQ.constants.preferenceTypes.RESTRICT_GROUP_COUNT)){\n let maxGroupsPref = this.model.preferences.getPref(PJQ.constants.preferenceTypes.RESTRICT_GROUP_COUNT);\n if(maxGroupsPref > 0){\n maxGroups = maxGroupsPref;\n }\n }\n let groupSelector = new PJQ.views.groups.GroupSelector({\n el: this.$('.prequal-groups'),\n isSync: true,\n groupUserId: this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PREQUAL_PRIVATE_GROUPS) ? this.model.get('masterUserId') : PJQ.constants.publicUserId,\n groupLevels: this.model.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS),\n maxGroups: maxGroups,\n isDisableParents: true,\n selectedGroupIds: this.model.contact.groups.getGroupIds(),\n canEdit: this.options.canEdit,\n isEnableSelectAll: false,\n groupLabel: this.model.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LABEL),\n onGroupSelected: _.bind(function (data) {\n _.each(data.all, _.bind(function (newGroup) {\n let existingGroup = this.model.contact.groups.get(newGroup.id),\n isGroupDeleted = newGroup.get('isDeleted');\n if (existingGroup) {\n existingGroup.set('isDeleted', isGroupDeleted);\n } else if (!existingGroup && !isGroupDeleted) {\n this.model.contact.groups.add(newGroup);\n }\n }, this));\n\n let fieldId = this.$('.prequal-groups').data('fieldId');\n this.queueValidation(this.getFieldTab(fieldId), this.model.fields[fieldId]);\n this.model.contact.queueSave(null, {\n success: _.bind(function () {\n //Remove the deleted groups on successful save so we don't keep sending them\n // this.model.contact.groups.remove(this.model.contact.groups.where({\n // \tisDeleted: true\n // }));\n }, this)\n }, 800);\n }, this)\n });\n }\n },\n renderRegions: function () {\n let $regions = this.$('.prequal-regions');\n if (_.size($regions) > 0) {\n this.regionsMap = new PJQ.views.workAreas.WorkAreaMap({\n collection: this.model.contact.workAreas,\n el: $regions,\n contactId: this.model.contact.id,\n isEdit: this.options.canEdit,\n onChange: _.bind(function (obj) {\n let field = this.model.fields[parseInt(this.$('.prequal-regions').data('fieldId'))];\n this.queueValidation(this.getFieldTab(field.prequalFieldId), field);\n }, this)\n });\n }\n },\n renderOtherOffices: function (field) {\n _.each(this.model.otherOffices.models, _.bind(function (office) {\n this.renderOtherOffice(field, office);\n }, this));\n },\n renderOtherOffice: function (field, office) {\n let fieldEl = this.getFieldElement(field.prequalFieldId);\n this.renderSubTemplate(true, this.options.subTemplates.otherOffice, fieldEl.find('.grid-items'), {\n field: field,\n item: office,\n isEdit: this.options.canEdit,\n isViewer: false\n }, _.bind(function (content) {\n new PJQ.Binder(content, office, {\n attribute: 'data-c-bind',\n watchElements: [\n 'input'\n ],\n afterChange: _.bind(function (value) {\n this.prequalChanged(fieldEl, value);\n office.queueSave({}, {}, 800);\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: content.find('.other-office-state'),\n noneSelectedText: 'State',\n defaultValue: office.get('stateProvince'),\n onChange: _.bind(function (value) {\n this.prequalChanged(fieldEl, value);\n office.set('stateProvince', value);\n office.queueSave({}, {}, 800);\n }, this)\n });\n }, this));\n },\n addOtherOffice: function (e) {\n let newOffice = new PJQ.models.prequal.OtherOffice({\n contactId: this.model.contact.id,\n contactCompanyId: this.model.get('contactCompanyId'),\n city: \"\",\n stateProvince: \"\",\n postalCode: \"\"\n });\n this.model.otherOffices.add(newOffice);\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')];\n this.renderOtherOffice(field, newOffice);\n newOffice.save();\n this.queueValidation(this.getFieldTab(field.prequalFieldId), field);\n },\n deleteOtherOffice: function (e) {\n let row = $(e.currentTarget).closest('.grid-item-row'),\n cid = row.data('cid'),\n office = this.model.otherOffices.get(cid);\n office.destroy();\n this.model.otherOffices.remove(office);\n row.remove();\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')],\n tab = this.getFieldTab(field.prequalFieldId);\n this.queueValidation(tab, field);\n },\n renderContactsGrid: function (field, models) {\n _.each(models, _.bind(function (model) {\n this.renderContactsGridItem(field, model);\n }, this));\n },\n renderContactsGridItem: function (field, contact) {\n let fieldEl = this.getFieldElement(field.prequalFieldId);\n this.renderSubTemplate(true, this.options.subTemplates.contact, fieldEl.find('.grid-items'), {\n field: field,\n item: contact,\n isEdit: this.options.canEdit,\n }, _.bind(function (content) {\n new PJQ.Binder(content, contact, {\n attribute: 'data-c-bind',\n watchElements: [\n 'input'\n ],\n afterChange: _.bind(function (value) {\n this.prequalChanged(fieldEl, value);\n contact.queueSave({}, {}, 800);\n }, this)\n });\n\n let acContacts = this.model.getAllPrequalContacts();\n this.renderContactsGridAutocomplete(acContacts, contact);\n PJQ.helpers.inputHelpers.inputMaskPhone(content.find('.input-phone'));\n }, this));\n },\n renderContactsGridsAutocompletes: function () {\n let acContacts = this.model.getAllPrequalContacts();\n _.each(acContacts, function (contact) {\n this.renderContactsGridAutocomplete(acContacts, contact);\n }, this);\n },\n renderContactsGridAutocomplete: function (acContacts, contact) {\n let allContacts = _.filter(acContacts, function (prequalContact) {\n return prequalContact.cid !== contact.cid\n }),\n contactNames = PJQ.helpers.objectHelpers.findDistinct(allContacts, 'contactName');\n if (!this.contactsGridsAutcompletes) {\n this.contactsGridsAutcompletes = [];\n }\n let ac = _.findWhere(this.contactsGridsAutcompletes, {cid: contact.cid}),\n acElement = this.$('.grid-item-row[data-cid=' + contact.cid + ']').find('.contact-name');\n if (acElement.length > 0) {\n if (ac) {\n ac.input.reloadSource({\n data: contactNames\n });\n } else {\n let acInput = new PJQ.inputs.AutocompleteInput({\n el: acElement,\n data: contactNames,\n dataDisplayProperty: 'contactName',\n delay: 0,\n onSelect: _.bind(function (data) {\n if (data.match) {\n contact.set({\n contactName: data.match.get('contactName'),\n contactTitle: data.match.get('contactTitle'),\n email: data.match.get('email'),\n phone: data.match.get('phone')\n });\n let row = acInput.$el.closest('.row');\n row.find('.contact-name').val(contact.get('contactName'));\n row.find('.contact-title').val(contact.get('contactTitle'));\n row.find('.contact-email').val(contact.get('email'));\n row.find('.contact-phone').val(contact.get('phone'));\n this.prequalChanged(acInput.$el.closest('.prequal-grid'));\n contact.queueSave({}, {}, 800);\n }\n }, this)\n });\n this.contactsGridsAutcompletes.push({\n cid: contact.cid,\n input: acInput\n });\n }\n }\n },\n renderOwnerContacts: function (field) {\n this.renderContactsGrid(field, this.model.ownerContacts.models);\n },\n addOwnerContact: function (e) {\n let newContact = new PJQ.models.prequal.OwnerContact({\n contactId: this.model.contact.id,\n contactCompanyId: this.model.get('contactCompanyId'),\n contactName: \"\",\n contactTitle: \"\",\n email: \"\",\n phone: \"\"\n });\n this.model.ownerContacts.add(newContact);\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')];\n this.renderContactsGridItem(field, newContact);\n newContact.save();\n this.queueValidation(this.getFieldTab(field.prequalFieldId), field);\n },\n deleteOwnerContact: function (e) {\n let row = $(e.currentTarget).closest('.grid-item-row'),\n cid = row.data('cid'),\n contact = this.model.ownerContacts.get(cid);\n contact.destroy();\n this.model.ownerContacts.remove(contact);\n row.remove();\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')],\n tab = this.getFieldTab(field.prequalFieldId);\n this.queueValidation(tab, field);\n },\n renderOperationsContacts: function (field) {\n this.renderContactsGrid(field, this.model.operationsContacts.models);\n },\n addOperationsContact: function (e) {\n let newContact = new PJQ.models.prequal.OperationsContact({\n contactId: this.model.contact.id,\n contactCompanyId: this.model.get('contactCompanyId'),\n contactName: \"\",\n email: \"\",\n phone: \"\"\n });\n this.model.operationsContacts.add(newContact);\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')];\n this.renderContactsGridItem(field, newContact);\n newContact.save();\n this.queueValidation(this.getFieldTab(field.prequalFieldId), field);\n },\n deleteOperationsContact: function (e) {\n let row = $(e.currentTarget).closest('.grid-item-row'),\n cid = row.data('cid'),\n contact = this.model.operationsContacts.get(cid);\n contact.destroy();\n this.model.operationsContacts.remove(contact);\n row.remove();\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')],\n tab = this.getFieldTab(field.prequalFieldId);\n this.queueValidation(tab, field);\n },\n renderEstimatingContacts: function (field) {\n this.renderContactsGrid(field, this.model.estimatingContacts.models);\n },\n addEstimatingContact: function (e) {\n let newContact = new PJQ.models.prequal.EstimatingContact({\n contactId: this.model.contact.id,\n contactCompanyId: this.model.get('contactCompanyId'),\n contactName: \"\",\n email: \"\",\n phone: \"\"\n });\n this.model.estimatingContacts.add(newContact);\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')];\n this.renderContactsGridItem(field, newContact);\n newContact.save();\n this.queueValidation(this.getFieldTab(field.prequalFieldId), field);\n },\n deleteEstimatingContact: function (e) {\n let row = $(e.currentTarget).closest('.grid-item-row'),\n cid = row.data('cid'),\n contact = this.model.estimatingContacts.get(cid);\n contact.destroy();\n this.model.estimatingContacts.remove(contact);\n row.remove();\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')],\n tab = this.getFieldTab(field.prequalFieldId);\n this.queueValidation(tab, field);\n },\n renderSafetyContacts: function (field) {\n this.renderContactsGrid(field, this.model.safetyContacts.models);\n },\n addSafetyContact: function (e) {\n let newContact = new PJQ.models.prequal.SafetyContact({\n contactId: this.model.contact.id,\n contactCompanyId: this.model.get('contactCompanyId'),\n contactName: \"\",\n email: \"\",\n phone: \"\"\n });\n this.model.safetyContacts.add(newContact);\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')];\n this.renderContactsGridItem(field, newContact);\n newContact.save();\n this.queueValidation(this.getFieldTab(field.prequalFieldId), field);\n },\n deleteSafetyContact: function (e) {\n let row = $(e.currentTarget).closest('.grid-item-row'),\n cid = row.data('cid'),\n contact = this.model.safetyContacts.get(cid);\n contact.destroy();\n this.model.safetyContacts.remove(contact);\n row.remove();\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')],\n tab = this.getFieldTab(field.prequalFieldId);\n this.queueValidation(tab, field);\n },\n renderProjectReferences: function (field) {\n _.each(this.model.projectReferences.models, _.bind(function (model) {\n this.renderProjectReference(field, model);\n }, this));\n },\n renderProjectReference: function (field, reference) {\n let fieldEl = this.getFieldElement(field.prequalFieldId);\n this.renderSubTemplate(true, this.options.subTemplates.projectReference, fieldEl.find('.grid-items'), {\n field: field,\n item: reference,\n isEdit: reference.checkIsRecent() && this.options.canEdit,\n isViewer: false\n }, _.bind(function (content) {\n new PJQ.Binder(content, reference, {\n attribute: 'data-c-bind',\n watchElements: [\n 'input'\n ],\n afterChange: _.bind(function (value) {\n this.prequalChanged(fieldEl);\n reference.queueSave({}, {}, 800);\n }, this)\n });\n\n new PJQ.inputs.Datepicker({\n el: content.find('.input-date'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.DATE.toUpperCase(),\n defaultDate: reference.get('dateCompleted')\n },\n onChange: _.bind(function (value) {\n this.prequalChanged(fieldEl);\n reference.set('dateCompleted', value);\n reference.queueSave({}, {}, 800);\n }, this)\n });\n\n PJQ.helpers.inputHelpers.inputMaskCurrency(content.find('.input-dollars'));\n PJQ.helpers.inputHelpers.inputMaskPhone(content.find('.input-phone'));\n }, this));\n },\n addProjectReference: function (e) {\n let newReference = new PJQ.models.prequal.ProjectReference({\n contactId: this.model.contact.id,\n contactCompanyId: this.model.get('contactCompanyId'),\n generalContractor: \"\",\n generalContractorContactName: \"\",\n generalContractorContactPhone: \"\",\n projectName: \"\",\n dateCompleted: null,\n contractValue: 0\n });\n this.model.projectReferences.add(newReference);\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')];\n this.renderProjectReference(field, newReference);\n newReference.save();\n this.queueValidation(this.getFieldTab(field.prequalFieldId), field);\n },\n deleteProjectReference: function (e) {\n let row = $(e.currentTarget).closest('.grid-item-row'),\n cid = row.data('cid'),\n reference = this.model.projectReferences.get(cid);\n reference.destroy();\n this.model.projectReferences.remove(reference);\n row.remove();\n let field = this.model.fields[$(e.currentTarget).data('refFieldId')],\n tab = this.getFieldTab(field.prequalFieldId);\n this.queueValidation(tab, field);\n },\n allowZip: function (e) {\n return PJQ.helpers.inputHelpers.allowZip(e);\n },\n numbersOnly: function (e) {\n return PJQ.helpers.inputHelpers.numbersOnly(e, false, true);\n },\n formatPercent: function (e) {\n $(e.currentTarget).val(PJQ.helpers.formatHelpers.formatPercent($(e.currentTarget).val()));\n },\n networkUpgrade: function () {\n let redirectURL = 'http://network.panteratools.com/pantera-network/?';\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROQUAL_PORTAL))\n redirectURL = 'http://demo.panteratools.com/verified-network-long-video-page/?';\n //todo: load directorysettings from api\n else if (directorySettings.IsNetworkContact && directorySettings.NetworkVerificationLevel == 1)\n redirectURL = 'http://demo.panteratools.com/verified-network-landing-pages-from-pn/?';\n window.open(redirectURL + this.model.contact.id.toString(), '_blank');\n },\n editProfile: function () {\n PJQ.app.router.navigate('profile', {\n trigger: true\n });\n },\n viewFaq: function () {\n let faqItems = this.options.baseFaqItems;\n if (!this.model.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DODGE_CRM) && !this.model.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DODGE_WG))\n faqItems = _.union(faqItems, this.options.proqualFaqItems);\n new PJQ.views.BaseModal({\n header: \"Frequently Asked Questions\",\n isShowOkButton: false,\n isShowCancelButton: true,\n cancelButtonText: \"Close\",\n body: PJQ.templating.TemplateRenderer.parseTemplate(this.options.subTemplates.faq, {\n faqItems: faqItems\n }).html(),\n okButtonText: \"Ok\"\n });\n },\n navClicked: function (e) {\n if (this.regionsMap != null && $($(e.target).attr('href')).length > 0)\n this.regionsMap.refresh();\n\n this.tabChanged();\n },\n lockPrequal: function () {\n if (this.options.isAdmin) {\n this.model.updateLocked(true, _.bind(function () {\n this.render();\n PJQ.notifications.notify.successNotify({\n message: 'Prequalification Locked'\n });\n }, this));\n }\n },\n unlockPrequal: function () {\n if (this.options.isAdmin) {\n this.model.updateLocked(false, _.bind(function () {\n this.render();\n PJQ.notifications.notify.successNotify({\n message: 'Prequalification Unlocked'\n });\n }, this));\n }\n },\n previousTab: function () {\n this.changeTab(-1);\n },\n nextTab: function () {\n let currentTabId = parseInt(this.$nav.find('.prequal-nav-item.active').data('navTabId')),\n tabIndex = null;\n _.each(this.model.tabs, function (tab, index) {\n if (tab.prequalTabId === currentTabId)\n tabIndex = index;\n }, this);\n if (this.model.get('isRequireSignature') && tabIndex === this.model.tabs.length - 1) {\n let incompleteTab = _.find(this.model.completionData.tabs, function (tab) {\n return !this.$nav.find('.prequal-nav-item[data-nav-tab-id=\"' + tab.tab.prequalTabId + '\"]').hasClass('hidden') && tab.progress < 100;\n }, this);\n if (incompleteTab == null) {\n this.continue();\n } else {\n this.$nav.find('.prequal-nav-item[data-nav-tab-id=\"' + incompleteTab.tab.prequalTabId + '\"]').tab('show');\n this.tabChanged();\n }\n } else {\n this.changeTab(1);\n }\n },\n changeTab: function (jump) {\n let tabId = parseInt(this.$nav.find('.prequal-nav-item.active').data('navTabId')),\n currentTab = _.findWhere(this.model.tabs, {prequalTabId: tabId}),\n newTab = _.find(_.sortBy(this.model.tabs, function (tab) {\n if (jump < 0) {\n return -tab.sortOrder;\n }\n return tab.sortOrder;\n }), function (tab) {\n return !this.$nav.find('.prequal-nav-item[data-nav-tab-id=\"' + tab.prequalTabId + '\"]').hasClass('hidden') && ((tab.sortOrder > currentTab.sortOrder && jump > 0) || (tab.sortOrder < currentTab.sortOrder && jump < 0));\n }, this);\n if (newTab != null) {\n this.$nav.find('.prequal-nav-item[data-nav-tab-id=\"' + newTab.prequalTabId + '\"]').tab('show');\n scrollTo(0, 0);\n this.tabChanged();\n }\n },\n tabChanged: function () {\n PJQ.app.scrollTo(0, 0);\n\n let currentTabId = parseInt(this.$nav.find('.prequal-nav-item.active').data('navTabId')),\n tabIndex = null;\n _.each(this.model.tabs, function (tab, index) {\n if (tab.prequalTabId === currentTabId)\n tabIndex = index;\n }, this);\n\n\n if (tabIndex !== this.model.tabs.length - 1) {\n let tab = _.findWhere(this.model.tabs, {\n prequalTabId: currentTabId\n }),\n nextTab = _.find(this.model.tabs, function (checkTab) {\n if (checkTab.sortOrder > tab.sortOrder) {\n return null != _.find(checkTab.fields, function (field) {\n if (field.isHidden || field.isAdmin && !this.options.isAdmin) {\n return false;\n }\n\n if (this.options.isAdmin && _.size(field.allowedUserTypeIds) > 0) {\n return field.allowedUserTypeIds.indexOf(PJQ.app.session.user.get('userTypeId')) !== -1;\n }\n\n return true;\n }, this);\n }\n }, this);\n if (nextTab != null) {\n this.$('.prequal-tab-next').removeClass('hidden');\n } else {\n this.$('.prequal-tab-next').addClass('hidden')\n }\n } else\n this.$('.prequal-tab-next').addClass('hidden');\n if (tabIndex > 0)\n this.$('.prequal-tab-previous').removeClass('hidden');\n else\n this.$('.prequal-tab-previous').addClass('hidden');\n },\n downloadFieldFile: function (e) {\n let fieldId = $(e.currentTarget).data('fieldId'),\n field = this.model.fields[fieldId];\n if (_.size(field.defaultValue.trim()) > 0) {\n PJQ.files.downloadFile(field.defaultValue, {\n isEndpoint: false\n });\n } else {\n //todo: show error that the field doesnt have a valid file associated with it\n }\n },\n fillDefaults: function () {\n _.each(_.filter(this.model.fields, _.bind(function (field) {\n return _.size(field.defaultValue) > 0 && ((typeof field.fieldValue === 'string' && _.size(field.fieldValue) === 0) || field.fieldValue == null);\n }, this)), _.bind(function (field) {\n let fieldEl = this.getFieldElement(field.prequalFieldId);\n this.prequalChanged(fieldEl, parseInt(field.defaultValue), field.prequalFieldId, false);\n }, this));\n },\n updateFormulaFields: function () {\n if (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'prequal')) {\n let preventInitCalc = PJQ.app.portal.customization.prequal.preventInitCalc;\n preventInitCalc = preventInitCalc ? preventInitCalc : [];\n _.each(this.formulaFields, _.bind(function (linkedIds, sFieldId) {\n if (_.size(linkedIds) === 0) {\n return;\n }\n\n let fieldId = parseInt(sFieldId),\n field = this.model.fields[fieldId];\n if (field != null && fieldId > 0 && preventInitCalc.indexOf(field.prequalFieldId) === -1) {\n let fieldEl = this.getFieldElement(fieldId);\n if (_.size(fieldEl) > 0 && (field.fieldValue > 0 || _.size(field.fieldValue) > 0)) {\n this.prequalChanged(fieldEl, field.fieldValue, fieldId, false);\n }\n }\n }, this));\n }\n },\n updateCalcFields: function (changedField) {\n _.each(_.filter(this.model.fields, _.bind(function (field) {\n return field.fieldType.toLowerCase() === 'calc';\n }, this)), _.bind(function (calcField) {\n if (changedField != null) {\n this.updateCalcField(calcField, changedField);\n }\n }, this));\n },\n updateCalcField: function (calcField, changedField) {\n if (_.size(calcField.defaultValue) > 0) {\n let equation = calcField.defaultValue,\n calcFieldsVars = equation.match(/\\[(.*?)]/g);\n //If this is for a particular changed field, only recalculate if that field is in the equation\n if (changedField != null && calcFieldsVars.indexOf('[' + changedField.prequalFieldId + ']') === -1)\n return;\n _.each(calcFieldsVars, function (calcFieldVarString) {\n let calcFieldVarId = parseInt(calcFieldVarString.replace(new RegExp(/[\\[\\]']+/g), '')),\n calcFieldVar = this.model.fields[calcFieldVarId],\n calcFieldVarValue = 0;\n if (calcFieldVar != null && (calcFieldVar.fieldType.toLowerCase() === 'int' || calcFieldVar.fieldType.toLowerCase() === 'calc') && _.isNumber(calcFieldVar.fieldValue)) {\n calcFieldVarValue = calcFieldVar.fieldValue;\n }\n equation = equation.replace(calcFieldVarString, '(' + calcFieldVarValue + ')');\n }, this);\n let solution = math.eval(equation);\n calcField.fieldValue = !_.isNumber(solution) || isNaN(solution) ? 0 : solution;\n let customFields = {};\n customFields[calcField.fieldNumber] = calcField.fieldValue;\n this.model.set('customFieldValues', _.defaults(customFields, this.model.dirtyAttributes.customFieldValues));\n this.getFieldElement(calcField.prequalFieldId).val(calcField.fieldValue);\n }\n }\n});","//Models\nPJQ.models.prequal = {};\n\nPJQ.models.prequal.Form = PJQ.models.BaseModel.extend({\n idAttribute: 'masterUserId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'prequal'\n },\n {\n endpoint: 'form'\n }\n ], [\n {\n parameter: 'masterUserId',\n value: this.get('masterUserId') > 0 ? this.get('masterUserId') : (PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.app.session.get('masterUserId'))\n }\n ]);\n },\n parse: function (model) {\n if (model && _.size(model) > 0) {\n this.tabs = {};\n this.fields = {};\n this.categories = [];\n if (model.tabs) {\n this.tabs = model.tabs;\n _.each(model.tabs, _.bind(function (tab) {\n _.each(tab.fields, _.bind(function (field) {\n this.fields[field.prequalFieldId] = field;\n if (this.categories.indexOf(field.category) < 0) {\n this.categories.push(field.category);\n }\n }, this));\n }, this));\n }\n\n if (this.preferences && model.preferences) {\n this.preferences.set(model.preferences);\n } else {\n this.preferences = new PJQ.models.preferences.Preferences(model.preferences);\n }\n }\n return model;\n }\n});\n\nPJQ.models.prequal.Prequal = PJQ.models.BaseModel.extend({\n idAttribute: 'prequalCoreId',\n endpoint: function () {\n if (this.id > 0) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'prequal',\n value: this.id\n },\n {\n endpoint: 'data'\n }\n ], [\n {\n parameter: 'masterUserId',\n value: this.get('masterUserId') > 0 ? this.get('masterUserId') : (PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.app.session.get('masterUserId'))\n }\n ]);\n } else if (this.contact != null && this.contact.id > 0) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.contact.id\n },\n {\n endpoint: 'prequal'\n },\n {\n endpoint: 'data'\n }\n ], [\n {\n parameter: 'masterUserId',\n value: this.get('masterUserId') > 0 ? this.get('masterUserId') : (PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.app.session.get('masterUserId'))\n }\n ]);\n }\n return null;\n },\n fetch: function (options) {\n let fnSuccess = options ? options.success : _.noop();\n PJQ.models.BaseModel.prototype.fetch.call(this, _.defaults({\n success: _.bind(function () {\n let cbArgs = arguments;\n PJQ.app.session.fetchPrequalForm(this.get('masterUserId'), _.bind(function (form) {\n this.parseForm(form);\n if (typeof fnSuccess === 'function') {\n fnSuccess(...cbArgs);\n }\n }, this));\n }, this),\n fail: options ? options.fail : _.noop()\n }, options));\n },\n addPatchValue: function (obj) {\n if (_.size(obj.attribute) === 0) {\n return;\n }\n\n if (this.dirtyAttributes.patchValues == null) {\n this.dirtyAttributes.patchValues = [];\n } else {\n for (let i = 0; i < _.size(this.dirtyAttributes.patchValues); i++) {\n if (this.dirtyAttributes.patchValues[i].attribute === obj.attribute) {\n this.dirtyAttributes.patchValues[i].value = obj.value;\n return;\n }\n }\n }\n this.dirtyAttributes.patchValues.push(obj);\n\n this.set('patchValues', this.dirtyAttributes.patchValues);\n },\n parseForm: function (form) {\n this.tabs = form.tabs;\n this.fields = form.fields;\n this.categories = form.categories;\n this.preferences = form.preferences;\n\n _.each(this.fields, function (field) {\n field.fieldValue = null;\n if (_.size(field.coreFieldName) > 0) {\n if (field.coreFieldName.indexOf('Contact.ccf_') !== -1) {\n if (this.contact != null) {\n let fieldId = parseInt(field.coreFieldName.replace('Contact.ccf_', ''));\n _.each(this.contact.get('companyCustomFieldValues'), function (customField) {\n if (customField.id === fieldId) {\n field.fieldValue = customField.value;\n }\n });\n }\n } else if (field.coreFieldName.indexOf('Contact.cf_') !== -1) {\n if (this.contact != null) {\n let fieldId = parseInt(field.coreFieldName.replace('Contact.cf_', ''));\n _.each(this.contact.get('contactCustomFieldValues'), function (customField) {\n if (customField.id === fieldId) {\n field.fieldValue = customField.value;\n }\n });\n }\n } else if (field.coreFieldName.toLowerCase() === 'isunion|isnonunion') {\n let tempVal = [];\n if (this.contact != null) {\n if (this.contact.get('isUnion')) {\n tempVal.push('Union');\n }\n if (this.contact.get('isNonUnion')) {\n tempVal.push('Non-Union');\n }\n }\n field.fieldValue = tempVal;\n } else if (field.coreFieldName.indexOf('Contact.') > -1) {\n field.fieldValue = this.contact.get(PJQ.helpers.formatHelpers.lowerCaseFirstLetter(field.coreFieldName.replace('Contact.', '')));\n } else {\n field.fieldValue = this.get(PJQ.helpers.formatHelpers.lowerCaseFirstLetter(field.coreFieldName));\n }\n } else if (field.fieldNumber > 0) {\n let tempVal = this.get('customFieldValues')[field.fieldNumber];\n if (typeof tempVal === 'string') {\n switch (field.fieldType.toLowerCase()) {\n case 'bool':\n if (tempVal.toLowerCase() === 'true') {\n tempVal = true;\n } else if (tempVal.toLowerCase() === 'false') {\n tempVal = false;\n } else {\n tempVal = null;\n }\n break;\n case 'int':\n let tryParse = parseInt(tempVal);\n if (!isNaN(tryParse)) {\n tempVal = tryParse;\n }\n break;\n case 'choice':\n if (tempVal.indexOf('|') !== -1) {\n let choiceIds = [];\n _.each(tempVal.split('|'), function (choiceVal) {\n let tryParse = parseInt(choiceVal);\n if (!isNaN(tryParse)) {\n choiceIds.push(tryParse);\n }\n })\n tempVal = choiceIds;\n } else {\n let tryParse = parseInt(tempVal);\n if (!isNaN(tryParse)) {\n tempVal = tryParse;\n } else {\n tempVal = null;\n }\n }\n break;\n }\n }\n field.fieldValue = tempVal;\n }\n }, this);\n },\n parse: function (model) {\n if (model && _.size(model) > 0) {\n if (this.contact && model.contact != null) {\n this.contact.set(model.contact);\n this.contact.parse(model.contact);\n } else {\n if (model.contact) {\n if (model.contact instanceof PJQ.models.contacts.Contact)\n this.contact = model.contact;\n else\n this.contact = new PJQ.models.contacts.Contact(model.contact);\n } else {\n this.contact = new PJQ.models.contacts.Contact();\n }\n }\n\n this.comments = new PJQ.collections.prequal.Comments(model.comments);\n\n if (this.estimatingContacts) {\n this.estimatingContacts.reset(model.estimatingContacts);\n } else {\n this.estimatingContacts = new PJQ.collections.prequal.EstimatingContacts(model.estimatingContacts);\n }\n _.each(this.estimatingContacts.models, function (mod) {\n mod.set('contactId', this.contact.id);\n }, this);\n\n if (this.operationsContacts) {\n this.operationsContacts.reset(model.operationsContacts);\n } else {\n this.operationsContacts = new PJQ.collections.prequal.OperationsContacts(model.operationsContacts);\n }\n _.each(this.operationsContacts.models, function (mod) {\n mod.set('contactId', this.contact.id);\n }, this);\n\n if (this.ownerContacts) {\n this.ownerContacts.reset(model.ownerContacts);\n } else {\n this.ownerContacts = new PJQ.collections.prequal.OwnerContacts(model.ownerContacts);\n }\n _.each(this.ownerContacts.models, function (mod) {\n mod.set('contactId', this.contact.id);\n }, this);\n\n if (this.safetyContacts) {\n this.safetyContacts.reset(model.safetyContacts);\n } else {\n this.safetyContacts = new PJQ.collections.prequal.SafetyContacts(model.safetyContacts);\n }\n _.each(this.safetyContacts.models, function (mod) {\n mod.set('contactId', this.contact.id);\n }, this);\n\n if (this.otherOffices) {\n this.otherOffices.reset(model.otherOffices);\n } else {\n this.otherOffices = new PJQ.collections.prequal.OtherOffices(model.otherOffices);\n }\n _.each(this.otherOffices.models, function (mod) {\n mod.set('contactId', this.contact.id);\n }, this);\n\n if (this.projectReferences) {\n this.projectReferences.reset(model.projectReferences);\n } else {\n this.projectReferences = new PJQ.collections.prequal.ProjectReferences(model.projectReferences);\n }\n _.each(this.projectReferences.models, function (mod) {\n mod.set('contactId', this.contact.id);\n }, this);\n }\n return model;\n },\n sign: function (signature, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'prequal',\n value: this.id\n },\n {\n endpoint: 'sign'\n }\n ], [\n {\n parameter: 'masterUserId',\n value: this.get('masterUserId')\n }\n ]),\n data: {\n signature: signature\n }\n }).put().done(_.bind(function (res) {\n if (res.isLocked) {\n this.set('isLocked', res.isLocked);\n }\n this.set('signedOn', new Date(), {silent: true});\n callback(true);\n }, this));\n },\n updateLocked: function (isLocked, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'prequal',\n value: this.id\n },\n {\n endpoint: 'lock'\n }\n ], [\n {\n parameter: 'isLocked',\n value: isLocked\n }\n ])\n }).put().done(_.bind(function () {\n this.set('isLocked', isLocked);\n callback(true);\n }, this));\n },\n updateCompletion: function () {\n if (this.id > 0) {\n this.calculateCompletion();\n this.patch({\n percentComplete: this.get('percentComplete'),\n masterUserId: this.get('masterUserId')\n });\n }\n },\n calculateCompletion: function (isAdmin = false) {\n if (this.completionData == null) {\n this.completionData = {\n tabs: {},\n progress: 0\n };\n }\n _.each(this.tabs, _.bind(function (tabObj) {\n if (this.completionData.tabs[tabObj.prequalTabId] == null) {\n this.completionData.tabs[tabObj.prequalTabId] = {\n fields: {},\n tab: tabObj,\n progress: 0,\n isCalculate: tabObj.isCalculate\n }\n }\n let completionTab = this.completionData.tabs[tabObj.prequalTabId];\n _.each(tabObj.fields, (field) => {\n if (!field.isHidden && field.isRequired) {\n if (!this.checkConstraintsMet(field)) {\n completionTab.fields = _.omit(completionTab.fields, function (omitField) {\n return omitField.field.prequalFieldId === field.prequalFieldId;\n });\n } else {\n completionTab.fields[field.prequalFieldId] = {\n field: field,\n isValid: this.validateField(tabObj, field),\n isAdmin: field.isAdmin\n };\n }\n }\n });\n\n let fieldCount = _.size(completionTab.fields),\n externalFieldCount = _.size(_.where(completionTab.fields, {\n isAdmin: false\n }));\n if (fieldCount === 0) {\n completionTab.progress = 100;\n completionTab.saveProgress = 100;\n } else {\n if (externalFieldCount === 0) {\n completionTab.saveProgress = 100;\n } else {\n completionTab.saveProgress = Math.floor((_.size(_.where(completionTab.fields, {\n isValid: true,\n isAdmin: false\n })) / externalFieldCount) * 100);\n }\n\n if (isAdmin) {\n completionTab.progress = Math.floor((_.size(_.where(completionTab.fields, {\n isValid: true\n })) / fieldCount) * 100);\n } else {\n completionTab.progress = completionTab.saveProgress;\n }\n }\n }, this));\n\n let fullTotal = 0,\n saveTotal = 0,\n calcTabCount = 0;\n _.each(this.completionData.tabs, function (tab) {\n if (tab.isCalculate !== false) {\n saveTotal += tab.saveProgress;\n calcTabCount++;\n }\n fullTotal += this.options.isAdmin ? tab.progress : tab.saveProgress;\n }, this);\n this.completionData.saveProgress = Math.floor(saveTotal / calcTabCount);\n this.completionData.progress = Math.floor(fullTotal / _.size(this.completionData.tabs));\n\n let completion = {\n percentComplete: this.completionData.saveProgress,\n totalComplete: this.completionData.progress,\n completionData: this.getCompletionData()\n };\n this.set(completion);\n return completion;\n },\n getCompletionData: function () {\n return {\n tabs: _.map(this.completionData.tabs, (calc) => {\n return {\n id: calc.tab.prequalTabId,\n progress: calc.progress\n };\n })\n };\n },\n checkConstraintsMet: function (field) {\n let isConstraintsMet = true;\n _.each(_.where(field.constraints, {customFieldId: field.prequalFieldId}), _.bind(function (constraint) {\n let controllerField = this.fields[constraint.controlledByCustomFieldId];\n if (controllerField == null)\n return;\n // else if (!this.checkConstraintsMet(controllerField)) {\n // isConstraintsMet = false;\n // return;\n // }\n switch (controllerField.fieldType.toLowerCase()) {\n case 'int':\n case 'money':\n case 'percent':\n if (parseInt(constraint.constraintInfo) !== controllerField.fieldValue)\n isConstraintsMet = false;\n break;\n case 'text':\n case 'textarea':\n case 'phone':\n case 'date':\n if (constraint.constraintInfo !== controllerField.fieldValue)\n isConstraintsMet = false;\n break;\n case 'choice':\n let type = PJQ.helpers.objectHelpers.refinedType(controllerField.fieldValue);\n if (_.find(constraint.constraintInfo.split('|'), function (choiceId) {\n return controllerField.fieldValue != null && ((type === 'number' && controllerField.fieldValue === parseInt(choiceId)) || (type === 'array' && (controllerField.fieldValue.indexOf(parseInt(choiceId)) > -1 || controllerField.fieldValue.indexOf(choiceId) > -1)) || (type === 'object' && controllerField.fieldValue[parseInt(choiceId)] != null));\n }) == null)\n isConstraintsMet = false;\n break;\n case 'bool':\n if (constraint.constraintInfo != null) {\n let cLower = constraint.constraintInfo.toString().toLowerCase();\n if (cLower === '!true') {\n if (controllerField.fieldValue === true) {\n isConstraintsMet = false;\n }\n } else if (((constraint.constraintInfo === 'true' || constraint.constraintInfo === true) !== controllerField.fieldValue))\n isConstraintsMet = false;\n }\n\n break;\n }\n }, this));\n return isConstraintsMet;\n },\n validateField: function (tab, field) {\n if (!field.isRequired)\n return true;\n\n let isValid = false;\n switch (field.fieldType.toLowerCase()) {\n case 'upload':\n isValid = field.fieldValue != null && _.size(field.fieldValue) > 0;\n break;\n case 'int':\n case 'money':\n case 'percent':\n isValid = field.fieldValue != null && !isNaN(parseFloat(field.fieldValue));\n break;\n case 'choice':\n isValid = field.fieldValue != null && ((!isNaN(field.fieldValue) && field.fieldValue > 0) || _.size(field.fieldValue) > 0);\n break;\n case 'text':\n case 'textarea':\n case 'phone':\n case 'date':\n case 'state':\n isValid = field.fieldValue != null && field.fieldValue.length > 0;\n break;\n case 'bool':\n isValid = (field.fieldValue === true || field.fieldValue === false);\n break;\n case 'grid':\n if (field.coreFieldName.toLowerCase() === 'otheroffices') {\n isValid = _.size(_.filter(this.otherOffices ? this.otherOffices.models : [], _.bind(function (office) {\n let isCityValid = office.get('city').length > 0,\n isStateValid = office.get('stateProvince').length > 0,\n isZipValid = office.get('postalCode').length > 0;\n return isCityValid && isStateValid && isZipValid;\n }, this))) >= 1;\n } else if (field.coreFieldName.toLowerCase() === 'ownercontacts' || field.coreFieldName.toLowerCase() === 'operationscontacts' || field.coreFieldName.toLowerCase() === 'estimatingcontacts' || field.coreFieldName.toLowerCase() === 'safetycontacts') {\n let contacts;\n if (field.coreFieldName.toLowerCase() === 'ownercontacts') {\n contacts = this.ownerContacts;\n } else if (field.coreFieldName.toLowerCase() === 'operationscontacts') {\n contacts = this.operationsContacts;\n } else if (field.coreFieldName.toLowerCase() === 'estimatingcontacts') {\n contacts = this.estimatingContacts;\n } else if (field.coreFieldName.toLowerCase() === 'safetycontacts') {\n contacts = this.safetyContacts;\n }\n isValid = _.size(_.filter(contacts ? contacts.models : [], _.bind(function (contact) {\n let isContactNameValid = contact.get('contactName').length > 0,\n isEmailValid = contact.get('email').length > 0,\n isPhoneValid = contact.get('phone').length > 0;\n if (field.coreFieldName.toLowerCase() === 'ownercontacts') {\n let isTitleValid = contact.get('contactTitle').length > 0;\n return isContactNameValid && isEmailValid && isPhoneValid && isTitleValid;\n } else {\n return isContactNameValid && isEmailValid && isPhoneValid;\n }\n }, this))) >= 1;\n } else if (field.coreFieldName.toLowerCase() === 'projectreferences') {\n isValid = _.size(_.filter(this.projectReferences ? this.projectReferences.models : [], function (reference) {\n return reference.checkIsRecent();\n })) >= 3;\n\n isValid = _.size(_.filter(this.projectReferences.models ? this.projectReferences.models : [], _.bind(function (reference) {\n if (!reference.checkIsRecent())\n return false;\n\n let isGCValid = reference.get('generalContractor').length > 0,\n isGCContactValid = reference.get('generalContractorContactName').length > 0,\n isGCPhoneValid = reference.get('generalContractorContactPhone').length > 0,\n isProjectNameValid = reference.get('projectName').length > 0,\n isDateCompletedValid = reference.get('dateCompleted') !== null,\n isContractValueValid = reference.get('contractValue') > 0;\n return isGCValid && isGCContactValid && isGCPhoneValid && isProjectNameValid && isDateCompletedValid && isContractValueValid;\n }, this))) >= 3;\n }\n break;\n case 'groupselect':\n isValid = _.find(this.contact.groups.models, function (model) {\n return model.get('isDeleted') !== true\n }) != null;\n break;\n case 'regionselect':\n isValid = this.contact.workAreas != null && _.size(this.contact.workAreas.models) > 0;\n break;\n }\n return isValid;\n },\n getAllPrequalContacts: function () {\n return _.union(this.operationsContacts.models, this.estimatingContacts.models, this.safetyContacts.models)\n }\n});\n\nPJQ.models.prequal.OtherOffice = PJQ.models.BaseModel.extend({\n idAttribute: \"officeId\",\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactId') != null ? this.get('contactId') : this.get('contactCompanyId')\n },\n {\n endpoint: 'offices',\n value: this.id\n }\n ]);\n }\n});\n\nPJQ.models.prequal.OwnerContact = PJQ.models.BaseModel.extend({\n idAttribute: \"ownerContactId\",\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactId') != null ? this.get('contactId') : this.get('contactCompanyId')\n },\n {\n endpoint: 'ownercontacts',\n value: this.id\n }\n ]);\n }\n});\n\nPJQ.models.prequal.OperationsContact = PJQ.models.BaseModel.extend({\n idAttribute: \"operationsContactId\",\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactId') != null ? this.get('contactId') : this.get('contactCompanyId')\n },\n {\n endpoint: 'operationscontacts',\n value: this.id\n }\n ]);\n }\n});\n\nPJQ.models.prequal.EstimatingContact = PJQ.models.BaseModel.extend({\n idAttribute: \"estimatingContactId\",\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactId') != null ? this.get('contactId') : this.get('contactCompanyId')\n },\n {\n endpoint: 'estimatingcontacts',\n value: this.id\n }\n ]);\n }\n});\n\nPJQ.models.prequal.SafetyContact = PJQ.models.BaseModel.extend({\n idAttribute: \"safetyContactId\",\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactId') != null ? this.get('contactId') : this.get('contactCompanyId')\n },\n {\n endpoint: 'safetycontacts',\n value: this.id\n }\n ]);\n }\n});\n\nPJQ.models.prequal.ProjectReference = PJQ.models.BaseModel.extend({\n idAttribute: \"projectReferenceId\",\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactId') != null ? this.get('contactId') : this.get('contactCompanyId')\n },\n {\n endpoint: 'projectreferences',\n value: this.id\n }\n ]);\n },\n parse: function (model) {\n model = model ? model : {};\n\n model.theme = _.defaults(model && model.theme ? model.theme : {}, this.defaultTheme);\n\n if (this.photos) {\n this.photos.reset(model.photos);\n } else {\n this.photos = new PJQ.collections.prequal.ProjectReferencePhotos(model.photos);\n }\n\n return model;\n },\n checkIsRecent: function () {\n let createdOn = this.get('createdOn');\n return PJQ.helpers.dateHelpers.getDateMillisecondsDiff(new Date(), createdOn ? new Date(createdOn) : new Date()) < PJQ.constants.time.millis.ONE_YEAR\n }\n});\n\nPJQ.models.prequal.ProjectReferencePhoto = PJQ.models.BaseModel.extend({\n idAttribute: 'projectReferencePhotoId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projectreferences',\n value: this.get('projectReferenceId')\n },\n {\n endpoint: 'photos',\n value: this.id\n }\n ]);\n }\n});\n\nPJQ.models.prequal.Comment = PJQ.models.BaseModel.extend({\n idAttribute: \"commentId\",\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'companies',\n value: this.get('contactCompanyId')\n },\n {\n endpoint: 'prequal'\n },\n {\n endpoint: 'comments',\n value: this.id\n }\n ], [\n {\n parameter: 'masterUserId',\n value: this.get('masterUserId')\n }\n ])\n },\n parse: function (model) {\n if (!model) {\n return model;\n }\n\n if (model.createdBy != null) {\n this.createdBy = new PJQ.models.projectContacts.ProjectContact(model.createdBy);\n }\n\n return model;\n }\n});\n\nPJQ.models.prequal.AuditLog = PJQ.models.BaseModel.extend({\n idAttribute: 'prequalAuditLogId',\n getValue: function (fieldValue, fieldType) {\n switch (fieldType.toLowerCase()) {\n case 'bool':\n switch (fieldValue) {\n case '':\n return '';\n case '0':\n case 'false':\n return 'No';\n case '1':\n case 'true':\n return 'Yes';\n }\n break;\n case 'money':\n if (fieldValue != null)\n return PJQ.helpers.formatHelpers.formatCurrency(fieldValue);\n break;\n case 'percent':\n if (fieldValue != null)\n return PJQ.helpers.formatHelpers.formatPercent(fieldValue);\n break;\n }\n\n return fieldValue;\n }\n});\n\n//Collections\nPJQ.collections.prequal = {};\n\nPJQ.collections.prequal.OtherOffices = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.OtherOffice\n});\n\nPJQ.collections.prequal.OwnerContacts = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.OwnerContact\n});\n\nPJQ.collections.prequal.OperationsContacts = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.OperationsContact\n});\n\nPJQ.collections.prequal.EstimatingContacts = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.EstimatingContact\n});\n\nPJQ.collections.prequal.SafetyContacts = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.SafetyContact\n});\n\nPJQ.collections.prequal.EstimatingContacts = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.EstimatingContact\n});\n\nPJQ.collections.prequal.ProjectReferences = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.ProjectReference\n});\n\nPJQ.collections.prequal.ProjectReferencePhotos = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.ProjectReferencePhoto,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projectreferences',\n value: this.id\n },\n {\n endpoint: 'photos'\n }\n ]);\n }\n});\n\nPJQ.collections.prequal.Comments = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.Comment\n});\n\nPJQ.collections.prequal.PrequalAuditLog = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.prequal.AuditLog,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.options.contactId\n },\n {\n endpoint: 'prequal'\n },\n {\n endpoint: 'auditlog'\n }\n ]\n );\n }\n});","//Views\r\nPJQ.views.prequal.PrequalViewer = PJQ.views.BaseView.extend({\r\n\tdefaults: {\r\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Viewer'),\r\n\t\tsubTemplates: {\r\n\t\t\ttab: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Viewer-Tab'),\r\n\t\t\tfieldCategory: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Field-Viewer-Category'),\r\n\t\t\tfield: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Viewer-Field'),\r\n\t\t\totherOffice: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Other-Office'),\r\n\t\t\tcontact: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Contact'),\r\n\t\t\tprojectReference: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Form-Project-Reference')\r\n\t\t},\r\n\t\ttokens: {\r\n\t\t\tcurrentYear: PJQ.helpers.dateHelpers.getCurrentYear()\r\n\t\t},\r\n\t\tignoreFieldTypes: [\r\n\t\t\t'groupselect',\r\n\t\t\t'regionselect',\r\n\t\t\t'download'\r\n\t\t]\r\n\t},\r\n\tevents: {\r\n\t\t'click .prequal-export-pdf': 'exportPDF',\r\n\t\t'click .prequal-export-excel': 'exportExcel',\r\n\t\t'click .prequal-request-update': 'requestUpdate'\r\n\t},\r\n\tbeforeFirstRender: function () {\r\n\t\tthis.listenTo(this.model, \"fetch\", this.render);\r\n\t},\r\n\tbeforeRender: function () {\r\n\t\tthis.renderData = {\r\n\t\t\tmodel: this.model,\r\n\t\t\trenderTokens: _.bind(this.renderTokens, this)\r\n\t\t};\r\n\t},\r\n\tafterRender: function () {\r\n\t\tif (this.model.get('modifiedOn') != null) {\r\n\t\t\tthis.renderForm();\r\n\t\t}\r\n\t},\r\n\trenderForm: function () {\r\n\t\t_.each(_.sortBy(_.filter(this.model.tabs, function (tab) {\r\n\t\t\treturn _.size(tab.fields) > 0 && !tab.isHidden && _.find(tab.fields, function (field) {\r\n\t\t\t\treturn this.options.ignoreFieldTypes.indexOf(field.fieldType.toLowerCase()) === -1\r\n\t\t\t}, this) != null\r\n\t\t}, this), function (tab) {\r\n\t\t\treturn tab.sortOrder\r\n\t\t}), function (tab, index) {\r\n\t\t\tthis.renderSubTemplate(true, this.options.subTemplates.tab, this.$('.prequal-tabs'), {\r\n\t\t\t\tindex: index,\r\n\t\t\t\ttab: tab\r\n\t\t\t});\r\n\t\t\tlet tabEl = this.getTabElement(tab.prequalTabId);\r\n\r\n\t\t\t//Render all of the fields for this tab\r\n\t\t\t_.each(_.sortBy(_.where(tab.fields, {isHidden: false}), function (field) {\r\n\t\t\t\treturn field.sortOrder\r\n\t\t\t}), function (field) {\r\n\t\t\t\tlet fieldDest = tabEl;\r\n\t\t\t\tif (field.category.length > 0) {\r\n\t\t\t\t\tlet categoryId = this.model.categories.indexOf(field.category);\r\n\t\t\t\t\tif (categoryId < 0) {\r\n\t\t\t\t\t\tthis.model.categories.push(field.category);\r\n\t\t\t\t\t\tcategoryId = this.model.categories.indexOf(field.category);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.getCategoryElement(tab.prequalTabId, categoryId).length === 0) {\r\n\t\t\t\t\t\tthis.renderSubTemplate(true, this.options.subTemplates.fieldCategory, fieldDest, {\r\n\t\t\t\t\t\t\tcategory: this.renderTokens(field.category),\r\n\t\t\t\t\t\t\tcategoryId: categoryId\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfieldDest = this.getCategoryElement(tab.prequalTabId, categoryId);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet self = this;\r\n\t\t\t\tthis.renderSubTemplate(true, this.options.subTemplates.field, fieldDest, {\r\n\t\t\t\t\tfield: field,\r\n\t\t\t\t\trenderTokens: _.bind(this.renderTokens, this),\r\n\t\t\t\t\tisEdit: true\r\n\t\t\t\t}, function ($input) {\r\n\t\t\t\t\tif (field.coreFieldName.toLowerCase() === 'otheroffices')\r\n\t\t\t\t\t\tself.renderOtherOffices(field);\r\n\t\t\t\t\telse if (field.coreFieldName.toLowerCase() === 'ownercontacts')\r\n\t\t\t\t\t\tself.renderOwnerContacts(field);\r\n\t\t\t\t\telse if (field.coreFieldName.toLowerCase() === 'operationscontacts')\r\n\t\t\t\t\t\tself.renderOperationsContacts(field);\r\n\t\t\t\t\telse if (field.coreFieldName.toLowerCase() === 'estimatingcontacts')\r\n\t\t\t\t\t\tself.renderEstimatingContacts(field);\r\n\t\t\t\t\telse if (field.coreFieldName.toLowerCase() === 'safetycontacts')\r\n\t\t\t\t\t\tself.renderSafetyContacts(field);\r\n\t\t\t\t\telse if (field.coreFieldName.toLowerCase() === 'projectreferences')\r\n\t\t\t\t\t\tself.renderProjectReferences(field);\r\n\t\t\t\t\telse if (field.fieldType.toLowerCase() === 'upload') {\r\n\t\t\t\t\t\tlet fnInput = function (attachments) {\r\n\t\t\t\t\t\t\tnew PJQ.views.files.FileUploaderGrid({\r\n\t\t\t\t\t\t\t\tel: $input.find('.file-uploader'),\r\n\t\t\t\t\t\t\t\tcanUpload: false,\r\n\t\t\t\t\t\t\t\tcanDelete: false,\r\n\t\t\t\t\t\t\t\tcollection: attachments\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tif (_.size(field.fieldValue) > 0) {\r\n\t\t\t\t\t\t\tnew PJQ.ajax.Request({\r\n\t\t\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tendpoint: 'files'\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tendpoint: 'details'\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\t\t\tguids: field.fieldValue.split('|')\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}).post().done(function (result) {\r\n\t\t\t\t\t\t\t\tlet attachments = new PJQ.collections.files.Files(result);\r\n\t\t\t\t\t\t\t\tfnInput(attachments);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tfnInput(new PJQ.collections.files.Files());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}, this);\r\n\t\t}, this);\r\n\r\n\t\t//remove the form-group class from the last item in each category\r\n\t\t//this just makes categories look better\r\n\t\tthis.$('[data-field-category-id]').find('.prequal-field-container:last-child').find('.form-group').removeClass('form-group');\r\n\r\n\t\t_.each(this.model.fields, function (field) {\r\n\t\t\tthis.renderFieldConstraints(field);\r\n\t\t}, this);\r\n\r\n\t\t//Loop through each tab and find non-hidden fields and add a background to the odd rows - ignoring fields in categories\r\n\t\tthis.$('[data-tab-id]').each(function () {\r\n\t\t\t$(this).find('.prequal-field-container:not(.hidden):not(.prequal-constraint)').each(function (index) {\r\n\t\t\t\tif ($(this).closest('[data-field-category-id]').length === 0 && index % 2 > 0) {\r\n\t\t\t\t\t$(this).addClass('bg-muted');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t//Loop through each category and find non-hidden fields and add a background to the odd rows\r\n\t\tthis.$('[data-field-category-id]').each(function () {\r\n\t\t\t$(this).find('.prequal-field-container:not(.hidden)').each(function (index) {\r\n\t\t\t\tif (index % 2 > 0) {\r\n\t\t\t\t\t$(this).addClass('bg-muted');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t//Update the prequal form percent complete on first load - we want to be sure this is up to date in the database as much as possible\r\n\t\tthis.model.updateCompletion();\r\n\r\n\t\tthis.renderCompletion();\r\n\t},\r\n\tgetTabElement: function (tabId) {\r\n\t\treturn this.$('[data-tab-id=' + tabId + ']');\r\n\t},\r\n\tgetCategoryElement: function (tabId, categoryId) {\r\n\t\treturn this.getTabElement(tabId).find('[data-field-category-id=' + categoryId + ']')\r\n\t},\r\n\tgetFieldElement: function (fieldId) {\r\n\t\treturn this.$('[data-field-id=' + fieldId + ']');\r\n\t},\r\n\trenderTokens: function (input) {\r\n\t\treturn PJQ.templating.TemplateRenderer.parseMarkup(input, this.options.tokens);\r\n\t},\r\n\trenderFieldConstraints: function (field) {\r\n\t\tif (!field.constraints || field.constraints.length === 0)\r\n\t\t\treturn;\r\n\r\n\t\tlet controllerField = this.getFieldElement(field.prequalFieldId);\r\n\t\t//Loop through all of the fields which are controlled by this field\r\n\t\t_.each(_.where(field.constraints, {controlledByCustomFieldId: field.prequalFieldId}), _.bind(function (control) {\r\n\t\t\t//We cant loop through the constraints on the controller custom field because the custom field being controlled may have other constraints\r\n\t\t\t//So instead we check all of the fields which this constraint field relies on\r\n\t\t\tlet controlField = this.model.fields[control.customFieldId],\r\n\t\t\t\tfieldContainer = this.getFieldElement(controlField.prequalFieldId).closest('.prequal-field-container');\r\n\t\t\tif (controllerField.hasClass('bg-muted'))\r\n\t\t\t\tfieldContainer.addClass('bg-muted');\r\n\t\t\tif (this.model.checkConstraintsMet(controlField)) {\r\n\t\t\t\tfieldContainer.removeClass('hidden');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tfieldContainer.addClass('hidden');\r\n\t\t\t}\r\n\t\t}, this));\r\n\t},\r\n\trenderOtherOffices: function (field) {\r\n\t\t_.each(this.model.otherOffices.models, _.bind(function (office) {\r\n\t\t\tthis.renderOtherOffice(field, office);\r\n\t\t}, this));\r\n\t},\r\n\trenderOtherOffice: function (field, office) {\r\n\t\tlet fieldEl = this.getFieldElement(field.prequalFieldId);\r\n\t\tthis.renderSubTemplate(true, this.options.subTemplates.otherOffice, fieldEl.find('.grid-items'), {\r\n\t\t\tfield: field,\r\n\t\t\titem: office,\r\n\t\t\tisEdit: false,\r\n\t\t\tisViewer: true\r\n\t\t});\r\n\t},\r\n\trenderOwnerContacts: function (field) {\r\n\t\tthis.renderContactsGrid(field, this.model.ownerContacts.models);\r\n\t},\r\n\trenderOperationsContacts: function (field) {\r\n\t\tthis.renderContactsGrid(field, this.model.operationsContacts.models);\r\n\t},\r\n\trenderEstimatingContacts: function (field) {\r\n\t\tthis.renderContactsGrid(field, this.model.estimatingContacts.models);\r\n\t},\r\n\trenderSafetyContacts: function (field) {\r\n\t\tthis.renderContactsGrid(field, this.model.safetyContacts.models);\r\n\t},\r\n\trenderContactsGrid: function (field, models) {\r\n\t\t_.each(models, _.bind(function (model) {\r\n\t\t\tthis.renderContactsGridItem(field, model);\r\n\t\t}, this));\r\n\t},\r\n\trenderContactsGridItem: function (field, contact) {\r\n\t\tlet fieldEl = this.getFieldElement(field.prequalFieldId);\r\n\t\tthis.renderSubTemplate(true, this.options.subTemplates.contact, fieldEl.find('.grid-items'), {\r\n\t\t\tfield: field,\r\n\t\t\titem: contact,\r\n\t\t\tisEdit: false\r\n\t\t}, function (content) {\r\n\t\t\tPJQ.helpers.inputHelpers.inputMaskPhone(content.find('.input-phone'));\r\n\t\t});\r\n\t},\r\n\trenderProjectReferences: function (field) {\r\n\t\t_.each(this.model.projectReferences.models, _.bind(function (model) {\r\n\t\t\tthis.renderProjectReference(field, model);\r\n\t\t}, this));\r\n\t},\r\n\trenderProjectReference: function (field, reference) {\r\n\t\tlet fieldEl = this.getFieldElement(field.prequalFieldId);\r\n\t\tthis.renderSubTemplate(true, this.options.subTemplates.projectReference, fieldEl.find('.grid-items'), {\r\n\t\t\tfield: field,\r\n\t\t\titem: reference,\r\n\t\t\tisEdit: false,\r\n\t\t\tisViewer: true\r\n\t\t}, function (content) {\r\n\t\t\tnew PJQ.inputs.Datepicker({\r\n\t\t\t\tel: content.find('.input-date'),\r\n\t\t\t\tdatepickerOptions: {\r\n\t\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\r\n\t\t\t\t\tdefaultDate: reference.get('dateCompleted')\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tPJQ.helpers.inputHelpers.inputMaskCurrency(content.find('.input-dollars'));\r\n\t\t\tPJQ.helpers.inputHelpers.inputMaskPhone(content.find('.input-phone'));\r\n\t\t});\r\n\t},\r\n\tgetCompletionColorClass: function (percent) {\r\n\t\tlet textClass = 'danger';\r\n\t\tif (percent === 100)\r\n\t\t\ttextClass = 'success';\r\n\t\telse if (percent > 60)\r\n\t\t\ttextClass = 'warning';\r\n\r\n\t\treturn textClass;\r\n\t},\r\n\trenderCompletion: function () {\r\n\t\tlet progress = this.model.get('totalComplete'),\r\n\t\t\tcolorClass = this.getCompletionColorClass(progress);\r\n\t\tif (this.totalProgressBar == null) {\r\n\t\t\tthis.totalProgressBar = new PJQ.progress.ProgressBar(this.$('.prequal-progress'), {\r\n\t\t\t\tisShowPercentage: true,\r\n\t\t\t\theight: 40,\r\n\t\t\t\tcolorClass: colorClass,\r\n\t\t\t\tprogress: progress\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.totalProgressBar.updateProgress(progress, colorClass);\r\n\t\t}\r\n\t},\r\n\texportPDF: function () {\r\n\t\tthis.export(false);\r\n\t},\r\n\texportExcel: function () {\r\n\t\tthis.export(true);\r\n\t},\r\n\texport: function (isExcel) {\r\n\t\tPJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\tvalue: this.model.contact.id\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'prequal'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'export'\r\n\t\t\t}\r\n\t\t], [\r\n\t\t\t{\r\n\t\t\t\tparameter: 'masterUserId',\r\n\t\t\t\tvalue: this.model.get('masterUserId') > 0 ? this.model.get('masterUserId') : (PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.app.session.get('masterUserId'))\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tparameter: 'isExcel',\r\n\t\t\t\tvalue: isExcel\r\n\t\t\t}\r\n\t\t]));\r\n\t},\r\n\trequestUpdate: function () {\r\n\t\tnew PJQ.ajax.Request({\r\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\t\tvalue: this.model.contact.id\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'prequal'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'request'\r\n\t\t\t\t}\r\n\t\t\t])\r\n\t\t}).post().done(_.bind(function (data) {\r\n\t\t\tif (data) {\r\n\t\t\t\tPJQ.notifications.notify.successNotify({\r\n\t\t\t\t\tmessage: 'Qualification update sent'\r\n\t\t\t\t});\r\n\t\t\t\tthis.$('.prequal-request-update').html('Update Sent').prop('disabled', true);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tPJQ.notifications.notify.errorNotify({\r\n\t\t\t\t\tmessage: 'Qualification update failed, invalid email address on contact'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, this)).fail(function (xhr, err, result) {\r\n\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.SEND_PREQUAL_UPDATE, {\r\n\t\t\t\terror: err,\r\n\t\t\t\tresult: result\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n});\r\n\r\nPJQ.views.prequal.PrequalViewerModal = PJQ.views.BaseModal.extend({\r\n\tdefaults: {\r\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-Viewer-Modal'),\r\n\t\tmaxWidth: \"1000px\",\r\n\t\twidth: \"95%\",\r\n\t\tmasterUserId: null\r\n\t},\r\n\tbeforeRender: function () {\r\n\t\tthis.renderData = {\r\n\t\t\tmodel: this.model\r\n\t\t};\r\n\t},\r\n\tafterRender: function () {\r\n\t\tif (this.model != null) {\r\n\t\t\tthis.model.fetch({\r\n\t\t\t\tsuccess: _.bind(function () {\r\n\t\t\t\t\tlet prequal = new PJQ.models.prequal.Prequal({\r\n\t\t\t\t\t\tcontact: this.model,\r\n\t\t\t\t\t\tmasterUserId: this.options.masterUserId\r\n\t\t\t\t\t});\r\n\t\t\t\t\tprequal.fetch({\r\n\t\t\t\t\t\tsuccess: _.bind(function () {\r\n\t\t\t\t\t\t\tnew PJQ.views.prequal.PrequalViewer({\r\n\t\t\t\t\t\t\t\tel: this.$('.prequal-container'),\r\n\t\t\t\t\t\t\t\tmodel: prequal\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}, this)\r\n\t\t\t\t\t});\r\n\t\t\t\t}, this)\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n});\r\n\r\nPJQ.views.prequal.PrequalAuditLogModal = PJQ.views.BaseModal.extend({\r\n\tdefaults: {\r\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'modal-prequal-auditlog'),\r\n\t\tminWidth: '1100',\r\n\t\tcontactId: null\r\n\t},\r\n\tevents: {},\r\n\tbeforeModalCreated: function () {\r\n\t\tthis.isFetched = false;\r\n\r\n\t\tthis.data = new PJQ.collections.prequal.PrequalAuditLog(null, {\r\n\t\t\tcontactId: this.options.contactId\r\n\t\t});\r\n\t\tthis.data.fetch({\r\n\t\t\tsuccess: _.bind(function(data) {\r\n\t\t\t\tthis.isFetched = true;\r\n\t\t\t\tthis.render();\r\n\t\t\t}, this)\r\n\t\t});\r\n\t},\r\n\tafterRender: function () {\r\n\t\tlet loader = new PJQ.Loader(this.$('.auditlog-data'));\r\n\t\tif (!this.isFetched)\r\n\t\t\treturn;\r\n\t\telse\r\n\t\t\tloader.remove();\r\n\r\n\t\tthis.renderAuditLog()\r\n\t},\r\n\trenderAuditLog: function () {\r\n\t\tnew PJQ.views.dataTables.DataTable({\r\n\t\t\tel: this.$('.auditlog-data'),\r\n\t\t\tpageLength: 25,\r\n\t\t\tisHideSearch: true,\r\n\t\t\tdata: this.data.models,\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\t\"data\": {\r\n\t\t\t\t\t\t\"_\": function (row) {\r\n\t\t\t\t\t\t\treturn new Date(row.attributes.createdOn);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"filter\": \"attributes.createdOn\",\r\n\t\t\t\t\t\t\"display\": function (row) {\r\n\t\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(new Date(row.attributes.createdOn), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"title\": \"Date\",\r\n\t\t\t\t\t\"width\": \"80px\",\r\n\t\t\t\t\t\"orderable\": false\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\t\"data\": {\r\n\t\t\t\t\t\t\"_\": function (row) {\r\n\t\t\t\t\t\t\treturn row.attributes.createdBy.companyName + ' - ' + row.attributes.createdBy.contactName;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"display\": function (row) {\r\n\t\t\t\t\t\t\treturn ''+row.attributes.createdBy.companyName + '' + '
' + row.attributes.createdBy.contactName;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"title\": \"Person\",\r\n\t\t\t\t\t\"width\": \"150px\",\r\n\t\t\t\t\t\"orderable\": false\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\t\"data\": {\r\n\t\t\t\t\t\t\"_\": function (row) {\r\n\t\t\t\t\t\t\treturn row.attributes.tabName + ' - ' + row.attributes.fieldName;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"display\": function (row) {\r\n\t\t\t\t\t\t\tlet html = ''+row.attributes.tabName + '
';\r\n\t\t\t\t\t\t\treturn html + (row.attributes.category ? + row.attributes.category + '
' : '') + row.attributes.fieldName;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"title\": \"Field\",\r\n\t\t\t\t\t\"width\": \"150px\",\r\n\t\t\t\t\t\"orderable\": false\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\t\"data\": {\r\n\t\t\t\t\t\t\"_\": function (row) {\r\n\t\t\t\t\t\t\treturn row.getValue(row.attributes.oldValue, row.attributes.fieldType);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"display\": function (row) {\r\n\t\t\t\t\t\t\treturn row.getValue(row.attributes.oldValue, row.attributes.fieldType);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"title\": \"Original Value\",\r\n\t\t\t\t\t\"width\": \"30%\",\r\n\t\t\t\t\t\"orderable\": false\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\t\"data\": {\r\n\t\t\t\t\t\t\"_\": function (row) {\r\n\t\t\t\t\t\t\treturn row.getValue(row.attributes.newValue, row.attributes.fieldType);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"display\": function (row) {\r\n\t\t\t\t\t\t\treturn row.getValue(row.attributes.newValue, row.attributes.fieldType);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"title\": \"New Value\",\r\n\t\t\t\t\t\"width\": \"30%\",\r\n\t\t\t\t\t\"orderable\": false\r\n\t\t\t\t},\r\n\r\n\t\t\t]\r\n\t\t});\r\n\t}\r\n});","//Models\nPJQ.models.profile = {};\n\nPJQ.models.profile.CompanyProfile = PJQ.models.BaseModel.extend({\n\tidAttribute: 'profileKey',\n\tdefaults: {\n\t\tisFileAPI: true\n\t},\n\tdefaultTheme: {\n\t\theaderBackgroundColor: '#495057',\n\t\tnavMenuTextColor: '#0071E6',\n\t\tsectionHeaderTextColor: '#495057',\n\t\tsectionBodyTextColor: '#6c757d'\n\t},\n\tendpoint: function () {\n\t\tif (!this.get('canEdit')) {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'profiles',\n\t\t\t\t\tvalue: this.get('profileKey')\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\t\telse {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'profiles'\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\t},\n\tparse: function (model) {\n\t\tmodel = model ? model : {};\n\n\t\tmodel.theme = _.defaults(model && model.theme ? model.theme : {}, this.defaultTheme);\n\n\t\tif (this.groups == null) {\n\t\t\tthis.groups = new PJQ.collections.groups.Groups(model.groups, {\n\t\t\t\tgroupLevels: 2\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.groups.reset(_.size(model.groups) > 0 ? model.groups : null);\n\t\t\tthis.groups.options.groupLevels = 2;\n\t\t}\n\n\t\tif (this.projectReferences) {\n\t\t\tthis.projectReferences.reset(model.projectReferences);\n\t\t}\n\t\telse {\n\t\t\tthis.projectReferences = new PJQ.collections.prequal.ProjectReferences(model.projectReferences);\n\t\t}\n\n\t\tif (this.companyPhotos) {\n\t\t\tthis.companyPhotos.reset(model.companyPhotos);\n\t\t}\n\t\telse {\n\t\t\tthis.companyPhotos = new PJQ.collections.contacts.CompanyPhotos(model.companyPhotos);\n\t\t}\n\n\t\treturn model;\n\t},\n\tbeforeSave: function () {\n\t\tthis.set('projectReferences', this.projectReferences.toJSON());\n\t\tthis.set('companyPhotos', this.companyPhotos.toJSON());\n\t},\n\trestoreDefaultTheme: function () {\n\t\tthis.set('theme', this.defaultTheme);\n\t}\n});","//Views\nPJQ.views.profile = {};\n\nPJQ.views.profile.CompanyProfile = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Company-Profile')\n\t},\n\tevents: {\n\t\t'click .profile-edit': 'edit',\n\t\t'click .profile-view-qualification': 'viewScreenings',\n\t\t'click .profile-add-logo': 'addLogo',\n\t\t'click .profile-nav-item': 'tabActivated',\n\t\t'click .profile-project-reference-photo': 'viewReferencePhotoClick',\n\t\t'click .profile-project-reference-photo-delete': 'deleteReferencePhoto',\n\t\t'click .profile-company-photo': 'viewCompanyPhotoClick',\n\t\t'click .profile-company-photo-delete': 'deleteCompanyPhoto',\n\t\t'click .profile-cancel-edit': 'cancelEdit',\n\t\t'click .profile-theme-restore-defaults': 'restoreDefaultTheme',\n\t\t'click .profile-save': 'save'\n\t},\n\tbeforeFirstRender: function () {\n\t\tif (this.model == null) {\n\t\t\tif (_.size(this.options.key) > 0) {\n\t\t\t\tthis.model = new PJQ.models.profile.CompanyProfile({\n\t\t\t\t\tprofileKey: this.options.key\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.model = new PJQ.models.profile.CompanyProfile();\n\t\t\t}\n\t\t}\n\n\t\tthis.model.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.render();\n\t\t\t}, this)\n\t\t})\n\t},\n\tbeforeRender: function () {\n\t\tthis.mapId = 'rmap_' + _.uniqueId();\n\t\tthis.groupLabel = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.GROUP_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LABEL) : \"Trades\";\n\t\tthis.maxGroups = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.RESTRICT_GROUP_COUNT) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.RESTRICT_GROUP_COUNT) : 10;\n\t\tthis.renderData = {\n\t\t\tmodel: this.model,\n\t\t\tisEdit: this.isEdit,\n\t\t\tcanEdit: this.model.get('canEdit'),\n\t\t\tmapId: this.mapId,\n\t\t\tgroupLabel: this.groupLabel,\n\t\t\tmaxGroups: this.maxGroups\n\t\t};\n\t\tthis.activateTabId = this.$('.tab-pane.active').attr('id');\n\t},\n\tafterRender: function () {\n\t\tif (!this.model.isFetched) {\n\t\t\tthis.loader = new PJQ.Loader(this.$el);\n\t\t}\n\t\telse {\n\t\t\tif (this.loader) {\n\t\t\t\tthis.loader.remove();\n\t\t\t\tthis.loader = null;\n\t\t\t}\n\n\t\t\tif (_.size(this.options.activateTab) > 0) {\n\t\t\t\tthis.activateTab(this.options.activateTab);\n\t\t\t\tthis.options.activateTab = null;\n\t\t\t}\n\t\t\telse if (_.size(this.activateTabId) > 0) {\n\t\t\t\tthis.$('.nav-link[href=\"#' + this.activateTabId + '\"]').tab('show');\n\t\t\t\tthis.activateTabId = null;\n\t\t\t}\n\n\t\t\tthis.renderLogo();\n\t\t\tthis.renderTheme();\n\t\t\tthis.renderOfficeLocationMap();\n\t\t\tthis.renderWorkAreaMap();\n\t\t\tif (this.isEdit) {\n\t\t\t\tthis.renderThemeEditor();\n\t\t\t\tthis.renderGroupSelector();\n\t\t\t\tthis.renderToolbar();\n\t\t\t\tthis.renderProjectReferencePhotoUploaders();\n\t\t\t\tthis.renderCompanyPhotoUploader();\n\t\t\t\tnew PJQ.Binder(this.$el, this.model, {\n\t\t\t\t\twatchElements: [\n\t\t\t\t\t\t'input',\n\t\t\t\t\t\t'textarea'\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.options.projectReferenceId > 0 && this.options.projectReferencePhotoId > 0) {\n\t\t\t\tlet reference = this.model.projectReferences.get(this.options.projectReferenceId);\n\t\t\t\tif (reference != null) {\n\t\t\t\t\tlet photo = reference.photos.get(this.options.projectReferencePhotoId);\n\t\t\t\t\tif (photo != null) {\n\t\t\t\t\t\tthis.viewReferencePhoto(reference, photo);\n\t\t\t\t\t\tthis.$('.nav-link[href=\"#profileProjects\"]').tab('show');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.options.projectReferenceId = null;\n\t\t\t\tthis.options.projectReferencePhotoId = null;\n\t\t\t}\n\t\t}\n\t},\n\tactivateTab: function (tab) {\n\t\tswitch (tab ? tab.toLowerCase() : null) {\n\t\t\tcase 'workareas':\n\t\t\t\ttab = 'profileWorkAreas';\n\t\t\t\tbreak;\n\t\t\tcase 'projectreferences':\n\t\t\t\ttab = 'profileProjects';\n\t\t\t\tbreak;\n\t\t\tcase 'photos':\n\t\t\t\ttab = 'profilePhotoGallery';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\ttab = 'profileCompanyInfo';\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.$('.nav-link[href=\"#' + tab + '\"]').tab('show');\n\t},\n\ttabActivated: function (e) {\n\t\tlet newTabId = $(e.target).attr('href').replace('#', ''),\n\t\t\troute;\n\t\tswitch (newTabId.toLowerCase()) {\n\t\t\tcase 'profileworkareas':\n\t\t\t\tthis.workAreaMap.refresh();\n\t\t\t\tthis.refreshWindow();\n\t\t\t\troute = 'workareas';\n\t\t\t\tbreak;\n\t\t\tcase 'profileprojects':\n\t\t\t\troute = 'projectreferences';\n\t\t\t\tbreak;\n\t\t\tcase 'profilephotogallery':\n\t\t\t\troute = 'photos';\n\t\t\t\tbreak;\n\t\t}\n\t\tPJQ.app.router.navigate(PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'profiles',\n\t\t\t\tvalue: this.model.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: route\n\t\t\t}\n\t\t]));\n\t},\n\trenderLogo: function (base64) {\n\t\tif(_.size(base64) > 0 || _.size(this.model.get('logoURL')) > 0){\n\t\t\tlet $logo = $('', {\n\t\t\t\tclass: 'max-wd-100p max-ht-100p'\n\t\t\t});\n\t\t\t$logo.on('load', function () {\n\t\t\t\t$logo.css('margin-top', ((120 - $logo.height()) / 2).toString() + 'px');\n\t\t\t});\n\t\t\tif (_.size(base64) > 0) {\n\t\t\t\t$logo.attr('src', base64);\n\t\t\t} else {\n\t\t\t\t$logo.attr('src', PJQ.helpers.urlHelpers.buildAPIURL(this.model.get('logoURL'), false, false, true));\n\t\t\t}\n\t\t\tthis.$('.profile-logo-container').html($logo);\n\t\t}\n\t},\n\trefreshWindow: function() {\n\t\tsetTimeout(function(){ window.dispatchEvent(new Event('resize')); }, 50);\n\t},\n\trenderThemeEditor: function () {\n\t\tlet theme = this.model.get('theme');\n\t\tnew PJQ.colors.ColorPicker(this.$('.profile-theme-header'), {\n\t\t\tformat: 'hex',\n\t\t\tcolor: theme.headerBackgroundColor,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\ttheme.headerBackgroundColor = value;\n\t\t\t\tthis.toolbar.autoShowToolbar();\n\t\t\t\tthis.renderTheme();\n\t\t\t}, this)\n\t\t});\n\n\t\tnew PJQ.colors.ColorPicker(this.$('.profile-theme-nav-items'), {\n\t\t\tformat: 'hex',\n\t\t\tcolor: theme.navMenuTextColor,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\ttheme.navMenuTextColor = value;\n this.toolbar.autoShowToolbar();\n\t\t\t\tthis.renderTheme();\n\t\t\t}, this)\n\t\t});\n\n\t\tnew PJQ.colors.ColorPicker(this.$('.profile-theme-section-header'), {\n\t\t\tformat: 'hex',\n\t\t\tcolor: theme.sectionHeaderTextColor,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\ttheme.sectionHeaderTextColor = value;\n this.toolbar.autoShowToolbar();\n\t\t\t\tthis.renderTheme();\n\t\t\t}, this)\n\t\t});\n\n\t\tnew PJQ.colors.ColorPicker(this.$('.profile-theme-section-body'), {\n\t\t\tformat: 'hex',\n\t\t\tcolor: theme.sectionBodyTextColor,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\ttheme.sectionBodyTextColor = value;\n this.toolbar.autoShowToolbar();\n\t\t\t\tthis.renderTheme();\n\t\t\t}, this)\n\t\t});\n\t},\n\trenderGroupSelector: function () {\n\t\tthis.groupSelector = new PJQ.views.groups.GroupSelector({\n\t\t\tel: this.$('.profile-group-selector'),\n onSelect: _.bind(function(){\n this.toolbar.renderChangedCount();\n },this),\n\t\t\tselectedGroupIds: this.model.groups.getGroupIds(),\n\t\t\tisPublicGroups: true,\n\t\t\tisEnableSelectAll: false,\n\t\t\tmaxGroups: this.maxGroups,\n isDisableParents: true\n\t\t});\n\t},\n\trenderOfficeLocationMap: function () {\n\t\tlet officeLocationMap = new PJQ.maps.GoogleMap(this.$('.office-location-map-container'));\n\t\t_.each(this.model.get('offices'), function (office) {\n\t\t\tofficeLocationMap.addMarker(office.latitude, office.longitude, {\n\t\t\t\ttitle: office.city + ', ' + office.state + ' ' + office.zip,\n\t\t\t\tinfoWindowContent: office.city + ', ' + office.state + ' ' + office.zip\n\t\t\t});\n\t\t});\n\t},\n\trenderWorkAreaMap: function () {\n\t\tthis.workAreaMap = new PJQ.views.workAreas.WorkAreaMap({\n\t\t\tel: this.$('.profile-work-areas'),\n\t\t\tcontactId: this.model.get('primaryContactId'),\n\t\t\tisEdit: this.isEdit,\n\t\t\tisMapOnly: !this.isEdit,\n\t\t\tisInline: !this.isEdit,\n\t\t\tonDelete: _.bind(function(){\n\t\t\t\tthis.toolbar.autoShowToolbar()\n\t\t\t},this),\n\t\t\tisSync: false,\n\t\t\tonFetch: _.bind(function () {\n\t\t\t\tif (_.size(this.workAreaMap.collection.models) > 0) {\n\t\t\t\t\tthis.$('.profile-work-areas-nav-item').removeClass('hidden');\n\t\t\t\t}\n\t\t\t\telse if (this.model.get('canEdit') && !this.isEdit) {\n\t\t\t\t\tnew PJQ.Alert(this.$('.profile-work-areas'), {\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t\ttext: 'Click edit to add work areas. This section will currently be hidden to anybody viewing your profile.',\n\t\t\t\t\t\tisPrepend: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tfetchModel: function() {\n\t\tthis.model.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.render();\n\t\t\t}, this)\n\t\t})\n\t},\n\trenderToolbar: function() {\n\t\tthis.toolbar = new PJQ.views.toolbars.ProfileSaveToolbar({\n\t\t\tmodel: this.model,\n\t\t\tel: this.$el,\n\t\t\tgroupSelector: this.groupSelector,\n\t\t\tisEdit: this.isEdit,\n\t\t\tworkAreaMap: this.workAreaMap.collection,\n\t\t\tonSave: _.bind(function () {\n\t\t\t\tthis.save()\n\t\t\t}, this),\n\t\t\tonClose: _.bind(function () {\n\t\t\t\tthis.fetchModel()\n\t\t\t}, this)\n\t\t})\n\t},\n\trenderTheme: function () {\n\t\tlet theme = this.model.get('theme');\n\t\tthis.$('.profile-main-header').css('background', theme.headerBackgroundColor);\n\t\tthis.$('.profile-nav-item').css('cssText', 'color:' + theme.navMenuTextColor + ' !important');\n\t\tthis.$('.profile-section-header').css('color', theme.sectionHeaderTextColor);\n\t\tthis.$('.profile-section-body').css('color', theme.sectionBodyTextColor);\n\n\t\tlet idealTextColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(theme.headerBackgroundColor),\n\t\t\tcancelEditButton = this.$('.profile-cancel-edit');\n\t\tif (_.size(cancelEditButton) > 0) {\n\n\t\t\tif (idealTextColor === '#fff') {\n\t\t\t\tcancelEditButton.removeClass('btn-secondary').addClass('btn-transparent-light');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcancelEditButton.removeClass('btn-transparent-light').addClass('btn-secondary');\n\t\t\t}\n\t\t}\n\t\tthis.$('.profile-header-company-details').css('color', idealTextColor);\n\t},\n\trenderProjectReferencePhotoUploaders: function () {\n\t\tif (this.isEdit) {\n\t\t\t_.each(this.model.projectReferences.models, function (projectReference) {\n\t\t\t\tlet uploader = new PJQ.views.files.FileUploader({\n\t\t\t\t\tel: this.$('.profile-project-reference[data-cid=\"' + projectReference.cid + '\"]').find('.profile-project-reference-photo-upload'),\n\t\t\t\t\tallowedExtensions: PJQ.constants.files.imageExtensions,\n\t\t\t\t\tonSuccess: _.bind(function () {\n\t\t\t\t\t\tprojectReference.set('uploadFolderId', uploader.options.uuid);\n\t\t\t\t\t\tthis.$('.profile-project-reference[data-cid=\"' + projectReference.cid + '\"]').find('.alert').remove();\n this.toolbar.autoShowToolbar();\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\tviewReferencePhotoClick: function (e) {\n\t\tlet referenceCid = $(e.currentTarget).closest('.profile-project-reference').data('cid'),\n\t\t\treference = this.model.projectReferences.get(referenceCid),\n\t\t\tphoto = reference.photos.get($(e.currentTarget).data('cid'));\n\t\tthis.viewReferencePhoto(reference, photo);\n\t},\n\tviewReferencePhoto: function (reference, photo) {\n\t\tPJQ.app.view.renderPhotoViewer({\n\t\t\timage: photo.get('url')\n\t\t});\n\t},\n\tdeleteReferencePhoto: function (e) {\n\t\tlet deleteButton = $(e.currentTarget),\n\t\t\tphotoContainer = deleteButton.parent('div'),\n\t\t\treferenceCid = deleteButton.closest('.profile-project-reference').data('cid'),\n\t\t\treference = this.model.projectReferences.get(referenceCid),\n\t\t\tphoto = reference.photos.get(deleteButton.siblings('.profile-project-reference-photo').data('cid'));\n\n\t\tthis.deletedReferencePhotos.push(photo);\n\t\tphotoContainer.animateCSS('fadeOut', function () {\n\t\t\tphotoContainer.remove();\n this.toolbar.autoShowToolbar();\n\t\t});\n\t},\n\tviewCompanyPhotoClick: function (e) {\n\t\tthis.viewCompanyPhoto(this.model.companyPhotos.get($(e.currentTarget).data('cid')));\n\t},\n\tviewCompanyPhoto: function (photo) {\n\t\tPJQ.app.view.renderPhotoViewer({\n\t\t\timage: photo.get('url')\n\t\t});\n\t},\n\tdeleteCompanyPhoto: function (e) {\n\t\tlet deleteButton = $(e.currentTarget),\n\t\t\tphotoContainer = deleteButton.parent('div'),\n\t\t\tphoto = this.model.companyPhotos.get(deleteButton.siblings('.profile-company-photo').data('cid'));\n\n\t\tthis.deletedCompanyPhotos.push(photo);\n\t\tphotoContainer.animateCSS('fadeOut', function () {\n\t\t\tphotoContainer.remove();\n\t\t});\n\t\tthis.toolbar.autoShowToolbar();\n\t},\n\trenderCompanyPhotoUploader: function () {\n\t\tif (this.isEdit) {\n\t\t\tlet uploader = new PJQ.views.files.FileUploader({\n\t\t\t\tel: this.$('.profile-company-photo-upload'),\n\t\t\t\tallowedExtensions: PJQ.constants.files.imageExtensions,\n\t\t\t\tonSuccess: _.bind(function () {\n\t\t\t\t\tthis.model.set('companyPhotoUploadFolderId', uploader.options.uuid);\n\t\t\t\t\tthis.$('.profile-company-photo-alert').remove();\n this.toolbar.autoShowToolbar();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t},\n\taddLogo: function () {\n\t\tlet fileUploaderModal = new PJQ.views.files.FileUploaderModal({\n\t\t\theader: 'Upload Logo',\n\t\t\tisShowOkButton: false,\n\t\t\tmaxFiles: 1,\n\t\t\tallowedExtensions: PJQ.constants.files.imageExtensions,\n\t\t\tonDone: _.bind(function (files) {\n\t\t\t\tif(_.size(files) > 0){\n\t\t\t\t\tlet file = files[0];\n\t\t\t\t\tthis.model.set('logoUploadFolderId', file.get('folder'));\n\t\t\t\t\tthis.renderLogo(file.dataUrl);\n\t\t\t\t\tfileUploaderModal.removeModal();\n\t\t\t\t\tthis.toolbar.autoShowToolbar();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\trestoreDefaultTheme: function () {\n\t\tthis.model.restoreDefaultTheme();\n\t\tthis.render();\n\t},\n\tviewScreenings: function () {\n\t\tPJQ.app.router.navigate('screenings', {\n\t\t\ttrigger: true\n\t\t});\n\t},\n\tcancelEdit: function () {\n\t\tthis.isEdit = false;\n\t\tthis.model.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.render();\n\t\t\t}, this)\n\t\t})\n\t},\n\tedit: function () {\n\t\tthis.isEdit = true;\n\t\tthis.deletedReferencePhotos = [];\n\t\tthis.deletedCompanyPhotos = [];\n\t\tthis.render();\n\t},\n\tsave: function () {\n\t\tthis.groupSelector.hideError();\n\t\tif(this.groupSelector.getGroupsData().selected.length > this.groupSelector.maxGroups){\n\t\t\tthis.groupSelector.showError(\"You may only select \" + this.groupSelector.maxGroups + \" \" + this.groupLabel + \"!\");\n\t\t\treturn\n\t\t}\n\t\tthis.isEdit = false;\n\t\tthis.$('.profile-cancel-edit').prop('disabled', true);\n\t\tthis.$('.profile-save').prop('disabled', true).text('Saving...');\n\n\t\tif (_.size(this.deletedReferencePhotos) > 0) {\n\t\t\t_.each(this.deletedReferencePhotos, function (photo) {\n\t\t\t\tlet projectReference = this.model.projectReferences.get(photo.get('projectReferenceId'));\n\t\t\t\tprojectReference.photos.remove(photo);\n\t\t\t\tprojectReference.set('photos', projectReference.photos.toJSON());\n\t\t\t\tphoto.destroy();\n\t\t\t}, this);\n\t\t\tthis.deletedReferencePhotos = [];\n\t\t}\n\n\t\tif (_.size(this.deletedCompanyPhotos) > 0) {\n\t\t\t_.each(this.deletedCompanyPhotos, function (photo) {\n\t\t\t\tphoto.destroy();\n\t\t\t});\n\t\t\tthis.model.companyPhotos.remove(this.deletedCompanyPhotos);\n\t\t\tthis.deletedCompanyPhotos = [];\n\t\t}\n\n\t\tthis.workAreaMap.save(_.bind(function () {\n\t\t\tthis.model.groups = new PJQ.collections.groups.Groups(this.groupSelector.getGroupsData().selected, {\n\t\t\t\tmasterUserId: this.model.groups.options.masterUserId\n\t\t\t});\n\t\t\tthis.model.save({\n\t\t\t\tgroups: this.model.groups.toJSON()\n\t\t\t}, {\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}, this));\n\t}\n});\n","//Models\nPJQ.models.screenings = {};\n\nPJQ.models.screenings.ScreeningClient = PJQ.models.BaseModel.extend({\n\tidAttribute: 'masterUserId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'contacts',\n\t\t\t\tvalue: this.get('contactId') > 0 ? this.get('contactId') : PJQ.app.session.contact.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t]);\n\t},\n\tparse: function (model) {\n\t\tif (model.terms) {\n\t\t\tif (model.terms instanceof PJQ.collections.screenings.ScreeningTerms)\n\t\t\t\tthis.terms = model.terms;\n\t\t\telse\n\t\t\t\tthis.terms = new PJQ.collections.screenings.ScreeningTerms(model.terms, {\n\t\t\t\t\tmasterUserId: model.masterUserId\n\t\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.terms = new PJQ.collections.screenings.ScreeningTerms(null, {\n\t\t\t\tmasterUserId: model.masterUserId\n\t\t\t});\n\t\t}\n\n\t\tif (model.products) {\n\t\t\tif (model.products instanceof PJQ.collections.payment.Products)\n\t\t\t\tthis.products = model.products;\n\t\t\telse\n\t\t\t\tthis.products = new PJQ.collections.payment.Products(model.products);\n\t\t}\n\t\telse {\n\t\t\tthis.products = new PJQ.collections.payment.Products();\n\t\t}\n\n\t\tif (model.categories) {\n\t\t\tif (model.categories instanceof PJQ.collections.screenings.ScreeningCategories)\n\t\t\t\tthis.categories = model.categories;\n\t\t\telse\n\t\t\t\tthis.categories = new PJQ.collections.screenings.ScreeningCategories(model.categories);\n\t\t}\n\t\telse {\n\t\t\tthis.categories = new PJQ.collections.screenings.ScreeningCategories();\n\t\t}\n\n\t\t//Recursively set this client masterUserId to all children models\n\t\t//masterUserId is the root of all screening endpoints\n\t\tthis.categories.options.masterUserId = model.masterUserId;\n\t\t_.each(this.categories.models, function (category) {\n\t\t\tcategory.set('masterUserId', model.masterUserId);\n\n\t\t\tcategory.items.options.masterUserId = model.masterUserId;\n\t\t\t_.each(category.items.models, function (item) {\n\t\t\t\titem.set('masterUserId', model.masterUserId);\n\n\t\t\t\t//Also set the screeningInviteItemId for all sub-items here\n\t\t\t\t//It is used for the API url\n\t\t\t\titem.attachments.options.masterUserId = model.masterUserId;\n\t\t\t\titem.attachments.options.screeningInviteItemId = item.id;\n\t\t\t\t_.each(item.attachments.models, function (attachment) {\n\t\t\t\t\tattachment.set({\n\t\t\t\t\t\tmasterUserId: model.masterUserId,\n\t\t\t\t\t\tscreeningInviteItemId: item.id\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t_.each(item.comments.models, function (comment) {\n\t\t\t\t\tcomment.set({\n\t\t\t\t\t\tmasterUserId: model.masterUserId,\n\t\t\t\t\t\tscreeningInviteItemId: item.id\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t_.each(item.questions.models, function (question) {\n\t\t\t\t\tquestion.set({\n\t\t\t\t\t\tmasterUserId: model.masterUserId,\n\t\t\t\t\t\tscreeningInviteItemId: item.id\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tif (model.prequal) {\n\t\t\tif (model.prequal instanceof PJQ.models.prequal.Prequal)\n\t\t\t\tthis.prequal = model.prequal;\n\t\t\telse\n\t\t\t\tthis.prequal = new PJQ.models.prequal.Prequal(model.prequal);\n\t\t}\n\t\telse {\n\t\t\tthis.prequal = new PJQ.models.prequal.Prequal();\n\t\t}\n\n\t\tif (model.sampleDocuments) {\n\t\t\tif (model.sampleDocuments instanceof PJQ.collections.screenings.SampleDocuments)\n\t\t\t\tthis.sampleDocuments = model.sampleDocuments;\n\t\t\telse\n\t\t\t\tthis.sampleDocuments = new PJQ.collections.screenings.SampleDocuments(model.sampleDocuments, {\n\t\t\t\t\tmasterUserId: model.masterUserId\n\t\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.sampleDocuments = new PJQ.collections.screenings.SampleDocuments(null, {\n\t\t\t\tmasterUserId: model.masterUserId\n\t\t\t});\n\t\t}\n\n\t\tif (this.preferences && model.preferences) {\n\t\t\tthis.preferences.set(model.preferences);\n\t\t}\n\t\telse {\n\t\t\tthis.preferences = new PJQ.models.preferences.Preferences(model.preferences);\n\t\t}\n\n\t\treturn model;\n\t},\n\tgetItemStatusStats: function () {\n\t\tlet statuses = {};\n\t\t_.each(this.categories.models, function (category) {\n\t\t\t_.each(category.items.models, function (item) {\n\t\t\t\tif (statuses[item.get('status').screeningStatusId] == null) {\n\t\t\t\t\tstatuses[item.get('status').screeningStatusId] = {\n\t\t\t\t\t\tid: item.get('status').screeningStatusId,\n\t\t\t\t\t\tname: item.get('status').name,\n\t\t\t\t\t\tcolor: item.get('status').textColor,\n\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\tsortOrder: item.get('status').sortOrder\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstatuses[item.get('status').screeningStatusId].count++;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn statuses;\n\t},\n\tgetAttentionItems: function () {\n\t\tlet attentionItems = [];\n\t\t_.each(this.categories.models, function (category) {\n\t\t\tattentionItems.push(...category.getAttentionItems());\n\t\t});\n\t\treturn attentionItems;\n\t},\n\thasItems: function () {\n\t\treturn _.find(this.categories.models, function (category) {\n\t\t\treturn _.size(category.items.models) > 0;\n\t\t}) != null;\n\t},\n\tcheckNeedsTerms: function () {\n\t\treturn _.find(this.terms.models, function (term) {\n\t\t\treturn term.get('isActive') && !term.get('isAccepted')\n\t\t}) != null;\n\t}\n});\n\nPJQ.models.screenings.ScreeningCategory = PJQ.models.BaseModel.extend({\n\tidAttribute: 'screeningCategoryId',\n\tparse: function (model) {\n\t\tif (model.items) {\n\t\t\tif (model.items instanceof PJQ.collections.screenings.ScreeningItems)\n\t\t\t\tthis.items = model.items;\n\t\t\telse\n\t\t\t\tthis.items = new PJQ.collections.screenings.ScreeningItems(model.items);\n\t\t}\n\t\telse {\n\t\t\tthis.items = new PJQ.collections.screenings.ScreeningItems();\n\t\t}\n\n\t\tif (model.grades) {\n\t\t\tif (model.grades instanceof PJQ.collections.screenings.Grades)\n\t\t\t\tthis.grades = model.grades;\n\t\t\telse\n\t\t\t\tthis.grades = new PJQ.collections.screenings.Grades(model.grades);\n\t\t}\n\t\telse {\n\t\t\tthis.grades = new PJQ.collections.screenings.Grades();\n\t\t}\n\t\treturn model;\n\t},\n\tgetAttentionItems: function () {\n\t\treturn _.filter(this.items.models, function (item) {\n\t\t\treturn item.get('status').needsAttention;\n\t\t}, this);\n\t}\n});\n\nPJQ.models.screenings.Grade = PJQ.models.BaseModel.extend({\n\tidAttribute: 'screeningGradeId'\n});\n\nPJQ.models.screenings.ScreeningItem = PJQ.models.BaseModel.extend({\n\tidAttribute: 'screeningItemId'\n});\n\nPJQ.models.screenings.ScreeningInviteItem = PJQ.models.screenings.ScreeningItem.extend({\n\tidAttribute: 'screeningInviteItemId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.get('masterUserId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'items',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t]);\n\t},\n\tsubmitProcessing: function (callback) {\n\t\tthis.setStatus(PJQ.constants.screenings.statuses.IN_PROCESS, callback);\n\t},\n\tmoveWaiting: function (callback) {\n\t\tthis.setStatus(PJQ.constants.screenings.statuses.WAITING, callback);\n\t},\n\tsetStatus: function (statusId, callback) {\n\t\tthis.get('status').screeningStatusId = statusId;\n\t\tthis.save(null, {\n\t\t\tsuccess: _.bind(callback, this)\n\t\t});\n\t},\n\tupdateExpiresOn: function (expiresOn, callback) {\n\t\tthis.save({\n\t\t\texpiresOn: expiresOn\n\t\t}, {\n\t\t\tsuccess: _.bind(callback, this)\n\t\t});\n\t},\n\tparse: function (model) {\n\t\tif (model.comments) {\n\t\t\tif (model.comments instanceof PJQ.collections.screenings.ScreeningComments)\n\t\t\t\tthis.comments = model.comments;\n\t\t\telse\n\t\t\t\tthis.comments = new PJQ.collections.screenings.ScreeningComments(model.comments);\n\t\t}\n\t\telse {\n\t\t\tthis.comments = new PJQ.collections.screenings.ScreeningComments();\n\t\t}\n\n\t\tif (model.attachments) {\n\t\t\tif (model.attachments instanceof PJQ.collections.screenings.ScreeningItemAttachments)\n\t\t\t\tthis.attachments = model.attachments;\n\t\t\telse {\n\t\t\t\tthis.attachments = new PJQ.collections.screenings.ScreeningItemAttachments(model.attachments);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.attachments = new PJQ.collections.screenings.ScreeningItemAttachments(null);\n\t\t}\n\n\t\tif (model.questions) {\n\t\t\tif (model.questions instanceof PJQ.collections.screenings.ScreeningClientQuestions)\n\t\t\t\tthis.questions = model.questions;\n\t\t\telse\n\t\t\t\tthis.questions = new PJQ.collections.screenings.ScreeningClientQuestions(model.questions);\n\t\t}\n\t\telse {\n\t\t\tthis.questions = new PJQ.collections.screenings.ScreeningClientQuestions();\n\t\t}\n\n\t\treturn model;\n\t}\n});\n\nPJQ.models.screenings.ScreeningComment = PJQ.models.BaseModel.extend({\n\tidAttribute: 'screeningItemCommentId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.get('masterUserId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'items',\n\t\t\t\tvalue: this.get('screeningInviteItemId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'comments',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t]);\n\t},\n\tparse: function (model) {\n\t\tif (!model)\n\t\t\treturn model;\n\n\t\tif (model.createdBy != null) {\n\t\t\tthis.createdBy = new PJQ.models.projectContacts.ProjectContact(model.createdBy);\n\t\t}\n\n\t\treturn model;\n\t}\n});\n\nPJQ.models.screenings.ScreeningItemAttachment = PJQ.models.files.File.extend({\n\tidAttribute: 'attachmentId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.get('masterUserId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'items',\n\t\t\t\tvalue: this.get('screeningInviteItemId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'attachments',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.models.screenings.ScreeningQuestion = PJQ.models.BaseModel.extend({\n\tidAttribute: 'screeningItemQuestionId'\n});\n\nPJQ.models.screenings.ScreeningClientQuestion = PJQ.models.screenings.ScreeningQuestion.extend({\n\tidAttribute: 'screeningItemQuestionId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.get('masterUserId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'items',\n\t\t\t\tvalue: this.get('screeningInviteItemId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'questions',\n\t\t\t\tvalue: this.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'response'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.models.screenings.SampleDocument = PJQ.models.BaseModel.extend({\n\tidAttribute: 'screeningSampleDocumentId',\n\tdownload: function () {\n\t\tPJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.get('masterUserId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'sampledocuments',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t]));\n\t}\n});\n\nPJQ.models.screenings.ScreeningTerm = PJQ.models.BaseModel.extend({\n\tidAttribute: 'screeningTermsId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.get('masterUserId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'terms',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t]);\n\t}\n});\n\n\n//Collections\nPJQ.collections.screenings = {};\n\nPJQ.collections.screenings.ScreeningClients = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.screenings.ScreeningClient,\n\tendpoint: function () {\n\t\tif (this.options.masterUserId > 0) {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\tvalue: this.options.contact.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'screenings'\n\t\t\t\t}\n\t\t\t], [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'masterUserId',\n\t\t\t\t\tvalue: this.options.masterUserId\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\t\telse {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\tvalue: this.options.contact.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'screenings'\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\t},\n\thasItems: function () {\n\t\tlet hasItems = false;\n\t\t_.each(this.models, function (client) {\n\t\t\tif (client.hasItems()) {\n\t\t\t\thasItems = true;\n\t\t\t}\n\t\t});\n\t\treturn hasItems;\n\t}\n});\n\nPJQ.collections.screenings.ScreeningCategories = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.screenings.ScreeningCategory,\n\tgetItems: function () {\n\t\tlet items = [];\n\t\t_.each(this.models, function (category) {\n\t\t\t_.each(category.items.models, function (item) {\n\t\t\t\titems.push(item);\n\t\t\t});\n\t\t});\n\t\treturn items;\n\t}\n});\n\nPJQ.collections.screenings.Grades = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.screenings.Grade\n});\n\nPJQ.collections.screenings.ScreeningItems = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.screenings.ScreeningInviteItem\n});\n\nPJQ.collections.screenings.ScreeningComments = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.screenings.ScreeningComment\n});\n\nPJQ.collections.screenings.ScreeningItemAttachments = PJQ.collections.files.Files.extend({\n\tmodel: PJQ.models.screenings.ScreeningItemAttachment,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.options.masterUserId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'items',\n\t\t\t\tvalue: this.options.screeningInviteItemId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'attachments'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.collections.screenings.ScreeningQuestions = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.screenings.ScreeningQuestion\n});\n\nPJQ.collections.screenings.ScreeningClientQuestions = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.screenings.ScreeningClientQuestion\n});\n\nPJQ.collections.screenings.SampleDocuments = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.screenings.SampleDocument,\n\tdownload: function () {\n\t\tPJQ.files.queueDownload(PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.options.masterUserId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'sampledocuments'\n\t\t\t}\n\t\t]));\n\t}\n});\n\nPJQ.collections.screenings.ScreeningTerms = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.screenings.ScreeningTerm,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'screenings',\n\t\t\t\tvalue: this.options.masterUserId > 0 ? this.options.masterUserId : PJQ.constants.publicUserId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'terms'\n\t\t\t}\n\t\t]);\n\t}\n});","//Views\nPJQ.views.screenings = {};\n\nPJQ.views.screenings.ScreeningDashboard = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Screening-Editor-Dashboard'),\n\t\tsubTemplates: {\n\t\t\tfaq: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Prequal-FAQ')\n\t\t},\n\t\tbaseFaqItems: [\n\t\t\t{\n\t\t\t\tq: \"Why am I being asked to complete this form?\",\n\t\t\t\ta: \"The requesting General Contractor, in an effort to improve their bidding process and ensure data consistency among their subcontractors have asked all subcontractors to keep on file updated company qualification data.\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tq: \"How often do I need to update this information?\",\n\t\t\t\ta: \"You have the ability to update your information at any time. Only certain performance data will be required to updated annually as a majority of your company information may not change.\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tq: \"I've worked with the requesting General Contractor many times in the past, why am I being asked to complete this now?\",\n\t\t\t\ta: \"The requesting General Contractor is updating their database so that all subcontractors have current and consistent company and performance information on file regardless of previous contract awards.\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tq: \"What if I don’t know the answers to all the questions being asked?\",\n\t\t\t\ta: \"If you do not have the information on hand, you may return to the form once you are ready. All of your previously entered information will remain intact.\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tq: \"I've completed every field but the form is not at 100%.\",\n\t\t\t\ta: \"Fields that are incomplete will be highlighted in red. Common fields that are overlooked as complete are phone number fields which require all 10 digits to be considered complete. You can view the left hand menu to determine which section is incomplete.\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tq: \"One of our divisions/offices already filled in this information and it's all the same. Do I need to do it again?\",\n\t\t\t\ta: \"If you have received the request multiple times to your same email address, please contact the General Contractor as this means you have been entered twice in the address book of the General Contractor. If the requests have gone to different contacts within your company and each contact is responsible for submitting bids for their respective office/division, then yes each contact will need to fill out the form.\"\n\t\t\t}\n\t\t],\n\t\tproqualFaqItems: [\n\t\t\t{\n\t\t\t\tq: \"I've already completed this form for another GC, can I transfer that info to this form?\",\n\t\t\t\ta: \"The information you fill out for the requesting General Contractor is for their eyes only. However if you would like to share your current information and not have to fill out the full form for another party, please click here to find out how.\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tq: \"I have never received a bid or job from this GC, why should I complete this form?\",\n\t\t\t\ta: \"In an effort to make better subcontracting decisions and provide subcontractors with the right opportunities, the data on this form will help us get you the requests that match your specialties with our upcoming work. Filling out this form will increase the likelihood that you will be considered for a project in the future.\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tq: \"I only want to complete this form if I'm awarded a job.\",\n\t\t\t\ta: \"The requesting General Contractor is utilizing the this data in addition to information provided with bids. By taking the 15 minutes to complete this now will them know who is serious about bidding.\"\n\t\t\t}\n\t\t]\n\t},\n\tevents: {\n\t\t'click .network-upgrade': 'networkUpgrade',\n\t\t'click .edit-profile': 'editProfile',\n\t\t'click .view-prequal-faq': 'viewFaq',\n\t\t'click .screening-back-to-dashboard': 'backToDashboard',\n\t\t'click .screening-dashboard-view-client': 'renderClientScreenings',\n\t\t'click .prequal-export-pdf-user': 'exportPDF',\n\t\t'click .prequal-export-excel-user': 'exportExcel'\n\t},\n\tafterRender: function () {\n\t\tif (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DODGE_CRM) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DODGE_WG)) {\n\t\t\tthis.$('.network-upgrade,.edit-profile').removeClass('hidden');\n\t\t}\n\n\t\tif (!this.collection.hasItems()) {\n\t\t\tthis.$('.screening-back-to-dashboard').addClass('hidden');\n\n\t\t\tlet callback = _.bind(function (logoURL) {\n\t\t\t\tlet publicClient = new PJQ.models.screenings.ScreeningClient({\n\t\t\t\t\tmasterUserId: this.collection.options.masterUserId,\n\t\t\t\t\tlogoURL: logoURL,\n\t\t\t\t\tprequal: new PJQ.models.prequal.Prequal({\n\t\t\t\t\t\tmasterUserId: this.collection.options.masterUserId,\n\t\t\t\t\t\tcontact: this.collection.options.contact\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t\tthis.renderClientPrequal(publicClient);\n\t\t\t}, this);\n\t\t\tif (this.collection.options.masterUserId === PJQ.constants.publicUserId) {\n\t\t\t\tcallback(PJQ.constants.publicLogoURL);\n\t\t\t}\n\t\t\telse {\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: 'users',\n\t\t\t\t\t\t\tvalue: this.collection.options.masterUserId\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'logo'\n\t\t\t\t\t\t}\n\t\t\t\t\t])\n\t\t\t\t}).get().done(function (response) {\n\t\t\t\t\tcallback(response.url);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.renderClients();\n\t\t}\n\t},\n\trenderNavClient: function (client) {\n\t\tif (client != null) {\n\t\t\tthis.$('.screening-nav-client-info').html($('', {\n\t\t\t\tsrc: client.get('logoURL'),\n\t\t\t\tclass: 'max-ht-75p max-wd-100'\n\t\t\t}));\n\t\t\tthis.$('.screening-nav-client').animateCSS('slideDown');\n\t\t}\n\t\telse {\n\t\t\tthis.$('.screening-nav-client').animateCSS('slideUp', function () {\n\t\t\t\tthis.$('.screening-nav-client-info').empty();\n\t\t\t}, this);\n\t\t}\n\t},\n\trenderClients: function () {\n\t\tif (this.dashboardClients) {\n\t\t\tthis.dashboardClients.render();\n\t\t}\n\t\telse {\n\t\t\tthis.dashboardClients = new PJQ.views.screenings.ScreeningDashboardClients({\n\t\t\t\tel: this.$('.screening-dashboard-body'),\n\t\t\t\tcollection: this.collection,\n\t\t\t\tdashboard: this\n\t\t\t});\n\t\t}\n\t\tthis.$('.screening-dashboard-body').animateCSS('fadeIn');\n\t},\n\trenderClientScreenings: function (client, filter) {\n\t\tif (!(client instanceof PJQ.models.screenings.ScreeningClient)) {\n\t\t\tclient = this.contextClient;\n\t\t}\n\t\telse {\n\t\t\tthis.contextClient = client;\n\t\t}\n\n\t\tlet percentComplete = client.prequal.get('percentComplete');\n\t\tif (percentComplete != null && percentComplete < 100 && client.get('isPrequalActive')) {\n\t\t\tthis.renderClientPrequal(client);\n\t\t}\n\t\telse {\n\t\t\tthis.checkPayment(client, _.bind(function () {\n\t\t\t\tthis.checkTerms(client, _.bind(function () {\n\t\t\t\t\tif (this.headerAlert) {\n\t\t\t\t\t\tthis.headerAlert.destroy();\n\t\t\t\t\t\tthis.headerAlert = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.$('.screening-back-to-dashboard,.screening-dashboard-nav-extend').animateCSS('slideDown');\n\n\t\t\t\t\tif (this.prequalEditor != null) {\n\t\t\t\t\t\tthis.$('.screening-dashboard-view-client, .btn-export-prequal').animateCSS('slideUp');\n\t\t\t\t\t\tthis.prequalEditor.remove();\n\t\t\t\t\t\tthis.prequalEditor = null;\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.dashboardClients != null) {\n\t\t\t\t\t\tthis.dashboardClients.remove();\n\t\t\t\t\t\tthis.dashboardClients = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.loader = new PJQ.Loader(this.$('.screening-dashboard-body'));\n\n\t\t\t\t\tclient.fetch({\n\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\tthis.loader.remove();\n\t\t\t\t\t\t\tthis.loader = null;\n\t\t\t\t\t\t\tthis.screeningEditor = new PJQ.views.screenings.ScreeningClientEditor({\n\t\t\t\t\t\t\t\tel: this.$('.screening-dashboard-body'),\n\t\t\t\t\t\t\t\tmodel: client,\n\t\t\t\t\t\t\t\tfilter: filter,\n\t\t\t\t\t\t\t\tnavContainer: this.$('.screening-dashboard-nav-extend')\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.renderNavClient(client);\n\t\t\t\t}, this));\n\t\t\t}, this))\n\t\t}\n\t},\n\tcheckPayment: function (client, callback) {\n\t\tif (!client.get('isPaid')) {\n\t\t\tnew PJQ.views.payment.PaymentModal({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\t\tvalue: PJQ.app.session.contact.id\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'screenings',\n\t\t\t\t\t\tvalue: client.get('masterUserId')\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'payment'\n\t\t\t\t\t}\n\t\t\t\t]),\n\t\t\t\tonComplete: _.bind(callback, this),\n\t\t\t\tproducts: client.products\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tcallback();\n\t\t}\n\t},\n\texportPDF: function () {\n\t\tthis.export(false);\n\t},\n\texportExcel: function () {\n\t\tthis.export(true);\n\t},\n\texport: function (isExcel) {\n\t\tif (this.contextClient) {\n\t\t\tlet prequal = this.contextClient.prequal,\n\t\t\t\tcontactId = prequal.contact.get('contactId')\n\t\t\tPJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\tvalue: contactId\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'prequal'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'export'\n\t\t\t\t}\n\t\t\t], [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'masterUserId',\n\t\t\t\t\tvalue: this.contextClient.get('masterUserId') > 0 ? this.contextClient.get('masterUserId') : (PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.app.session.get('masterUserId'))\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tparameter: 'isExcel',\n\t\t\t\t\tvalue: isExcel\n\t\t\t\t}\n\t\t\t]));\n\t\t}\n\t\telse {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Export failed.'\n\t\t\t});\n\t\t}\n\t},\n\tcheckTerms: function (client, callback) {\n\t\tif (client.checkNeedsTerms()) {\n\t\t\tnew PJQ.views.screenings.ScreeningTermsModal({\n\t\t\t\tcollection: client.terms,\n\t\t\t\tonComplete: _.bind(callback, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tcallback();\n\t\t}\n\t},\n\trenderClientPrequal: function (client) {\n\t\tif (!(client instanceof PJQ.models.screenings.ScreeningClient)) {\n\t\t\tclient = this.contextClient;\n\t\t}\n\t\telse {\n\t\t\tthis.contextClient = client;\n\t\t}\n\n\t\tif (client.checkNeedsTerms()) {\n\t\t\tnew PJQ.views.screenings.ScreeningTermsModal({\n\t\t\t\tcollection: client.terms,\n\t\t\t\tonComplete: _.bind(function () {\n\t\t\t\t\tthis.renderClientPrequalUI(client);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.renderClientPrequalUI(client);\n\t\t}\n\t},\n\trenderClientPrequalUI: function (client) {\n\t\tthis.renderNavClient(client);\n\n\t\tthis.$('.screening-dashboard-body').animateCSS('fadeOut', function () {\n\t\t\tif (this.collection.hasItems()) {\n\t\t\t\tthis.$('.screening-back-to-dashboard,.screening-dashboard-nav-extend').animateCSS('slideDown');\n\t\t\t}\n\n\t\t\tif (this.dashboardClients != null) {\n\t\t\t\tthis.dashboardClients.remove();\n\t\t\t\tthis.dashboardClients = null;\n\t\t\t}\n\n\t\t\tthis.$('.screening-dashboard-body').animateCSS('fadeIn');\n\t\t\tthis.loader = new PJQ.Loader(this.$('.screening-dashboard-body'));\n\n\t\t\tclient.prequal.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tif (client.hasItems()) {\n\t\t\t\t\t\tthis.$('.screening-dashboard-view-client').prop('disabled', true).animateCSS('slideDown');\n\t\t\t\t\t\tthis.$('.btn-export-prequal').animateCSS('slideDown');\n\n\t\t\t\t\t\tclient.prequal.on('change:percentComplete', function () {\n\t\t\t\t\t\t\tthis.renderCriteriaButton(client);\n\t\t\t\t\t\t}, this);\n\n\t\t\t\t\t\tif (client.get('isPrequalActive')) {\n\t\t\t\t\t\t\tthis.headerAlert = new PJQ.Alert(this.$('.screening-dashboard-header'), {\n\t\t\t\t\t\t\t\ttype: 'warning',\n\t\t\t\t\t\t\t\ttext: '' + client.get('clientName') + ' requires your qualification statement to be 100% complete before viewing any requested criteria.',\n\t\t\t\t\t\t\t\tisPrepend: true,\n\t\t\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\t\t\tin: 'fadeIn',\n\t\t\t\t\t\t\t\t\tout: 'fadeOut'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.renderCriteriaButton(client);\n\n\t\t\t\t\tthis.prequalEditor = new PJQ.views.prequal.PrequalEditor({\n\t\t\t\t\t\tel: this.$('.screening-dashboard-body'),\n\t\t\t\t\t\tmodel: client.prequal,\n\t\t\t\t\t\tclients: this.collection,\n\t\t\t\t\t\tpreferences: client.preferences,\n\t\t\t\t\t\tnavContainer: this.$('.screening-dashboard-nav-extend'),\n\t\t\t\t\t\tdashboard: this\n\t\t\t\t\t});\n\t\t\t\t\tthis.loader.remove();\n\t\t\t\t\tthis.loader = null;\n\t\t\t\t}, this),\n\t\t\t\terror: function (model, result) {\n\t\t\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.PJQPROFILE_GET_SCREENINGS, {\n\t\t\t\t\t\tmodel: model,\n\t\t\t\t\t\tresult: result\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}, this);\n\t},\n\trenderCriteriaButton: function (client) {\n\t\tlet percentComplete = client.prequal.get('percentComplete');\n\t\tthis.$('.screening-dashboard-view-client').prop('disabled', percentComplete != null && percentComplete < 100);\n\t},\n\tbackToDashboard: function () {\n\t\tthis.contextClient = null;\n\n\t\tthis.renderNavClient();\n\n\t\tif (this.headerAlert) {\n\t\t\tthis.headerAlert.destroy();\n\t\t\tthis.headerAlert = null;\n\t\t}\n\n\t\tthis.$('.screening-back-to-dashboard,.screening-dashboard-view-client,.screening-dashboard-nav-extend').animateCSS('slideUp');\n\t\tthis.$('.screening-dashboard-body').animateCSS('fadeOut', function () {\n\t\t\tif (this.prequalEditor) {\n\t\t\t\tthis.prequalEditor.remove();\n\t\t\t\tthis.prequalEditor = null;\n\t\t\t}\n\t\t\telse if (this.screeningEditor) {\n\t\t\t\tthis.screeningEditor.remove();\n\t\t\t\tthis.screeningEditor = null;\n\t\t\t}\n\t\t\tthis.renderClients();\n\t\t}, this);\n\t},\n\tnetworkUpgrade: function () {\n\t\tlet redirectURL = 'http://network.panteratools.com/pantera-network/?';\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROQUAL_PORTAL))\n\t\t\tredirectURL = 'http://demo.panteratools.com/verified-network-long-video-page/?';\n\t\t//todo: load directorysettings from api\n\t\telse if (directorySettings.IsNetworkContact && directorySettings.NetworkVerificationLevel == 1)\n\t\t\tredirectURL = 'http://demo.panteratools.com/verified-network-landing-pages-from-pn/?';\n\t\twindow.open(redirectURL + this.model.contact.id.toString(), '_blank');\n\t},\n\teditProfile: function () {\n\t\tPJQ.app.router.navigate('profile', {\n\t\t\ttrigger: true\n\t\t});\n\t},\n\tviewFaq: function () {\n\t\tlet faqItems = this.options.baseFaqItems;\n\t\tif (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DODGE_CRM) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DODGE_WG))\n\t\t\tfaqItems = _.union(faqItems, this.options.proqualFaqItems);\n\t\tnew PJQ.views.BaseModal({\n\t\t\theader: \"Frequently Asked Questions\",\n\t\t\tisShowOkButton: false,\n\t\t\tisShowCancelButton: true,\n\t\t\tcancelButtonText: \"Close\",\n\t\t\tbody: PJQ.templating.TemplateRenderer.parseTemplate(this.options.subTemplates.faq, {\n\t\t\t\tfaqItems: faqItems\n\t\t\t}).html(),\n\t\t\tokButtonText: \"Ok\"\n\t\t});\n\t},\n});\n\nPJQ.views.screenings.ScreeningDashboardClients = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Screening-Editor-Dashboard-Clients')\n\t},\n\tevents: {\n\t\t'click .btn-screening-view-prequal': 'viewClientPrequal',\n\t\t'click .btn-screening-view-client': 'viewClientScreenings',\n\t\t'click .screening-view-client-attention': 'viewClientScreeningsAttention'\n\t},\n\trenderData: function(){\n\t\treturn {\n\t\t\tcollection: this.collection\n\t\t};\n\t},\n\tafterRender: function () {\n\t\t_.each(this.collection.models, function (model) {\n\t\t\tlet $clientElement = this.getClientElement(model.cid),\n\t\t\t\tstatusStats = model.getItemStatusStats(),\n\t\t\t\tstatusLabels = [],\n\t\t\t\tstatusCounts = [],\n\t\t\t\tstatusColors = [];\n\n\t\t\t//Render prequal progress and attach events\n\t\t\tif (model.prequal != null) {\n\t\t\t\tlet progressBar = new PJQ.progress.ProgressBar($clientElement.find('.prequal-progress'), {\n\t\t\t\t\tisShowPercentage: true,\n\t\t\t\t\theight: 30,\n\t\t\t\t\tprogress: model.prequal.get('percentComplete')\n\t\t\t\t});\n\t\t\t\tmodel.prequal.on('change:percentComplete', function () {\n\t\t\t\t\tprogressBar.updateProgress(model.prequal.get('percentComplete'));\n\t\t\t\t}, this)\n\t\t\t}\n\n\t\t\t//Render screening items attention link\n\t\t\tlet attentionItemsCount = _.size(model.getAttentionItems()),\n\t\t\t\t$attentionContainer = $clientElement.find('.screening-view-client-attention-container');\n\t\t\tif (attentionItemsCount > 0) {\n\t\t\t\tlet $element = $('