{"version":3,"sources":["1initializers.js","addparticipantmodals.js","attachments.js","constants.js","locations.js","nda.js","privatemessaging.js","procore.js","projectdashboardviews.js","projectdetailsviews.js","projectmessaging.js","projectmessagingdatatables.js","projectmessagingmodels.js","quickadd.js","reports.js"],"names":["PJQ","app","module","constants","modules","PROJECTWALL","addOldRoutes","route","name","callback","router","navigate","trigger","replace","projectWall","oldRoutes","projectId","routes","moduleName","session","preferences","hasPref","preferenceTypes","PROJECT_WALL_DEFAULT_MODULE","getPref","toString","set","response","initProjectNavigator","parseInt","detailedProject","projectMessageId","viewProjectMessageId","copyProjectMessageId","deleteProjectMessageId","viewName","view","noRoute","viewUserMessageId","submittalId","window","pjqSubmittalLoadId","msgContext","sessionId","projectContactTemp","pjqSessionId","isNewMsg","activeItem","viewOptions","project","isFetched","id","initNavigator","models","projects","Project","isDetail","fetch","notify","success","get","nda","accessKey","_","size","ajax","Request","endpoint","post","user","settings","SelectectContactGroupsTemp","SelectectContactsTemp","SharedFolderId","helpers","urlHelpers","generateEndpoint","value","done","bind","initNav","fetchUserMessageTypes","TokenManager","getTokensForAccessKey","error","this","views","SignProjectNDAModal","model","status","notifications","warningNotify","message","ErrorHandler","handle","toJSON","errorNotify","addRoutes","AddParticipantsDetailedModal","BaseModal","extend","defaults","template","templating","Template","minWidth","onSave","isWrapForm","wrapFormName","isUseNewAddressBook","events","click .btn-add-selected","beforeModalCreated","renderData","options","beforeRender","afterRender","data","Alert","$","type","text","extraClasses","addressBookView","addressbook","AddressBook","el","selectionMode","addressBook","ADD_TO_PROJECT","disabledContacts","disableContacts","contactsNoGroup","disabledContactGroups","isMultipleProjects","contactGroups","onSelection","contactsAll","prop","selectedContactsAll","fail","selectedCompanies","selectedContacts","selectedGroups","selectedContactGroups","pjqABContext","pjqIsAddProjectContacts","isHideMerge","isHideAddSelectedContacts","isHideReturnToProject","isHideImportExport","initAbEditCallback","isEditing","hide","show","$form","validator","validate","onsubmit","onkeyup","showErrors","errorMap","errorList","i","element","errorsFor","remove","defaultShowErrors","errorPlacement","html","attr","hasClass","appendTo","parent","errorClass","ignore","initAddressBook","addSelected","selectedContactsNoGroup","removeModal","contactIds","contactCompanyIds","contactGroupIds","projectContactIds","results","length","AddParticipantsErrorModal","onContinue","noop","click .btn-copy-phone","click .btn-continue","click .export","dataTables","DataTable","pageLength","isHideSearch","dom","order","columns","title","orderable","render","row","phoneFormatted","phone","formatHelpers","formatPhoneNumber","phoneExtension","continue","export","files","downloadFile","url","isEndpoint","copyPhone","e","inputId","uniqueId","hiddenInput","currentTarget","style","$el","append","select","document","execCommand","successNotify","Attachments","FileNavigator","subTemplates","file","fileMenu","sortBy","sortDirection","isHideDrawings","enableDrawings","canAdd","canShare","isAdmin","isReadOnly","hideHeader","foldersOnly","click .btn-upload-raw-files","click .btn-attach-documents","click .btn-add-shared-folder","click .btn-add-private-folder","click .btn-add-to-drawings","click .btn-select-contents","click .btn-add-selected-to-drawings","change .input-select-all","click .btn-download-all","beforeFirstRender","prefs","DISABLE_DRAWINGS","hasPermission","DISABLE_SHARE_PEI","RSVP_FOLDER_CHECKBOXES_ONLY","canAddDrawings","EXPAND_PROJECT_ATTACHMENTS","expandAllFolders","sfOverride","PROJECT_SHARED_FOLDER_NAME_OVERRIDE","sharedFolderNameOverride","fetchAttachments","isPrivate","DISABLE_PROJECT_PRIVATE_ATTACHMENTS","getMenuActions","self","onClick","attachRootAttachments","isShown","attachment","addFolder","uploadToFolder","downloadAttachments","getFolderAttachments","FileViewer","toLowerCase","endsWith","shareAttachments","exportFileList","addToDrawings","getDepth","selectFolderContents","cutAttachments","copyAttachments","paste","clipboard","renameAttachment","attachmentProperties","isDanger","deleteAttachments","selectFolderContentsClicked","$attachment","closest","collection","folder","addSelectedAttachmentIds","map","att","cid","getAttachmentElement","siblings","find","uploadRawFiles","RawFileUploaderModal","allChecked","isChecked","attachmentIds","selectedAttachmentIds","addSharedFolderClicked","getSharedFolder","addPrivateFolderClicked","getPrivateFolder","FileSelector","disabledAttachmentIds","attachFiles","attachments","replaceVersionFolders","shareDrawings","collections","drawings","Drawings","versionIds","allDrawings","DRAWING_SHARE_PREVENT_EXPIRATION","objectHelpers","refinedType","each","filter","indexOf","push","add","Drawing","guid","fileGuids","sharingModal","sharing","SharingModal","share","urlChanged","shareAtt","fnCheck","apply","_toConsumableArray","Files","downloadAll","addToDrawingsClicked","addSelectedToDrawings","versions","Versions","DrawingBatchModal","DrawingBatch","AttachmentsModal","maxWidth","click .btn-save","attachmentsView","expandSharedFolders","EXPAND_PROJECT_ROOT_SHARED_FOLDERS","projectMessaging","GROUPCOMP","GROUPCOMP_COMP","GROUPCOMP_COMP_CONT","GROUPCONT","GROUPCONT_CONT","MSGCONT","MSGCONT_CONT","RSPCONT","RSPCONT_CONT","COMP","COMP_CONT","CONT","CONTGROUP","BIDPKGS","BIDPKGS_CONT","LocationManagement","BaseView","tier","location","editLocation","click .location:not(.editing)","click .btn-add-location","keyup .input-location-name","click .btn-edit-location","click .btn-delete-location","click .btn-cancel-edit","click .btn-save-location","fetchLocations","locations","on","next","toggle","stopPropagation","renderTiers","locationNameChanged","key","keyCode","saveLocationClicked","addLocationClicked","renderLocationEdit","editLocationClicked","$location","endLocationEdit","addClass","renderSubTemplate","focus","$add","replaceWith","renderLocation","getActiveLocations","outerHTML","saveLocation","val","parentId","Location","contextLocation","save","locationClicked","deleteLocationClicked","children","getChildren","fnDelete","destroy","union","activeLocations","reverse","newContextLocation","modals","DeleteCancel","header","body","onDelete","result","getParents","$tiers","empty","nextTierLocations","ctActive","renderTier","getSiblings","getRootLocations","tierNumber","activeParent","TemplateRenderer","parseTemplate","activeIds","BaseModel","idAttribute","Locations","BaseCollection","arguments","undefined","fnGetChildren","_result","where","pId","fnGetParent","getPickerArray","getChildrenNames","parentName","child","newParentName","rootParent","getFullName","parents","click .btn-decline-nda","click .btn-sign-nda","change .input-nda-agree","inputHelpers","inputMaskPhone","agreeChanged","decline","Loader","updateResponse","projectContacts","bidStatus","DECLINE","close","signInNavigate","sign","isValid","$companyName","companyName","setInputError","$contactName","contactName","$title","$email","email","$phone","$error","loadingText","EditProjectNDAModal","change .cb-override","click .btn-delete-nda","click .btn-cancel-nda","click .btn-save-nda","fetchNDAs","ndas","fetchNDA","inputs","Selectpicker","hideDisabled","defaultValue","onChange","useNDA","ndaId","ndaText","overrideChanged","findWhere","isDefault","deleteClicked","cancelClicked","onCancel","saveClicked","SaveDontSave","isShowDontSaveButton","saveNda","silent","UserMessages","click .btn-view-message","click .btn-delete-message","click .btn-user-messages-add","click .btn-user-messages-inbox","click .btn-user-messages-sent","userMessageId","userMessage","userMessages","UserMessage","viewMessage","messageStats","userId","PRIVATE_MESSAGING_USER_ID_DEFAULT","$userFilter","totalMessageCount","reduce","stat","messageCount","memo","isMultiple","refreshView","dataTable","language","emptyTable","autoWidth","rowGroup","enable","rowText","from","to","width","Date","display","dateHelpers","getDateString","dateFormats","DATE_TIME","searchable","className","visible","onRowDoubleClick","$inboxBtn","$sentBtn","removeClass","resetData","openInbox","openSent","viewMessageClicked","getRow","updateViewed","refresh","UserMessageModal","onSend","newMessageClicked","deleteMessageClicked","removeRow","userMessageTypeId","change select.user-message-type","keyup .user-message-body","keyup .user-message-reply","click .btn-reply","keyup .user-message-bid-amount","click .user-message-close","click .user-message-send","click .user-message-export","userMessageType","userMessageTypes","thread","UserMessageThread","listenTo","isNew","newValue","uploader","FileUploaderGrid","canUpload","canDelete","onSuccess","valueChanged","afterDelete","replyUploader","isSmall","replyChanged","replyClicked","newMessage","replyToMessageId","canSend","onClose","onExport","ProcorePublishModal","onPublish","procoreProjectNumber","click .publish","isProcoreProjectNumber","companyInput","isIntChoices","isDisabled","companies","loader","afterCompanyChanged","xhr","err","startDateInput","Datepicker","datepickerOptions","format","datePicker","DATE","defaultDate","parseDateString","completeDateInput","ProjectAttachments","isHideDownload","isHideFiles","isHidePrivate","selectedAttachments","companyOffices","companyOfficeInput","setValue","updateChoices","choices","programs","projectProgramInput","projectTemplates","projectTemplateInput","projectTypes","projectTypeInput","projectStages","projectStageInput","publish","projectAddress","office_id","getValue","project_stage_id","program_id","project_type_id","project_template_id","square_feet","numbersOnly","PROCORE_PROJECT_NUMBER_CUSTOM_FIELD","postData","company_id","trim","project_number","address","city","zip","state_code","country_code","description","public_notes","est_start_date","est_completion_date","flagColor","pantera_project_id","documentListDrawings","join","documentListPublic","documentListPrivate","isSyncProjectContactVendors","is","responseJSON","exceptionMessage","dashboard","ProjectDashboard","click .btn-alert-order-prints","click .stack-takeoff","click .square-takeoff","click .e-takeoff","click .btn-update-my-info","click .btn-submit-bid","click .btn-feature-settings","ENABLE_BID_PACKAGES_COUNT","fetchBidPackages","bp","bidPackages","showBidPackages","bidPackage","n","mobile","getDevice","AppDownloadModal","renderBidPackages","ProjectStats","emptyCallback","Newsfeed","inviteHeader","ProjectInviteHeader","checkNested","cb","portal","customization","submitBidMessage","ProjectDetails","details","ProjectContactDetails","contact","ProjectMessagesSub","isHideEmptyFolders","BidPackages","orderPrints","OrderPrintsModal","updateMyInfo","contacts","BaseEditContactModal","ProjectContact","viewFeatureSettings","featureSettings","FeatureSettingsModal","FeatureSetting","stackTakeoff","href","squareTakeoff","SquareTakeoffModal","eTakeoff","eTakeoffModal","messageTypeId","DISABLE_PROJECT_PRIVATE_MESSAGES","ProjectProposals","newsfeedItems","pageNumber","pageSize","click .btn-project-newsfeed-refresh","click .btn-project-newsfeed-view-message-participants","click .btn-project-newsfeed-view-attachments","click .btn-project-newsfeed-copy-message","click .btn-project-newsfeed-delete-message","getNewsfeed","refreshNewsfeed","parameter","items","viewAttachments","item","auditAction","projectMessage","ViewMessageAttachmentsModal","viewMessageParticipants","IS_PROJECT_WALL_MESSAGING_NEW","copyMessage","deleteMessage","auditLogId","okButtonText","onOk","delete","selectedCommentId","DeleteProjectMessageByCommentId","isShowCancelButton","cancelButtonText","statItem","getProjectStats","projectStats","stats","labels","graphSet","backgroundColor","datasets","dataset","upperCaseFirstLetterEachWord","label","count","color","$chart","charts","Chart","height","showTotal","total","cutoutPercentage","legend","clickedSegments","segment","_index","click .send-user-message","getCompanyLogoUrl","hideBidsDue","PROJECT_WALL_HIDE_BIDS_DUE","projectResponseButtons","getProjectStatusList","index","colorClass","sendUserMessage","messageItems","click .project-message>.card-header","click .project-message .btn-download-attachment","shown.bs.collapse .project-message .collapse","fetchProjectMessageResponses","responses","projectStatuses","messageResponseButtons","getMessageStatusList","messages","renderMessageResponseButton","contextMessage","getContextMessage","setContextMessage","collapse","urlStatus","actualStatus","toUpperCase","handleResponse","renderContextMessageResponseButton","selectedMessage","canChangeStatus","noResponseMessages","getChangeableMessages","max","getDateDiff","getMessageElement","messageShown","messageType","GetGroupResponsesSubModal","responseButton","contextResponseControl","checkDeclinedResponseQuestion","projectMessages","ProjectContactGroups","contactGroup","ProjectContactGroup","ENABLE_PROJECT_MESSAGE_DECLINE_QUESTION","getProjectStatuses","statuses","declineQuestionSettings","projectParticipants","ProjectMessageDeclineQuestionSettings","projectLocation","recipientGroups","questions","question","ProjectMessageDeclineQuestionModal","ButtonGroup","colorInactiveButtons","buttonClasses","separateButtons","buttons","DOWNLOAD_CONTACT_UPDATE_REQ","alert","ENABLE_SUB_RESPONSE","stopPropagationIfSelected","downloadAttachment","click .group-status-close","click .group-status-save","groups","globalResponse","group","groupResponse","setSaveButton","getGroupElement","DownloadTermsModal","minHeight","onAccept","click .terms-accept","onAcceptClicked","DOWNLOAD_TERMS_SIGNATURE_REQ","put","ProjectMessageResponseModal","onResponse","click .square-video","click .square-login","click .square-register","watchVideo","open","login","register","click .etakeoff-download","click .etakeoff-launch","download","encodeURIComponent","launch","folderColors","preventSelectAll","canOrder","change .input-select-attachment","click .attachment .pretty","click .attachment","click .btn-order-selected","click .btn-download-attachment","click .btn-download-selected","click .btn-download-all-flattened","click .btn-download-all-combined","click .btn-view-attachment","DISABLE_ORDER_PRINT","isDeferred","renderAttachments","menus","ContextMenu","selector","actions","fetchElementData","onOpen","$container","sortAttachments","getRootSharedAttachments","renderAttachment","PROJ_DASHBOARD_SELECT_ALL_ATTACHMENTS","$checkbox","folderColor","isExpanded","expandedFolders","isSelected","$folder","selectedAttachment","folderAttachment","first","sort","a","b","aso","bso","sortHelpers","sortAlphaNum","attachmentClicked","expandFolder","css","background","attachmentChecked","folderAttachments","addSelectedAttachments","parentFolder","getParentFolder","contains","removeSelectedAttachments","removeSelectedChildAttachmentsRecursive","allAtt","setParentCheckbox","renderSelectedButton","removeSelectedParentFolderRecursive","selectedCount","hasUnselectedAttachments","folderHasUnselectedAttachments","checkDownloadRequirements","downloadSelected","downloadAllCombined","raster","merge","downloadAllFlattened","opts","viewAttachment","isImage","renderPhotoViewer","canRender","isFolder","YesNo","onYes","click .btn-download","entryIds","entryId","queueDownload","entryList","click .submit-response","change input[type=\"radio\"]","responseChanged","submitResponse","$question","substring","reason","field","layout","sortOrder","fields","classes","click .btn-project-edit-cancel","click .btn-project-save","click .btn-push-erp","click .btn-undo-push-erp","click .btn-link-erp","click .btn-unlink-erp","click .btn-project-export","change .input-project-nda","click .btn-edit-project-nda","change .input-details-admin-only","ENABLE_PROJECT_STATUS_ID","column","canEdit","IS_PROJECT_HOME_READONLY","mergePortalLayout","defs","portalDefaults","triggerPortalDefaults","startEndHide","START_END_HIDE","fetchProjectStatuses","fetchERPIntegration","erp","erpIntegration","fetchERPObject","renderERP","pushSupported","hasAvailableAction","integrations","PUSH_PROJECT","linkSupported","LINK_PROJECT","unlinkSupported","UNLINK_PROJECT","renderERPButtons","canPush","disablePushReason","erpSyncStatus","pushERP","_this","pushProject","undoPushERP","_this2","syncStatuses","REVIEWING","undoPush","linkERP","LinkERPProjectModal","erpProject","isERPSynced","unlinkERP","_this3","unlinkProject","findPortalLayoutField","searchField","col","nextSort","customFields","customField","cf","layoutOptions","notesHide","PROJECT_WALL_ADMIN_NOTES_HIDDEN","isNotesRequired","PROJECT_WALL_ADMIN_NOTES_REQUIRED","isUser2Required","PROJECT_WALL_ADMIN_USER_2_REQUIRED","isCityRequired","isStateRequired","isZipRequired","isBidDueDateRequired","PROJECT_WALL_ADMIN_BID_DUE_DATE_REQUIRED","notesLabel","PROJECT_NOTES_LABEL","responseDueLabel","RESPONSE_DUE_LABEL","startDateLabel","PROJECT_START_LABEL","finishDateLabel","PROJECT_FINISH_LABEL","user1Label","PROJECT_USER_1_LABEL","user2Label","PROJECT_USER_2_LABEL","user2Hide","PROJECT_USER_2_HIDE","defaultNDAChecked","PROJECT_NDA_CHECKED_DEFAULT","isEdit","canExport","PROJECT_DETAILS_EXPORT","changedId","def","reference","timeReference","refValue","timeRefValue","refCfId","refCf","refFieldValue","selChoice","timeRefCfId","timeRefCf","timeRefFieldValue","match","offset","getNewDateAddDays","defaultTime","dt","weekdaysOnly","minOffset","getTime","cfId","fieldValue","projectCustomFieldsForm","dueDatePicker","startDatePicker","endDatePicker","coreBinder","CustomFieldsForm","shouldRenderTemplate","fieldValues","fieldId","Binder","watchElements","statePicker","StatePicker","country","IS_DOCUMENT_CLERK","CountryPicker","zipInput","newTime","onShow","context","datetimepicker","date","PROJECT_DEFAULT_BID_DUE_TIME","PROJECT_DEFAULT_BID_DUE_TIME_AMPM","tempDate","timeParts","split","hours","minutes","getFullYear","getMonth","getDate","projectStatusIdSelectPicker","getDefault","userInput","ContactsSelectInput","contexts","USERS","selectedContact","isSingleChoice","emptyNotice","onAdd","user2Input","user2","ENABLE_SCOPES","ProjectScopes","ndaRequiredChanged","editProjectNDA","renderNDARequired","ProjectNDA","hasNDA","detailsAdminOnlyChanged","isDetailsAdminOnly","patch","alertMessage","exportPDF","Intl","DateTimeFormat","resolvedOptions","timeZone","handleDownload","cancelEdit","errors","REQUIRE_PROJECT_START_FINISH","PROJECT_STATUS_NON_DEFAULT_REQUIRED","wasNew","PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS","PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS","PROJECT_WALL_ADMIN_ZIP_REQUIRED","ProjectMapModal","click .map-recenter","mapRecenter","setCenter","myLatLng","markerTitle","geocoder","google","maps","Geocoder","Map","getElementById","mapOptions","geocode","GeocoderStatus","OK","geometry","Marker","position","getStreetView","setVisible","setMapTypeId","MapTypeId","SATELLITE","setZoom","Scopes","scopes","ProjectMessaging","selectedProjectMessageContactBroadcasts","isPrintOrder","isDownloaded","isVisited","isDelivered","isOpened","vendorSector","laborStatus","minorityStatus","hasCompanyLevelCustomFields","hasContactLevelCustomFields","keyup .input-pm-search","click .btn-pm-search","click .project-messages-filter","click .project-messages-clear-filter","click .btn-project-message-settings","change .project-message-enable-declined","click .btn-add-participants-from-project","click .btn-quick-add","click .btn-add-participant-new","click .btn-detailed-search","click .btn-detailed-search-new","click .btn-simple-search","click .btn-quick-search","click .project-message-delete-contacts","click .btn-send-message","click .btn-message-template-send","click .project-message-set-responses","click .project-message-order-prints","click .export-view","click .manage-bid-packages","click .import-bid-packages","click .btn-radius-package-add","click .filter-unsent","showGroupCompanyView","PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY","showGroupContactView","PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT","showCompanyView","PROJECT_WALL_ADMIN_VIEW_COMPANY","showContactView","PROJECT_WALL_ADMIN_VIEW_CONTACT","showBidPackagesView","ENABLE_BID_PACKAGES","PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES","clearFilter","isTradesViewSelectAll","updateContactStats","PROJECT_MESSAGING_DISABLE_QUICKADD","ProjectMessageViewSettings","bidFormSettings","bidForms","Settings","fetchBidFormSettings","canViewBidAmount","isSealedBidContact","setting","columnsDefault","orderBy","defaultView","viewSelectPicker","renderContactStats","renderView","onNo","currentView","copyProjectMessage","getSearchFor","searchFor","getViewData","overrides","statusFilter","groupIdList","isPerGroup","publicPrivate","viewSettings","getSettings","filterCustomField","filterCustomFieldValue","filterData","filterCustomFieldName","company","ProjectParticipantsForView","withCustomFields","hasCustomFields","buildApiUrl","reset","filterCfValueLower","filterCustomFieldChoiceIds","cfChoice","checkCf","fieldTypes","CHOICE","intersection","renderViewData","cleanup","dataTableOptions","projectMessagingView","userSettings","afterDataTableRender","getDataTableInstance","ProjectMessagingTradesDataTable","ProjectMessagingCompanyDataTable","ProjectMessagingContactDataTable","ProjectMessagingMessagesDataTable","ProjectMessagingResponsesDataTable","ProjectMessagingBidPackagesDataTable","manageBidPackages","ManageBidPackagesModal","importBidPackages","ImportTemplateModal","onImport","submittals","totalCount","unsentCount","$buttons","addByBidPackageRadius","BidPackageRadiusModal","addSelectedContacts","uniq","removeSelectedContacts","contactId","clearSelectedContacts","addSelectedContactGroups","x","groupId","removeSelectedContactGroups","selectedContactGroup","isContactSelected","enableDeclinedChanged","enableDeclinedHelper","isEnableDeclined","rows","invalidate","draw","searchChanged","search","filterDialog","filterInfo","FilterInfo","FilterProjectParticipantsModal","onFilter","clearFilterClick","filterUnsent","ProjectMessagingSettingsModal","deleteContacts","isRemoveFromAB","deleteContactGroups","deleteParticipantsFromProject","removeFrom","DeleteProjectParticipants","sendMessage","sender","defaultTemplateKey","fetchProjectMessageEmailTemplates","replyToContacts","fnContinue","inviteModal","projectInvites","ProjectInviteModal","emailTemplates","PROJECT_WALL_MESSAGING_SHOW_TEMPLATES","projectMessageSettings","inviteSettings","onAddFromThisProject","onViewSelected","isShowQuickAdd","isShowAttachments","PROJECT_MESSAGING_ENABLE_REPLYTO_OVERRIDE","fetchProjectContacts","projectContact","attributes","quickAdd","QuickAddParticipantsModal","addNewContact","ProjectParticipant","masterUserId","isForceSaveExistingEmail","ADDRESS_BOOK_DEFAULT_COUNTRY","showNotes","showActive","deleteLabel","detailedSearch","DISABLE_NEW_ADDRESSBOOK","simpleSearch","showUnionStatus","IS_HIDE_UNION_STATUS","AddParticipantsModal","isDirectoryEnabled","ENABLE_DIRECTORY","isUnionStatusEnabled","isReturnContactIds","quickSearch","SelectContactsModal","disableBlacklisted","disableBadEmail","addParticipantsById","addParticipantsFromProject","unshift","AddParticipantsFromProjectModal","isBidFormsEnabled","ENABLE_BID_FORMS","projectResponses","templateKey","privateFolders","responseDue","DATE_YMD","deleteProjectMessage","ContactInfoList","recipients","onOrderPlaced","setResponses","SetProjectParticipantsStatusModal","companyComment","contactComment","ids","exportView","GradeProjectContactModal","onGrade","click button.grade","click button.clear-grade","gradeChanged","onClear","ProjectParticipantCommentModal","onComment","comments","participant","isCompanyComments","keyup .project-contact-comment","click .project-contact-comment-save","click .project-comment-delete","commentDeleted","selectedCard","comment","ProjectContactComment","contactCompanyId","projectContactCommentId","parentContainer","isLastCard","last","commentChanged","commentAdded","click button.filter","fieldSettingsEnabled","ENABLE_CONTACT_FIELD_SETTINGS","coreFieldSettings","fetchContactFieldSettings","checkFieldVisible","fieldName","ADDRESS_BOOK_HIDE_SECTOR","ADDRESS_BOOK_HIDE_MINORITY_STATUS","fieldSettings","sectorSelectPicker","publicPrivateSelectPicker","laborStatusSelectPicker","noneSelectedText","minorityStatusSelectPicker","groupSelector","GroupSelector","isShowNoGroup","isShowGroupCount","selectedGroupIds","onGroupSelected","input","groupsData","getGroupsData","selected","change .select-column","click button.settings-save","dbInstance","getColumns","selectedColumns","columnData","rowsPerPage","selectView","undelegateEvents","columnSelected","settingTemp","slice","columnTemp","ManageProjectParticipantTradesModal","click .manage-trades-save","change .select-trade","change .select-all-trades","ProjectParticipantGroups","tradeSelectChanged","tr","tradeSelectAllChanged","click .set-responses","click .comment-type>div","isContactComment","click","projectStatus","commentTypeClicked","$target","click .btn-remove","canDeleteContact","ProjectMessagingDataTable","zeroRecords","commentsTooltip","addCommentTooltip","enableColumnResize","onColumnResizeEnd","c","totalWidth","colWidths","colWidth","idx","colPercents","percent","Math","floor","newColumns","colTp","_typeof","beforeDataTableRender","scrollRows","ENABLE_DATA_TABLE_FIXED_HEADER","projectStatusList","childDataTables","contextMenuOptions","getContextMenuItems","isHideNoActions","setCustomOrder","fixedColumnsLeft","colReorder","realtime","createdRow","orderAscending","columnOrderChanged","orderByChanged","afterDataTableRenderChild","getRowChildTable","childOpts","getRowChildData","setRowStyle","isBlacklisted","statusChanged","getCustomFieldColumn","isCompany","rowField","getCompanyCustomField","getContactCustomField","TEXT","isURL","DATETIME","BOOL","choice","MONEY","parseFloat","formatCurrency","PHONE","phoneWrapped","customFieldId","gradeContactCompany","parentTR","prev","grade","childDT","rowParent","parentDataTable","childRowToggle","childClass","$childTable","class","childData","selectableContacts","declinedContacts","childTable","childDt","childRowToggleAll","eq","node","onStatusChanged","TR","updateStatus","isCompanyBlacklisted","RSVP_DISABLE_PER_GROUP","mouseoverComments","commentHoverContactId","commentHoverContactCompanyId","fnShowComments","Tooltip","container","companyComments","setTimeout","ProjectParticipantComments","mouseleaveComments","addComment","contextId","tp","off","which","preventDefault","commentText","manageComments","getIsRootView","dataIndex","click i.trade-toggle-row","click i.trade-toggle-all-rows","change .trade-select-all-contacts","includeAllColumns","includeColumns","totalParticipants","selectColumnHeader","selectColumnWidth","defaultContent","columnName","cName","cNameTp","innerHtml","statusPercent","textColor","colorHelpers","idealLinkColorForBackground","outerHtml","getChildTableType","getChildTableSettings","selectAll","enableDeclined","isDeclined","change select.bid-package-count","blur .bid-package-notes","_columns$push","enableCount","_defineProperty","d","note","onBidPackageCountChanged","updateBidPackageNotesCount","onBidPackageNotesChanged","notes","bidPackageId","click i.message-toggle-row","click .btn-show-message","click .btn-view-attachments","iconClass","templates","temp","tempKey","tokens","responseType","responseDueDate","substr","foregroundColor","getContactAnchor","showRowFullMessage","target","page_info","page","info","new_row_index","row_position","start","end","page_to_display","len","$dataTable","click i.response-toggle-row","click i.company-toggle-row","change select.company-project-status","click .btn-grade-project-contact-company","change .select-company","mouseover .comment-company","mouseleave .comment-company","click .btn-comment-company","click .btn-add-comment-company","change .select-all-companies","click .btn-show-groups","UploadParticipantBidDocumentsModal","isIndeterminate","distanceThreshold","PROJECT_MESSAGING_DISTANCE_ICON_THRESHOLD","canManage","icons","dist","groupDisplayLimit","groupArray","PROJECT_MESSAGING_MAX_GROUP_DISPLAY","rest","startsWith","companyStatus","companyGroupStatus","companySelectChanged","childRow","companySelectAllChanged","isGroupsView","statusColor","statusColors","blackListed","cssText","showRowGroups","click i.contact-toggle-row","change select.contact-project-status","change select.contact-message-status","click .btn-grade-project-contact","mouseover .comment-contact,.comment-company","mouseleave .comment-contact,.comment-company","click .btn-add-comment-contact,.btn-add-comment-company","click .btn-comment-contact,.btn-comment-contact-company","keyup .contact-bid-amount","blur .contact-bid-amount","change .select-contact","change .select-all-contacts","click .btn-copy-access-key","click .btn-copy-email","inputMaskCurrency","isShowAddContact","becameInactive","parentRow","groupNameList","ProjectParticipantHistoryModal","projectMessageContactBroadcastId","ADDRESS_BOOK_CONTACT_UPDATER_ENABLED","logging","Debug","LoggingActions","SEND_PREQUAL_UPDATE","DISABLE_PREQUAL","logicError","ReportContactModal","showRemoveFromProject","onReport","removeFromProject","PROJECT_ACTIVITY_RANK_STATUS_LIST","maxEmailWidth","proQual","screeningStatuses","Complete","InProcess","subject","origin","emailFormatted","toFixed","userType","userTypes","getByIsCompany","broadcastStatus","paging","ProjectMessagingContactTradesDataTable","parentView","statusChangedHelper","every","rowIdx","tableLoop","rowLoop","groupStatus","onMessageStatusChanged","bidAmountExited","bidAmount","getMoneyInputValue","bidAmountChanged","ctrlKey","queueSave","bidAmountTotal","contactSelectChanged","totalContacts","contactSelectAllChanged","rowCss","copyAccessKey","copyEmail","change select.project-contact-group-status","keyup .contact-group-bid-amount","blur .contact-group-bid-amount","contactBidTotal","companyBidTotal","parentParentTR","ProjectParticipantForView","endpointArr","ProjectParticipantGroupForView","ProjectParticipantCompanyForView","ProjectMessageForView","ProjectResponseForView","ProjectGroupForView","projectMessageBroadcastId","parse","beforeConstruct","keyup .input-email","click .btn-add","emailChanged","addParticipant","emails","newParticipant","isQuickAdd","mod","SelectGroupsModal","alertText","selectorOptions","includeGroupIds","AutoReport","click .export-pdf","jQuery","atob"],"mappings":"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","file":"app.js","sourcesContent":["if (PJQ.app.module === PJQ.constants.modules.PROJECTWALL) {\n\tPJQ.app.addOldRoutes([\n\t\t{\n\t\t\troute: '',\n\t\t\tname: 'default',\n\t\t\tcallback: function () {\n\t\t\t\tPJQ.app.router.navigate('projects', {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t]);\n}\n\nPJQ.modules.projectWall = {\n\toldRoutes: [\n\t\t{\n\t\t\troute: \"?projectid\",\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t],\n\troutes: [\n\t\t{\n\t\t\troute: 'projects/:projectId',\n\t\t\tname: 'projectRoot',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tlet moduleName = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_MODULE) ?\n\t\t\t\t\tPJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_MODULE) : 'dashboard';\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId.toString() + '/' + moduleName, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submitbid#tabPrivateMessage',\n\t\t\tname: 'projectSubmitBidLegacy',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('submitBid', true);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/SubmitBid#tabPrivateMessage',\n\t\t\tname: 'projectSubmitBidLegacy',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('submitBid', true);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/SubmitBid',\n\t\t\tname: 'projectSubmitBid',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('submitBid', true);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submitbid',\n\t\t\tname: 'projectSubmitBid',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('submitBid', true);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/?response=:response',\n\t\t\tname: 'projectWithResponse',\n\t\t\tcallback: function (projectId, response) {\n\t\t\t\tPJQ.app.session.set('bidStatus', response);\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/ACCEPT',\n\t\t\tname: 'projectWithAcceptResponse',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('bidStatus', 'ACCEPT');\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/DECLINE',\n\t\t\tname: 'projectWithDeclineResponse',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.app.session.set('bidStatus', 'DECLINE');\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/dashboard',\n\t\t\tname: 'projectDashboard',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"dashboard\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/details',\n\t\t\tname: 'projectDetails',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"details\", {\n\t\t\t\t\tdetailedProject: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/locations',\n\t\t\tname: 'projectDetails',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"locations\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/mall',\n\t\t\tname: 'projectContainer',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"mall\", {\n\t\t\t\t\tdetailedProject: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging',\n\t\t\tname: 'projectMessaging',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messaging\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/:projectMessageId',\n\t\t\tname: 'projectMessagingView',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messaging\", {\n\t\t\t\t\tviewProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messagingnew',\n\t\t\tname: 'projectMessaging',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messagingnew\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messagingnew/:projectMessageId',\n\t\t\tname: 'projectMessagingViewNew',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messagingnew\", {\n\t\t\t\t\tviewProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/:projectMessageId/copy',\n\t\t\tname: 'projectMessagingCopy',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messaging\", {\n\t\t\t\t\tcopyProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messagingnew/:projectMessageId/copy',\n\t\t\tname: 'projectMessagingCopyNew',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messagingnew\", {\n\t\t\t\t\tcopyProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/:projectMessageId/delete',\n\t\t\tname: 'projectMessagingDelete',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"messaging\", {\n\t\t\t\t\tdeleteProjectMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/privatemessaging/view/:viewName',\n\t\t\tname: 'privateMessagingSent',\n\t\t\tcallback: function (projectId, viewName) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"privatemessaging\", {\n\t\t\t\t\tview: viewName,\n\t\t\t\t\tnoRoute: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/privatemessaging',\n\t\t\tname: 'privateMessaging',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"privatemessaging\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/privatemessaging/:projectMessageId',\n\t\t\tname: 'privateMessagingMessage',\n\t\t\tcallback: function (projectId, projectMessageId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"privatemessaging\", {\n\t\t\t\t\tviewUserMessageId: projectMessageId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/documents',\n\t\t\tname: 'projectDocuments',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectdocuments\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/attachments',\n\t\t\tname: 'projectAttachments',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"attachments\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submittalsold',\n\t\t\tname: 'submittalList',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"submittals_old\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submittals',\n\t\t\tname: 'submittalList',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"submittals\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/submittals/:submittalId',\n\t\t\tname: 'submittal',\n\t\t\tcallback: function (projectId, submittalId) {\n\t\t\t\twindow.pjqSubmittalLoadId = submittalId;\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"submittals\", {\n\t\t\t\t\tsubmittalId: submittalId\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/reports',\n\t\t\tname: 'projectreports',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectreports\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/reportsadhoc',\n\t\t\tname: 'projectreportsadhoc',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectreportsadhoc\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/autoreport',\n\t\t\tname: 'autoReport',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"rsvpautoreport\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/proposals',\n\t\t\tname: 'proposals',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"proposals\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/context/:msgContext/:sessionId/new',\n\t\t\tname: 'projectMessagingContextOld',\n\t\t\tcallback: function (projectId, msgContext, sessionId) {\n\t\t\t\twindow.projectContactTemp = msgContext;\n\t\t\t\twindow.pjqSessionId = sessionId;\n\t\t\t\tPJQ.app.session.set('sessionId', sessionId);\n\t\t\t\twindow.isNewMsg = true;\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId + '/messaging', {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/messaging/context/:msgContext/:sessionId',\n\t\t\tname: 'projectMessagingContextOld',\n\t\t\tcallback: function (projectId, msgContext, sessionId) {\n\t\t\t\twindow.projectContactTemp = msgContext;\n\t\t\t\twindow.pjqSessionId = sessionId;\n\t\t\t\tPJQ.app.session.set('sessionId', sessionId);\n\t\t\t\twindow.isNewMsg = false;\n\t\t\t\tPJQ.app.router.navigate('projects/' + projectId + '/messaging', {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t],\n\tinitProjectNavigator(projectId, activeItem, viewOptions) {\n\t\tif (!PJQ.app.session.project || !PJQ.app.session.project.isFetched || PJQ.app.session.project.id !== projectId) {\n\t\t\tPJQ.app.session.project = new PJQ.models.projects.Project({\n\t\t\t\tprojectId: projectId\n\t\t\t}, {isDetail: viewOptions != null && viewOptions.detailedProject === true});\n\t\t\tif (PJQ.app.session.project.id > 0) {\n\t\t\t\tPJQ.app.session.project.fetch({\n\t\t\t\t\tnotify: false,\n\t\t\t\t\tsuccess: function () {\n\t\t\t\t\t\tif (activeItem === 'dashboard' && PJQ.app.session.project.get('status') === 'ARCHIVE')\n\t\t\t\t\t\t\tactiveItem = 'details';\n\n\t\t\t\t\t\tif (PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')\n\t\t\t\t\t\t\t&& PJQ.app.session.project.nda != null) {\n\t\t\t\t\t\t\tnew PJQ.views.projects.SignProjectNDAModal({\n\t\t\t\t\t\t\t\tmodel: PJQ.app.session.project,\n\t\t\t\t\t\t\t\tactiveItem: activeItem,\n\t\t\t\t\t\t\t\tviewOptions: viewOptions\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet accessKey = PJQ.app.session.get('accessKey');\n\t\t\t\t\t\tif (_.size(accessKey) > 0) {\n\t\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\t\tendpoint: \"/projects/\" + PJQ.app.session.project.id + \"/viewed?accessKey=\" + accessKey\n\t\t\t\t\t\t\t}).post();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (PJQ.app.session.user && PJQ.app.session.user.id > 0 && PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')) {\n\t\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\t\tendpoint: \"/projects/\" + PJQ.app.session.project.id + \"/viewed\"\n\t\t\t\t\t\t\t}).post();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (window.settings != null) {\n\t\t\t\t\t\t\twindow.settings.SelectectContactGroupsTemp = [];\n\t\t\t\t\t\t\twindow.settings.SelectectContactsTemp = [];\n\t\t\t\t\t\t\twindow.settings.SharedFolderId = PJQ.app.session.project.get('sharedFolderId');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'session'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'project',\n\t\t\t\t\t\t\t\t\tvalue: projectId\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t}).get().done(_.bind(function () {\n\t\t\t\t\t\t\tlet initNav = function () {\n\t\t\t\t\t\t\t\tPJQ.app.initNavigator({\n\t\t\t\t\t\t\t\t\tactiveItem: activeItem,\n\t\t\t\t\t\t\t\t\tviewOptions: viewOptions\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')) {\n\t\t\t\t\t\t\t\tPJQ.app.session.project.fetchUserMessageTypes(function () {\n\t\t\t\t\t\t\t\t\tlet accessKey = PJQ.app.session.get('accessKey');\n\t\t\t\t\t\t\t\t\tif (_.size(accessKey) > 0) {\n\t\t\t\t\t\t\t\t\t\tPJQ.app.TokenManager.getTokensForAccessKey(accessKey, (success, error) => {\n\t\t\t\t\t\t\t\t\t\t\tinitNav();\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tinitNav();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tinitNav();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t},\n\t\t\t\t\terror: function (model, response) {\n\t\t\t\t\t\tif(response.status === 401 && _.size(PJQ.app.session.get('accessKey')) > 0){\n\t\t\t\t\t\t\tPJQ.notifications.notify.warningNotify({\n\t\t\t\t\t\t\t\tmessage: 'This access key has expired'\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.ErrorHandler({}).handle(response, model.toJSON());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tPJQ.app.router.navigate('/', {\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});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\tmessage: 'This project cannot be found currently'\n\t\t\t\t});\n\t\t\t\tPJQ.app.router.navigate('/', {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tPJQ.app.initNavigator({\n\t\t\t\tactiveItem: activeItem,\n\t\t\t\tviewOptions: viewOptions\n\t\t\t});\n\t\t}\n\t}\n};\n\nPJQ.app.addRoutes(PJQ.modules.projectWall.routes);\nPJQ.app.addOldRoutes(PJQ.modules.projectWall.oldRoutes);\n","PJQ.views.projects.AddParticipantsDetailedModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Add-Participants-Detailed'),\n\t\tminWidth: '90%',\n\t\tonSave: null,\n\t\tisWrapForm: true,\n\t\twrapFormName: 'modal-add-participants',\n\t\tisUseNewAddressBook: false\n\t},\n\tevents: {\n\t\t'click .btn-add-selected': 'addSelected'\n\t},\n\tbeforeModalCreated: function () {\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\twrapFormName: this.options.wrapFormName,\n\t\t\tisUseNewAddressBook: this.options.isUseNewAddressBook\n\t\t};\n\t},\n\tbeforeRender: function () {\n\n\t},\n\tafterRender: function () {\n\t\tif (this.options.isUseNewAddressBook) {\n\t\t\tlet projectId = null\n\t\t\tif (this.options.projects) {\n\t\t\t\tprojectId = this.options.projects[0].get('projectId');\n\t\t\t}\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\tvalue: projectId ? projectId : PJQ.app.session.project.get('projectId')\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'pcg'\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t}).get().done(_.bind(function (data) {\n\t\t\t\tif (PJQ.app.session.project) {\n\t\t\t\t\tnew PJQ.Alert(this.$('.alert-project-name'), {\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t\ttext: 'Project Info: ' + PJQ.app.session.project.get('projectName') + ' ' + PJQ.app.session.project.get('city') + ' ' + PJQ.app.session.project.get('state') + ' ' + PJQ.app.session.project.get('zip'),\n\t\t\t\t\t\textraClasses: ['d-flex', 'text-align-center', 'align-content-center', 'justify-content-center']\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.addressBookView = new PJQ.views.addressbook.AddressBook({\n\t\t\t\t\tel: this.$('.addressbook-container'),\n\t\t\t\t\tselectionMode: PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT,\n\t\t\t\t\tdisabledContacts: this.options.disableContacts ? this.options.disableContacts : data.contactsNoGroup,\n\t\t\t\t\tdisabledContactGroups: this.options.isMultipleProjects ? null : data.contactGroups,\n\t\t\t\t\tonSelection: _.bind(function (contactsAll, contactsNoGroup, contactGroups) {\n\t\t\t\t\t\tthis.$('.btn-add-selected').prop('disabled', (_.size(contactsNoGroup) + _.size(contactGroups)) === 0);\n\t\t\t\t\t\tthis.selectedContactsAll = contactsAll;\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}, this)).fail(function () {\n\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\tmessage: 'Something went wrong!'\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\twindow.selectedCompanies = [];\n\t\t\twindow.selectedContacts = [];\n\t\t\twindow.selectedGroups = [];\n\t\t\twindow.selectedContactGroups = [];\n\t\t\twindow.pjqSessionId = PJQ.app.session.id;\n\t\t\twindow.pjqABContext = 'ap2';\n\t\t\twindow.pjqIsAddProjectContacts = false;\n\t\t\twindow.isHideMerge = true;\n\t\t\twindow.isHideAddSelectedContacts = true;\n\t\t\twindow.isHideReturnToProject = true;\n\t\t\twindow.isHideImportExport = true;\n\t\t\twindow.initAbEditCallback = _.bind(function (isEditing) {\n\t\t\t\tif (isEditing) {\n\t\t\t\t\tthis.$('.modal-btn-outer').hide();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.$('.modal-btn-outer').show();\n\t\t\t\t}\n\t\t\t}, this);\n\n\t\t\tlet $form = this.$(\"Form[name='\" + this.options.wrapFormName + \"']\");\n\t\t\twindow.validator = $form.validate({\n\t\t\t\tonsubmit: false,\n\t\t\t\tonkeyup: false,\n\t\t\t\tshowErrors: function showErrors(errorMap, errorList) {\n\t\t\t\t\tfor (let i = 0; errorList[i]; i++) {\n\t\t\t\t\t\tlet element = this.errorList[i].element;\n\t\t\t\t\t\t//solves the problem with brute force\n\t\t\t\t\t\t//remove existing error label and thus force plugin to recreate it\n\t\t\t\t\t\t//recreation == call to error placement function\n\t\t\t\t\t\tthis.errorsFor(element).remove();\n\t\t\t\t\t}\n\t\t\t\t\tthis.defaultShowErrors();\n\t\t\t\t},\n\t\t\t\terrorPlacement: function errorPlacement(error, element) {\n\t\t\t\t\terror.html('<br />' + error.text());\n\t\t\t\t\tif (element.attr('tagName') == 'select' || element.hasClass('pjq-numeric-field-width'))\n\t\t\t\t\t\terror.appendTo(element.parent().parent());\n\t\t\t\t\telse\n\t\t\t\t\t\terror.appendTo(element.parent());\n\t\t\t\t},\n\t\t\t\terrorClass: \"pjq-errortext\",\n\t\t\t\tignore: \"pjq-validate-ignore\"\n\t\t\t});\n\n\t\t\tinitAddressBook($form);\n\t\t}\n\t},\n\taddSelected: function () {\n\t\tthis.selectedContacts = [];\n\t\tthis.selectedCompanies = [];\n\t\tthis.selectedGroups = [];\n\n\t\tif (this.options.isUseNewAddressBook) {\n\t\t\tthis.selectedContacts = this.addressBookView.selectedContactsNoGroup;\n\t\t\tthis.selectedGroups = this.addressBookView.selectedContactGroups;\n\t\t}\n\t\telse {\n\t\t\tthis.selectedContacts = window.selectedContacts;\n\t\t\tthis.selectedCompanies = window.selectedCompanies;\n\t\t\tthis.selectedGroups = window.selectedGroups;\n\t\t}\n\n\t\tif (_.size(this.selectedContacts) + _.size(this.selectedCompanies) + _.size(this.selectedGroups) === 0) {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'No contacts were selected. Please make selections to continue.'\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (_.size(this.selectedContacts) + _.size(this.selectedCompanies) > 3200 || _.size(this.selectedGroups) > 3200) {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Too many results were selected. Please refine your search to continue.'\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.options.isMultipleProjects) {\n\t\t\tlet callback = _.bind(function () {\n\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'addpcg'\n\t\t\t\t\t\t}]),\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcontactIds: this.selectedContacts,\n\t\t\t\t\t\tcontactCompanyIds: this.selectedCompanies,\n\t\t\t\t\t\tcontactGroupIds: this.selectedGroups\n\t\t\t\t\t}\n\t\t\t\t}).post().done(_.bind(function (data) {\n\t\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\t\tthis.options.onSave(data.contactIds, data.projectContactIds);\n\t\t\t\t\t}\n\t\t\t\t\tthis.removeModal();\n\t\t\t\t}, this)).fail(function () {\n\t\t\t\t});\n\t\t\t}, this);\n\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'checkpcg'\n\t\t\t\t\t}]),\n\t\t\t\tdata: {\n\t\t\t\t\tcontactIds: this.selectedContacts,\n\t\t\t\t\tcontactCompanyIds: this.selectedCompanies,\n\t\t\t\t\tcontactGroupIds: this.selectedGroups\n\t\t\t\t}\n\t\t\t}).post().done(_.bind(function (data) {\n\t\t\t\tif (data.results.length > 0) {\n\t\t\t\t\tnew PJQ.views.projects.AddParticipantsErrorModal({\n\t\t\t\t\t\tdata: data.results,\n\t\t\t\t\t\tcontactIds: this.selectedContacts,\n\t\t\t\t\t\tcontactCompanyIds: this.selectedCompanies,\n\t\t\t\t\t\tcontactGroupIds: this.selectedGroups,\n\t\t\t\t\t\tonContinue: _.bind(function () {\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tcallback();\n\n\t\t\t}, this)).fail(function () {\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.options.onSave(this.selectedContactsAll, {\n\t\t\t\tselectedContacts: this.selectedContacts,\n\t\t\t\tselectedCompanies: this.selectedCompanies,\n\t\t\t\tselectedGroups: this.selectedGroups\n\t\t\t});\n\t\t\tthis.removeModal();\n\t\t}\n\t}\n});\n\nPJQ.views.projects.AddParticipantsErrorModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Add-Participants-Error-List'),\n\t\tminWidth: '90%',\n\t\tdata: null,\n\t\tonContinue: _.noop\n\t},\n\tevents: {\n\t\t'click .btn-copy-phone': 'copyPhone',\n\t\t'click .btn-continue': 'continue',\n\t\t'click .export': 'export'\n\t},\n\tafterRender: function () {\n\t\tnew PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$('.participant-errors'),\n\t\t\tpageLength: 999999,\n\t\t\tisHideSearch: true,\n\t\t\tdata: this.options.data,\n\t\t\tdom: 't',\n\t\t\torder: [],\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"companyName\",\n\t\t\t\t\t\"title\": \"Company\",\n\t\t\t\t\t\"orderable\": false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"contactName\",\n\t\t\t\t\t\"title\": \"Contact\",\n\t\t\t\t\t\"orderable\": false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"phone\",\n\t\t\t\t\t\"title\": \"Phone\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n\t\t\t\t\t\t\tphoneFormatted = row.phone ? (PJQ.helpers.formatHelpers.formatPhoneNumber(row.phone) + (_.size(row.phoneExtension) === 0 ? '' : ' x' + row.phoneExtension)) : 'N/A';\n\n\t\t\t\t\t\tif (row.phone !== '')\n\t\t\t\t\t\t\thtml += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Phone #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-phone text-dark\"></i></button>';\n\n\t\t\t\t\t\thtml += '<div class=\"flex-fill ' + (row.phone ? '' : 'text-muted') + '\">' + phoneFormatted + '</div>';\n\t\t\t\t\t\thtml += '</div>';\n\t\t\t\t\t\treturn html;\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"email\",\n\t\t\t\t\t\"title\": \"Email\",\n\t\t\t\t\t\"orderable\": false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"reason\",\n\t\t\t\t\t\"title\": \"Reason\",\n\t\t\t\t\t\"orderable\": false\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\n\t},\n\tcontinue: function () {\n\t\tif (typeof this.options.onContinue === 'function')\n\t\t\tthis.options.onContinue();\n\n\t\tthis.removeModal();\n\t},\n\texport: function () {\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'checkpcg'\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\tdata: {\n\t\t\t\tcontactIds: this.options.contactIds,\n\t\t\t\tcontactCompanyIds: this.options.contactCompanyIds,\n\t\t\t\tcontactGroupIds: this.options.contactGroupIds\n\t\t\t}\n\t\t}).post().success(_.bind(function (data) {\n\t\t\tPJQ.files.downloadFile(data.url, {isEndpoint: false});\n\t\t}, this));\n\t},\n\tcopyPhone: function (e) {\n\t\tlet inputId = 'h_input_' + _.uniqueId(),\n\t\t\thiddenInput = $('<input>', {\n\t\t\t\tvalue: $(e.currentTarget).data('phone'),\n\t\t\t\tstyle: 'position: absolute;left:-2000px;top:-2000px',\n\t\t\t\tid: inputId\n\t\t\t});\n\t\tthis.$el.append(hiddenInput);\n\t\thiddenInput[0].select();\n\t\tdocument.execCommand(\"copy\");\n\t\thiddenInput.remove();\n\t\tPJQ.notifications.notify.successNotify({\n\t\t\tmessage: 'Number copied to clipboard.'\n\t\t});\n\t}\n});\n","PJQ.views.projects.Attachments = PJQ.views.files.FileNavigator.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Attachments'),\n\t\tsubTemplates: {\n\t\t\tfile: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Attachment'),\n\t\t\tfileMenu: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Attachment-Menu')\n\t\t},\n\t\tsortBy: 'name',\n\t\tsortDirection: 'asc',\n\t\tisHideDrawings: false,\n\t\tenableDrawings: false,\n\t\tcanAdd: false,\n\t\tcanShare: false,\n\t\tisAdmin: false,\n\t\tisReadOnly: false,\n\t\thideHeader: false,\n\t\tfoldersOnly: false\n\t},\n\tevents: {\n\t\t'click .btn-upload-raw-files': 'uploadRawFiles',\n\t\t'click .btn-attach-documents': 'attachRootAttachments',\n\t\t'click .btn-add-shared-folder': 'addSharedFolderClicked',\n\t\t'click .btn-add-private-folder': 'addPrivateFolderClicked',\n\t\t'click .btn-add-to-drawings': 'addToDrawingsClicked',\n\t\t'click .btn-select-contents': 'selectFolderContentsClicked',\n\t\t'click .btn-add-selected-to-drawings': 'addSelectedToDrawings',\n\t\t'change .input-select-all': 'allChecked',\n\t\t'click .btn-download-all': 'downloadAll'\n\t},\n\tbeforeFirstRender: function () {\n\t\tlet prefs;\n\t\tif (this.options.project != null) {\n\t\t\tprefs = this.options.project.preferences;\n\n\t\t\tthis.options.enableDrawings = !this.options.isHideDrawings && !this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_DRAWINGS);\n\t\t\tthis.options.canAdd = (this.options.project.get('masterUserId') === PJQ.app.session.get('masterUserId')\n\t\t\t\t&& this.options.project.hasPermission('attachments.canAdd'));\n\t\t\tthis.options.isAdmin = this.options.project.get('masterUserId') === PJQ.app.session.get('masterUserId')\n\t\t\t\t&& this.options.project.hasPermission('attachments.isAdmin');\n\t\t\tthis.options.canShare = this.options.project.get('masterUserId') === PJQ.app.session.get('masterUserId')\n\t\t\t\t&& this.options.project.hasPermission('attachments.canShare')\n\t\t\t\t&& !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_SHARE_PEI);\n\t\t\tthis.options.foldersOnly = this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.RSVP_FOLDER_CHECKBOXES_ONLY) &&\n\t\t\t\tthis.options.project.get('masterUserId') !== PJQ.app.session.get('masterUserId');\n\n\t\t\tthis.options.canAddDrawings = PJQ.app.session.project != null\n\t\t\t\t&& PJQ.app.session.project.hasPermission('drawings.isAdmin')\n\t\t\t\t&& (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId'));\n\t\t}\n\t\telse {\n\t\t\tprefs = PJQ.app.session.preferences;\n\t\t}\n\n\t\tif (prefs != null) {\n\t\t\tif(prefs.hasPref(PJQ.constants.preferenceTypes.EXPAND_PROJECT_ATTACHMENTS)){\n\t\t\t\tthis.options.expandAllFolders = true;\n\t\t\t}\n\n\t\t\t// this has to read from session, it is a portal preference\n\t\t\tlet sfOverride = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_SHARED_FOLDER_NAME_OVERRIDE);\n\t\t\tif(_.size(sfOverride) > 0){\n\t\t\t\tthis.options.sharedFolderNameOverride = sfOverride;\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.isReadOnly) {\n\t\t\tthis.options.canAdd = false;\n\t\t\tthis.options.canShare = false;\n\t\t\tthis.options.isAdmin = false;\n\t\t\tthis.options.canAddDrawings = false;\n\t\t}\n\n\t\tthis.fetchAttachments({\n\t\t\tisPrivate: this.options.project == null || !this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PROJECT_PRIVATE_ATTACHMENTS)\n\t\t});\n\t},\n\tgetMenuActions: function () {\n\t\tlet self = this;\n\t\treturn [\n\t\t\t{\n\t\t\t\tname: 'Attach Folders',\n\t\t\t\tonClick: function () {\n\t\t\t\t\tself.attachRootAttachments();\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.canAdd && attachment.get('entryId') === -1;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'New Folder',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.addFolder(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.canAdd && attachment.get('isFolder');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Upload',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.uploadToFolder(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.canAdd && attachment.get('entryId') > 0 && attachment.get('isFolder');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Download',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.downloadAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: _.bind(function (attachment) {\n\t\t\t\t\tif(this.options.foldersOnly && !attachment.get('isFolder')){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn PJQ.app.session.project.get('isOnline') && (!attachment.get('isFolder') || _.size(attachment.getFolderAttachments()) > 0);\n\t\t\t\t}, this)\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'View',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tnew PJQ.views.files.FileViewer({\n\t\t\t\t\t\tmodel: attachment\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn attachment.get('name').toLowerCase().endsWith('.pdf');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Order',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.order(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: _.bind(function (attachment) {\n\t\t\t\t\tif(this.options.foldersOnly && !attachment.get('isFolder')){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn PJQ.app.session.project.get('isOnline') && (!attachment.get('isFolder') || _.size(attachment.getFolderAttachments()) > 0);\n\t\t\t\t}, this)\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Share',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.shareAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function () {\n\t\t\t\t\treturn self.options.canShare;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Export File List',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.exportFileList(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && attachment.get('entryId') > 0 && attachment.get('isFolder');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Add to Drawings',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.addToDrawings(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin\n\t\t\t\t\t\t&& !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_DRAWINGS)\n\t\t\t\t\t\t&& attachment.get('entryId') > 0 && attachment.getDepth() > 0\n\t\t\t\t\t\t&& self.options.canAddDrawings;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Select Contents',\n\t\t\t\tonClick: _.bind(function (attachment) {\n\t\t\t\t\tthis.selectFolderContents(attachment);\n\t\t\t\t}, this),\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn attachment.get('isFolder');\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Cut',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.cutAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.getDepth() > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Copy',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.copyAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.getDepth() > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Paste',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.paste(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.get('isFolder') && self.clipboard != null;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Rename',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.renameAttachment(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.getDepth() > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Properties',\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.attachmentProperties(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Delete',\n\t\t\t\tisDanger: true,\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.deleteAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0\n\t\t\t\t\t\t&& attachment.get('folderId') > 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Detach',\n\t\t\t\tisDanger: true,\n\t\t\t\tonClick: function (attachment) {\n\t\t\t\t\tself.deleteAttachments(attachment);\n\t\t\t\t},\n\t\t\t\tisShown: function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing') && self.options.isAdmin && attachment.get('entryId') > 0 &&\n\t\t\t\t\t\tattachment.get('folderId') === -1;\n\t\t\t\t}\n\t\t\t},\n\t\t];\n\t},\n\tselectFolderContentsClicked: function (e) {\n\t\tlet $attachment = $(e.currentTarget).closest('.attachment'),\n\t\t\tattachment = this.collection.get($attachment.data('cid'));\n\t\tthis.selectFolderContents(attachment);\n\t},\n\tselectFolderContents: function (folder) {\n\t\tthis.addSelectedAttachmentIds(_.map(folder.getFolderAttachments(true), function (att) {\n\t\t\treturn att.cid;\n\t\t}));\n\t\tthis.getAttachmentElement(folder).siblings('.attachment-files-outer').find('.input-select-attachment').prop('checked', true);\n\t},\n\tuploadRawFiles: function () {\n\t\tnew PJQ.views.files.RawFileUploaderModal({\n\t\t\tproject: this.options.project\n\t\t});\n\t},\n\tallChecked: function (e) {\n\t\tlet isChecked = $(e.currentTarget).prop('checked');\n\t\tthis.$('.input-select-attachment').prop('checked', isChecked);\n\t\tif (isChecked) {\n\t\t\tlet attachmentIds = _.map(this.collection.models, function (attachment) {\n\t\t\t\treturn attachment.cid;\n\t\t\t});\n\t\t\tthis.addSelectedAttachmentIds(attachmentIds);\n\t\t}\n\t\telse {\n\t\t\tthis.selectedAttachmentIds = [];\n\t\t}\n\t},\n\taddSharedFolderClicked: function () {\n\t\tthis.addFolder(this.collection.getSharedFolder());\n\t},\n\taddPrivateFolderClicked: function () {\n\t\tthis.addFolder(this.collection.getPrivateFolder());\n\t},\n\tattachRootAttachments: function () {\n\t\tnew PJQ.views.files.FileSelector({\n\t\t\tfoldersOnly: true,\n\t\t\tdisabledAttachmentIds: _.map(this.collection.models, function (attachment) {\n\t\t\t\treturn attachment.get('entryId');\n\t\t\t}),\n\t\t\tonSave: _.bind(function (files) {\n\t\t\t\tthis.options.project.attachFiles(files, _.bind(function () {\n\t\t\t\t\tthis.collection.fetch();\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: \"Attached files successfully\"\n\t\t\t\t\t});\n\t\t\t\t}, this));\n\t\t\t}, this)\n\t\t});\n\t},\n\tshareAttachments: function (attachments) {\n\t\tattachments = this.replaceVersionFolders(attachments);\n\n\t\tlet shareDrawings = new PJQ.collections.drawings.Drawings(),\n\t\t\tversionIds = [];\n\n\t\tshareDrawings.options.allDrawings = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DRAWING_SHARE_PREVENT_EXPIRATION);\n\n\t\tif (PJQ.helpers.objectHelpers.refinedType(attachments) === 'array') {\n\t\t\t_.each(_.filter(attachments, function (attachment) {\n\t\t\t\treturn !attachment.get('isFolder') && attachment.get('isDrawing');\n\t\t\t}), function (attachment) {\n\t\t\t\tif (versionIds.indexOf(attachment.get('versionId')) === -1) {\n\t\t\t\t\tversionIds.push(attachment.get('versionId'));\n\t\t\t\t}\n\t\t\t\tshareDrawings.add(new PJQ.models.drawings.Drawing({\n\t\t\t\t\tguid: attachment.get('guid')\n\t\t\t\t}));\n\t\t\t});\n\t\t}\n\t\telse if (attachments.get('isDrawing')) {\n\t\t\tversionIds.push(attachments.get('versionId'));\n\t\t\tshareDrawings.add(new PJQ.models.drawings.Drawing({\n\t\t\t\tguid: attachments.get('guid')\n\t\t\t}));\n\t\t}\n\n\t\tif (_.size(shareDrawings.models) > 0) {\n\t\t\tlet fileGuids = _.map(_.filter(attachments, function (attachment) {\n\t\t\t\t\treturn !attachment.get('isDrawing');\n\t\t\t\t}), function (attachment) {\n\t\t\t\t\treturn attachment.get('guid');\n\t\t\t\t}),\n\t\t\t\tsharingModal = new PJQ.views.sharing.SharingModal({\n\t\t\t\t\tcollection: shareDrawings,\n\t\t\t\t\tproject: this.options.project,\n\t\t\t\t\tonSave: _.bind(function (data) {\n\t\t\t\t\t\tshareDrawings.share(versionIds, fileGuids, data, this.options.project, _.bind(function (share) {\n\t\t\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\t\t\tmessage: 'File share email sent'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\tshareDrawings.share(versionIds, fileGuids, null, this.options.project, function (share) {\n\t\t\t\tlet callback = _.bind(sharingModal.urlChanged, sharingModal);\n\t\t\t\tcallback(share.url);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tlet shareAtt = [],\n\t\t\t\tfnCheck = function (att) {\n\t\t\t\t\tif (att.get('entryId') === -1) {\n\t\t\t\t\t\tshareAtt.push(...att.getFolderAttachments());\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tshareAtt.push(att);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\tif (PJQ.helpers.objectHelpers.refinedType(attachments) === 'array') {\n\t\t\t\t_.each(attachments, function (att) {\n\t\t\t\t\tfnCheck(att);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfnCheck(attachments);\n\t\t\t}\n\t\t\tlet files = new PJQ.collections.files.Files(shareAtt),\n\t\t\t\tsharingModal = new PJQ.views.sharing.SharingModal({\n\t\t\t\t\tproject: this.options.project,\n\t\t\t\t\tonSave: _.bind(function (data) {\n\t\t\t\t\t\tfiles.share(data, this.options.project, _.bind(function (share) {\n\t\t\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\t\t\tmessage: 'File share email sent'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\tfiles.share(null, this.options.project, function (share) {\n\t\t\t\tlet callback = _.bind(sharingModal.urlChanged, sharingModal);\n\t\t\t\tcallback(share.url);\n\t\t\t});\n\t\t}\n\t},\n\tdownloadAll: function () {\n\t\tthis.downloadAttachments(this.collection.models);\n\t},\n\taddToDrawingsClicked: function (e) {\n\t\tlet $attachment = $(e.currentTarget).closest('.attachment'),\n\t\t\tattachment = this.collection.get($attachment.data('cid'));\n\t\tthis.addToDrawings(attachment);\n\t},\n\taddSelectedToDrawings: function () {\n\t\tthis.addToDrawings(this.collection.get(this.selectedAttachmentIds));\n\t},\n\taddToDrawings: function (files) {\n\t\tif (PJQ.helpers.objectHelpers.refinedType(files) === 'object') {\n\t\t\tfiles = [files];\n\t\t}\n\t\tPJQ.app.router.navigate('projects/' + this.options.project.id.toString() + '/drawings', {\n\t\t\ttrigger: true\n\t\t});\n\t\tlet versions = new PJQ.collections.drawings.Versions(null, {\n\t\t\tproject: this.options.project\n\t\t});\n\t\tversions.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tnew PJQ.views.drawings.DrawingBatchModal({\n\t\t\t\t\tversions: versions,\n\t\t\t\t\tproject: this.options.project,\n\t\t\t\t\tmodel: new PJQ.models.drawings.DrawingBatch({\n\t\t\t\t\t\tfiles: files,\n\t\t\t\t\t\tprojectId: this.options.project.id\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.projects.AttachmentsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'modal-project-attachments'),\n\t\tsubTemplates: {},\n\t\tmaxWidth: 1400,\n\t\tonSave: _.noop\n\t},\n\tevents: {\n\t\t'click .btn-save': 'onSave'\n\t},\n\tafterRender: function () {\n\t\tif (PJQ.app.session.project) {\n\t\t\tthis.attachmentsView = new PJQ.views.projects.Attachments({\n\t\t\t\tel: this.$('.modal-body'),\n\t\t\t\texpandSharedFolders: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.EXPAND_PROJECT_ROOT_SHARED_FOLDERS),\n\t\t\t\tproject: PJQ.app.session.project,\n\t\t\t\tisReadOnly: PJQ.app.session.project.get('status') === 'ARCHIVE'\n\t\t\t})\n\t\t}\n\t},\n\tonSave: function () {\n\t\tthis.options.onSave(this.attachmentsView.collection.get(this.attachmentsView.selectedAttachmentIds));\n\t\tthis.removeModal();\n\t}\n});\n\n","PJQ.constants.projectMessaging = {\n\tviews: {\n\t\tGROUPCOMP: 'groupcompany',\n\t\tGROUPCOMP_COMP: 'groupcompany-company',\n\t\tGROUPCOMP_COMP_CONT: 'groupcompany-company-contact',\n\t\tGROUPCONT: 'groupcontact',\n\t\tGROUPCONT_CONT: 'groupcontact-contact',\n\t\tMSGCONT: 'messagecontact',\n\t\tMSGCONT_CONT: 'messagecontact-contact',\n\t\tRSPCONT: 'responsecontact',\n\t\tRSPCONT_CONT: 'responsecontact-contact',\n\t\tCOMP: 'company',\n\t\tCOMP_CONT: 'company-contact',\n\t\tCONT: 'contact',\n\t\tCONTGROUP: 'contactgroup',\n\t\tBIDPKGS: 'bidpackages',\n\t\tBIDPKGS_CONT: 'bidpackages-contact'\n\t}\n};\n","PJQ.views.projects.LocationManagement = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'location-management'),\r\n subTemplates: {\r\n tier: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'location-tier'),\r\n location: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'location-item'),\r\n editLocation: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'location-edit')\r\n }\r\n },\r\n events: {\r\n 'click .location:not(.editing)': 'locationClicked',\r\n 'click .btn-add-location': 'addLocationClicked',\r\n 'keyup .input-location-name': 'locationNameChanged',\r\n 'click .btn-edit-location': 'editLocationClicked',\r\n 'click .btn-delete-location': 'deleteLocationClicked',\r\n 'click .btn-cancel-edit': 'endLocationEdit',\r\n 'click .btn-save-location': 'saveLocationClicked'\r\n },\r\n beforeFirstRender: function () {\r\n this.options.project.fetchLocations(_.bind(function (locations) {\r\n this.collection = locations;\r\n this.render();\r\n }, this))\r\n },\r\n afterRender: function () {\r\n if (this.collection == null) {\r\n return;\r\n }\r\n\r\n this.$el.on('click', function () {\r\n $(this).find('.dropdown-menu').hide();\r\n });\r\n\r\n let $tiers = this.$('.location-tiers');\r\n $tiers.on('click', '.location-dropdown-toggle', (function (e) {\r\n $(this).next('.dropdown-menu').toggle();\r\n e.stopPropagation();\r\n }));\r\n\r\n this.renderTiers();\r\n },\r\n locationNameChanged: function (e) {\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n this.saveLocationClicked(e);\r\n }\r\n },\r\n addLocationClicked: function (e) {\r\n this.renderLocationEdit($(e.currentTarget));\r\n },\r\n editLocationClicked: function (e) {\r\n e.stopPropagation();\r\n\r\n let $location = $(e.currentTarget).closest('.location'),\r\n id = $location.data('id'),\r\n location = this.collection.get(id);\r\n\r\n this.endLocationEdit();\r\n this.editLocation = location;\r\n if (location != null) {\r\n $location.addClass('editing');\r\n this.renderLocationEdit($location, location);\r\n }\r\n },\r\n renderLocationEdit: function ($location, location) {\r\n this.renderSubTemplate(false, this.options.subTemplates.editLocation, $location, {\r\n location: location\r\n }, _.bind(function () {\r\n this.$('.input-location-name').focus().select();\r\n }, this));\r\n },\r\n endLocationEdit: function (e) {\r\n if (e) {\r\n e.stopPropagation();\r\n\r\n let $add = $(e.currentTarget).closest('.btn-add-location'),\r\n parentId = $add.length > 0 ? $add.data('parentId') : null;\r\n if (parentId != null) {\r\n this.renderTiers();\r\n return;\r\n }\r\n }\r\n\r\n if (this.editLocation != null) {\r\n let $location = this.$('.location[data-id=\"' + this.editLocation.id + '\"]');\r\n if ($location.length > 0) {\r\n $location.replaceWith(this.renderLocation(this.editLocation, this.getActiveLocations()).outerHTML());\r\n }\r\n this.editLocation = null;\r\n }\r\n },\r\n saveLocationClicked: function (e) {\r\n e.stopPropagation();\r\n\r\n let saveLocation = null,\r\n name = $(e.currentTarget).parent().find('.input-location-name').val(),\r\n $add = $(e.currentTarget).closest('.btn-add-location'),\r\n parentId = $add.length > 0 ? $add.data('parentId') : null;\r\n if (parentId != null) {\r\n saveLocation = new PJQ.models.projects.Location({\r\n projectId: this.options.project.id,\r\n name: name,\r\n parentId: parentId > 0 ? parentId : null\r\n });\r\n this.collection.add(saveLocation);\r\n this.contextLocation = saveLocation;\r\n } else if (_.size(name) > 0) {\r\n this.editLocation.set('name', name);\r\n saveLocation = this.editLocation;\r\n }\r\n\r\n if (saveLocation != null) {\r\n saveLocation.save(null, {\r\n success: _.bind(function () {\r\n //todo: notify saved, add loading maybe\r\n this.renderTiers();\r\n }, this)\r\n });\r\n }\r\n },\r\n locationClicked: function (e) {\r\n let id = $(e.currentTarget).data('id');\r\n this.contextLocation = this.collection.get(id);\r\n this.renderTiers();\r\n },\r\n deleteLocationClicked: function (e) {\r\n e.stopPropagation();\r\n\r\n let id = $(e.currentTarget).closest('.location').data('id'),\r\n location = this.collection.get(id),\r\n children = this.collection.getChildren(location, true),\r\n fnDelete = _.bind(function () {\r\n location.destroy({\r\n success: _.bind(function () {\r\n this.collection.remove(_.union([location], children));\r\n if (this.contextLocation != null && this.collection.get(this.contextLocation.id) == null) {\r\n // the context location was deleted\r\n // try to get the closest existing parent of it\r\n let activeLocations = this.getActiveLocations().reverse(),\r\n newContextLocation = null;\r\n for (let i = 0; i < _.size(activeLocations); i++) {\r\n if (activeLocations[i].id !== this.contextLocation.id) {\r\n newContextLocation = activeLocations[i];\r\n break;\r\n }\r\n }\r\n this.contextLocation = newContextLocation;\r\n }\r\n this.renderTiers();\r\n }, this)\r\n });\r\n }, this)\r\n\r\n new PJQ.views.modals.DeleteCancel({\r\n header: \"Confirm Deletion\",\r\n body: \"Are you sure you want to delete this location? All of it's child locations will also be deleted.\",\r\n onDelete: _.bind(function () {\r\n fnDelete();\r\n }, this)\r\n });\r\n },\r\n getActiveLocations: function () {\r\n if (this.contextLocation == null) {\r\n return [];\r\n }\r\n\r\n let result = this.collection.getParents(this.contextLocation);\r\n result.push(this.contextLocation);\r\n return result;\r\n },\r\n renderTiers: function () {\r\n this.editLocation = null;\r\n\r\n this.$tiers = this.$('.location-tiers');\r\n this.$tiers.empty();\r\n\r\n let nextTierLocations,\r\n activeLocations = this.getActiveLocations(),\r\n ctActive = _.size(activeLocations);\r\n if (this.contextLocation != null) {\r\n for (let i = 0; i < ctActive; i++) {\r\n this.renderTier(i + 1, this.collection.getSiblings(activeLocations[i]), activeLocations, i > 0 ? activeLocations[i - 1] : null);\r\n }\r\n\r\n nextTierLocations = this.collection.getChildren(this.contextLocation);\r\n } else {\r\n nextTierLocations = this.collection.getRootLocations();\r\n }\r\n this.renderTier(ctActive + 1, nextTierLocations, activeLocations, ctActive > 0 ? activeLocations[ctActive - 1] : null);\r\n },\r\n renderTier: function (tierNumber, locations, activeLocations, activeParent) {\r\n this.renderSubTemplate(true, this.options.subTemplates.tier, this.$tiers, {\r\n tierNumber: tierNumber,\r\n locations: locations,\r\n activeLocations: activeLocations,\r\n activeParent: activeParent,\r\n renderLocation: _.bind(this.renderLocation, this)\r\n });\r\n },\r\n renderLocation: function (location, activeLocations) {\r\n return PJQ.templating.TemplateRenderer.parseTemplate(this.options.subTemplates.location, {\r\n activeIds: activeLocations ? _.map(activeLocations, function (location) {\r\n return location.id;\r\n }) : [],\r\n location: location\r\n });\r\n }\r\n});\r\n\r\nPJQ.models.projects.Location = PJQ.models.BaseModel.extend({\r\n idAttribute: \"id\",\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.get('projectId')\r\n },\r\n {\r\n endpoint: 'locations',\r\n value: this.id\r\n }\r\n ])\r\n }\r\n});\r\n\r\nPJQ.collections.projects.Locations = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.projects.Location,\r\n endpoint: function () {\r\n return PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.options.project.id\r\n },\r\n {\r\n endpoint: 'locations'\r\n }\r\n ]);\r\n },\r\n getRootLocations: function () {\r\n return _.filter(this.models, function (location) {\r\n return !(location.get(\"parentId\") > 0);\r\n });\r\n },\r\n getChildren: function (location, recursive = false) {\r\n if (recursive) {\r\n let fnGetChildren = _.bind(function (locations, result) {\r\n if (result == null) {\r\n result = [];\r\n }\r\n\r\n if (_.size(locations) === 0) {\r\n return result;\r\n }\r\n\r\n let children = [];\r\n _.each(locations, function (location) {\r\n children.push(...this.where({parentId: location.id}));\r\n }, this)\r\n result.push(...children);\r\n\r\n return fnGetChildren(children, result);\r\n }, this)\r\n return fnGetChildren([location]);\r\n }\r\n\r\n return this.where({parentId: location.id});\r\n },\r\n getSiblings: function (location) {\r\n let pId = location.get('parentId');\r\n if (pId > 0) {\r\n return this.where({parentId: pId});\r\n }\r\n return this.getRootLocations();\r\n },\r\n getParents: function (location) {\r\n let fnGetParent = _.bind(function (location, result) {\r\n if (result == null) {\r\n result = [];\r\n }\r\n\r\n let pId = location.get('parentId');\r\n if (!(pId > 0)) {\r\n return result;\r\n }\r\n let parent = this.get(pId);\r\n if (parent == null) {\r\n return result;\r\n }\r\n result.push(parent);\r\n return fnGetParent(parent, result);\r\n }, this)\r\n return fnGetParent(location).reverse();\r\n },\r\n getPickerArray: function () {\r\n let result = [],\r\n getChildrenNames = _.bind(function (location, parentName) {\r\n result.push({\r\n id: location.id,\r\n name: parentName\r\n });\r\n _.each(_.sortBy(this.where({parentId: location.id}), (location) => { return location.get('name') }), function (child) {\r\n let newParentName = parentName + ' > ' + child.get('name');\r\n getChildrenNames(child, newParentName);\r\n });\r\n }, this)\r\n _.each(_.sortBy(this.where({parentId: null}), (location) => { return location.get('name') }), function (rootParent) {\r\n getChildrenNames(rootParent, rootParent.get('name'));\r\n });\r\n return result;\r\n },\r\n getFullName: function (location) {\r\n let parents = this.getParents(location),\r\n result = '';\r\n _.each(parents, function (parent) {\r\n result += parent.get('name') + ' > ';\r\n });\r\n result += location.get('name');\r\n return result;\r\n }\r\n});","PJQ.views.projects.SignProjectNDAModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Sign-Project-NDA'),\n\t\tmaxWidth: '800px'\n\t},\n\tevents: {\n\t\t'click .btn-decline-nda': 'decline',\n\t\t'click .btn-sign-nda': 'sign',\n\t\t'change .input-nda-agree': 'agreeChanged'\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tmodel: this.model\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tPJQ.helpers.inputHelpers.inputMaskPhone(this.$('.input-phone'));\n\t},\n\tagreeChanged: function () {\n\t\tthis.$('.btn-sign-nda').prop('disabled', !this.$('.input-nda-agree').prop('checked'));\n\t},\n\tdecline: function () {\n\t\tnew PJQ.Loader(this.$('.modal-body'));\n\t\tPJQ.app.session.project.updateResponse(PJQ.constants.projectContacts.bidStatus.DECLINE, _.bind(function () {\n\t\t\tthis.close();\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: 'Your response has been submitted'\n\t\t\t});\n\t\t\tPJQ.app.router.signInNavigate();\n\t\t}, this));\n\t},\n\tsign: function () {\n\t\tlet isValid = true,\n\t\t\t$companyName = this.$('.input-nda-company-name'),\n\t\t\tcompanyName = $companyName.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($companyName, true);\n\t\tif (_.size(companyName) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($companyName, false);\n\t\t}\n\n\t\tlet $contactName = this.$('.input-nda-contact-name'),\n\t\t\tcontactName = $contactName.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($contactName, true);\n\t\tif (_.size(contactName) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($contactName, false);\n\t\t}\n\n\t\tlet $title = this.$('.input-nda-title'),\n\t\t\ttitle = $title.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($title, true);\n\t\tif (_.size(title) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($title, false);\n\t\t}\n\n\t\tlet $email = this.$('.input-nda-email'),\n\t\t\temail = $email.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($email, true);\n\t\tif (_.size(email) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($email, false);\n\t\t}\n\n\t\tlet $phone = this.$('.input-nda-phone'),\n\t\t\tphone = $phone.val();\n\t\tPJQ.helpers.inputHelpers.setInputError($phone, true);\n\t\tif (_.size(phone) === 0) {\n\t\t\tisValid = false;\n\t\t\tPJQ.helpers.inputHelpers.setInputError($phone, false);\n\t\t}\n\n\t\tlet $error = this.$('.nda-error');\n\t\tif (!isValid) {\n\t\t\t$error.html('All required fields must be filled out before signing');\n\t\t\treturn;\n\t\t}\n\n\t\tlet isAgreed = this.$('.input-nda-agree').prop('checked');\n\t\tif (!isAgreed) {\n\t\t\t$error.html('You must agree to the non-disclosure before signing');\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\t$error.empty();\n\t\t}\n\n\t\tthis.$('.btn-decline-nda').prop('disabled', true);\n\t\tnew PJQ.Loader(this.$('.btn-sign-nda'), {\n\t\t\tloadingText: \"Signing...\"\n\t\t});\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.model.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'nda',\n\t\t\t\t\tvalue: this.model.nda.get('ndaId')\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'sign'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\tcompanyName: companyName,\n\t\t\t\tcontactName: contactName,\n\t\t\t\ttitle: title,\n\t\t\t\temail: email,\n\t\t\t\tphone: phone\n\t\t\t}\n\t\t}).post().done(_.bind(function () {\n\t\t\tthis.model.isFetched = false;\n\t\t\tPJQ.modules.projectWall.initProjectNavigator(this.model.id, this.options.activeItem ? this.options.activeItem : \"dashboard\", this.options.viewOptions ? this.options.viewOptions : null);\n\t\t\tthis.removeModal();\n\t\t}, this));\n\t}\n});\n\nPJQ.views.projects.EditProjectNDAModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Edit-Project-NDA'),\n\t\tmaxWidth: '800px'\n\t},\n\tevents: {\n\t\t'change .cb-override': 'overrideChanged',\n\t\t'click .btn-delete-nda': 'deleteClicked',\n\t\t'click .btn-cancel-nda': 'cancelClicked',\n\t\t'click .btn-save-nda': 'saveClicked'\n\t},\n\tbeforeModalCreated: function () {\n\t\tif (this.options.project != null) {\n\t\t\tPJQ.app.session.fetchNDAs(_.bind(function (ndas) {\n\t\t\t\tthis.ndas = ndas;\n\t\t\t\tthis.options.project.fetchNDA(_.bind(function (nda) {\n\t\t\t\t\tthis.model = nda;\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this));\n\t\t\t}, this));\n\t\t}\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model,\n\t\t\tproject: this.options.project,\n\t\t\tndas: this.ndas\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.model != null && this.options.project != null) {\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.select-nda'),\n\t\t\t\thideDisabled: true,\n\t\t\t\tdefaultValue: this.model.id,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.useNDA(this.ndas.get(value));\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t},\n\tuseNDA: function (nda) {\n\t\tthis.model.set({\n\t\t\tndaId: nda ? nda.id : null,\n\t\t\tname: nda ? nda.get('name') : '',\n\t\t\tndaText: nda ? nda.get('ndaText') : ''\n\t\t});\n\t},\n\toverrideChanged: function () {\n\t\tlet override = this.$('.cb-override').prop('checked');\n\t\tif (override) {\n\t\t\tthis.model.set({\n\t\t\t\tndaId: null,\n\t\t\t\tname: ''\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.useNDA(this.ndas.findWhere({isDefault: true}));\n\t\t}\n\t\tthis.render();\n\t},\n\tdeleteClicked: function () {\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Delete NDA\",\n\t\t\tbody: \"Are you sure you want to delete this project NDA?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tif (this.model.id > 0) {\n\t\t\t\t\tthis.model.destroy();\n\t\t\t\t}\n\n\t\t\t\tthis.removeModal();\n\t\t\t\tif (this.options.onDelete) {\n\t\t\t\t\tthis.options.onDelete(this.model);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tcancelClicked: function () {\n\t\tthis.removeModal();\n\t\tif (this.options.onCancel) {\n\t\t\tthis.options.onCancel(this.model);\n\t\t}\n\t},\n\tsaveClicked: function () {\n\t\tif (this.options.project != null) {\n\t\t\tlet ndaText = this.$('.textarea-nda-text').val(),\n\t\t\t\tgNda = this.ndas.get(this.model.id);\n\t\t\tif (gNda == null && _.size(ndaText) === 0) {\n\t\t\t\tnew PJQ.views.modals.SaveDontSave({\n\t\t\t\t\theader: \"NDA Terms Empty\",\n\t\t\t\t\tbody: \"You have not entered any NDA agreement terms. If you save this, the NDA will be disabled for this project. Are you sure you want to save?\",\n\t\t\t\t\tisShowDontSaveButton: false,\n\t\t\t\t\tonSave: _.bind(function () {\n\t\t\t\t\t\tthis.save();\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.save();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.save();\n\t\t}\n\t},\n\tsave: function () {\n\t\tlet ndaText = this.$('.textarea-nda-text').val(),\n\t\t\tisDefault,\n\t\t\tname,\n\t\t\tsaveNda;\n\t\tif (this.options.project != null) {\n\t\t\tname = this.model.get('name');\n\t\t\tisDefault = false;\n\t\t\tsaveNda = this.ndas.get(this.model.id) != null || _.size(ndaText) > 0;\n\t\t\tthis.options.project.set('hasNDA', saveNda, {\n\t\t\t\tsilent: true\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tname = this.$('.input-nda-name').val();\n\t\t\tisDefault = this.$('.cb-default').prop('checked');\n\t\t\tsaveNda = true;\n\t\t}\n\t\tif (saveNda) {\n\t\t\tthis.model.save({\n\t\t\t\tname: name,\n\t\t\t\tndaText: ndaText,\n\t\t\t\tisDefault: isDefault\n\t\t\t}, {\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tif (this.options.onSave) {\n\t\t\t\t\t\tthis.options.onSave(this.model);\n\t\t\t\t\t}\n\t\t\t\t\tthis.removeModal();\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: \"NDA updated successfully\"\n\t\t\t\t\t});\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tif (this.options.project != null) {\n\t\t\t\tthis.model.destroy();\n\t\t\t}\n\t\t\tthis.removeModal();\n\t\t}\n\t}\n});\n","PJQ.views.projects.UserMessages = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-User-Messages'),\n\t\tview: 'inbox'\n\t},\n\tevents: {\n\t\t'click .btn-view-message': 'viewMessageClicked',\n\t\t'click .btn-delete-message': 'deleteMessageClicked',\n\t\t'click .btn-user-messages-add': 'newMessageClicked',\n\t\t'click .btn-user-messages-inbox': 'openInbox',\n\t\t'click .btn-user-messages-sent': 'openSent'\n\t},\n\tbeforeFirstRender: function () {\n\t\tif (this.options.userMessageId > 0) {\n\t\t\tlet userMessage = new PJQ.models.userMessages.UserMessage({\n\t\t\t\tuserMessageId: this.options.userMessageId\n\t\t\t});\n\t\t\tuserMessage.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.viewMessage(userMessage);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t\tthis.options.userMessageId = null;\n\t\t}\n\n\t\tif (PJQ.app.session.get('masterUserId') === this.options.project.get('masterUserId')) {\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\tvalue: this.options.project.id\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'usermessages',\n\t\t\t\t\t\tvalue: 'stats'\n\t\t\t\t\t},\n\t\t\t\t])\n\t\t\t}).get().done(_.bind(function (data) {\n\t\t\t\tthis.messageStats = data;\n\t\t\t\tthis.render();\n\t\t\t}, this));\n\t\t\treturn false;\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tif (this.messageStats != null) {\n\t\t\tthis.options.userId = PJQ.app.session.user.id;\n\t\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PRIVATE_MESSAGING_USER_ID_DEFAULT)) {\n\t\t\t\tthis.options.userId = (PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PRIVATE_MESSAGING_USER_ID_DEFAULT) == 0 ? -1 : PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PRIVATE_MESSAGING_USER_ID_DEFAULT));\n\t\t\t}\n\n\t\t\tlet $userFilter = this.$('select.user-messages-user-filter'),\n\t\t\t\ttotalMessageCount = _.reduce(_.map(this.messageStats, function (stat) {\n\t\t\t\t\treturn stat.messageCount\n\t\t\t\t}), function (memo, stat) {\n\t\t\t\t\treturn memo + stat;\n\t\t\t\t}, 0);\n\t\t\t$userFilter.append($('<option/>', {\n\t\t\t\tvalue: -1,\n\t\t\t\ttext: 'All (' + totalMessageCount.toString() + ')'\n\t\t\t}));\n\n\t\t\tlet myStat = _.find(this.messageStats, function (stat) {\n\t\t\t\treturn stat.userId === PJQ.app.session.user.id\n\t\t\t});\n\t\t\tif (myStat == null) {\n\t\t\t\t$userFilter.append($('<option/>', {\n\t\t\t\t\tvalue: PJQ.app.session.user.id,\n\t\t\t\t\ttext: PJQ.app.session.user.get('contactName') + ' (0)'\n\t\t\t\t}));\n\t\t\t}\n\t\t\t_.each(this.messageStats, _.bind(function (user) {\n\t\t\t\t$userFilter.append($('<option/>', {\n\t\t\t\t\tvalue: user.userId,\n\t\t\t\t\ttext: user.contactName + ' (' + user.messageCount.toString() + ')'\n\t\t\t\t}));\n\t\t\t}, this));\n\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('select.user-messages-user-filter'),\n\t\t\t\tisMultiple: false,\n\t\t\t\tdefaultValue: this.options.userId,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.options.userId = value;\n\t\t\t\t\tthis.refreshView();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tthis.dataTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$('.user-messages-data-table'),\n\t\t\tlanguage: {\n\t\t\t\temptyTable: \"No messages found\"\n\t\t\t},\n\t\t\tautoWidth: false,\n\t\t\tdata: null,\n\t\t\tisHideSearch: true,\n\t\t\torder: [1, 'desc'],\n\t\t\trowGroup: {\n\t\t\t\tenable: false\n\t\t\t},\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\t\"title\": 'Message Info',\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet rowText = '';\n\t\t\t\t\t\tif (type === 'sort' || type === 'type') {\n\t\t\t\t\t\t\tif (this.options.view === 'inbox')\n\t\t\t\t\t\t\t\trowText = row.from.get('companyName') + ' ' + row.from.get('contactName') + '<br />' + row.get('userMessageType');\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\trowText = row.to.get('companyName') + ' ' + row.to.get('contactName') + '<br />' + row.get('userMessageType');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.options.view === 'inbox')\n\t\t\t\t\t\t\trowText = row.from.get('companyName') + '<br />' + row.from.get('contactName') + '<br />' + row.get('userMessageType');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\trowText = row.to.get('companyName') + '<br />' + row.to.get('contactName') + '<br />' + row.get('userMessageType');\n\n\t\t\t\t\t\tif (row.get('viewedOn') == null && this.options.view === 'inbox') {\n\t\t\t\t\t\t\treturn '<span class=\"font-weight-bold\">' + rowText + '</span>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn rowText;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this),\n\t\t\t\t\t\"width\": \"65%\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": {\n\t\t\t\t\t\t\"_\": function (row) {\n\t\t\t\t\t\t\treturn new Date(row.get('createdOn'));\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"filter\": \"attributes.createdOn\",\n\t\t\t\t\t\t\"display\": _.bind(function (row) {\n\t\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(new Date(row.get('createdOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t},\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tif (type === 'sort' || type === 'type') {\n\t\t\t\t\t\t\treturn new Date(row.get('createdOn'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet rowText = PJQ.helpers.dateHelpers.getDateString(new Date(row.get('createdOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n\t\t\t\t\t\tif (row.get('viewedOn') == null && this.options.view === 'inbox') {\n\t\t\t\t\t\t\treturn '<span class=\"font-weight-bold\">' + rowText + '</span>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn rowText;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this),\n\t\t\t\t\t\"title\": \"Last Activity\",\n\t\t\t\t\t\"width\": \"20%\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": '',\n\t\t\t\t\t\"render\": function () {\n\t\t\t\t\t\tif (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId')) {\n\t\t\t\t\t\t\treturn '<div class=\"show-on-row-hover\"><button type=\"button\" class=\"btn btn-info btn-view-message mr-1\" title=\"View Message\"><i class=\"fal fa-arrow-alt-from-left\"></i></button><button type=\"button\" class=\"btn btn-danger btn-delete-message\" title=\"Delete Message\"><i class=\"fal fa-trash\"></i></button></div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn '<div class=\"show-on-row-hover\"><button type=\"button\" class=\"btn btn-info btn-view-message mr-1\" title=\"View Message\"><i class=\"fal fa-arrow-alt-from-left\"></i></button></div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"className\": \"text-center\",\n\t\t\t\t\t\"width\": \"80px\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"from.attributes.companyName\",\n\t\t\t\t\t\"visible\": false\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.userMessageType\",\n\t\t\t\t\t\"visible\": false\n\t\t\t\t}\n\t\t\t],\n\t\t\tpageLength: 10,\n\t\t\tonRowDoubleClick: _.bind(function (row) {\n\t\t\t\tthis.viewMessage(row.data());\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.refreshView()\n\t},\n\trefreshView: function () {\n\t\tlet $inboxBtn = this.$('.btn-user-messages-inbox'),\n\t\t\t$sentBtn = this.$('.btn-user-messages-sent');\n\t\tif (this.options.view === 'inbox') {\n\t\t\t$inboxBtn.removeClass('text-muted');\n\t\t\t$sentBtn.addClass('text-muted');\n\t\t}\n\t\telse if (this.options.view === 'sent') {\n\t\t\t$sentBtn.removeClass('text-muted');\n\t\t\t$inboxBtn.addClass('text-muted');\n\t\t}\n\n\t\tthis.collection = new PJQ.collections.userMessages.UserMessages(null, {\n\t\t\tproject: this.options.project,\n\t\t\tview: this.options.view,\n\t\t\tuserId: this.options.userId\n\t\t});\n\t\tthis.collection.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.dataTable.resetData(this.collection.models);\n\t\t\t}, this)\n\t\t});\n\t},\n\topenInbox: function () {\n\t\tthis.options.view = 'inbox';\n\t\tthis.refreshView();\n\t},\n\topenSent: function () {\n\t\tthis.options.view = 'sent';\n\t\tthis.refreshView();\n\t},\n\tviewMessageClicked: function (e) {\n\t\tlet message = this.dataTable.getRow($(e.currentTarget).closest('tr')).data();\n\t\tif (message != null) {\n\t\t\tthis.viewMessage(message);\n\t\t}\n\t},\n\tviewMessage: function (message) {\n\t\tif (message.get('viewedOn') == null) {\n\t\t\tmessage.updateViewed();\n\t\t\tthis.dataTable.refresh();\n\t\t}\n\n\t\tnew PJQ.views.projects.UserMessageModal({\n\t\t\tproject: this.options.project,\n\t\t\tmodel: message,\n\t\t\tonSend: _.bind(function () {\n\t\t\t\tthis.refreshView();\n\t\t\t}, this)\n\t\t});\n\t},\n\tnewMessageClicked: function () {\n\t\tnew PJQ.views.projects.UserMessageModal({\n\t\t\tproject: this.options.project,\n\t\t\tonSend: _.bind(function () {\n\t\t\t\tthis.openSent();\n\t\t\t}, this)\n\t\t});\n\t},\n\tdeleteMessageClicked: function (e) {\n\t\tlet row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n\t\t\tmessage = row.data();\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: \"Are you sure you want to delete this message?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.collection.remove(message);\n\t\t\t\tmessage.destroy();\n\t\t\t\tif (row != null) {\n\t\t\t\t\tthis.dataTable.removeRow(row);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.projects.UserMessageModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-User-Message'),\n\t\tmaxWidth: '550px',\n\t\tonSend: _.noop,\n\t\tuserMessage: null,\n\t\tuserMessageTypeId: null\n\t},\n\tevents: {\n\t\t'change select.user-message-type': 'userMessageTypeChanged',\n\t\t'keyup .user-message-body': 'valueChanged',\n\t\t'keyup .user-message-reply': 'replyChanged',\n\t\t'click .btn-reply': 'replyClicked',\n\t\t'keyup .user-message-bid-amount': 'valueChanged',\n\t\t'click .user-message-close': 'onClose',\n\t\t'click .user-message-send': 'onSend',\n\t\t'click .user-message-export': 'onExport'\n\t},\n\tbeforeModalCreated: function () {\n\t\tif (this.model == null) {\n\t\t\tthis.model = new PJQ.models.userMessages.UserMessage({\n\t\t\t\tproject: this.options.project\n\t\t\t});\n\t\t}\n\n\t\tthis.options.project.fetchUserMessageTypes(_.bind(function () {\n\t\t\tif (this.model.userMessageType == null) {\n\t\t\t\tif (this.options.userMessageTypeId != null) {\n\t\t\t\t\tthis.model.userMessageType = this.options.project.userMessageTypes.get(this.options.userMessageTypeId);\n\t\t\t\t}\n\n\t\t\t\t// we check here in case the previous user message set was null\n\t\t\t\tif (this.model.userMessageType == null) {\n\t\t\t\t\tthis.model.userMessageType = this.options.project.userMessageTypes.models[0];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.model.id > 0) {\n\t\t\t\tthis.thread = new PJQ.collections.userMessages.UserMessageThread(null, {\n\t\t\t\t\tmessage: this.model\n\t\t\t\t});\n\t\t\t\tthis.thread.fetch({\n\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\tif (_.size(this.thread.models) > 0) {\n\t\t\t\t\t\t\tthis.model = _.sortBy(this.thread.models, function (model) {\n\t\t\t\t\t\t\t\treturn model.id;\n\t\t\t\t\t\t\t})[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.listenTo(this.model, 'sync', this.render);\n\t\t\t\t\t\tthis.render();\n\t\t\t\t\t}, this)\n\t\t\t\t})\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t}, this));\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tuserMessage: this.model,\n\t\t\tuserMessageTypes: this.options.project.userMessageTypes,\n\t\t\tthread: this.thread\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.model.userMessageType != null) {\n\t\t\tif (this.model.isNew()) {\n\t\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\t\tel: this.$('select.user-message-type'),\n\t\t\t\t\tdefaultValue: this.model.userMessageType.id,\n\t\t\t\t\tisMultiple: false,\n\t\t\t\t\tonChange: _.bind(function (newValue) {\n\t\t\t\t\t\tthis.model.userMessageType = this.options.project.userMessageTypes.get(newValue);\n\t\t\t\t\t\tthis.render();\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif ((this.model.isNew() || _.size(this.model.attachments.models) > 0) && this.$('.user-message-files').length > 0) {\n\t\t\tthis.uploader = new PJQ.views.files.FileUploaderGrid({\n\t\t\t\tel: this.$('.user-message-files'),\n\t\t\t\tcollection: this.model.attachments,\n\t\t\t\tcanUpload: this.model.isNew(),\n\t\t\t\tcanDelete: this.model.isNew(),\n\t\t\t\tonSuccess: _.bind(function (file) {\n\t\t\t\t\tthis.valueChanged();\n\t\t\t\t}, this),\n\t\t\t\tafterDelete: _.bind(function () {\n\t\t\t\t\tthis.valueChanged();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tif (!this.model.isNew()) {\n\t\t\tthis.replyUploader = new PJQ.views.files.FileUploaderGrid({\n\t\t\t\tel: this.$('.uploader-reply'),\n\t\t\t\tstyle: 'list',\n\t\t\t\tisSmall: true\n\t\t\t});\n\t\t}\n\t},\n\treplyChanged: function (e) {\n\t\tthis.$('.btn-reply').prop('disabled', _.size($(e.currentTarget).val()) === 0);\n\t},\n\treplyClicked: function () {\n\t\tlet newMessage = new PJQ.models.userMessages.UserMessage({\n\t\t\tproject: this.model.project,\n\t\t\treplyToMessageId: this.model.id,\n\t\t\tbody: this.$('.user-message-reply').val(),\n\t\t\tattachments: this.replyUploader.collection.models\n\t\t});\n\t\tthis.thread.add(newMessage);\n\t\tnewMessage.save(null, {\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.render();\n\t\t\t}, this)\n\t\t})\n\t},\n\tvalueChanged: function () {\n\t\tlet canSend = true;\n\t\tif (this.model.userMessageType.get('isShowBidAmount') && _.size(this.$('.user-message-bid-amount').val()) === 0)\n\t\t\tcanSend = false;\n\t\tif (!this.model.userMessageType.get('isAttachmentOnly') && _.size(this.$('.user-message-body').val()) === 0)\n\t\t\tcanSend = false;\n\t\tif (this.model.userMessageType.get('isAttachmentOnly') && this.uploader.collection.length === 0)\n\t\t\tcanSend = false;\n\t\tif (this.model.userMessageType.get('isAttachmentRequired') && this.uploader.collection.length === 0)\n\t\t\tcanSend = false;\n\n\t\tthis.$('.user-message-send').prop('disabled', !canSend);\n\t},\n\tonClose: function () {\n\t\tthis.removeModal();\n\t},\n\tonSend: function () {\n\t\t// Disable send button to avoid double sending message\n\t\tthis.$('.user-message-send').attr('disabled', 'true');\n\n\t\tif (this.model.userMessageType.get('isShowBidAmount'))\n\t\t\tthis.model.set('bidAmount', parseInt(this.$('.user-message-bid-amount').val()));\n\n\t\tthis.model.save({\n\t\t\tbody: this.$('.user-message-body').val(),\n\t\t}, {\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.removeModal();\n\t\t\t\tif (typeof this.options.onSend === 'function')\n\t\t\t\t\tthis.options.onSend();\n\t\t\t}, this),\n\t\t\terror: _.bind(function(){\n\t\t\t\t//Re-enable if the message fails for some reason\n\t\t\t\tthis.$('.user-message-send').attr('disabled', false);\n\t\t\t}, this)\n\t\t});\n\t},\n\tonExport: function() {\n\t\tPJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'usermessages',\n\t\t\t\tvalue: this.model.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'thread'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'export'\n\t\t\t}\n\t\t]));\n\n\t}\n});\n","PJQ.views.projects.ProcorePublishModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Procore-Project-Publish'),\n width: '800px',\n minWidth: '800px',\n onPublish: _.noop,\n settings: null,\n procoreProjectNumber: null\n },\n events: {\n 'click .publish' : 'publish'\n },\n beforeModalCreated: function () {\n },\n beforeRender: function () {\n this.renderData = {\n settings: this.options.settings,\n isProcoreProjectNumber: this.options.procoreProjectNumber != null,\n procoreProjectNumber: this.options.procoreProjectNumber\n };\n },\n afterRender: function () {\n this.companyInput = new PJQ.inputs.Selectpicker({\n el: this.$('.procore-company'),\n isIntChoices: true,\n isDisabled: this.options.settings.companies.length === 1,\n defaultValue: this.options.settings.companies[0].id,\n onChange: _.bind(function (value) {\n let loader = new PJQ.Loader(this.$('.modal-body'));\n\n new PJQ.ajax.Request({\n endpoint: '/procore/settings/' + value\n }).get().done(_.bind(function (response) {\n if (loader != null)\n loader.remove();\n this.options.settings = response;\n this.afterCompanyChanged();\n }, this)).fail(_.bind(function (xhr, err, result) {\n }, this));\n }, this)\n });\n\n this.$('.procore-project-name').val(PJQ.app.session.project.get('projectName'));\n\n this.startDateInput = new PJQ.inputs.Datepicker({\n el: this.$('.procore-est-start'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: PJQ.app.session.project.get('startDate') ? PJQ.helpers.dateHelpers.parseDateString(PJQ.app.session.project.get('startDate'), false) : null\n }\n });\n\n this.completeDateInput = new PJQ.inputs.Datepicker({\n el: this.$('.procore-est-complete'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: PJQ.app.session.project.get('endDate') ? PJQ.helpers.dateHelpers.parseDateString(PJQ.app.session.project.get('endDate'), false) : null\n }\n });\n\n new PJQ.views.projects.ProjectAttachments({\n el: this.$('.project-attachments'),\n project: PJQ.app.session.project,\n isHideDownload: true,\n isHideFiles: true,\n isHidePrivate: false,\n onChange: _.bind(function(attachments) {\n this.options.selectedAttachments = attachments;\n },this)\n });\n\n this.afterCompanyChanged();\n },\n afterCompanyChanged: function() {\n\n if (this.options.settings.companyOffices.length === 1 && this.options.settings.companyOffices[0].id === null)\n this.options.settings.companyOffices = [];\n\n if (this.options.settings.companyOffices.length === 0) {\n this.$('.procore-company-office').closest('div.form-group').hide();\n if (this.companyOfficeInput)\n this.companyOfficeInput.setValue(null);\n }\n else {\n this.$('.procore-company-office').closest('div.form-group').show();\n if (!this.companyOfficeInput)\n {\n this.companyOfficeInput = new PJQ.inputs.Selectpicker({\n el: this.$('.procore-company-office'),\n isIntChoices: true,\n isDisabled: this.options.settings.companyOffices.length === 1,\n choices: this.options.settings.companyOffices,\n defaultValue: this.options.settings.companyOffices[0].id\n });\n }\n else\n {\n this.companyOfficeInput.updateChoices(this.options.settings.companyOffices);\n this.companyOfficeInput.setValue(this.options.settings.companyOffices[0].id);\n }\n }\n\n if (this.options.settings.programs.length === 1 && this.options.settings.programs[0].id === null)\n this.options.settings.programs = [];\n\n if (this.options.settings.programs.length === 0) {\n this.$('.procore-project-program').closest('div.form-group').hide();\n if (this.projectProgramInput)\n this.projectProgramInput.setValue(null);\n }\n else {\n this.$('.procore-project-program').closest('div.form-group').show();\n if (!this.projectProgramInput)\n {\n this.projectProgramInput = new PJQ.inputs.Selectpicker({\n el: this.$('.procore-project-program'),\n isIntChoices: true,\n isDisabled: this.options.settings.programs.length === 1,\n choices: this.options.settings.programs,\n defaultValue: this.options.settings.programs[0].id\n });\n }\n else\n {\n this.projectProgramInput.updateChoices(this.options.settings.programs);\n this.projectProgramInput.setValue(this.options.settings.programs[0].id);\n }\n }\n\n if (this.options.settings.projectTemplates.length === 1 && this.options.settings.projectTemplates[0].id === null)\n this.options.settings.projectTemplates = [];\n\n if (this.options.settings.projectTemplates.length === 0) {\n this.$('.procore-project-template').closest('div.form-group').hide();\n if (this.projectTemplateInput)\n this.projectTemplateInput.setValue(null);\n }\n else {\n this.$('.procore-project-template').closest('div.form-group').show();\n if (!this.projectTemplateInput)\n {\n this.projectTemplateInput = new PJQ.inputs.Selectpicker({\n el: this.$('.procore-project-template'),\n isIntChoices: true,\n isDisabled: this.options.settings.projectTemplates.length === 1,\n choices: this.options.settings.projectTemplates,\n defaultValue: this.options.settings.projectTemplates[0].id\n });\n }\n else\n {\n this.projectTemplateInput.updateChoices(this.options.settings.projectTemplates);\n this.projectTemplateInput.setValue(this.options.settings.projectTemplates[0].id);\n }\n }\n\n if (this.options.settings.projectTypes.length === 1 && this.options.settings.projectTypes[0].id === null)\n this.options.settings.projectTypes = [];\n\n if (this.options.settings.projectTypes.length === 0) {\n this.$('.procore-project-type').closest('div.form-group').hide();\n if (this.projectTypeInput)\n this.projectTypeInput.setValue(null);\n }\n else {\n this.$('.procore-project-type').closest('div.form-group').show();\n if (!this.projectTypeInput)\n {\n this.projectTypeInput = new PJQ.inputs.Selectpicker({\n el: this.$('.procore-project-type'),\n isIntChoices: true,\n isDisabled: this.options.settings.projectTypes.length === 1,\n choices: this.options.settings.projectTypes,\n defaultValue: this.options.settings.projectTypes[0].id\n });\n }\n else\n {\n this.projectTypeInput.updateChoices(this.options.settings.projectTypes);\n this.projectTypeInput.setValue(this.options.settings.projectTypes[0].id);\n }\n }\n\n if (this.options.settings.projectStages.length === 1 && this.options.settings.projectStages[0].id === null)\n this.options.settings.projectStages = [];\n\n if (this.options.settings.projectStages.length === 0) {\n this.$('.procore-project-stage').closest('div.form-group').hide();\n if (this.projectStageInput)\n this.projectStageInput.setValue(null);\n }\n else {\n this.$('.procore-project-stage').closest('div.form-group').show();\n if (!this.projectStageInput)\n {\n this.projectStageInput = new PJQ.inputs.Selectpicker({\n el: this.$('.procore-project-stage'),\n isIntChoices: true,\n isDisabled: this.options.settings.projectStages.length === 1,\n choices: this.options.settings.projectStages,\n defaultValue: this.options.settings.projectStages[0].id\n });\n }\n else\n {\n this.projectStageInput.updateChoices(this.options.settings.projectStages);\n this.projectStageInput.setValue(this.options.settings.projectStages[0].id);\n }\n }\n },\n publish: function() {\n\n let projectAddress = PJQ.app.session.project.get('address1');\n\n if (PJQ.app.session.project.get('address2')) {\n\n if (projectAddress)\n projectAddress += ' ';\n\n projectAddress += PJQ.app.session.project.get('address2');\n }\n\n let office_id = 0;\n if (this.companyOfficeInput && this.companyOfficeInput.getValue())\n office_id = this.companyOfficeInput.getValue();\n\n let project_stage_id = 0;\n if (this.projectStageInput && this.projectStageInput.getValue())\n project_stage_id = this.projectStageInput.getValue();\n\n let program_id = 0;\n if (this.projectProgramInput && this.projectProgramInput.getValue())\n program_id = this.projectProgramInput.getValue();\n\n let project_type_id = 0;\n if (this.projectTypeInput && this.projectTypeInput.getValue())\n project_type_id = this.projectTypeInput.getValue();\n\n let project_template_id = 0;\n if (this.projectTemplateInput && this.projectTemplateInput.getValue())\n project_template_id = this.projectTemplateInput.getValue();\n\n let square_feet = 0;\n if (_.size(PJQ.helpers.formatHelpers.numbersOnly(this.$('.procore-square-feet'))) > 0) {\n square_feet = parseInt(PJQ.helpers.formatHelpers.numbersOnly(this.$('.procore-square-feet')));\n }\n\n let attachments = [], drawings = [];\n if (this.options.selectedAttachments) {\n attachments = _.map(_.filter(this.options.selectedAttachments.models, function(model) { return !model.get('isDrawing') }),\n function(attachment) { return attachment.get('entryId'); });\n drawings = _.map(_.filter(this.options.selectedAttachments.models, function(model) { return model.get('isDrawing') }),\n function(attachment) { return attachment.get('folderId') == 0 ? -2 : attachment.get('versionId'); });\n }\n\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROCORE_PROJECT_NUMBER_CUSTOM_FIELD) && _.size(attachments) == 0 && _.size(drawings) == 0) {\n PJQ.notifications.notify.errorNotify({\n message: 'Select drawings or attachments in order to Publish to Procore'\n });\n return;\n }\n\n let postData = {\n company_id: this.companyInput.getValue(),\n name: this.$('.procore-project-name').val().trim(),\n project_number: this.$('.procore-project-number').val().toString().trim(),\n address: projectAddress,\n city: PJQ.app.session.project.get('city').trim(),\n zip: PJQ.app.session.project.get('zip').trim(),\n state_code: PJQ.app.session.project.get('state'),\n country_code: PJQ.app.session.project.get('country'),\n description: '',\n public_notes: '',\n est_start_date: this.startDateInput.getValue() ? PJQ.helpers.dateHelpers.getDateString(this.startDateInput.getValue(), PJQ.helpers.dateHelpers.dateFormats.DATE) : '',\n est_completion_date: this.completeDateInput.getValue() ? PJQ.helpers.dateHelpers.getDateString(this.completeDateInput.getValue(), PJQ.helpers.dateHelpers.dateFormats.DATE) : '',\n square_feet: square_feet,\n phone: '',\n flagColor: '',\n office_id: office_id,\n project_stage_id: project_stage_id,\n program_id: program_id,\n project_type_id: project_type_id,\n project_template_id: project_template_id,\n pantera_project_id: PJQ.app.session.project.id,\n documentListDrawings: drawings.join(','),\n documentListPublic: attachments.join(','),\n documentListPrivate: '',\n isSyncProjectContactVendors: this.$('.procore-sync-contacts').is(':checked')\n };\n\n\n new PJQ.ajax.Request({\n endpoint: '/procore/projects',\n data: postData\n }).post().done(_.bind(function (data) {\n if (data != '0') {\n PJQ.app.session.project.set('externalProjectId', 'PROCORE:' + data);\n PJQ.app.router.navigate('projects/' + PJQ.app.session.project.id, {\n trigger: true\n });\n this.removeModal();\n new PJQ.views.BaseModal({\n header: \"Procore Project\",\n body: '<a href=\"https://api.procore.com/' + data + '/project/home\" target=\"_blank\">Click here</a> to open your Procore project in a new window. If Drawings or Attachments were selected, it may take some time for uploading to complete.'\n });\n\n }\n else {\n new PJQ.views.BaseModal({\n header: \"Procore Publish Error\",\n body: 'Unable to create/locate Procore Project. Error 124'\n });\n }\n }, this)).fail(_.bind(function (xhr, err, result) {\n new PJQ.views.BaseModal({\n header: \"Procore Publish Error\",\n body: (xhr.responseJSON.exceptionMessage ? xhr.responseJSON.exceptionMessage : 'Unknown error')\n });\n }, this));\n\n\n\n }\n});\n","PJQ.views.projects.dashboard = {};\n\nPJQ.views.projects.ProjectDashboard = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Dashboard')\n },\n events: {\n 'click .btn-alert-order-prints': 'orderPrints',\n 'click .stack-takeoff': 'stackTakeoff',\n 'click .square-takeoff': 'squareTakeoff',\n 'click .e-takeoff': 'eTakeoff',\n 'click .btn-update-my-info': 'updateMyInfo',\n 'click .btn-submit-bid': 'submitBidMessage',\n 'click .btn-feature-settings': 'viewFeatureSettings'\n },\n beforeFirstRender: function () {\n if (this.model == null) {\n this.model = PJQ.app.session.project;\n }\n\n if (this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES_COUNT)) {\n this.model.fetchBidPackages(_.bind(function (bp) {\n this.bidPackages = bp;\n this.render();\n }, this));\n }\n },\n renderData: function () {\n return {\n model: this.model,\n isAdmin: (PJQ.app.session.get('masterUserId') === this.model.get('masterUserId')),\n showBidPackages: this.showBidPackages()\n };\n },\n showBidPackages: function () {\n return this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES_COUNT)\n && this.bidPackages != null\n && _.size(_.filter(this.bidPackages.models, function (bidPackage) {\n let n = bidPackage.get('notes');\n return n != null && _.size(n.trim()) > 0;\n })) > 0;\n },\n afterRender: function () {\n if (this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES_COUNT)) {\n if (this.bidPackages == null) {\n return;\n }\n }\n let showBidPackages = this.showBidPackages(),\n device = PJQ.helpers.mobile.getDevice();\n if (device != null) {\n new PJQ.views.mobile.AppDownloadModal();\n }\n\n if (showBidPackages) {\n this.renderBidPackages();\n }\n\n this.model.fetchUserMessageTypes(_.bind(function () {\n if ((PJQ.app.session.get('masterUserId') === this.model.get('masterUserId'))) {\n new PJQ.views.projects.dashboard.ProjectStats({\n el: this.$('.project-stats'),\n project: this.model,\n dashboard: this,\n emptyCallback: _.bind(function () {\n this.$('.project-stats-row').remove();\n }, this)\n });\n\n\t\t\t\tnew PJQ.views.projects.dashboard.Newsfeed({\n\t\t\t\t\tel: this.$('.project-newsfeed'),\n\t\t\t\t\tproject: this.model,\n\t\t\t\t\tdashboard: this\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// sub command buttons\n\t\t\t\tthis.inviteHeader = new PJQ.views.projects.dashboard.ProjectInviteHeader({\n\t\t\t\t\tel: this.$('.project-invite-header'),\n\t\t\t\t\tproject: this.model,\n\t\t\t\t\tdashboard: this,\n\t\t\t\t\tafterRender: _.bind(function () {\n\t\t\t\t\t\tif (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'project', 'inviteHeader')) {\n\t\t\t\t\t\t\tlet cb = PJQ.app.portal.customization.project.inviteHeader.afterRender;\n\t\t\t\t\t\t\tif (typeof cb === 'function') {\n\t\t\t\t\t\t\t\tcb();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n if (PJQ.app.session.get('submitBid')) {\n this.submitBidMessage();\n }\n }, this)\n });\n\n new PJQ.views.projects.dashboard.ProjectDetails({\n el: this.$('.project-details'),\n model: this.model,\n afterRender: function () {\n if (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'project', 'details')) {\n let cb = PJQ.app.portal.customization.project.details.afterRender;\n if (typeof cb === 'function') {\n cb();\n }\n }\n }\n });\n\n if (this.model.user != null) {\n new PJQ.views.projects.dashboard.ProjectContactDetails({\n el: this.$('.project-contact-details'),\n model: this.model.user,\n project: this.model\n });\n }\n\n if (PJQ.app.session.contact != null) {\n new PJQ.views.projects.dashboard.ProjectMessagesSub({\n el: this.$('.project-messages-sub'),\n project: this.model,\n dashboard: this\n });\n }\n }\n\n if (PJQ.app.session.get('masterUserId') !== this.model.get('masterUserId')\n || this.model.hasPermission('attachments.canView')) {\n this.$('.col-attachments').removeClass('hidden');\n new PJQ.views.projects.ProjectAttachments({\n el: this.$('.project-attachments'),\n project: this.model,\n isHideEmptyFolders: true\n });\n }\n }, this));\n },\n renderBidPackages: function () {\n if (this.bidPackages != null) {\n new PJQ.views.projects.dashboard.BidPackages({\n el: this.$('.bid-packages'),\n collection: this.bidPackages\n });\n }\n },\n orderPrints: function () {\n new PJQ.views.files.OrderPrintsModal({\n contact: PJQ.app.session.contact\n });\n },\n updateMyInfo: function () {\n new PJQ.views.contacts.BaseEditContactModal({\n model: new PJQ.models.projectContacts.ProjectContact({\n id: PJQ.app.session.contact.id,\n projectId: this.model.id\n })\n });\n },\n viewFeatureSettings: function() {\n new PJQ.views.featureSettings.FeatureSettingsModal({\n model: new PJQ.models.featureSettings.FeatureSetting(PJQ.app.session.project.get('featureSettings'), {project: PJQ.app.session.project}),\n project: PJQ.app.session.project\n });\n },\n stackTakeoff: function () {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.model.id\n },\n {\n endpoint: 'contacts',\n value: PJQ.app.session.contact.id\n },\n {\n endpoint: 'stackurl'\n }\n ]);\n let request = new PJQ.ajax.Request({\n endpoint: endpoint\n });\n request.get().done(_.bind(function (data) {\n window.location.href = data;\n }, this)).fail(function () {\n //error();\n });\n },\n squareTakeoff: function () {\n new PJQ.views.projects.SquareTakeoffModal();\n },\n eTakeoff: function () {\n new PJQ.views.projects.eTakeoffModal({\n contact: PJQ.app.session.contact,\n project: PJQ.app.session.project,\n accessKey: PJQ.app.session.get('accessKey')\n });\n },\n submitBidMessage: function () {\n let messageTypeId = this.$('.btn-submit-bid').data('messageTypeId');\n if (messageTypeId > 0) {\n new PJQ.views.projects.UserMessageModal({\n project: this.model,\n userMessageTypeId: messageTypeId,\n onSend: _.bind(function () {\n if (PJQ.app.session.project.hasPermission('privateMessaging.canView') &&\n !(PJQ.app.session.project.get('status') === 'ARCHIVE'\n || PJQ.app.session.project.get('status') === 'NEW'\n || (PJQ.app.session.user === null && PJQ.app.session.contact === null)\n || PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PROJECT_PRIVATE_MESSAGES))) {\n PJQ.app.router.navigate('projects/' + PJQ.app.session.project.id + '/privatemessaging/view/sent', {\n trigger: true\n });\n }\n PJQ.notifications.notify.successNotify({\n message: 'Bid Submitted successfully.'\n });\n }, this)\n });\n }\n }\n});\n\nPJQ.views.projects.dashboard.ProjectDetails = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Details-Dashboard')\n },\n beforeRender: function () {\n this.renderData = {\n model: this.model,\n project: this.options.project\n };\n },\n afterRender: function () {\n\n }\n});\n\nPJQ.views.projects.dashboard.ProjectContactDetails = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Contact-Details-Dashboard')\n },\n beforeRender: function () {\n this.renderData = {\n model: this.model,\n project: this.options.project\n };\n },\n afterRender: function () {\n\n }\n});\n\nPJQ.views.projects.dashboard.ProjectProposals = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Proposals')\n },\n events: {\n // 'click .group-status-close': 'onClose'\n },\n beforeRender: function () {\n this.renderData = {\n model: this.model\n };\n },\n afterRender: function () {\n\n }\n});\n\n// Newsfeed\nPJQ.views.projects.dashboard.Newsfeed = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Newsfeed'),\n subTemplates: {\n newsfeedItems: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Newsfeed-Items')\n },\n pageNumber: 1,\n pageSize: 10\n },\n events: {\n 'click .btn-project-newsfeed-refresh': 'refreshNewsfeed',\n 'click .btn-project-newsfeed-view-message-participants': 'viewMessageParticipants',\n 'click .btn-project-newsfeed-view-attachments': 'viewAttachments',\n 'click .btn-project-newsfeed-copy-message': 'copyMessage',\n 'click .btn-project-newsfeed-delete-message': 'deleteMessage'\n },\n beforeFirstRender: function () {\n\n },\n beforeRender: function () {\n\n },\n afterRender: function () {\n this.getNewsfeed(this.options.pageNumber);\n },\n refreshNewsfeed: function () {\n this.options.pageNumber = 1;\n this.$('.project-newsfeed-items').html('');\n this.getNewsfeed(this.options.pageNumber);\n },\n getNewsfeed: function (pageNumber) {\n let loader = new PJQ.Loader(this.$('.project-newsfeed-items'));\n this.data = [];\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'newsfeed'\n },\n ], [\n {\n parameter: 'pageNumber',\n value: pageNumber\n },\n {\n parameter: 'pageSize',\n value: 9999\n }\n ])\n }).get().done(_.bind(function (data) {\n this.data = data;\n loader.remove();\n this.renderSubTemplate(true, this.options.subTemplates.newsfeedItems, this.$('.project-newsfeed-items'), {\n items: data,\n isAdmin: (PJQ.app.session.get('masterUserId') === this.options.project.get('masterUserId'))\n });\n }, this));\n },\n viewAttachments: function (e) {\n let projectMessageId = parseInt(this.$(e.currentTarget).data('projectMessageId'));\n _.each(this.data, _.bind(function (item) {\n if (item.auditAction === 'ProjectMessage' && item.projectMessage && item.projectMessage.projectMessageId === projectMessageId) {\n new PJQ.views.projects.dashboard.ViewMessageAttachmentsModal({\n attachments: item.attachments\n });\n }\n }, this));\n },\n viewMessageParticipants: function (e) {\n let projectMessageId = parseInt(this.$(e.currentTarget).data('projectMessageId'));\n PJQ.app.router.navigate('projects/' + this.options.project.id + (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW) ? '/messagingnew/' : '/messaging/') + projectMessageId, {\n trigger: true\n });\n },\n copyMessage: function (e) {\n let projectMessageId = parseInt(this.$(e.currentTarget).data('projectMessageId'));\n PJQ.app.router.navigate('projects/' + this.options.project.id + (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW) ? '/messagingnew/' : '/messaging/') + projectMessageId + '/copy', {\n trigger: true\n });\n },\n deleteMessage: function (e) {\n let auditLogId = parseInt(this.$(e.currentTarget).data('auditLogId'));\n new PJQ.views.BaseModal({\n header: 'Confirm Delete',\n body: '<div class=\"text-dark fs-14\">Are you sure you want to delete this message and recipient responses?</div>',\n okButtonText: 'Yes',\n onOk: _.bind(function () {\n if (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW)) {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'projectmessages',\n value: parseInt(this.$(e.currentTarget).data('projectMessageId'))\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint\n }).delete().done(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Message deleted successfully.'\n });\n this.refreshNewsfeed();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n\n } else {\n selectedCommentId = auditLogId;\n DeleteProjectMessageByCommentId(_.bind(function () {\n this.refreshNewsfeed();\n }, this));\n }\n }, this),\n isShowCancelButton: true,\n cancelButtonText: \"No\"\n });\n }\n});\n\n// Admin Project Stats\nPJQ.views.projects.dashboard.ProjectStats = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Stats'),\n subTemplates: {\n statItem: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Stats-Item')\n },\n emptyCallback: null\n },\n events: {},\n beforeFirstRender: function () {\n\n },\n beforeRender: function () {\n\n },\n afterRender: function () {\n this.getProjectStats();\n },\n getProjectStats: function () {\n let loader = new PJQ.Loader(this.$('.project-stats-items'));\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'stats'\n },\n ])\n }).get().done(_.bind(function (data) {\n loader.remove();\n\n if (data == null || _.size(data.projectStats) === 0) {\n if (typeof this.options.emptyCallback === 'function') {\n this.options.emptyCallback();\n return;\n }\n }\n\n _.each(data.projectStats, _.bind(function (stats) {\n let labels = [],\n graphSet = {\n data: [],\n backgroundColor: []\n };\n _.each(stats.datasets, function (dataset) {\n labels.push(PJQ.helpers.formatHelpers.upperCaseFirstLetterEachWord(dataset.label));\n graphSet.data.push(dataset.count);\n graphSet.backgroundColor.push(dataset.color);\n });\n\n this.renderSubTemplate(true, this.options.subTemplates.statItem, this.$('.project-stats-items'), {\n stats: stats\n }, _.bind(function ($chart) {\n new PJQ.charts.Chart($chart.find('.project-stat-chart'), {\n type: 'doughnut',\n height: 150,\n width: 150,\n showTotal: true,\n total: stats.total,\n data: {\n labels: labels,\n datasets: [\n graphSet\n ]\n },\n options: {\n cutoutPercentage: 70,\n legend: {\n display: false\n }\n },\n onClick: _.bind(function (clickedSegments) {\n if (_.size(clickedSegments) > 0) {\n let segment = clickedSegments[0],\n stat = stats.datasets[segment._index];\n PJQ.app.router.navigate('projects/' + this.options.project.id + '/' + stat.route, {\n trigger: true\n });\n }\n }, this)\n });\n }, this));\n }, this));\n\n }, this));\n }\n});\n\nPJQ.views.projects.dashboard.ProjectInviteHeader = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Invite-Header'),\n },\n events: {\n 'click .send-user-message': 'sendUserMessage'\n },\n beforeFirstRender: function () {\n if (this.options.project != null) {\n this.options.project.getCompanyLogoUrl(_.bind(function () {\n this.render();\n }, this));\n return false;\n }\n },\n beforeRender: function () {\n this.renderData = {\n options: this.options,\n hideBidsDue: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_HIDE_BIDS_DUE)\n }\n },\n afterRender: function () {\n if (PJQ.app.session.contact != null) {\n let projectResponseButtons = [];\n _.each(this.options.project.getProjectStatusList(), _.bind(function (status, index) {\n let colorClass = 'info';\n if (index === 0)\n colorClass = 'success';\n else if (index === 1)\n colorClass = 'danger';\n\n if (status[1]) {\n projectResponseButtons.push({label: status[0], value: status[0], colorClass: colorClass});\n }\n }, this));\n\n _.each(this.options.project.userMessageTypes.models, _.bind(function (type) {\n if (type.get('isAlwaysVisible')) {\n this.$('.user-messages').removeClass('hidden');\n }\n }, this));\n }\n },\n sendUserMessage: function (e) {\n new PJQ.views.projects.UserMessageModal({\n project: this.options.project,\n userMessageTypeId: this.$(e.currentTarget).data('userMessageTypeId'),\n onSend: _.bind(function () {\n this.refresh();\n }, this)\n });\n }\n});\n\n// Sub Project Messages\nPJQ.views.projects.dashboard.ProjectMessagesSub = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Messages-Sub'),\n subTemplates: {\n messageItems: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Messages-Sub-Items')\n }\n },\n events: {\n 'click .project-message>.card-header': 'stopPropagationIfSelected',\n 'click .project-message .btn-download-attachment': 'downloadAttachment',\n 'shown.bs.collapse .project-message .collapse': 'messageShown'\n },\n beforeFirstRender: function () {\n this.options.project.fetchProjectMessageResponses(_.bind(function (responses) {\n this.model = responses;\n this.render();\n }, this));\n },\n afterRender: function () {\n if (this.model && this.model.isFetched) {\n let projectStatuses = this.options.project.getProjectStatusList();\n this.renderSubTemplate(true, this.options.subTemplates.messageItems, this.$('.project-message-items'), {\n model: this.model,\n projectStatuses: projectStatuses\n }, _.bind(function () {\n this.projectResponseButtons = [];\n _.each(projectStatuses, _.bind(function (status, index) {\n let colorClass = 'info';\n if (index === 0) {\n colorClass = 'success';\n } else if (index === 1) {\n colorClass = 'danger';\n }\n if (status[1]) {\n this.projectResponseButtons.push({\n label: status[0],\n value: status[0],\n colorClass: colorClass\n });\n }\n }, this));\n\n this.messageResponseButtons = [];\n _.each(this.options.project.getMessageStatusList(), _.bind(function (status, index) {\n let colorClass = 'info';\n if (index === 0)\n colorClass = 'success';\n else if (index === 1)\n colorClass = 'danger';\n\n if (status[1]) {\n this.messageResponseButtons.push({\n label: status[0],\n value: status[0],\n colorClass: colorClass\n });\n }\n }, this));\n if (_.size(this.model.messages.models) > 0) {\n _.each(this.model.messages.models, function (model) {\n this.renderMessageResponseButton(model);\n }, this);\n\n // try to open the message matching the key they came in with\n let contextMessage = this.model.getContextMessage();\n contextMessage = this.setContextMessage(contextMessage);\n if (contextMessage != null) {\n this.$('#project-messages-sub-' + contextMessage.get('accessKey')).collapse('show');\n\n let urlStatus = PJQ.app.session.get('bidStatus');\n if (_.size(urlStatus) > 0) {\n PJQ.app.session.set('bidStatus', null);\n // make sure the status in the url was a valid status\n let actualStatus = _.find(_.union(PJQ.app.session.project.getProjectStatusList(), [['YES', true], ['NO', true]]), function (status) {\n return status[0].toUpperCase() === urlStatus.toUpperCase();\n });\n if (actualStatus != null) {\n this.handleResponse(contextMessage, actualStatus[0]);\n this.render();\n }\n }\n }\n } else {\n this.renderContextMessageResponseButton();\n }\n\n this.$('#projectMessagesSubAccordion').on('shown.bs.collapse', function () {\n $(this).parent().find(\".card-header[aria-expanded='true'] .fa-chevron-down\").removeClass(\"fa-chevron-down\").addClass(\"fa-chevron-right\");\n $(this).parent().find(\".card-header[aria-expanded='false'] .fa-chevron-right\").removeClass(\"fa-chevron-right\").addClass(\"fa-chevron-down\");\n });\n }, this));\n } else {\n new PJQ.Loader(this.$('.project-message-items'));\n }\n },\n setContextMessage: function (selectedMessage) {\n let contextMessage = null;\n if (selectedMessage != null && selectedMessage.canChangeStatus()) {\n contextMessage = selectedMessage;\n }\n\n if (contextMessage == null) {\n let noResponseMessages = this.model.messages.getChangeableMessages();\n if (_.size(noResponseMessages) > 0) {\n contextMessage = _.max(noResponseMessages, function (item) {\n return PJQ.helpers.dateHelpers.getDateDiff(new Date(), new Date(item.get('createdOn')));\n });\n }\n }\n\n if (contextMessage == null) {\n if (_.size(this.model.messages) > 0) {\n contextMessage = _.max(this.model.messages.models, function (item) {\n return PJQ.helpers.dateHelpers.getDateDiff(new Date(), new Date(item.get('createdOn')));\n });\n }\n }\n\n this.renderContextMessageResponseButton(contextMessage);\n\n return contextMessage;\n },\n getMessageElement: function (message) {\n return $('div.card[data-access-key=\"' + message.get('accessKey') + '\"]');\n },\n messageShown: function (e) {\n let accessKey = $(e.currentTarget).data('accessKey').toString(),\n selectedMessage = this.model.messages.findWhere({accessKey: accessKey.toUpperCase()});\n this.setContextMessage(selectedMessage);\n },\n handleResponse: function (message, response) {\n // if they have more than one group, collect responses per group\n let messageType = message.get('type');\n\n // 2023-08-14 do not check the message type anymore, since bid reminders get sent with no message type but have response buttons in them\n //if (messageType === 'PROJECT' || messageType === 'MESSAGE') {\n message.set('status', response);\n //}\n\n if (messageType != 'MESSAGE' && this.model.contactGroups.models.length > 1) {\n new PJQ.views.projects.dashboard.GetGroupResponsesSubModal({\n contactGroups: this.model.contactGroups,\n accessKey: message.get('accessKey'),\n onSave: _.bind(function (result) {\n // todo: update project contact accordingly so that other views can process the change\n if (message.responseButton)\n message.responseButton.setValue(result.response);\n\n if (this.contextResponseControl)\n this.contextResponseControl.setValue(result.response);\n\n PJQ.notifications.notify.successNotify({\n message: 'Your response of ' + result.response + ' has been recorded.'\n });\n this.checkDeclinedResponseQuestion(result.response, message.get('accessKey'));\n }, this)\n });\n } else {\n // just save the overall response\n let contactGroups = new PJQ.collections.projectMessages.ProjectContactGroups(),\n contactGroup = new PJQ.models.projectMessages.ProjectContactGroup();\n\n contactGroup.set('groupStatus', response);\n contactGroups.add(contactGroup);\n contactGroups.accessKey = message.get('accessKey');\n\n contactGroups.save({\n success: _.bind(function (result) {\n if (this.contextResponseControl != null) {\n this.contextResponseControl.setValue(result.response);\n }\n\n PJQ.notifications.notify.successNotify({\n message: 'Your response of ' + result.response + ' has been recorded.'\n });\n\n if (messageType != 'MESSAGE')\n this.checkDeclinedResponseQuestion(result.response, message.get('accessKey'));\n }, this)\n });\n }\n },\n checkDeclinedResponseQuestion: function(response, accessKey) {\n if (!PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_MESSAGE_DECLINE_QUESTION))\n return;\n\n PJQ.app.session.project.getProjectStatuses(_.bind(function(statuses) {\n if (response === statuses[1].name) {\n let declineQuestionSettings = new PJQ.models.projectParticipants.ProjectMessageDeclineQuestionSettings(null, {\n project: PJQ.app.session.project\n });\n\n declineQuestionSettings.fetch({\n success: _.bind(function() {\n\n let projectLocation = '';\n if (PJQ.app.session.project.get('city'))\n projectLocation = PJQ.app.session.project.get('city');\n if (PJQ.app.session.project.get('state'))\n projectLocation += (PJQ.app.session.project.get('city') ? ', ' : '') + PJQ.app.session.project.get('state');\n if (PJQ.app.session.project.get('zip'))\n projectLocation += (_.size(projectLocation)>0 ? ' ' : '') + PJQ.app.session.project.get('zip');\n\n if (_.size(projectLocation) == 0)\n projectLocation = \"N/A\";\n\n let recipientGroups = _.map(this.model.contactGroups.models, function(contactGroup) {\n return contactGroup.get('groupName');\n });\n\n let companyName = _.size(PJQ.app.session.project.user.get('companyName')) > 0 ? PJQ.app.session.project.user.get('companyName') : PJQ.app.session.project.user.get('contactName');\n\n let questions = _.map(declineQuestionSettings.get('questions'), _.bind(function(question) {\n question = question.replace(/\\[Project.Location\\]/g, projectLocation);\n question = question.replace(/\\[ProjectMessage.RecipientGroupListComma\\]/g, recipientGroups.join(', '));\n question = question.replace(/\\[Sender.CompanyName\\]/g, companyName);\n\n return question;\n\n }, this));\n\n new PJQ.views.projects.dashboard.ProjectMessageDeclineQuestionModal({\n questions: questions,\n accessKey: accessKey,\n response: response\n });\n\n }, this)\n });\n }\n }, this));\n },\n renderMessageResponseButton: function (message) {\n if (message.canChangeStatus()) {\n message.responseButton = new PJQ.inputs.ButtonGroup({\n el: this.getMessageElement(message).find('.message-responses'),\n colorInactiveButtons: true,\n buttonClasses: 'font-weight-bold',\n separateButtons: true,\n buttons: message.get('type') === 'PROJECT' ? this.projectResponseButtons : this.messageResponseButtons,\n defaultValue: (_.size(message.get('status')) > 0 && message.get('status') !== 'PENDING') ? message.get('status') : null,\n onChange: _.bind(function (value) {\n if (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DOWNLOAD_CONTACT_UPDATE_REQ) && PJQ.app.session.contact.get('updatedOn') == null) {\n new PJQ.views.contacts.BaseEditContactModal({\n alert: \"You must update your contact information before Responding.\",\n onSave: _.bind(function () {\n PJQ.app.session.contact.set('updatedOn', new Date());\n this.contextResponseControl.setValue(value);\n this.handleResponse(message, value);\n }, this),\n model: new PJQ.models.projectContacts.ProjectContact({\n id: PJQ.app.session.contact.id,\n projectId: PJQ.app.session.project.id\n })\n });\n } else {\n this.contextResponseControl.setValue(value);\n this.handleResponse(message, value);\n }\n }, this)\n });\n }\n },\n renderContextMessageResponseButton: function (message) {\n if (this.contextResponseControl != null) {\n this.contextResponseControl.remove();\n }\n if (message != null && message.canChangeStatus()) {\n this.contextResponseControl = new PJQ.inputs.ButtonGroup({\n el: this.options.dashboard.inviteHeader.$('.responses-control'),\n colorInactiveButtons: true,\n buttonClasses: 'font-weight-bold',\n separateButtons: true,\n buttons: message.get('type') === 'PROJECT' ? this.projectResponseButtons : this.messageResponseButtons,\n defaultValue: (_.size(message.get('status')) > 0 && message.get('status') !== 'PENDING') ? message.get('status') : null,\n onChange: _.bind(function (value) {\n if (message.responseButton != null) {\n message.responseButton.setValue(value, true);\n }\n }, this)\n });\n } else if (this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_SUB_RESPONSE) && message && message.canChangeStatus()) {\n this.contextResponseControl = new PJQ.inputs.ButtonGroup({\n el: this.options.dashboard.inviteHeader.$('.responses-control'),\n colorInactiveButtons: true,\n buttonClasses: 'font-weight-bold',\n separateButtons: true,\n buttons: this.projectResponseButtons,\n defaultValue: (_.size(this.options.project.get('bidResponse')) > 0 && this.options.project.get('bidResponse') !== 'PENDING') ? this.options.project.get('bidResponse') : null,\n onChange: _.bind(function (value) {\n this.options.project.updateResponse(value, _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Your response of ' + value + ' has been recorded.'\n });\n this.checkDeclinedResponseQuestion(value, message.get('accessKey'));\n }, this));\n }, this)\n });\n } else {\n this.options.dashboard.inviteHeader.$('.response-header').addClass('hidden');\n }\n },\n stopPropagationIfSelected: function (e) {\n if ($(e.currentTarget).attr('aria-expanded') === 'true')\n e.stopPropagation();\n },\n downloadAttachment: function (e) {\n let accessKey = $(e.currentTarget).closest('.collapse').data('accessKey').toString(),\n cid = $(e.currentTarget).data('cid'),\n message = this.model.messages.findWhere({accessKey: accessKey.toUpperCase()});\n\n let attachment = message.attachments.get(cid);\n this.options.project.downloadAttachments(attachment);\n }\n});\n\nPJQ.views.projects.dashboard.GetGroupResponsesSubModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Contact-Group-Status-Sub'),\n minWidth: '50%',\n onSave: _.noop,\n contactGroups: null\n },\n events: {\n 'click .group-status-close': 'onClose',\n 'click .group-status-save': 'onSave'\n },\n beforeRender: function () {\n this.renderData = {\n groups: this.options.contactGroups.models\n };\n },\n afterRender: function () {\n this.projectResponseButtons = [];\n _.each(PJQ.app.session.project.getProjectStatusList(), _.bind(function (status, index) {\n let colorClass = 'info';\n if (index === 0) {\n colorClass = 'success';\n } else if (index === 1) {\n colorClass = 'danger';\n }\n if (status[1]) {\n this.projectResponseButtons.push({\n label: status[0],\n value: status[0],\n colorClass: colorClass\n });\n }\n }, this));\n\n this.globalResponse = new PJQ.inputs.ButtonGroup({\n el: this.$('.global-response'),\n colorInactiveButtons: true,\n buttons: this.projectResponseButtons,\n defaultValue: null,\n onChange: _.bind(function (value) {\n _.each(this.options.contactGroups.models, _.bind(function (group) {\n group.groupResponse.setValue(value);\n group.set('groupStatus', value);\n this.setSaveButton();\n }, this));\n }, this)\n });\n\n _.each(this.options.contactGroups.models, _.bind(function (group) {\n group.groupResponse = new PJQ.inputs.ButtonGroup({\n el: this.getGroupElement(group).find('.group-response'),\n colorInactiveButtons: true,\n buttons: this.projectResponseButtons,\n defaultValue: null,\n onChange: _.bind(function (value) {\n group.set('groupStatus', value);\n this.setSaveButton();\n }, this)\n });\n }, this));\n },\n getGroupElement: function (group) {\n return $('div.group-response-container[data-group-id=\"' + group.get('groupId') + '\"]');\n },\n setSaveButton: function () {\n this.$('.group-status-save').attr('disabled', false);\n _.each(this.options.contactGroups.models, _.bind(function (group) {\n if (_.size(group.groupResponse.getValue()) === 0)\n this.$('.group-status-save').attr('disabled', true);\n }, this));\n\n },\n onClose: function () {\n this.removeModal();\n },\n onSave: function () {\n this.options.contactGroups.accessKey = this.options.accessKey;\n this.options.contactGroups.save({\n success: _.bind(function (result) {\n\n if (typeof this.options.onSave === 'function')\n this.options.onSave(result);\n\n this.removeModal();\n\n }, this)\n });\n }\n});\n\nPJQ.views.projects.DownloadTermsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Download-Terms'),\n maxWidth: '600px',\n minHeight: '500px',\n onAccept: null\n },\n events: {\n 'click .terms-accept': 'onAcceptClicked',\n },\n renderData: function () {\n return {\n project: this.options.project\n };\n },\n onAcceptClicked: function () {\n this.options.project.set('downloadTermsAgreed', true);\n if (typeof this.options.onAccept === 'function') {\n this.options.onAccept();\n }\n\n if (this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.DOWNLOAD_TERMS_SIGNATURE_REQ)) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'downloadterms'\n },\n {\n endpoint: 'sign'\n }\n ]),\n data: {\n companyName: this.$('.input-terms-company-name').val(),\n contactName: this.$('.input-terms-contact-name').val(),\n title: this.$('.input-terms-title').val(),\n email: this.$('.input-terms-email').val()\n },\n }).put();\n }\n this.removeModal();\n }\n});\n\nPJQ.views.projects.ProjectMessageResponseModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Message-Response'),\n maxWidth: '600px',\n minHeight: '500px',\n onResponse: null\n },\n afterRender: function () {\n let projectResponseButtons = [];\n _.each(this.options.project.getProjectStatusList(), _.bind(function (status, index) {\n let colorClass = 'info';\n if (index === 0)\n colorClass = 'success';\n else if (index === 1)\n colorClass = 'danger';\n\n if (status[1]) {\n projectResponseButtons.push({label: status[0], value: status[0], colorClass: colorClass});\n }\n }, this));\n this.contextResponseControl = new PJQ.inputs.ButtonGroup({\n el: this.$('.responses-control'),\n colorInactiveButtons: true,\n buttonClasses: 'font-weight-bold',\n separateButtons: true,\n buttons: projectResponseButtons,\n defaultValue: (_.size(this.options.project.get('bidResponse')) > 0 && this.options.project.get('bidResponse') !== 'PENDING') ? this.options.project.get('bidResponse') : null,\n onChange: _.bind(function (value) {\n this.options.project.updateResponse(value, _.bind(function () {\n if (typeof this.options.onResponse === 'function') {\n this.options.onResponse(value);\n }\n this.removeModal();\n }, this));\n }, this)\n });\n }\n});\n\nPJQ.views.projects.SquareTakeoffModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Square-Takeoff'),\n maxWidth: '600px'\n },\n events: {\n 'click .square-video': 'watchVideo',\n 'click .square-login': 'login',\n 'click .square-register': 'register'\n },\n watchVideo: function () {\n window.open('https://www.squaretakeoff.com/ref?id=6-video&url=https://squaretakeoff.com/pantera', '_blank');\n },\n login: function () {\n window.open('https://www.squaretakeoff.com/ref?id=5-login&url=https://app.squaretakeoff.com', '_blank');\n },\n register: function () {\n window.open('https://www.squaretakeoff.com/ref?id=7-register&url=https://squaretakeoff.com/sign-up', '_blank');\n }\n});\n\nPJQ.views.projects.eTakeoffModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-eTakeoff'),\n maxWidth: '600px'\n },\n events: {\n 'click .etakeoff-download': 'download',\n 'click .etakeoff-launch': 'launch'\n },\n download: function () {\n window.open('http://etakeoff.com/product/download/?partner_name=Pantera&gc_name=' + (this.options.contact ? encodeURIComponent(this.options.contact.get('companyName')) : ''), '_blank');\n },\n launch: function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'accesskey',\n value: this.options.accessKey\n },\n {\n endpoint: 'etakeoff'\n }\n ]));\n }\n});\n\n// Project Attachments\nPJQ.views.projects.ProjectAttachments = PJQ.views.projects.Attachments.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Dashboard-Attachments'),\n subTemplates: {\n attachment: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Dashboard-Attachment')\n },\n folderColors: [\n '#b7a1e0',\n '#80bdff'\n ],\n isHideDrawings: false,\n isHideDownload: false,\n isHideFiles: false,\n isHideEmptyFolders: false,\n isHidePrivate: true,\n onChange: _.noop,\n selectedAttachments: null,\n preventSelectAll: false,\n foldersOnly: false,\n canOrder: false\n },\n events: {\n 'change .input-select-attachment': 'attachmentChecked',\n 'click .attachment .pretty': 'stopPropagation',\n 'click .attachment': 'attachmentClicked',\n 'click .btn-order-selected': 'orderPrints',\n 'click .btn-download-attachment': 'downloadAttachment',\n 'click .btn-download-selected': 'downloadSelected',\n 'click .btn-download-all': 'downloadAll',\n 'click .btn-download-all-flattened': 'downloadAllFlattened',\n 'click .btn-download-all-combined': 'downloadAllCombined',\n 'click .btn-view-attachment': 'viewAttachment'\n },\n beforeFirstRender: function () {\n let prefs = this.options.project.preferences;\n if (prefs && prefs.hasPref(PJQ.constants.preferenceTypes.EXPAND_PROJECT_ATTACHMENTS)) {\n this.options.expandAllFolders = true;\n }\n\n this.options.enableDrawings = !this.options.isHideDrawings && !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_DRAWINGS);\n\n this.options.foldersOnly = this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.RSVP_FOLDER_CHECKBOXES_ONLY) &&\n this.options.project.get('masterUserId') !== PJQ.app.session.get('masterUserId');\n\n this.selectedAttachments = this.options.selectedAttachments !== null ? this.options.selectedAttachments : new PJQ.collections.projects.ProjectAttachments(null, {\n project: this.options.project\n });\n\n let sfOverride = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_SHARED_FOLDER_NAME_OVERRIDE);\n if (_.size(sfOverride) > 0) {\n this.options.sharedFolderNameOverride = sfOverride;\n }\n\n if (this.collection == null) {\n this.fetchAttachments({isPrivate: !this.options.isHidePrivate});\n }\n\n this.options.canOrder = !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_ORDER_PRINT);\n },\n renderData: function () {\n return {\n project: this.options.project,\n collection: this.collection,\n isHideDownload: this.options.isHideDownload,\n isHideFiles: this.options.isHideFiles,\n canOrder: this.options.canOrder,\n versions: this.versions,\n enableDrawings: this.options.enableDrawings,\n isFetched: this.isFetched(),\n isDeferred: this.options.isDeferred\n };\n },\n afterRender: function () {\n if (this.isFetched()) {\n this.renderAttachments();\n if (!this.options.isHideDownload)\n new PJQ.menus.ContextMenu({\n el: this.$('.attachments-container'),\n selector: '.attachment',\n actions: [\n {\n name: 'Download',\n onClick: _.bind(function (attachment) {\n this.downloadAttachments(attachment);\n }, this)\n }\n ],\n fetchElementData: _.bind(function (element) {\n return this.collection.get($(element).data('cid'));\n }, this),\n onOpen: _.bind(function (attachment) {\n this.getAttachmentElement(attachment).addClass('context-attachment');\n }, this),\n onClose: _.bind(function () {\n this.$('.context-attachment').removeClass('context-attachment');\n }, this)\n });\n }\n },\n renderAttachments: function () {\n let $container = this.$('.attachments-container');\n _.each(this.sortAttachments(this.collection.getRootSharedAttachments()), function (attachment) {\n if (!this.options.isDeferred && ((this.options.isHideFiles && !attachment.get('isFolder')) || (this.options.isHideEmptyFolders && attachment.get('isFolder') && _.size(attachment.getFolderAttachments(true)) === 0))) {\n return;\n }\n this.renderAttachment($container, attachment);\n }, this);\n if (!this.options.preventSelectAll && this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJ_DASHBOARD_SELECT_ALL_ATTACHMENTS)) {\n _.each(this.collection.getRootSharedAttachments(), function (attachment) {\n let $checkbox = this.getAttachmentElement(attachment).find('.input-select-attachment');\n $checkbox.prop('checked', true);\n $checkbox.trigger('change');\n }, this);\n }\n },\n renderAttachment: function ($container, attachment) {\n if (!this.options.isDeferred && this.options.isHideEmptyFolders && attachment.get('isFolder') && _.size(attachment.getFolderAttachments(true)) === 0) {\n return;\n }\n\n this.renderSubTemplate(true, this.options.subTemplates.attachment, $container, {\n model: attachment,\n isDeferred: this.options.isDeferred,\n foldersOnly: this.options.foldersOnly,\n folderColor: this.options.folderColors[attachment.getDepth() % _.size(this.options.folderColors)],\n isHideFiles: this.options.isHideFiles,\n isExpanded: this.expandedFolders.indexOf(attachment.cid) !== -1,\n isSelected: this.selectedAttachments.get(attachment.cid) != null,\n options: this.options\n }, _.bind(function ($folder) {\n if (_.find(this.selectedAttachments.models, function (item) {\n return item.get('entryId') === attachment.get('entryId');\n }) != null)\n $folder.find('.input-select-attachment').prop('checked', true);\n else if (attachment.get('isFolder') && _.find(this.selectedAttachments.models, function (item) {\n return item.get('entryId') === attachment.get('folderId');\n }) != null) {\n $folder.find('.input-select-attachment').prop('checked', true);\n } else if (attachment.get('isFolder') && _.filter(attachment.getFolderAttachments(false, true), _.bind(function (item) {\n return _.find(this.selectedAttachments.models, function (selectedAttachment) {\n return item.get('entryId') === selectedAttachment.get('entryId');\n }) === undefined;\n }, this)).length === 0 && _.size(attachment.getFolderAttachments(false, true)) > 0 && _.size(this.selectedAttachments.models) > 0) {\n $folder.find('.input-select-attachment').prop('checked', true);\n }\n\n if (attachment.get('isFolder')) {\n _.each(this.sortAttachments(_.filter(attachment.getFolderAttachments(), function (attachment) {\n return attachment.get('isFolder');\n })), function (folderAttachment) {\n this.renderAttachment($folder.find('.attachment-files').first(), folderAttachment);\n }, this);\n\n _.each(this.sortAttachments(_.filter(attachment.getFolderAttachments(), function (attachment) {\n return !attachment.get('isFolder');\n })), function (folderAttachment) {\n this.renderAttachment($folder.find('.attachment-files').first(), folderAttachment);\n }, this);\n }\n }, this));\n },\n sortAttachments: function (attachments) {\n return attachments.sort(function (a, b) {\n let aso = a.get('sortOrder'),\n bso = b.get('sortOrder');\n return PJQ.helpers.sortHelpers.sortAlphaNum(aso != null ? aso.toString() : a.get('name'), bso != null ? bso.toString() : b.get('name'));\n });\n },\n attachmentClicked: function (e) {\n let $attachment = $(e.currentTarget),\n attachment = this.collection.get($attachment.data('cid'));\n if (attachment.get('isFolder')) {\n this.expandFolder($attachment);\n\n let $attachments = $attachment.siblings('.attachment-files-outer');\n if (!$attachments.is(':visible')) {\n $attachment.css({\n background: 'rgb(218, 218, 218)'\n });\n } else {\n $attachment.css({\n background: ''\n });\n }\n } else {\n $attachment.find('.input-select-attachment').trigger('click');\n }\n },\n attachmentChecked: function (e) {\n let $checkbox = $(e.currentTarget),\n $attachment = $checkbox.closest('.attachment'),\n attachment = this.collection.get($attachment.data('cid')),\n isChecked = $checkbox.prop('checked');\n\n if (attachment.get('isFolder')) {\n let folderAttachments = attachment.getFolderAttachments(true, this.options.isHideFiles);\n\n // if we're operating at folder level add this folder to selection\n if (this.options.isHideFiles) {\n if (isChecked) {\n this.addSelectedAttachments([attachment]);\n } else {\n\n // if we are not included, and the parent was, we need to remove it and include all our siblings.\n let parentFolder = attachment.getParentFolder();\n if (this.selectedAttachments.contains(parentFolder)) {\n _.each(parentFolder.getFolderAttachments(false, true), _.bind(function (folder) {\n this.selectedAttachments.add(folder);\n }, this));\n }\n this.removeSelectedAttachments([attachment]);\n }\n\n // we are either adding this parent (thus including all children), or removing this parent. Either way the children do not need to be included.\n this.removeSelectedChildAttachmentsRecursive(attachment);\n\n } else {\n let allAtt = _.union(folderAttachments, [attachment]);\n if (isChecked) {\n this.addSelectedAttachments(allAtt);\n } else {\n this.removeSelectedAttachments(allAtt);\n }\n }\n\n let $folderAttachments = $checkbox.closest('.attachment').siblings('.attachment-files-outer');\n $folderAttachments.find('.input-select-attachment').prop('checked', isChecked);\n } else if (!this.options.isHideFiles) {\n if (isChecked) {\n this.addSelectedAttachments([attachment]);\n } else {\n this.removeSelectedAttachments([attachment]);\n }\n }\n\n this.setParentCheckbox(attachment);\n\n this.renderSelectedButton();\n },\n addSelectedAttachments: function (attachments) {\n this.selectedAttachments.add(attachments);\n\n if (typeof this.options.onChange === 'function')\n this.options.onChange(this.selectedAttachments);\n\n $('.print-alert').removeClass('hidden');\n },\n removeSelectedAttachments: function (attachments) {\n this.selectedAttachments.remove(attachments);\n\n if (this.options.isHideFiles) {\n _.each(attachments, _.bind(function (attachment) {\n this.removeSelectedParentFolderRecursive(attachment);\n }, this));\n }\n\n if (typeof this.options.onChange === 'function')\n this.options.onChange(this.selectedAttachments);\n },\n removeSelectedChildAttachmentsRecursive: function (folder) {\n let attachments = folder.getFolderAttachments();\n _.each(attachments, _.bind(function (attachment) {\n if (attachment.get('isFolder')) {\n this.removeSelectedAttachments(attachment);\n this.removeSelectedChildAttachmentsRecursive(attachment);\n }\n }, this));\n },\n removeSelectedParentFolderRecursive: function (attachment) {\n if (typeof attachment.getParentFolder !== 'function')\n return;\n\n let folder = attachment.getParentFolder();\n if (folder != null && folder.id > 0) {\n this.selectedAttachments.remove(folder);\n this.removeSelectedParentFolderRecursive(folder);\n }\n },\n renderSelectedButton: function () {\n let selectedCount = _.size(_.filter(this.selectedAttachments.models, function (att) {\n return !this.options.isHideEmptyFolders || !att.get('isFolder');\n }, this));\n this.$('.btn-download-selected').prop('disabled', !(selectedCount > 0));\n\n if (!this.options.isDeferred) {\n this.$('.ct-selected-attachments').text(selectedCount);\n }\n },\n setParentCheckbox: function (attachment) {\n let folder = attachment.getParentFolder();\n if (folder != null && folder.id > 0) {\n let hasUnselectedAttachments = this.folderHasUnselectedAttachments(folder);\n this.getAttachmentElement(folder).find('.input-select-attachment').prop('checked', !hasUnselectedAttachments);\n\n //set the checkbox for this folder's parent\n //recursive until there are no more parent folders\n this.setParentCheckbox(folder);\n }\n },\n folderHasUnselectedAttachments: function (folder) {\n let folderAttachments = folder.getFolderAttachments();\n return _.find(folderAttachments, function (folderAttachment) {\n if (folderAttachment.get('isFolder')) {\n if (!this.options.isHideFiles)\n return this.folderHasUnselectedAttachments(folderAttachment);\n else\n return this.selectedAttachments.get(folderAttachment.id) == null;\n } else {\n return this.selectedAttachments.get(folderAttachment.id) == null && !this.options.isHideFiles;\n }\n }, this) != null;\n },\n getAttachmentElement: function (attachment) {\n return this.$(\".attachment[data-cid='\" + attachment.cid + \"']\");\n },\n downloadAttachment: function (e) {\n e.stopPropagation();\n let $attachment = $(e.currentTarget).closest('.attachment'),\n attachment = this.collection.get($attachment.data('cid'));\n this.options.project.checkDownloadRequirements(_.bind(function () {\n this.downloadAttachments(attachment);\n }, this));\n },\n downloadSelected: function () {\n if (_.size(this.selectedAttachments) > 0) {\n this.options.project.checkDownloadRequirements(_.bind(function () {\n this.downloadAttachments(this.selectedAttachments);\n }, this));\n }\n },\n downloadAllCombined: function () {\n this.downloadAll({\n raster: true,\n merge: true\n })\n },\n downloadAllFlattened: function () {\n this.downloadAll({\n raster: true\n });\n },\n downloadAll: function (opts = null) {\n if (_.size(this.collection.models) > 0) {\n this.options.project.checkDownloadRequirements(_.bind(function () {\n this.downloadAttachments(this.collection, opts);\n }, this));\n }\n },\n viewAttachment: function (e) {\n e.stopPropagation();\n\n let $attachment = $(e.currentTarget).closest('.attachment'),\n attachment = this.collection.get($attachment.data('cid'));\n if (attachment.isImage()) {\n PJQ.app.view.renderPhotoViewer({\n model: attachment\n });\n } else if (attachment.canRender()) {\n new PJQ.views.files.FileViewer({\n model: attachment\n });\n }\n },\n orderPrints: function () {\n let callback = _.bind(function () {\n let selectedAttachments = this.selectedAttachments.where({isFolder: false});\n new PJQ.views.files.OrderPrintsModal({\n contact: PJQ.app.session.contact,\n files: selectedAttachments\n });\n }, this);\n\n if (PJQ.app.session.project && PJQ.app.session.project.get('status').toLowerCase() === 'busy') {\n new PJQ.views.modals.YesNo({\n header: \"Document(s) Processing\",\n body: \"Please Note: New documents are currently being processed for this project. Are you sure you want to place an order?\",\n onYes: _.bind(function () {\n callback();\n }, this)\n });\n } else\n callback();\n }\n});\n\nPJQ.views.projects.dashboard.BidPackages = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'bid-packages')\n },\n events: {},\n renderData: function () {\n return {\n collection: this.collection\n }\n },\n beforeFirstRender: function () {\n\n },\n afterRender: function () {\n\n }\n});\n\nPJQ.views.projects.dashboard.ViewMessageAttachmentsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'modal-view-message-attachments'),\n minWidth: '25%',\n attachments: []\n },\n events: {\n 'click .btn-download': 'downloadFile',\n 'click .btn-download-all': 'downloadAll'\n },\n renderData: function () {\n return {\n attachments: this.options.attachments\n }\n },\n downloadFile: function (e) {\n let url = this.$(e.currentTarget).data('url');\n PJQ.files.downloadFile(url, {\n isEndpoint: false\n });\n },\n downloadAll: function () {\n let entryIds = _.map(this.options.attachments, function (attachment) {\n return attachment.entryId\n });\n PJQ.files.queueDownload(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n },\n {\n endpoint: 'downloadentryidlist'\n }\n ]), {entryList: entryIds});\n }\n\n});\n\nPJQ.views.projects.dashboard.ProjectMessageDeclineQuestionModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'modal-project-message-decline-question'),\n minWidth: '40%'\n },\n events: {\n 'click .submit-response': 'submitResponse',\n 'change input[type=\"radio\"]': 'responseChanged'\n },\n renderData: function () {\n return {\n questions: this.options.questions,\n response: this.options.response\n }\n },\n responseChanged: function(e) {\n this.$('.submit-response').prop('disabled', false);\n\n if ($(e.currentTarget).prop('id') === 'question-other') {\n this.$('.other-reason').removeClass('hidden');\n this.$('.other-reason').focus();\n }\n else\n this.$('.other-reason').addClass('hidden');\n\n },\n submitResponse: function() {\n let $question = this.$('input[type=\"radio\"]:checked'), response = '';\n\n if ($question.prop('id') === 'question-other') {\n response = 'Other';\n\n if (_.size(this.$('.other-reason').val()) > 0)\n response += \": \" + this.$('.other-reason').val();\n }\n else\n response = this.options.questions[$question.prop('id').substring($question.prop('id').indexOf('-')+1)];\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.get('projectId')\n },\n {\n endpoint: 'projectmessages'\n },\n {\n endpoint: 'accesskey',\n value: this.options.accessKey\n },\n {\n endpoint: 'response'\n },\n {\n endpoint: 'reason'\n }\n ]),\n data: {\n reason: response\n }\n }).post().done(_.bind(function (data) {\n PJQ.notifications.notify.successNotify({\n message: 'Response recorded successfully.'\n });\n this.removeModal();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Unable to record response.'\n });\n });\n\n }\n});\n","PJQ.views.projects.ProjectDetails = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Details'),\n\t\tsubTemplates: {\n\t\t\tfield: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Details-Core-Field')\n\t\t},\n\t\tlayout: {\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\tsortOrder: 10,\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"projectName\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 10\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"address1\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 20\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"address2\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 30\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"location\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 40\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsortOrder: 20,\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"bidsDue\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 10\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"user1\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 20\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"user2\",\n\t\t\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\t\t\tsortOrder: 30\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfield: \"notes\",\n\t\t\t\t\tclasses: \"col-12\",\n\t\t\t\t\tsortOrder: 40\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfield: \"startDate\",\n\t\t\t\t\tsortOrder: 50\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfield: \"finishDate\",\n\t\t\t\t\tsortOrder: 60\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\tevents: {\n\t\t'click .btn-project-edit-cancel': 'cancelEdit',\n\t\t'click .btn-project-save': 'save',\n\t\t'click .btn-push-erp': 'pushERP',\n\t\t'click .btn-undo-push-erp': 'undoPushERP',\n\t\t'click .btn-link-erp': 'linkERP',\n\t\t'click .btn-unlink-erp': 'unlinkERP',\n\t\t'click .btn-project-export': 'exportPDF',\n\t\t'change .input-project-nda': 'ndaRequiredChanged',\n\t\t'click .btn-edit-project-nda': 'editProjectNDA',\n\t\t'change .input-details-admin-only': 'detailsAdminOnlyChanged'\n\t},\n\tbeforeFirstRender: function () {\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_STATUS_ID) &&\n\t\t\t(_.size(_.filter(this.options.layout.columns, function (column) {\n\t\t\t\treturn column.field === \"projectStatusId\"\n\t\t\t})) === 0)) {\n\t\t\tthis.options.layout.columns.push({\n\t\t\t\tfield: \"projectStatusId\",\n\t\t\t\tsortOrder: 70\n\t\t\t});\n\t\t}\n\n\t\tthis.options.canEdit = PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId')\n\t\t\t&& !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_HOME_READONLY)\n\t\t\t&& PJQ.app.session.project.get('status') !== 'ARCHIVE' && PJQ.app.session.project.hasPermission('base.canEdit');\n\n\t\tthis.mergePortalLayout();\n\t\tif (this.options.canEdit) {\n\t\t\tif (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'project', 'details')) {\n\t\t\t\tlet defs = PJQ.app.portal.customization.project.details.defaults;\n\t\t\t\tif (defs != null) {\n\t\t\t\t\tthis.portalDefaults = defs;\n\t\t\t\t\tthis.triggerPortalDefaults();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.options.startEndHide = PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.START_END_HIDE);\n\n\t\tthis.listenTo(this.model, 'sync', this.render);\n\t\tthis.listenTo(this.model, 'change', _.bind(function (e) {\n\t\t\tthis.$('.btn-project-edit-cancel').add('.btn-project-save').prop('disabled', false);\n\t\t\tthis.$('.btn-project-export').prop('disabled', true);\n\t\t}, this));\n\n\t\tPJQ.app.session.fetchProjectStatuses(_.bind(function(statuses) {\n\t\t\tthis.projectStatuses = statuses;\n\n\t\t\tPJQ.app.session.fetchERPIntegration(_.bind(function (erp) {\n\t\t\t\tthis.erpIntegration = erp;\n\t\t\t\tif(this.erpIntegration != null){\n\t\t\t\t\tthis.model.fetchERPObject(_.bind(function(){\n\t\t\t\t\t\tthis.render();\n\t\t\t\t\t}, this));\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}, this));\n\t\treturn false;\n\t},\n\trenderERP: function () {\n\t\tif (this.erpIntegration == null || this.model == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet pushSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PROJECT),\n\t\t\tlinkSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.LINK_PROJECT),\n\t\t\tunlinkSupported = this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.UNLINK_PROJECT);\n\t\tPJQ.helpers.erp.renderERPButtons(this.$('.erp-sync'), {\n\t\t\tpushSupported: pushSupported,\n\t\t\tunlinkSupported: unlinkSupported,\n\t\t\tlinkSupported: linkSupported,\n\t\t\tcanPush: this.options.canEdit,\n\t\t\tdisablePushReason: null,\n\t\t\tstatus: this.model.erpSyncStatus()\n\t\t});\n\t},\n\tpushERP: function () {\n\t\tif (!this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PROJECT)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.save((success) => {\n\t\t\tif (!success) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.erpIntegration.pushProject(this.model, () => {\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: 'Project pushed to ERP'\n\t\t\t\t});\n\t\t\t\tthis.render();\n\t\t\t});\n\t\t});\n\t},\n\tundoPushERP: function () {\n\t\tif (this.model.erpSyncStatus() !== PJQ.constants.integrations.erp.syncStatuses.REVIEWING) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.erpIntegration.undoPush(this.model, () => {\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: 'Project removed from ERP approval'\n\t\t\t});\n\t\t\tthis.render();\n\t\t});\n\t},\n\tlinkERP: function () {\n\t\tif (!this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.LINK_PROJECT)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnew PJQ.integrations.models.LinkERPProjectModal({\n\t\t\tproject: PJQ.app.session.project,\n\t\t\tonSave: _.bind(function (erpProject) {\n\t\t\t\tif (erpProject.isERPSynced()) {\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tunlinkERP: function () {\n\t\tif (!this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.UNLINK_PROJECT)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnew PJQ.views.modals.YesNo({\n\t\t\theader: \"Unlink from ERP\",\n\t\t\tbody: \"Are you sure you want to unlink this Project from your ERP system?\",\n\t\t\tonYes: () => {\n\t\t\t\tlet loader = new PJQ.Loader(this.$('.project-details'));\n\t\t\t\tthis.erpIntegration.unlinkProject(this.model, () => {\n\t\t\t\t\tloader.remove();\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: 'Project unlinked from ERP'\n\t\t\t\t\t});\n\t\t\t\t\tthis.render();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\tmergePortalLayout: function () {\n\t\tlet layout = null;\n\t\tif (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'portal', 'customization', 'project', 'details')) {\n\t\t\tlayout = PJQ.app.portal.customization.project.details.layout;\n\t\t}\n\n\t\tlet findPortalLayoutField = _.bind(function (searchField) {\n\t\t\tlet result = null;\n\t\t\t_.each(layout.columns, function (column) {\n\t\t\t\tif (_.size(column.fields) > 0) {\n\t\t\t\t\tresult = result || _.find(column.fields, function (field) {\n\t\t\t\t\t\treturn field.field === searchField.field;\n\t\t\t\t\t});\n\t\t\t\t} else if (column.field != null && column.field === searchField.field) {\n\t\t\t\t\tresult = column;\n\t\t\t\t}\n\t\t\t}, this);\n\t\t\treturn result;\n\t\t}, this);\n\n\t\tif (layout != null) {\n\t\t\t_.each(this.options.layout.columns, function (column) {\n\t\t\t\tif (_.size(column.fields) > 0) {\n\t\t\t\t\tlet col = _.defaults({fields: []}, column);\n\t\t\t\t\t_.each(column.fields, function (field) {\n\t\t\t\t\t\tif (findPortalLayoutField(field) == null) {\n\t\t\t\t\t\t\tcol.fields.push(field);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (_.size(col.fields) > 0) {\n\t\t\t\t\t\tlayout.columns.push(col);\n\t\t\t\t\t}\n\t\t\t\t} else if (column.field != null) {\n\t\t\t\t\tif (findPortalLayoutField(column) == null) {\n\t\t\t\t\t\tlayout.columns.push(column);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tlayout = this.options.layout;\n\t\t}\n\n\t\t//add custom field columns to template that were not defined in the custom portal details layout\n\t\tlet nextSort = _.max(layout.columns, function (column) {\n\t\t\tif (_.size(column.fields) > 0) {\n\t\t\t\treturn _.max(column.fields, function (field) {\n\t\t\t\t\treturn field.sortOrder != null ? field.sortOrder : 0;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn column.sortOrder != null ? column.sortOrder : 0;\n\t\t}).sortOrder;\n\t\t_.each(this.model.customFields.models, function (customField) {\n\t\t\tlet cfId = 'cf_' + customField.id.toString(),\n\t\t\t\tcf = {\n\t\t\t\t\tfield: cfId,\n\t\t\t\t\tsortOrder: nextSort\n\t\t\t\t};\n\t\t\tif (findPortalLayoutField(cf) == null) {\n\t\t\t\tlayout.columns.push(cf);\n\t\t\t\tnextSort += 10;\n\t\t\t}\n\t\t});\n\t\tthis.options.layout = layout;\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model,\n\t\t\tsubTemplates: this.options.subTemplates,\n\t\t\tlayout: this.options.layout,\n\t\t\tlayoutOptions: {\n\t\t\t\tnotesHide: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_NOTES_HIDDEN),\n\t\t\t\tisNotesRequired: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_NOTES_REQUIRED),\n\t\t\t\tisUser2Required: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_USER_2_REQUIRED),\n\t\t\t\tisCityRequired: this.isCityRequired(),\n\t\t\t\tisStateRequired: this.isStateRequired(),\n\t\t\t\tisZipRequired: this.isZipRequired(),\n\t\t\t\tisBidDueDateRequired: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_BID_DUE_DATE_REQUIRED),\n\t\t\t\tnotesLabel: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_NOTES_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_NOTES_LABEL) : 'Notes',\n\t\t\t\tresponseDueLabel: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) : 'Response Due',\n\t\t\t\tstartDateLabel: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_START_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_START_LABEL) : 'Start Date',\n\t\t\t\tfinishDateLabel: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_FINISH_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_FINISH_LABEL) : 'Finish Date',\n\t\t\t\tuser1Label: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_1_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_USER_1_LABEL) : 'Project Contact',\n\t\t\t\tuser2Label: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_LABEL) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_LABEL) : 'Project Contact 2',\n\t\t\t\tuser2Hide: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_HIDE),\n\t\t\t\tstartEndHide: this.options.startEndHide\n\t\t\t},\n\t\t\terpIntegration: this.erpIntegration,\n\t\t\tdefaultNDAChecked: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_NDA_CHECKED_DEFAULT),\n\t\t\tisEdit: this.options.canEdit,\n\t\t\tcanExport: this.options.canEdit && PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_DETAILS_EXPORT)\n\t\t};\n\t},\n\ttriggerPortalDefaults: function (changedId = null) {\n\t\tif (this.portalDefaults == null) {\n\t\t\treturn;\n\t\t}\n\n\t\t_.each(this.portalDefaults, function (def, id) {\n\t\t\tif ((def.reference != null && changedId == null) || (changedId != null && changedId !== def.reference && changedId !== def.timeReference) || (id === 'bidsDue' && this.model.get('responseDueDate') === 'ASAP')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet refValue = null,\n\t\t\t\ttimeRefValue = null;\n\t\t\tif (def.reference != null) {\n\t\t\t\tif (def.reference.indexOf('cf_') !== -1) {\n\t\t\t\t\tlet refCfId = parseInt(def.reference.replace('cf_', '')),\n\t\t\t\t\t\trefCf = this.model.customFields.get(refCfId),\n\t\t\t\t\t\trefFieldValue = _.findWhere(this.model.get('customFields'), {id: refCfId});\n\t\t\t\t\tif (refFieldValue != null) {\n\t\t\t\t\t\tif (refCf.get('fieldType').toLowerCase() === 'choice') {\n\t\t\t\t\t\t\tlet selChoice = refCf.choices.get(refFieldValue.value);\n\t\t\t\t\t\t\tif (selChoice != null) {\n\t\t\t\t\t\t\t\trefValue = selChoice.get('choiceName');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trefValue = refFieldValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trefValue = this.model.get(def.reference);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (def.timeReference != null) {\n\t\t\t\tif (def.timeReference.indexOf('cf_') !== -1) {\n\t\t\t\t\tlet timeRefCfId = parseInt(def.timeReference.replace('cf_', '')),\n\t\t\t\t\t\ttimeRefCf = this.model.customFields.get(timeRefCfId),\n\t\t\t\t\t\ttimeRefFieldValue = _.findWhere(this.model.get('customFields'), {id: timeRefCfId});\n\t\t\t\t\tif (timeRefFieldValue != null) {\n\t\t\t\t\t\ttimeRefValue = timeRefFieldValue.value;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (timeRefCf.get('fieldType').toLowerCase() === 'choice') {\n\t\t\t\t\t\tlet selChoice = timeRefCf.choices.get(timeRefFieldValue.value);\n\t\t\t\t\t\tif (selChoice != null) {\n\t\t\t\t\t\t\ttimeRefValue = selChoice.get('choiceName');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimeRefValue = timeRefFieldValue.value;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttimeRefValue = this.model.get(def.reference);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet newValue = undefined;\n\t\t\tif (def.match != null) {\n\t\t\t\tlet match = def.match[refValue == null ? 'null' : refValue];\n\t\t\t\tif (typeof match === 'undefined') {\n\t\t\t\t\tif (refValue != null && _.size(refValue.toString()) > 0) {\n\t\t\t\t\t\tmatch = def.match[\"_notEmpty\"];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = def.match[\"_empty\"];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (match != null) {\n\t\t\t\t\tif (match.from === 'today') {\n\t\t\t\t\t\tif (def.offset != null && def.offset !== 0) {\n\t\t\t\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getNewDateAddDays(new Date(), def.offset);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewValue = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof match.value !== 'undefined') {\n\t\t\t\t\t\tnewValue = match.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (def.type) {\n\t\t\t\t\tcase 'DATE':\n\t\t\t\t\tcase 'DATETIME':\n\t\t\t\t\t\tif (def.offset != null) {\n\t\t\t\t\t\t\tif (def.reference != null && refValue == null) {\n\t\t\t\t\t\t\t\tnewValue = null;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (def.defaultTime != null) {\n\t\t\t\t\t\t\t\t\tlet dt = new Date(PJQ.helpers.dateHelpers.getDateString(refValue ? new Date(refValue) : new Date(), PJQ.helpers.dateHelpers.dateFormats.DATE, true) + ' ' + (timeRefValue ? timeRefValue : def.defaultTime));\n\t\t\t\t\t\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getNewDateAddDays(dt, def.offset, def.weekdaysOnly === true);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getNewDateAddDays(refValue ? new Date(refValue + (timeRefValue ? (' ' + timeRefValue) : '')) : new Date(), def.offset, def.weekdaysOnly === true);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (def.minOffset != null && newValue.getTime() < (new Date()).getTime()) {\n\t\t\t\t\t\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getNewDateAddDays(new Date(), def.minOffset, def.weekdaysOnly === true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (typeof def.value !== 'undefined') {\n\t\t\t\t\t\t\tnewValue = def.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'TEXT':\n\t\t\t\t\t\tnewValue = refValue;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof newValue == 'undefined')\n\t\t\t\treturn;\n\n\t\t\tif (def.type === 'DATE' && newValue != null && id.toLowerCase() !== 'startdate' && id.toLowerCase() !== 'enddate') {\n\t\t\t\tnewValue = PJQ.helpers.dateHelpers.getDateString(newValue, PJQ.helpers.dateHelpers.dateFormats.DATE);\n\t\t\t}\n\n\t\t\tif (id.indexOf('cf_') !== -1) {\n\t\t\t\tlet cfId = parseInt(id.replace('cf_', '')),\n\t\t\t\t\tfieldValue = _.findWhere(this.model.get('customFields'), {id: cfId});\n\n\t\t\t\tif (fieldValue.value != null && def.reference == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfieldValue.value = newValue;\n\t\t\t\tif (this.projectCustomFieldsForm) {\n\t\t\t\t\tthis.projectCustomFieldsForm.setValue(cfId, newValue);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.model.set(id, newValue);\n\t\t\t\tif (id.toLowerCase() === 'bidsdue' && this.dueDatePicker != null) {\n\t\t\t\t\tthis.dueDatePicker.setValue(newValue);\n\t\t\t\t} else if (id.toLowerCase() === 'startdate' && this.startDatePicker != null) {\n\t\t\t\t\tthis.startDatePicker.setValue(newValue);\n\t\t\t\t} else if (id.toLowerCase() === 'enddate' && this.endDatePicker != null) {\n\t\t\t\t\tthis.endDatePicker.setValue(newValue);\n\t\t\t\t} else if (this.coreBinder != null) {\n\t\t\t\t\tthis.coreBinder.setValue(id, newValue);\n\t\t\t\t}\n\t\t\t}\n\t\t}, this);\n\t},\n\tafterRender: function () {\n\t\tif (this.projectStatuses == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.renderERP();\n\n\t\tthis.projectCustomFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\n\t\t\tel: this.$el,\n\t\t\tshouldRenderTemplate: false,\n\t\t\tcollection: this.model.customFields,\n\t\t\tfieldValues: this.model.get('customFields'),\n\t\t\tisEdit: this.options.canEdit,\n\t\t\tonChange: _.bind(function (fieldId, value) {\n\t\t\t\tthis.triggerPortalDefaults('cf_' + fieldId.toString());\n\t\t\t\tthis.$('.btn-project-edit-cancel').add('.btn-project-save').prop('disabled', false);\n\t\t\t\tthis.$('.btn-project-export').prop('disabled', true);\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.coreBinder = new PJQ.Binder(this.$('.project-details-form'), this.model, {\n\t\t\twatchElements: [\n\t\t\t\t'input',\n\t\t\t\t'textarea'\n\t\t\t]\n\t\t});\n\n\t\tlet statePicker = new PJQ.inputs.StatePicker({\n\t\t\tel: this.$('select.state'),\n\t\t\tcountry: this.model.get('country') ? this.model.get('country').toUpperCase() : null,\n\t\t\tdefaultValue: this.model.get('state') ? this.model.get('state').toUpperCase() : null,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('state', value);\n\t\t\t}, this)\n\t\t});\n\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK) && this.options.canEdit) {\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('select.project-status'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('status', value);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tnew PJQ.inputs.CountryPicker({\n\t\t\tel: this.$('select.country'),\n\t\t\tdefaultValue: this.model.get('country') ? this.model.get('country').toUpperCase() : null,\n\t\t\tstatePicker: statePicker,\n\t\t\tzipInput: this.$('.zip'),\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('country', value);\n\t\t\t}, this)\n\t\t});\n\n\t\tif (this.model.get('responseDueDate') === 'ASAP') {\n\t\t\tthis.$('.response-due-asap').prop('checked', true);\n\t\t\tthis.$('.input-response-due').prop('disabled', true);\n\t\t}\n\n\t\tthis.$('.response-due-asap').on('click', _.bind(function () {\n\t\t\tif (this.$('.response-due-asap').prop('checked')) {\n\t\t\t\tthis.model.set('bidsDue', null);\n\t\t\t\tthis.model.set('responseDueDate', 'ASAP');\n\t\t\t\tthis.$('.input-response-due').val('').prop('disabled', true);\n\t\t\t} else {\n\t\t\t\tthis.model.set('responseDueDate', '');\n\t\t\t\tthis.$('.input-response-due').prop('disabled', false);\n\t\t\t\tthis.triggerPortalDefaults('bidsdue');\n\t\t\t}\n\t\t}, this));\n\n\t\tthis.dueDatePicker = new PJQ.inputs.Datepicker({\n\t\t\tel: this.$('.input-response-due'),\n\t\t\tdatepickerOptions: {\n\t\t\t\tdefaultDate: this.model.get('bidsDue') ? this.model.get('bidsDue') : null\n\t\t\t},\n\t\t\tonChange: _.bind(function (newTime) {\n\t\t\t\tthis.model.set('bidsDue', newTime);\n\t\t\t\tthis.model.set('responseDueDate', PJQ.helpers.dateHelpers.getDateString(this.model.get('bidsDue'), PJQ.helpers.dateHelpers.dateFormats.DATE, false));\n\t\t\t\tthis.triggerPortalDefaults('bidsdue');\n\t\t\t}, this),\n\t\t\tonShow: _.bind(function (context) {\n\t\t\t\tif (!$(context.datetimepicker).data('DateTimePicker').date() && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME) && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME_AMPM)) {\n\t\t\t\t\tlet tempDate = new Date(),\n\t\t\t\t\t\ttimeParts = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME).toString().split(':'),\n\t\t\t\t\t\thours = parseInt(timeParts[0]), minutes = parseInt(timeParts[1]);\n\t\t\t\t\tif (PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME_AMPM) === 'PM' && hours !== 12 || hours === 12 && PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_DEFAULT_BID_DUE_TIME_AMPM) === 'AM')\n\t\t\t\t\t\thours += 12;\n\t\t\t\t\t$(context.datetimepicker).data('DateTimePicker').date(new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate(), hours, minutes, 0, 0));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\n\t\tif (!this.options.startEndHide) {\n\t\t\tthis.startDatePicker = new PJQ.inputs.Datepicker({\n\t\t\t\tel: this.$('.input-project-start'),\n\t\t\t\tdatepickerOptions: {\n\t\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n\t\t\t\t\tdefaultDate: this.model.get('startDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('startDate'), false) : null\n\t\t\t\t},\n\t\t\t\tonChange: _.bind(function (newTime) {\n\t\t\t\t\tthis.model.set('startDate', newTime);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tthis.endDatePicker = new PJQ.inputs.Datepicker({\n\t\t\t\tel: this.$('.input-project-end'),\n\t\t\t\tdatepickerOptions: {\n\t\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n\t\t\t\t\tdefaultDate: this.model.get('endDate') != null ? PJQ.helpers.dateHelpers.parseDateString(this.model.get('endDate'), false) : null\n\t\t\t\t},\n\t\t\t\tonChange: _.bind(function (newTime) {\n\t\t\t\t\tthis.model.set('endDate', newTime);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_STATUS_ID)) {\n\t\t\tthis.projectStatusIdSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.project-status-id'),\n\t\t\t\tisIntChoices: true,\n\t\t\t\tdefaultValue: this.model.get('projectStatusId') ? this.model.get('projectStatusId') : PJQ.app.session.projectStatuses.getDefault().id,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('projectStatusId', value)\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tthis.userInput = new PJQ.views.contacts.ContactsSelectInput({\n\t\t\tel: this.$('.project-contact'),\n\t\t\tcontext: PJQ.constants.contacts.contexts.USERS,\n\t\t\tselectedContact: this.model.user,\n\t\t\tisSingleChoice: true,\n\t\t\temptyNotice: \"No User Selected\",\n\t\t\tisReadOnly: !this.options.canEdit,\n\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\tthis.model.set('user', contacts);\n\t\t\t}, this),\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.model.set('user', null);\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.user2Input = new PJQ.views.contacts.ContactsSelectInput({\n\t\t\tel: this.$('.project-contact2'),\n\t\t\tcontext: PJQ.constants.contacts.contexts.USERS,\n\t\t\tselectedContact: this.model.user2,\n\t\t\tisSingleChoice: true,\n\t\t\temptyNotice: \"No User Selected\",\n\t\t\tisReadOnly: !this.options.canEdit,\n\t\t\tonAdd: _.bind(function (contacts) {\n\t\t\t\tthis.model.set('user2', contacts);\n\t\t\t}, this),\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.model.set('user2', null);\n\t\t\t}, this)\n\t\t});\n\n\t\t// show a read-only version of scopes when if they are enabled and a sub is viewing the page.\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_SCOPES) && PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')) {\n\t\t\tnew PJQ.views.projects.ProjectScopes({\n\t\t\t\tel: this.$('.project-scopes')\n\t\t\t});\n\t\t}\n\t},\n\tndaRequiredChanged: function () {\n\t\tlet hasNDA = this.$('.input-project-nda').prop('checked');\n\t\tif (hasNDA) {\n\t\t\tthis.editProjectNDA();\n\t\t} else {\n\t\t\tthis.model.set('hasNDA', false, {\n\t\t\t\tsilent: true\n\t\t\t});\n\t\t\tthis.renderNDARequired();\n\t\t\tnew PJQ.models.projects.ProjectNDA({\n\t\t\t\tndaId: -1,\n\t\t\t\tproject: this.model\n\t\t\t}).destroy({\n\t\t\t\tsuccess: function () {\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: \"NDA has been disabled for this project\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\trenderNDARequired: function () {\n\t\tlet hasNDA = this.model.get('hasNDA');\n\t\tthis.$('.input-project-nda').prop('checked', hasNDA);\n\t\tif (hasNDA) {\n\t\t\tthis.$('.btn-edit-project-nda').removeClass('hidden');\n\t\t} else {\n\t\t\tthis.$('.btn-edit-project-nda').addClass('hidden');\n\t\t}\n\t},\n\teditProjectNDA: function () {\n\t\tnew PJQ.views.projects.EditProjectNDAModal({\n\t\t\tproject: this.model,\n\t\t\tonSave: _.bind(function () {\n\t\t\t\tthis.renderNDARequired();\n\t\t\t}, this),\n\t\t\tonCancel: _.bind(function () {\n\t\t\t\tthis.renderNDARequired();\n\t\t\t}, this)\n\t\t});\n\t},\n\tdetailsAdminOnlyChanged: function () {\n\t\tlet isDetailsAdminOnly = this.$('.input-details-admin-only').prop('checked');\n\t\tthis.model.set('isDetailsAdminOnly', isDetailsAdminOnly);\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.model.id\n\t\t\t\t}\n\t\t\t], [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'isDetailsAdminOnly',\n\t\t\t\t\tvalue: isDetailsAdminOnly\n\t\t\t\t}\n\t\t\t])\n\t\t}).patch().done(_.bind(function () {\n\t\t\tlet alertMessage;\n\t\t\tif (isDetailsAdminOnly) {\n\t\t\t\talertMessage = \"Project details are now hidden from non admins\";\n\t\t\t} else {\n\t\t\t\talertMessage = \"Project details are now visible to non admins\";\n\t\t\t}\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: alertMessage\n\t\t\t});\n\t\t}, this));\n\t},\n\texportPDF: function () {\n\t\t// old export\n\t\t// PanteraScript.PanteraScriptService.GenerateExportNew(PJQ.app.session.id, 'project', 'pdf', parseInt(PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_DETAILS_EXPORT)), '', function(response) {\n\t\t// \tlet rr = jQuery.parseJSON(response);\n\t\t// \tPJQ.files.downloadFile(rr.DownloadURL, {\n\t\t// \t\tisEndpoint: false\n\t\t// \t});\n\t\t// }, null);\n\n\t\t// New JSReport Export\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.model.get('projectId')\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'details'\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: 'timeZone',\n\t\t\t\t\tvalue: Intl.DateTimeFormat().resolvedOptions().timeZone\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {}\n\t\t}).post().done(function (response) {\n\t\t\tPJQ.files.handleDownload(response);\n\t\t});\n\t},\n\tcancelEdit: function () {\n\t\tif (this.model.get('status') === 'NEW') {\n\t\t\tPJQ.app.router.navigate('projects', {\n\t\t\t\ttrigger: true,\n\t\t\t\treplace: true\n\t\t\t});\n\t\t} else {\n\t\t\tthis.model.fetch();\n\t\t\tthis.$('.btn-project-edit-cancel').add('.btn-project-save').prop('disabled', true);\n\t\t\tthis.$('.btn-project-export').prop('disabled', false);\n\t\t}\n\t},\n\tsave: function (callback = null) {\n\t\tlet errors = false;\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-name'), true);\n\t\tif (this.model.get('projectName').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-name'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-response-due'), true);\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_BID_DUE_DATE_REQUIRED) && this.model.get('bidsDue') === null && !this.$('.response-due-asap').prop('checked')) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-response-due'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.city'), true);\n\t\tif (this.isCityRequired() && this.model.get('city').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.city'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('select.state'), true);\n\t\tif (this.isStateRequired() && this.model.get('state').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('select.state'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.zip'), true);\n\t\tif (this.isZipRequired() && this.model.get('zip').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.zip'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tif (!this.userInput.validate()) {\n\t\t\terrors = true;\n\t\t}\n\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_USER_2_REQUIRED)) {\n\t\t\tif (!this.user2Input.validate()) {\n\t\t\t\terrors = true;\n\t\t\t}\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-project-start'), true);\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.REQUIRE_PROJECT_START_FINISH) && !this.model.get('startDate')) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-project-start'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-project-end'), true);\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.REQUIRE_PROJECT_START_FINISH) && !this.model.get('endDate')) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-project-end'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-notes'), true);\n\t\tif (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_NOTES_REQUIRED) && this.model.get('notes').trim().length === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-notes'), false);\n\t\t\terrors = true;\n\t\t}\n\n\t\tif (!this.projectCustomFieldsForm.validate())\n\t\t\terrors = true;\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-status-id'), true);\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_STATUS_NON_DEFAULT_REQUIRED)) {\n\t\t\t_.each(PJQ.app.session.projectStatuses.models, _.bind(function (item) {\n\t\t\t\tif (item.get('projectStatusId') === this.model.get('projectStatusId') && item.get('isDefault')) {\n\t\t\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.project-status-id'), false);\n\t\t\t\t\terrors = true;\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\n\n\t\tif (errors) {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'One or more fields are not filled out correctly. Please review the form.'\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.$('.btn-project-edit-cancel').add('.btn-project-save').prop('disabled', true);\n\t\tthis.$('.btn-project-export').prop('disabled', false);\n\n\t\tlet wasNew = this.model.get('status') === 'NEW';\n\t\tthis.model.save(null, {\n\t\t\tnotify: true,\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tif (wasNew) {\n\t\t\t\t\tPJQ.app.router.navigate('projects/' + PJQ.app.session.project.id + \"/dashboard\", {\n\t\t\t\t\t\ttrigger: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.renderERP();\n\n\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\tcallback(true);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tisCityRequired: function () {\n\t\tlet prefs = PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS) : '' +\n\t\tPJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS) : '';\n\n\t\treturn prefs != null && prefs.indexOf('[Project.City]') !== -1;\n\t},\n\tisStateRequired: function () {\n\t\tlet prefs = PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS) : '' +\n\t\tPJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS) : '';\n\n\t\treturn prefs != null && prefs.indexOf('[Project.State]') !== -1;\n\t},\n\tisZipRequired: function () {\n\t\treturn PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_ZIP_REQUIRED);\n\t}\n});\n\nPJQ.views.projects.ProjectMapModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Map'),\n\t\twidth: '800px',\n\t\tminWidth: '800px'\n\t},\n\tevents: {\n\t\t'click .map-recenter': 'mapRecenter'\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {};\n\t},\n\tmapRecenter: function () {\n\t\tthis.map.setCenter(this.myLatLng);\n\t},\n\tafterRender: function () {\n\t\tlet address = PJQ.app.session.project.get('address1') + ' ' + PJQ.app.session.project.get('city') + ', ' + PJQ.app.session.project.get('state') + ' ' + PJQ.app.session.project.get('zip'),\n\t\t\tmarkerTitle = PJQ.app.session.project.get('projectName'),\n\t\t\tgeocoder = new google.maps.Geocoder();\n\n\t\tthis.map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);\n\n\n\t\taddress = address.trim();\n\t\tgeocoder.geocode({\n\t\t\t'address': address\n\t\t}, _.bind(function (results, status) {\n\t\t\tif (status == google.maps.GeocoderStatus.OK) {\n\t\t\t\tthis.map.setCenter(results[0].geometry.location);\n\t\t\t\tthis.myLatLng = results[0].geometry.location;\n\t\t\t\tlet marker = new google.maps.Marker({\n\t\t\t\t\tmap: this.map,\n\t\t\t\t\ttitle: markerTitle,\n\t\t\t\t\tposition: results[0].geometry.location\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\talert(\"Unable to find Project Location for the following reason: \" + status);\n\t\t\t}\n\t\t}, this));\n\n\t\tthis.map.getStreetView().setVisible(false);\n\t\tthis.map.setMapTypeId(google.maps.MapTypeId.SATELLITE);\n\t\tthis.map.setZoom(15);\n\t\tthis.map.setCenter(this.myLatLng);\n\t},\n});\n\n\nPJQ.views.projects.ProjectScopes = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Scopes')\n\t},\n\tevents: {},\n\tbeforeFirstRender: function () {\n\n\t\tthis.collection = new PJQ.collections.projects.Scopes(null, {\n\t\t\tproject: PJQ.app.session.project\n\t\t});\n\t\tthis.listenTo(this.collection, 'sync', this.render);\n\t\tthis.collection.fetch();\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tscopes: this.collection.models\n\t\t};\n\t},\n\tafterRender: function () {\n\t}\n});\n","PJQ.views.projects.ProjectMessaging = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Project-Messages'),\n selectedContacts: [],\n selectedContactGroups: [],\n selectedProjectMessageContactBroadcasts: [],\n filter: {\n status: [],\n groups: [],\n isPrintOrder: false,\n isDownloaded: false,\n isVisited: false,\n isSelected: false,\n isDelivered: false,\n isOpened: false,\n vendorSector: '',\n laborStatus: [],\n minorityStatus: []\n },\n hasCompanyLevelCustomFields: false,\n hasContactLevelCustomFields: false\n },\n events: {\n 'keyup .input-pm-search': 'searchChanged',\n 'click .btn-pm-search': 'search',\n 'click .project-messages-filter': 'filterDialog',\n 'click .project-messages-clear-filter': 'clearFilterClick',\n 'click .btn-project-message-settings': 'settings',\n 'change .project-message-enable-declined': 'enableDeclinedChanged',\n 'click .btn-add-participants-from-project': 'addParticipantsFromProject',\n 'click .btn-quick-add': 'quickAdd',\n 'click .btn-add-participant-new': 'addNewContact',\n 'click .btn-detailed-search': 'detailedSearch',\n 'click .btn-detailed-search-new': 'detailedSearch',\n 'click .btn-simple-search': 'simpleSearch',\n 'click .btn-quick-search': 'quickSearch',\n 'click .project-message-delete-contacts': 'deleteParticipantsFromProject',\n 'click .btn-send-message': 'sendMessage',\n 'click .btn-message-template-send': 'sendMessage',\n 'click .project-message-set-responses': 'setResponses',\n 'click .project-message-order-prints': 'orderPrints',\n 'click .export-view': 'exportView',\n 'click .manage-bid-packages': 'manageBidPackages',\n 'click .import-bid-packages': 'importBidPackages',\n 'click .btn-radius-package-add': 'addByBidPackageRadius',\n 'click .filter-unsent': 'filterUnsent'\n },\n renderData: function () {\n return {\n project: this.options.project,\n showGroupCompanyView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY),\n showGroupContactView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT),\n showCompanyView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_COMPANY) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_COMPANY),\n showContactView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_CONTACT) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_CONTACT),\n showBidPackagesView: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES)\n };\n },\n afterRender: function () {\n this.clearFilter(false);\n this.options.selectedContacts = [];\n this.options.selectedContactGroups = [];\n this.options.isTradesViewSelectAll = false;\n this.updateContactStats();\n\n if (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_DISABLE_QUICKADD))\n this.$('.btn-quick-add').hide();\n\n this.options.isTradesViewSelectAll = false;\n this.options.settings = new PJQ.models.projectParticipants.ProjectMessageViewSettings();\n this.options.bidFormSettings = new PJQ.models.bidForms.Settings();\n PJQ.app.session.project.fetchBidFormSettings(_.bind(function(bidFormSettings) {\n this.options.bidFormSettings = bidFormSettings;\n this.options.canViewBidAmount = !this.options.bidFormSettings.get('isSealBids') || this.options.bidFormSettings.isSealedBidContact(PJQ.app.session.user.get('id'));\n this.options.settings.fetch({\n success: _.bind(function () {\n // scan to make sure we haven't deleted a column that is referenced by groupBy or orderBy\n _.each(this.options.settings.get('settings'), _.bind(function (setting) {\n if (_.size(setting.columns) === 0) {\n if (setting.columnsDefault.indexOf(setting.orderBy) === -1) {\n setting.orderBy = setting.columnsDefault[0];\n }\n } else if (setting.columns.indexOf(setting.orderBy) === -1) {\n setting.orderBy = setting.columns[0];\n }\n }, this));\n\n let defaultView = this.options.viewProjectMessageId ? 'messagecontact' : this.options.settings.get('defaultView');\n this.viewSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.project-message-view'),\n defaultValue: defaultView,\n onChange: _.bind(function (value) {\n\n let callback = _.bind(function () {\n this.options.selectedContacts = [];\n this.options.selectedContactGroups = [];\n this.options.isTradesViewSelectAll = false;\n this.clearFilter(false, false);\n this.renderContactStats();\n this.renderView(value);\n }, this);\n\n if (_.size(this.options.selectedContacts) === 0)\n callback();\n else {\n new PJQ.views.modals.YesNo({\n header: \"Selected Participants\",\n body: \"Selected participants will be cleared when switching views. Do you want to continue?\",\n onYes: _.bind(function () {\n callback();\n }, this),\n onNo: _.bind(function () {\n this.viewSelectPicker.setValue(this.currentView);\n }, this)\n });\n }\n }, this)\n });\n\n this.renderView(defaultView);\n\n if (this.options.copyProjectMessageId) {\n this.copyProjectMessage(this.options.copyProjectMessageId);\n this.options.copyProjectMessageId = null;\n }\n\n }, this)\n });\n } , this));\n\n },\n getSearchFor: function() {\n let searchFor = this.$('.input-pm-search').val().trim();\n\n if (searchFor.length <= 15 && PJQ.helpers.formatHelpers.numbersOnly(searchFor).length == 10)\n searchFor = PJQ.helpers.formatHelpers.numbersOnly(searchFor);\n\n return searchFor;\n },\n getViewData: function (view, callback, overrides) {\n let searchFor = this.getSearchFor(),\n statusFilter = [...this.options.filter.status],\n groupIdList = this.options.filter.groups.join(',');\n\n\n if (overrides) {\n if (overrides.isPerGroup)\n statusFilter.push('PER_GROUP');\n }\n\n if (this.options.filter.isDelivered)\n statusFilter.push('DELIVERED');\n\n if (this.options.filter.isOpened)\n statusFilter.push('OPENED');\n\n if (this.options.filter.isVisited)\n statusFilter.push('VISITED');\n\n if (this.options.filter.isDownloaded)\n statusFilter.push('DOWNLOADS');\n\n if (this.options.filter.isPrintOrder)\n statusFilter.push('ORDERS ONLY');\n\n if (this.options.filter.publicPrivate)\n statusFilter.push(this.options.filter.publicPrivate);\n\n _.each(this.options.filter.laborStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n _.each(this.options.filter.minorityStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n let viewSettings = this.options.settings.getSettings(view),\n filterCustomField = null,\n filterCustomFieldValue = null;\n if (searchFor.indexOf(\"::\") !== -1 && (view === PJQ.constants.projectMessaging.views.CONT || view === PJQ.constants.projectMessaging.views.COMP)) {\n let filterData = searchFor.split('::'),\n filterCustomFieldName = filterData[0].trim();\n\n filterCustomFieldValue = filterData[1].trim();\n\n if (_.size(filterCustomFieldName) > 0 && _.size(filterCustomFieldValue) > 0) {\n filterCustomField = _.find(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n return customField.get('fieldName').toLowerCase() === filterCustomFieldName.toLowerCase();\n }, this));\n if (filterCustomField == null) {\n filterCustomField = _.find(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n return customField.get('fieldName').toLowerCase() === filterCustomFieldName.toLowerCase();\n }, this));\n }\n\n if (filterCustomField != null) {\n searchFor = \"\";\n }\n }\n }\n\n let data = new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n project: this.options.project,\n view: view,\n searchFor: searchFor,\n statusFilter: statusFilter.join(','),\n groupIdList: groupIdList,\n withCustomFields: viewSettings.hasCustomFields\n });\n\n if (_.size(PJQ.helpers.urlHelpers.buildApiUrl(data.endpoint(), {})) > 2000) {\n new PJQ.views.BaseModal({\n header: \"Filter Error\",\n body: \"The total size of the filter requested is too large. Please reduce the number of filter options, or the amount of text being searched for.\",\n onOk: _.bind(function() {\n callback({ models: [] });\n }, this)\n });\n }\n else {\n data.fetch({\n success: _.bind(function () {\n if (this.options.filter.isSelected) {\n data.reset(_.filter(data.models, _.bind(function (row) {\n return this.options.selectedContacts.indexOf(row.get('contactId')) !== -1;\n }, this)));\n }\n\n if (filterCustomField != null) {\n let filterCfValueLower = filterCustomFieldValue.toLowerCase(),\n filterCustomFieldChoiceIds = _.map(_.filter(filterCustomField.choices.models, function (cfChoice) {\n return cfChoice.get('choiceName').trim().toLowerCase().indexOf(filterCfValueLower) !== -1;\n }), function (cfChoice) {\n return cfChoice.id;\n });\n data.reset(_.filter(data.models, _.bind(function (row) {\n let checkCf = function (cf) {\n let result = false;\n if (cf.id === filterCustomField.id && cf.value != null) {\n if (filterCustomField.get('fieldType') === PJQ.constants.customFields.fieldTypes.CHOICE) {\n result = typeof cf.value.indexOf === 'function' && _.size(_.intersection(cf.value, filterCustomFieldChoiceIds)) > 0;\n } else {\n result = cf.value != null && cf.value.toString().trim().toLowerCase().indexOf(filterCfValueLower) !== -1;\n }\n }\n return result;\n };\n return null != _.find(row.get('companyCustomFieldValues'), checkCf) || null != _.find(row.get('contactCustomFieldValues'), checkCf);\n }, this)));\n }\n\n callback(data);\n }, this)\n });\n }\n },\n renderView: function (view) {\n if (view != null) {\n this.currentView = view;\n }\n\n // set response option only valid while NOT in Messages view\n if (this.currentView === PJQ.constants.projectMessaging.views.MSGCONT) {\n this.$('.project-message-set-responses').css('display', 'none');\n } else {\n this.$('.project-message-set-responses').css('display', '');\n }\n\n let loader = new PJQ.Loader(this.$el);\n this.getViewData(this.currentView, _.bind(function (data) {\n if (loader)\n loader.remove();\n loader = null;\n this.renderViewData(this.currentView, data.models);\n }, this));\n },\n renderViewData: function (view, data) {\n if (this.dataTable)\n this.dataTable.cleanup();\n\n let dataTableOptions = {\n el: this.$('.project-message-grid'),\n data: data,\n view: view,\n projectMessagingView: this,\n userSettings: this.options.settings,\n settings: this.options.settings.getSettings(view),\n afterDataTableRender: _.bind(function (dataTable) {\n if (dataTable) {\n this.$('.datatable-paging-copy').empty();\n this.$('.dataTables_paginate', dataTable.el).first().appendTo(this.$('.datatable-paging-copy'));\n }\n }, this)\n };\n\n this.$('.filter-unsent').prop('disabled', (this.currentView === 'messagecontact') || this.$('.count-unsent-contacts').html() === '0');\n\n this.dataTable = this.getDataTableInstance(dataTableOptions);\n },\n getDataTableInstance: function (options) {\n let dataTable = null;\n switch (options.view) {\n case PJQ.constants.projectMessaging.views.GROUPCOMP:\n case PJQ.constants.projectMessaging.views.GROUPCONT:\n dataTable = new PJQ.views.projects.ProjectMessagingTradesDataTable(options);\n break;\n case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP:\n case PJQ.constants.projectMessaging.views.COMP:\n dataTable = new PJQ.views.projects.ProjectMessagingCompanyDataTable(options);\n break;\n case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT:\n case PJQ.constants.projectMessaging.views.GROUPCONT_CONT:\n case PJQ.constants.projectMessaging.views.RSPCONT_CONT:\n case PJQ.constants.projectMessaging.views.MSGCONT_CONT:\n case PJQ.constants.projectMessaging.views.COMP_CONT:\n case PJQ.constants.projectMessaging.views.CONT:\n case PJQ.constants.projectMessaging.views.BIDPKGS_CONT:\n dataTable = new PJQ.views.projects.ProjectMessagingContactDataTable(options);\n break;\n case PJQ.constants.projectMessaging.views.MSGCONT:\n dataTable = new PJQ.views.projects.ProjectMessagingMessagesDataTable(options);\n break;\n case PJQ.constants.projectMessaging.views.RSPCONT:\n options.order = [];\n dataTable = new PJQ.views.projects.ProjectMessagingResponsesDataTable(options);\n break;\n case PJQ.constants.projectMessaging.views.BIDPKGS:\n dataTable = new PJQ.views.projects.ProjectMessagingBidPackagesDataTable(options);\n break;\n }\n\n return dataTable;\n },\n manageBidPackages: function () {\n new PJQ.views.bidPackages.ManageBidPackagesModal({\n project: PJQ.app.session.project,\n onClose: _.bind(function () {\n this.renderView(this.dataTable.options.view);\n }, this)\n });\n },\n importBidPackages: function () {\n new PJQ.views.bidPackages.ImportTemplateModal({\n project: this.options.project,\n onImport: _.bind(function (submittals) {\n this.renderView(this.dataTable.options.view);\n }, this)\n });\n },\n updateContactStats: function () {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'participants'\n },\n {\n endpoint: 'stats'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint\n }).get().done(_.bind(function (data) {\n this.stats = data;\n this.renderContactStats();\n }, this));\n },\n renderContactStats: function () {\n this.$('.count-total-contacts').html(this.stats.totalCount.toString());\n this.$('.count-selected-contacts').html(_.size(this.options.selectedContacts));\n this.$('.count-unsent-contacts').html(this.stats.unsentCount ? this.stats.unsentCount.toString() : \"0\");\n this.$('.participant-stats').removeClass('hidden');\n let $buttons = this.$('.project-message-sel-part-header,.project-message-set-responses,.project-message-delete-contacts,.project-message-order-prints,.project-message-resend-messages');\n if (_.size(this.options.selectedContacts) > 0) {\n $buttons.removeClass('hidden');\n } else {\n $buttons.addClass('hidden');\n }\n\n this.$('.filter-unsent').prop('disabled', (this.currentView === 'messagecontact') || this.stats.unsentCount === 0);\n },\n addByBidPackageRadius: function () {\n new PJQ.views.bidPackages.BidPackageRadiusModal({\n project: this.options.project,\n onSave: _.bind(function (contacts) {\n if (_.size(contacts) > 0) {\n this.addSelectedContacts(contacts);\n this.stats.unsentCount += _.size(contacts);\n this.renderContactStats();\n this.renderView();\n }\n }, this)\n });\n },\n addSelectedContacts: function (contactIds) {\n this.options.selectedContacts = _.uniq(_.union(contactIds, this.options.selectedContacts));\n this.renderContactStats();\n },\n removeSelectedContacts: function (contactIds) {\n _.each(contactIds, _.bind(function (contactId) {\n this.options.selectedContacts = _.filter(this.options.selectedContacts, function (contact) {\n return contact !== contactId;\n });\n }, this));\n this.renderContactStats();\n },\n clearSelectedContacts: function () {\n this.options.selectedContacts = [];\n this.$('.trade-select-all-contacts, .select-all-contacts, .select-all-companies, .select-company, .select-contact').prop('checked', false);\n this.renderContactStats();\n },\n addSelectedContactGroups: function (contactGroups) {\n this.options.selectedContactGroups = _.uniq(_.union(contactGroups, this.options.selectedContactGroups), false, function (x) {\n return x.contactId + '|' + x.groupId;\n });\n },\n removeSelectedContactGroups: function (contactGroups) {\n _.each(contactGroups, _.bind(function (contactGroup) {\n this.options.selectedContactGroups = _.filter(this.options.selectedContactGroups, function (selectedContactGroup) {\n return !(selectedContactGroup.contactId === contactGroup.contactId && selectedContactGroup.groupId === contactGroup.groupId);\n });\n }, this));\n },\n isContactSelected: function (contactId) {\n return this.options.selectedContacts.indexOf(contactId) !== -1;\n },\n enableDeclinedChanged: function () {\n // enable or disable all select-company and select-contact whose rows have a Disabled status.\n // process the Parent view\n this.enableDeclinedHelper(this.dataTable, this.isEnableDeclined());\n },\n enableDeclinedHelper: function (dataTable, isEnableDeclined) {\n\n // process each row of this view\n dataTable.dataTable.rows().invalidate().draw();\n\n // process each child view of this view recursively\n\n },\n isEnableDeclined: function () {\n return this.$('.project-message-enable-declined').prop('checked');\n },\n searchChanged: function (e) {\n if (e.keyCode === 13) {\n this.search();\n }\n },\n search: function () {\n this.renderView(this.dataTable.options.view);\n },\n filterDialog: function () {\n let filterInfo = new PJQ.models.projectParticipants.FilterInfo(null, {\n project: this.options.project,\n view: this.dataTable.options.view.toLowerCase(),\n searchFor: this.getSearchFor()\n });\n filterInfo.fetch({\n success: _.bind(function () {\n new PJQ.views.projects.FilterProjectParticipantsModal({\n filterInfo: filterInfo,\n filter: this.options.filter,\n projectMessagingView: this,\n onFilter: _.bind(function () {\n this.renderView(this.dataTable.options.view);\n }, this)\n });\n }, this)\n });\n },\n clearFilterClick: function () {\n if (this.options.selectedContacts.length > 0) {\n new PJQ.views.modals.YesNo({\n header: \"Participants Selected\",\n body: \"Clearing the filter will also clear selected contacts. Do you still want to continue?\",\n onYes: _.bind(function () {\n this.options.selectedContacts = [];\n this.options.selectedContactGroups = [];\n this.options.selectedProjectMessageContactBroadcasts = [];\n this.renderContactStats();\n this.clearFilter();\n }, this)\n });\n } else\n this.clearFilter();\n },\n clearFilter: function (refresh = true, clearSearch = true) {\n if (clearSearch)\n this.$('.input-pm-search').val('');\n\n this.$('.select-all-companies, .select-all-contacts, .trade-select-all-contacts').prop('checked', false);\n this.options.isTradesViewSelectAll = false;\n this.options.filter = {\n status: [],\n groups: [],\n isPrintOrder: false,\n isDownloaded: false,\n isVisited: false,\n isSelected: false,\n isDelivered: false,\n isOpened: false,\n vendorSector: '',\n publicPrivate: '',\n laborStatus: [],\n minorityStatus: []\n };\n\n if (refresh)\n this.renderView(this.dataTable.options.view);\n },\n filterUnsent: function() {\n this.clearFilter(false);\n this.options.filter.status = ['UNSENT'];\n this.renderView(this.dataTable.options.view);\n },\n settings: function () {\n new PJQ.views.projects.ProjectMessagingSettingsModal({\n projectMessagingView: this,\n onSave: _.bind(function () {\n this.renderView(this.dataTable.options.view);\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n }, this)\n });\n },\n deleteContacts: function (contacts, isRemoveFromAB) {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'contacts'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n contacts: contacts,\n isRemoveFromAB: isRemoveFromAB\n }\n }).delete().done(_.bind(function () {\n this.removeSelectedContacts(contacts);\n this.updateContactStats();\n PJQ.notifications.notify.successNotify({\n message: 'Contact' + (contacts.length > 1 ? 's' : '') + ' removed successfully.'\n });\n this.renderView();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n },\n deleteContactGroups: function (contactGroups, isRemoveFromAB) {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'contactgroups'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n contactGroups: contactGroups,\n isRemoveFromAB: isRemoveFromAB\n }\n }).delete().done(_.bind(function () {\n this.options.selectedContacts = [];\n this.options.selectedContactGroups = [];\n this.updateContactStats();\n PJQ.notifications.notify.successNotify({\n message: 'Contact(s) removed successfully.'\n });\n this.renderView();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n },\n deleteParticipantsFromProject: function () {\n let removeFrom = _.size(this.options.selectedContactGroups) > 0 ? 'selected trades' : 'project';\n\n if (_.size(this.options.selectedContacts) === 0 && _.size(this.options.selectedContactGroups) === 0) {\n new PJQ.views.BaseModal({\n header: \"No Participants Selected\",\n body: \"Please select one or more participants before using this feature.\"\n });\n return;\n }\n\n new PJQ.views.projects.DeleteProjectParticipants({\n title: \"Remove Participant\" + (_.size(this.options.selectedContacts) > 1 ? 's' : ''),\n body: \"Are you sure you want to remove the selected participant\" + (_.size(this.options.selectedContacts) > 1 ? 's' : '') + \" from the \" + removeFrom + '?',\n onDelete: _.bind(function (isRemoveFromAB) {\n if (_.size(this.options.selectedContactGroups) > 0)\n this.deleteContactGroups(this.options.selectedContactGroups, isRemoveFromAB);\n else\n this.deleteContacts(this.options.selectedContacts, isRemoveFromAB);\n }, this)\n });\n },\n sendMessage: function (sender, contacts) {\n let defaultTemplateKey = null;\n if (sender && $(sender.currentTarget).data('templateKey')) {\n defaultTemplateKey = $(sender.currentTarget).data('templateKey');\n }\n PJQ.app.session.fetchProjectMessageEmailTemplates(_.bind(function () {\n let replyToContacts = [], fnContinue = _.bind(function () {\n this.inviteModal = new PJQ.views.projectInvites.ProjectInviteModal({\n project: PJQ.app.session.project,\n emailTemplates: PJQ.app.session.emailTemplates.projectMessage.models,\n projectMessagingView: this,\n replyToContacts: replyToContacts,\n defaultTemplateKey: defaultTemplateKey,\n onSend: _.bind(function () {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_SHOW_TEMPLATES)) {\n $('.send-message-templates').show();\n $('.btn-send-message').hide();\n }\n this.$('.send-message-label').html('New Message');\n this.options.project.set('isOnline', true);\n this.options.selectedContacts = [];\n this.options.selectedContactGroups = [];\n this.options.selectedProjectMessageContactBroadcasts = [];\n this.options.projectMessageSettings = null;\n PJQ.app.session.project.inviteSettings = null;\n this.renderContactStats();\n this.renderView();\n }, this),\n onAddFromThisProject: _.bind(function (inviteSettings) {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_SHOW_TEMPLATES)) {\n $('.send-message-templates').hide();\n $('.btn-send-message').show();\n }\n $('div.project-messages span.send-message-label').html('Resume Message');\n }, this),\n onViewSelected: _.bind(function (inviteSettings) {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_SHOW_TEMPLATES)) {\n $('.send-message-templates').hide();\n $('.btn-send-message').show();\n }\n $('div.project-messages span.send-message-label').html('Resume Message');\n this.viewSelectPicker.setValue(PJQ.constants.projectMessaging.views.CONT);\n this.options.filter = {\n status: [],\n groups: [],\n isPrintOrder: false,\n isDownloaded: false,\n isVisited: false,\n isSelected: true,\n vendorSector: '',\n publicPrivate: '',\n laborStatus: [],\n minorityStatus: []\n };\n this.renderView(PJQ.constants.projectMessaging.views.CONT);\n }, this),\n onCancel: _.bind(function () {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_SHOW_TEMPLATES)) {\n this.$('.send-message-templates').show();\n this.$('.btn-send-message').hide();\n }\n $('div.project-messages span.send-message-label').html('New Message');\n PJQ.app.session.project.inviteSettings = null;\n }, this),\n isShowQuickAdd: !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_DISABLE_QUICKADD),\n isShowAttachments: true\n });\n }, this);\n\n if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_ENABLE_REPLYTO_OVERRIDE)) {\n if (PJQ.app.session.project.get('user'))\n replyToContacts.push(PJQ.app.session.project.get('user'));\n\n if (PJQ.app.session.project.get('user2') && _.size(_.filter(replyToContacts, function (user) {\n return user.id == PJQ.app.session.project.get('user2').id\n })) == 0)\n replyToContacts.push(PJQ.app.session.project.get('user2'));\n\n PJQ.app.session.project.fetchProjectContacts(_.bind(function () {\n _.each(PJQ.app.session.project.projectContacts.models, _.bind(function (projectContact) {\n if (projectContact.get('id') < 0 && _.size(_.filter(replyToContacts, function (user) {\n return user.id == projectContact.get('id')\n })) == 0) {\n replyToContacts.push(projectContact.attributes);\n }\n }, this));\n fnContinue();\n }, this));\n } else {\n fnContinue();\n }\n }, this));\n\n if (contacts != null) {\n this.inviteModal.addSelectedContacts(contacts);\n }\n },\n quickAdd: function () {\n new PJQ.views.projects.QuickAddParticipantsModal({\n project: this.options.project,\n onSave: _.bind(function (contact) {\n this.addSelectedContacts([contact.id]);\n this.stats.unsentCount++;\n this.renderContactStats();\n this.renderView();\n }, this)\n });\n },\n addNewContact: function () {\n new PJQ.views.contacts.BaseEditContactModal({\n model: new PJQ.models.projectParticipants.ProjectParticipant({\n projectId: PJQ.app.session.project.id,\n masterUserId: PJQ.app.session.get('masterUserId'),\n isForceSaveExistingEmail: false,\n country: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) : 'US'\n }),\n showNotes: true,\n showActive: true,\n deleteLabel: 'Remove from Project',\n onSave: _.bind(function (model, isNew) {\n this.addSelectedContacts([model.get('contactId')]);\n this.stats.unsentCount++;\n this.stats.totalCount++;\n this.renderContactStats();\n this.renderView();\n }, this)\n });\n },\n detailedSearch: function (e) {\n $('form[name=\"modal-add-participants\"]').remove();\n let options = {\n onSave: _.bind(function (selectedContacts) {\n this.addSelectedContacts(selectedContacts);\n this.stats.unsentCount += _.size(selectedContacts);\n this.renderContactStats();\n this.renderView();\n }, this)\n };\n\n if ($(e.currentTarget).hasClass('btn-detailed-search-new') && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_ADDRESSBOOK)) {\n options.isWrapForm = false;\n options.wrapFormName = null;\n options.isUseNewAddressBook = true;\n }\n\n new PJQ.views.projects.AddParticipantsDetailedModal(options);\n },\n simpleSearch: function () {\n let showUnionStatus = true;\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS)) {\n showUnionStatus = !PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS);\n }\n new PJQ.views.projectParticipants.AddParticipantsModal({\n model: this.options.project,\n isDirectoryEnabled: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DIRECTORY),\n isUnionStatusEnabled: showUnionStatus,\n isReturnContactIds: true,\n onSave: _.bind(function (selectedContacts, sendMessage = false) {\n if (sendMessage && _.size(selectedContacts) > 0) {\n this.sendMessage(null, selectedContacts);\n } else {\n this.addSelectedContacts(selectedContacts);\n this.stats.unsentCount += _.size(selectedContacts);\n this.renderContactStats();\n this.renderView();\n }\n }, this)\n });\n },\n quickSearch: function () {\n new PJQ.views.contacts.SelectContactsModal({\n disableBlacklisted: true,\n disableBadEmail: true,\n isSingleChoice: false,\n onSave: _.bind(function (selectedContacts) {\n if (_.size(selectedContacts) === 0) {\n PJQ.notifications.notify.successNotify({\n message: 'No participants were added'\n });\n return;\n }\n\n this.options.project.addParticipantsById(selectedContacts, _.bind(function () {\n this.addSelectedContacts(_.map(selectedContacts, function (selectedContact) {\n return selectedContact.get('contactId');\n }));\n this.stats.unsentCount += _.size(selectedContacts);\n this.renderContactStats();\n this.renderView();\n }, this));\n }, this)\n });\n },\n addParticipantsFromProject: function () {\n let statuses = this.options.project.getProjectStatusList();\n statuses.unshift(['PENDING', true]);\n new PJQ.views.projectParticipants.AddParticipantsFromProjectModal({\n model: this.options.project,\n isBidFormsEnabled: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_FORMS),\n projectResponses: statuses,\n isReturnContactIds: true,\n onSave: _.bind(function (selectedContacts) {\n this.addSelectedContacts(selectedContacts);\n this.stats.unsentCount += _.size(selectedContacts);\n this.renderContactStats();\n this.renderView();\n }, this)\n });\n },\n copyProjectMessage: function (projectMessageId) {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'projectmessages',\n value: projectMessageId\n },\n {\n endpoint: 'copy'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n }).get().done(_.bind(function (data) {\n data.messageType = data.templateKey;\n data.privateFolders = new PJQ.collections.files.Files(data.privateFolders);\n data.attachments = new PJQ.collections.files.Files(data.attachments);\n data.responseDue = data.responseDue ? PJQ.helpers.dateHelpers.getDateString(new Date(data.responseDue), PJQ.helpers.dateHelpers.dateFormats.DATE_YMD) : '';\n PJQ.app.session.project.inviteSettings = data;\n this.sendMessage();\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong.'\n });\n });\n\n },\n deleteProjectMessage: function (projectMessageId, callback) {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'projectmessages',\n value: projectMessageId\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint\n }).delete().done(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Message deleted successfully.'\n });\n if (typeof callback === 'function')\n callback();\n\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n },\n orderPrints: function () {\n let callback = _.bind(function () {\n let contacts = new PJQ.collections.contacts.ContactInfoList(null, {\n contactIds: this.options.selectedContacts\n });\n contacts.fetch({\n success: _.bind(function () {\n new PJQ.views.files.OrderPrintsModal({\n recipients: contacts.models,\n onOrderPlaced: _.bind(function () {\n this.clearSelectedContacts();\n }, this)\n });\n }, this)\n });\n }, this);\n\n if (PJQ.app.session.project && PJQ.app.session.project.get('status').toLowerCase() === 'busy') {\n new PJQ.views.modals.YesNo({\n header: \"Document(s) Processing\",\n body: \"Please Note: New documents are currently being processed for this project. Are you sure you want to place an order?\",\n onYes: _.bind(function () {\n callback();\n }, this)\n });\n } else\n callback();\n\n },\n setResponses: function () {\n if (_.size(this.options.selectedContacts) === 0) {\n new PJQ.views.BaseModal({\n header: \"No Participants Selected\",\n body: \"Please select one or more participants before using this feature.\"\n });\n return;\n }\n\n let statuses = this.options.project.getProjectStatusList();\n statuses.unshift(['PENDING', true]);\n new PJQ.views.projects.SetProjectParticipantsStatusModal({\n projectResponses: statuses,\n projectMessagingView: this,\n onSave: _.bind(function (status, companyComment, contactComment) {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'participants'\n },\n {\n endpoint: 'status'\n }\n ]);\n\n let loader = new PJQ.Loader(this.$el);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n ids: this.options.selectedContacts,\n status: status,\n companyComment: companyComment,\n contactComment: contactComment\n }\n }).post().done(_.bind(function () {\n loader.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Contact' + (this.options.selectedContacts.length > 1 ? 's' : '') + ' updated successfully.'\n });\n this.renderView();\n }, this)).fail(function () {\n loader.remove();\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n }, this)\n });\n },\n exportView: function () {\n let statusFilter = [...this.options.filter.status];\n\n if (this.options.filter.isDelivered)\n statusFilter.push('DELIVERED');\n\n if (this.options.filter.isOpened)\n statusFilter.push('OPENED');\n\n if (this.options.filter.isVisited)\n statusFilter.push('VISITED');\n\n if (this.options.filter.isDownloaded)\n statusFilter.push('DOWNLOADS');\n\n if (this.options.filter.isPrintOrder)\n statusFilter.push('ORDERS ONLY');\n\n if (this.options.filter.publicPrivate)\n statusFilter.push(this.options.filter.publicPrivate);\n\n _.each(this.options.filter.laborStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n _.each(this.options.filter.minorityStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n statusFilter = statusFilter.join(',');\n\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'participants'\n },\n {\n endpoint: 'views',\n value: this.currentView\n },\n {\n endpoint: 'export'\n }\n ], [\n {\n parameter: 'statusFilter',\n value: statusFilter\n },\n {\n parameter: 'groupIdList',\n value: this.options.filter.groups.join(',')\n },\n {\n parameter: 'searchFor',\n value: this.getSearchFor()\n },\n {\n parameter: 'withCustomFields',\n value: true\n }\n ]));\n\n }\n});\n\n// Modals\nPJQ.views.projects.GradeProjectContactModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Grade-Project-Contact'),\n width: '300px',\n onGrade: _.noop,\n row: null\n },\n events: {\n 'click button.grade': 'gradeChanged',\n 'click button.clear-grade': 'onClear'\n },\n beforeModalCreated: function () {\n },\n beforeRender: function () {\n this.renderData = {\n companyName: this.options.row.data().get('companyName')\n };\n },\n afterRender: function () {\n if (this.options.row.data().get('grade') > 0)\n this.$('button[data-stars=\"1\"] i').removeClass('text-muted').addClass('text-gold');\n if (this.options.row.data().get('grade') > 1)\n this.$('button[data-stars=\"2\"] i').removeClass('text-muted').addClass('text-gold');\n if (this.options.row.data().get('grade') > 2)\n this.$('button[data-stars=\"3\"] i').removeClass('text-muted').addClass('text-gold');\n if (this.options.row.data().get('grade') > 3)\n this.$('button[data-stars=\"4\"] i').removeClass('text-muted').addClass('text-gold');\n if (this.options.row.data().get('grade') > 4)\n this.$('button[data-stars=\"5\"] i').removeClass('text-muted').addClass('text-gold');\n },\n gradeChanged: function (e) {\n this.options.row.data().set('grade', parseInt(this.$(e.currentTarget).data('stars')));\n this.$('button.grade').removeClass('text-gold').addClass('text-muted');\n this.afterRender();\n this.onGrade();\n },\n onGrade: function () {\n if (typeof this.options.onGrade === 'function')\n this.options.onGrade(this.options.row.data().get('grade'));\n this.removeModal();\n },\n onClear: function () {\n this.$('button.grade').removeClass('text-gold').addClass('text-muted');\n this.options.row.data().set('grade', 0);\n this.onGrade();\n }\n});\n\nPJQ.views.projects.ProjectParticipantCommentModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Participant-Comment'),\n minWidth: '400px',\n onComment: _.noop,\n project: null,\n comments: [],\n participant: null,\n isCompanyComments: false\n },\n events: {\n 'keyup .project-contact-comment': 'commentChanged',\n 'click .project-contact-comment-save': 'commentAdded',\n 'click .project-comment-delete': 'commentDeleted'\n },\n beforeModalCreated: function () {\n },\n beforeRender: function () {\n this.renderData = {\n companyName: this.options.participant.attributes.companyName,\n contactName: this.options.participant.attributes.contactName,\n comments: this.options.comments\n };\n },\n afterRender: function () {\n },\n commentDeleted: function (sender) {\n this.selectedCard = this.$(sender.currentTarget).closest('div.card');\n new PJQ.views.BaseModal({\n header: \"Delete Comment\",\n body: \"Are you sure you want to delete this comment?\",\n isShowCancelButton: true,\n onOk: _.bind(function () {\n let comment = new PJQ.models.projectParticipants.ProjectContactComment(null, {\n project: this.options.project,\n contactId: this.options.isCompanyComments ? this.options.participant.attributes.contactCompanyId : this.options.participant.attributes.contactId\n }),\n projectContactCommentId = parseInt(this.selectedCard.data('projectContactCommentId')),\n parentContainer = this.selectedCard.parent(),\n isLastCard = this.selectedCard.hasClass('last-comment');\n\n this.selectedCard.remove();\n\n // if no comments left, return the 'empty comment' comment back to the caller\n if ($('div.card', parentContainer).length === 0) {\n comment.set('comment', 'No Comments Added');\n if (typeof this.options.onComment === 'function')\n this.options.onComment(comment);\n\n this.$('.comments-header, .comments-list').hide();\n\n } else if (isLastCard) {\n // if this was the newest comment, return the next newest comment back to the caller and mark the next newest comment\n comment.set('comment', this.$('div.card').last().find('.comment-body').text().trim());\n\n if (typeof this.options.onComment === 'function')\n this.options.onComment(comment);\n\n this.$('div.card').last().addClass('last-comment');\n }\n\n comment.set('projectContactCommentId', projectContactCommentId);\n comment.destroy();\n }, this)\n });\n\n },\n commentChanged: function () {\n this.$('.project-contact-comment-save').prop('disabled', _.size(this.$('.project-contact-comment').val()) === 0);\n },\n commentAdded: function () {\n this.onComment();\n },\n onComment: function () {\n let comment = new PJQ.models.projectParticipants.ProjectContactComment(null, {\n project: this.options.project,\n contactId: this.options.isCompanyComments ? this.options.participant.attributes.contactCompanyId : this.options.participant.attributes.contactId,\n isCompanyComments: this.options.isCompanyComments\n });\n comment.set('comment', this.$('.project-contact-comment').val());\n comment.save(null, {\n success: _.bind(function () {\n if (typeof this.options.onComment === 'function')\n this.options.onComment(comment);\n this.removeModal();\n }, this)\n });\n }\n});\n\nPJQ.views.projects.FilterProjectParticipantsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Filter-Project-Participants'),\n width: '650px',\n filterInfo: null,\n filter: null,\n onFilter: _.noop\n },\n events: {\n 'click button.filter': 'filter'\n },\n beforeModalCreated: function () {\n this.options.fieldSettingsEnabled = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_CONTACT_FIELD_SETTINGS);\n if (this.options.fieldSettingsEnabled && this.coreFieldSettings == null) {\n PJQ.app.session.fetchContactFieldSettings(this.options.masterUserId, _.bind(function (settings) {\n this.coreFieldSettings = settings;\n this.render();\n }, this));\n }\n },\n beforeRender: function () {\n this.renderData = {\n filterInfo: this.options.filterInfo,\n filter: this.options.filter,\n view: this.options.projectMessagingView.dataTable.options.view,\n checkFieldVisible: _.bind(this.checkFieldVisible, this)\n };\n },\n checkFieldVisible: function (fieldName) {\n if (this.coreFieldSettings == null) {\n let prefs;\n if (PJQ.app.session.project != null) {\n prefs = PJQ.app.session.project.preferences;\n } else {\n prefs = PJQ.app.session.preferences;\n }\n let result;\n switch (fieldName) {\n case 'sector':\n result = !prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_SECTOR);\n break;\n case 'laborStatus':\n result = prefs.getPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS) !== true;\n break;\n case 'classifications':\n result = prefs.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_MINORITY_STATUS) === false;\n break;\n default:\n result = true;\n }\n return result;\n } else {\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\n if (fieldSettings != null) {\n return fieldSettings.get('isVisibleContact') || fieldSettings.get('isVisibleAdmin');\n }\n }\n return true;\n },\n afterRender: function () {\n _.each(this.options.filter.status, _.bind(function (status) {\n this.$('input.filter-status[data-status=\"' + status + '\"]').prop('checked', true);\n }, this));\n\n this.$('input.filter-print-order').prop('checked', this.options.filter.isPrintOrder);\n this.$('input.filter-download').prop('checked', this.options.filter.isDownloaded);\n this.$('input.filter-visited').prop('checked', this.options.filter.isVisited);\n this.$('input.filter-selected').prop('checked', this.options.filter.isSelected);\n this.$('input.filter-delivered').prop('checked', this.options.filter.isDelivered);\n this.$('input.filter-opened').prop('checked', this.options.filter.isOpened);\n\n this.sectorSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.filter-sector'),\n defaultValue: this.options.filter.vendorSector\n });\n\n this.publicPrivateSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.filter-public-private'),\n defaultValue: this.options.filter.publicPrivate\n });\n\n this.laborStatusSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.filter-labor-status'),\n isMultiple: true,\n noneSelectedText: 'All Labor Statuses',\n defaultValue: this.options.filter.laborStatus\n });\n\n this.minorityStatusSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.filter-minority-status'),\n isMultiple: true,\n noneSelectedText: 'All Certifications',\n defaultValue: this.options.filter.minorityStatus\n });\n\n this.groupSelector = new PJQ.views.groups.GroupSelector({\n el: this.$('.filter-groups'),\n isShowNoGroup: true,\n isShowGroupCount: true,\n groups: this.options.filterInfo.get('groups'),\n selectedGroupIds: this.options.filter.groups,\n onGroupSelected: _.bind(function () {\n //this.selectedGroups = this.groupSelector.getGroupsData().new;\n }, this)\n });\n\n },\n filter: function () {\n\n this.options.projectMessagingView.options.filter.status = [];\n\n _.each(this.$('input.filter-status'), _.bind(function (input) {\n if ($(input).prop('checked'))\n this.options.projectMessagingView.options.filter.status.push($(input).data('status'));\n }, this));\n\n this.options.projectMessagingView.options.filter.isPrintOrder = this.$('input.filter-print-order').prop('checked');\n this.options.projectMessagingView.options.filter.isDownloaded = this.$('input.filter-download').prop('checked');\n this.options.projectMessagingView.options.filter.isVisited = this.$('input.filter-visited').prop('checked');\n this.options.projectMessagingView.options.filter.isDelivered = this.$('input.filter-delivered').prop('checked');\n this.options.projectMessagingView.options.filter.isOpened = this.$('input.filter-opened').prop('checked');\n this.options.projectMessagingView.options.filter.isSelected = this.$('input.filter-selected').prop('checked');\n this.options.projectMessagingView.options.filter.vendorSector = this.$('select.filter-sector').val();\n this.options.projectMessagingView.options.filter.publicPrivate = this.publicPrivateSelectPicker.getValue();\n this.options.projectMessagingView.options.filter.laborStatus = this.laborStatusSelectPicker.getValue();\n this.options.projectMessagingView.options.filter.minorityStatus = this.minorityStatusSelectPicker.getValue();\n\n this.options.projectMessagingView.options.filter.groups = [];\n\n let groupsData = this.groupSelector.getGroupsData();\n _.each(groupsData.selected, _.bind(function (group) {\n this.options.projectMessagingView.options.filter.groups.push(group.id);\n }, this));\n\n if (typeof this.options.onFilter === 'function')\n this.options.onFilter();\n\n this.removeModal();\n }\n});\n\nPJQ.views.projects.ProjectMessagingSettingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Messaging-Settings'),\n width: '600px',\n },\n events: {\n 'change .select-column': 'columnSelected',\n 'click button.settings-save': 'onSave'\n },\n beforeModalCreated: function () {\n },\n beforeRender: function () {\n // copy settings for our UI; we only update global settings object on save.\n this.options.settings = [];\n this.options.defaultView = this.options.projectMessagingView.options.settings.get('defaultView');\n _.each(this.options.projectMessagingView.options.settings.attributes.settings, _.bind(function (setting) {\n let dbInstance = this.options.projectMessagingView.getDataTableInstance({\n view: setting.view,\n settings: this.options.projectMessagingView.options.settings.getSettings(setting.view)\n }),\n columns = [];\n if (dbInstance != null) {\n columns = dbInstance.getColumns(true);\n }\n selectedColumns = (_.size(setting.columns) > 0) ? setting.columns : setting.columnsDefault;\n _.each(columns, _.bind(function (column) {\n column.visible = selectedColumns.indexOf(column.columnData) !== -1\n }, this));\n\n\n this.options.settings.push({\n view: setting.view,\n rowsPerPage: setting.rowsPerPage,\n columns: columns\n });\n\n }, this));\n\n this.renderData = {\n showGroupCompanyView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY),\n showGroupContactView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT),\n showCompanyView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_COMPANY) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_COMPANY),\n showContactView: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_CONTACT) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_CONTACT),\n showBidPackagesView: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES) || PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES)\n };\n },\n afterRender: function () {\n new PJQ.inputs.Selectpicker({\n el: this.$('select.select-view-default'),\n defaultValue: this.options.defaultView,\n onChange: _.bind(function (value) {\n this.options.defaultView = value;\n }, this)\n\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('select.select-view'),\n defaultValue: this.options.projectMessagingView.dataTable.options.view,\n onChange: _.bind(function (value) {\n this.selectView(value);\n }, this)\n });\n\n this.rowsPerPage = new PJQ.inputs.Selectpicker({\n el: this.$('select.rows-per-page'),\n isIntChoices: true,\n onChange: _.bind(function (value) {\n this.currentView.rowsPerPage = value;\n }, this)\n\n });\n\n this.selectView(this.options.projectMessagingView.dataTable.options.view);\n },\n selectView: function (view) {\n this.currentView = _.find(this.options.settings, _.bind(function (setting) {\n return setting.view === view;\n }, this));\n\n if (view.indexOf('-') === -1) {\n this.$('div.rows-per-page').show();\n this.rowsPerPage.setValue(this.currentView.rowsPerPage);\n } else\n this.$('div.rows-per-page').hide();\n\n if (view === PJQ.constants.projectMessaging.views.GROUPCOMP || view === PJQ.constants.projectMessaging.views.GROUPCONT || view === PJQ.constants.projectMessaging.views.MSGCONT || view === PJQ.constants.projectMessaging.views.RSPCONT || view === PJQ.constants.projectMessaging.views.BIDPKGS)\n this.$('div.select-columns').hide();\n else {\n this.$('div.select-columns').show();\n\n if (this.dataTable) {\n this.dataTable.undelegateEvents();\n $(this.dataTable.el).empty();\n }\n\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('div.select-columns-datatable'),\n data: this.currentView.columns,\n isHideSearch: true,\n order: [],\n columns: [\n {\"data\": \"title\", \"title\": \"Column\", \"orderable\": false},\n {\n \"data\": \"visible\",\n \"title\": \"Show\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\"' + (data ? ' checked ' : '') + 'class=\"select-column\"/><div class=\"state p-primary\"><label class=\"wd-0\"> </label></div></div></div>');\n }, this),\n \"width\": '10%'\n }\n ],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n\n });\n }\n },\n columnSelected: function (sender) {\n this.dataTable.dataTable.row($(sender.currentTarget).closest('tr')).data().visible = $(sender.currentTarget).prop('checked');\n },\n onSave: function () {\n //update global settings from local\n this.options.projectMessagingView.options.settings.set('defaultView', this.options.defaultView);\n\n _.each(this.options.settings, _.bind(function (settingTemp) {\n _.each(this.options.projectMessagingView.options.settings.get('settings'), _.bind(function (setting) {\n if (settingTemp.view === setting.view) {\n setting.rowsPerPage = settingTemp.rowsPerPage;\n\n let columns = _.size(setting.columns) > 0 ? setting.columns.slice() : setting.columnsDefault.slice();\n\n // update columns\n _.each(settingTemp.columns, _.bind(function (column) {\n if (column.visible) {\n if (columns.indexOf(column.columnData) === -1)\n columns.push(column.columnData);\n } else {\n if (columns.indexOf(column.columnData) !== -1)\n columns = _.filter(columns, _.bind(function (columnTemp) {\n return columnTemp != column.columnData;\n }, this));\n }\n }, this));\n\n setting.columns = columns;\n }\n }, this));\n }, this));\n\n //save settings to database\n this.options.projectMessagingView.options.settings.save(null, {\n success: _.bind(function () {\n if (typeof this.options.onSave === 'function')\n this.options.onSave();\n\n this.removeModal();\n }, this)\n });\n }\n});\n\nPJQ.views.projects.ManageProjectParticipantTradesModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Project-Participant-Trades'),\n minWidth: '900px',\n onSave: _.noop\n },\n events: {\n 'click .manage-trades-save': 'onSave',\n 'change .select-trade': 'tradeSelectChanged',\n 'change .select-all-trades': 'tradeSelectAllChanged'\n },\n beforeRender: function () {\n this.renderData = {};\n },\n afterRender: function () {\n this.groups = new PJQ.collections.projectParticipants.ProjectParticipantGroups(null, {\n contactId: this.options.contactId\n });\n\n this.groups.fetch({\n success: _.bind(function () {\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.project-participant-trades'),\n pageLength: 999999,\n isHideSearch: true,\n data: this.groups.models,\n dom: 't',\n order: [],\n columns: [\n {\n \"data\": \"attributes.isSelected\",\n \"title\": '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"select-all-trades\" /><div class=\"state p-primary\"><label class=\"wd-0\"> </label></div></div>',\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\"' + (data ? ' checked ' : '') + 'class=\"select-trade\"/><div class=\"state p-primary\"><label class=\"wd-0\"> </label></div></div></div>');\n }, this),\n \"width\": '10%'\n },\n {\n \"data\": \"attributes.groupName\",\n \"title\": \"Trade\",\n \"orderable\": false\n }\n ]\n });\n }, this)\n });\n },\n tradeSelectChanged: function (e) {\n let tr = $(e.currentTarget).closest('tr'),\n row = this.dataTable.getRow(tr);\n\n row.data().set('isSelected', $(e.currentTarget).prop('checked'));\n },\n tradeSelectAllChanged: function (e) {\n _.each(this.$el.find('input.select-trade'), _.bind(function (input) {\n let tr = $(input).closest('tr'),\n row = this.dataTable.getRow(tr);\n\n row.data().set('isSelected', $(e.currentTarget).prop('checked'));\n $(input).prop('checked', $(e.currentTarget).prop('checked'));\n }, this));\n\n },\n onSave: function () {\n this.groups.save({\n success: _.bind(function () {\n if (typeof this.options.onSave === 'function')\n this.options.onSave(this.groups);\n\n this.removeModal();\n }, this)\n });\n }\n});\n\nPJQ.views.projects.SetProjectParticipantsStatusModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Set-Project-Participants-Status'),\n minWidth: '500px',\n onSave: _.noop,\n projectResponses: [],\n projectMessagingView: null\n },\n events: {\n 'click .set-responses': 'onSave',\n 'click .comment-type>div': 'commentTypeClicked'\n },\n beforeRender: function () {\n this.renderData = {\n projectResponses: this.options.projectResponses\n };\n },\n afterRender: function () {\n\n let isContactComment = false;\n _.each(this.options.projectMessagingView.options.settings.get('settings'), _.bind(function (setting) {\n _.each(setting.columns, _.bind(function (column) {\n if (column === 'commentsContact')\n isContactComment = true;\n }, this));\n }, this));\n\n if (isContactComment)\n this.$('.comment-type>div[data-filter=\"contact-comment\"]').click();\n\n this.projectStatus = new PJQ.inputs.Selectpicker({\n el: this.$('.project-status'),\n defaultValue: this.options.projectResponses[0][0]\n });\n },\n commentTypeClicked: function (e) {\n let $target = $(e.currentTarget),\n filter = $target.data('filter');\n this.$('.comment-type>div').removeClass('selected');\n $target.addClass('selected');\n\n this.$('.comments>textarea').hide();\n this.$('.' + $target.data('filter')).show();\n },\n onSave: function () {\n new PJQ.views.modals.YesNo({\n header: \"Set Status\",\n body: \"Are you sure you want to set the Project Status for \" + _.size(this.options.projectMessagingView.options.selectedContacts) + \" participants?\",\n onYes: _.bind(function () {\n if (typeof this.options.onSave === 'function')\n this.options.onSave(this.projectStatus.getValue(), this.$('.company-comment').val(), this.$('.contact-comment').val());\n\n this.removeModal();\n }, this)\n });\n }\n});\n\nPJQ.views.projects.DeleteProjectParticipants = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Delete-Project-Participants'),\n minWidth: '500px',\n onDelete: _.noop,\n title: '',\n body: ''\n },\n events: {\n 'click .btn-remove': 'onDelete'\n },\n beforeModalCreated: function () {\n this.canDeleteContact = PJQ.app.session.hasPermission('contacts.canDelete');\n },\n renderData: function () {\n return {\n title: this.options.title,\n body: this.options.body,\n canDeleteContact: this.canDeleteContact\n };\n },\n onDelete: function () {\n if (typeof this.options.onDelete === 'function')\n this.options.onDelete(this.canDeleteContact && this.$('.delete-ab').prop('checked'));\n\n this.removeModal();\n }\n});\n","PJQ.views.projects.ProjectMessagingDataTable = PJQ.views.dataTables.DataTable.extend({\n defaults: {\n language: {\n zeroRecords: \"No data to display\"\n },\n subTemplates: {\n commentsTooltip: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'tooltip-comments'),\n addCommentTooltip: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'tooltip-add-comment'),\n },\n isHideSearch: true,\n dom: '<\"top\"p<\"clear\">>rt<\"bottom\"p<\"clear\">>',\n enableColumnResize: false\n },\n onColumnResizeEnd: function (c, columns) {\n let totalWidth = 0,\n colWidths = {};\n _.each(columns, function (col) {\n let colWidth = parseInt(col.width.replace('px', ''));\n totalWidth += colWidth;\n colWidths[col.idx] = colWidth;\n });\n\n let colPercents = {},\n totalPercent = 0;\n _.each(colWidths, function (col, idx) {\n let percent = (col / totalWidth) * 100;\n if (percent < 2) {\n percent = 2;\n } else {\n percent = Math.floor(percent);\n }\n totalPercent += percent;\n colPercents[idx] = percent;\n });\n\n let newColumns = [];\n _.each(this.options.settings.columns, function (col, idx) {\n let data,\n colTp = typeof col;\n if (colTp === 'string') {\n data = col;\n } else if (colTp === 'object' && typeof colTp.data === 'string') {\n data = colTp.data;\n } else {\n data = \"\";\n }\n newColumns.push({\n data: data,\n width: colPercents[idx].toString() + '%'\n });\n })\n this.options.settings.columns = newColumns;\n },\n beforeDataTableRender: function () {\n this.options.scrollRows = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DATA_TABLE_FIXED_HEADER);\n\n this.options.projectStatusList = PJQ.app.session.project.getProjectStatusList();\n this.options.childDataTables = [];\n\n this.options.contextMenuOptions = {\n actions: this.getContextMenuItems(),\n isHideNoActions: true\n };\n\n if (this.options.settings) {\n // enable paging for grids that have a setting for it / are not subgrids\n if (this.options.settings.rowsPerPage !== 0 && this.options.view.indexOf('-') === -1)\n this.options.pageLength = this.options.settings.rowsPerPage;\n else\n this.options.pageLength = 2147483646;\n\n this.setCustomOrder();\n\n let fixedColumnsLeft = 0;\n switch (this.options.settings.view) {\n case PJQ.constants.projectMessaging.views.GROUPCONT:\n case PJQ.constants.projectMessaging.views.GROUPCONT_CONT:\n case PJQ.constants.projectMessaging.views.GROUPCOMP:\n case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT:\n case PJQ.constants.projectMessaging.views.MSGCONT:\n case PJQ.constants.projectMessaging.views.MSGCONT_CONT:\n case PJQ.constants.projectMessaging.views.RSPCONT:\n case PJQ.constants.projectMessaging.views.RSPCONT_CONT:\n case PJQ.constants.projectMessaging.views.BIDPKGS_CONT:\n fixedColumnsLeft = 1;\n break;\n case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP:\n case PJQ.constants.projectMessaging.views.CONT:\n case PJQ.constants.projectMessaging.views.COMP:\n case PJQ.constants.projectMessaging.views.COMP_CONT:\n fixedColumnsLeft = 2;\n break;\n }\n if (fixedColumnsLeft > 0) {\n this.options.colReorder = {\n fixedColumnsLeft: fixedColumnsLeft,\n realtime: false\n };\n }\n }\n\n this.options.createdRow = _.bind(this.createdRow, this);\n\n if (typeof this.options.beforeDataTableRender === 'function') {\n this.options.beforeDataTableRender();\n }\n },\n setCustomOrder: function () {\n if (!this.options.settings)\n return;\n\n if (this.options.settings.orderBy !== 'sortOrder') {\n if (_.size(this.options.settings.columns) === 0) {\n this.options.settings.orderBy = this.options.settings.columnsDefault[0];\n } else if (this.options.settings.columns.indexOf(this.options.settings.orderBy) === -1) {\n this.options.settings.orderBy = this.options.settings.columns[0];\n }\n }\n _.each(this.getColumns(false, this.options.view), _.bind(function (column, index) {\n if (column.columnData === this.options.settings.orderBy) {\n this.options.order = [[index, this.options.settings.orderAscending ? 'asc' : 'desc']];\n }\n }, this));\n\n if (this.options.settings.view !== PJQ.constants.projectMessaging.views.GROUPCONT &&\n this.options.settings.view !== PJQ.constants.projectMessaging.views.GROUPCOMP &&\n this.options.settings.view !== PJQ.constants.projectMessaging.views.BIDPKGS &&\n this.options.settings.view !== PJQ.constants.projectMessaging.views.MSGCONT &&\n this.options.settings.view !== PJQ.constants.projectMessaging.views.RSPCONT) {\n _.each(this.getColumns(false, this.options.view), _.bind(function (column, index) {\n if (column.columnData === 'companyName' && this.options.settings.orderBy !== 'companyName') {\n this.options.order.push([index, 'asc']);\n }\n }, this));\n _.each(this.getColumns(false, this.options.view), _.bind(function (column, index) {\n if (column.columnData === 'contactName' && this.options.settings.orderBy !== 'contactName') {\n this.options.order.push([index, 'asc']);\n }\n }, this));\n if (this.dataTable) {\n this.dataTable.order(this.options.order).draw();\n }\n }\n },\n columnOrderChanged: function (columns) {\n if (this.options.userSettings != null) {\n /* #311 - error when drag-drop sorting columns.\n let settings = this.options.userSettings.get('settings');\n for (let i = 0; i < _.size(settings); i++) {\n if (settings[i].view === this.options.view) {\n settings[i].columns = columns;\n }\n }\n this.options.userSettings.set('settings', settings);\n\n */\n this.options.userSettings.save();\n }\n },\n orderByChanged: function (columns) {\n this.setCustomOrder();\n if (this.options.userSettings != null) {\n let settings = this.options.userSettings.get('settings');\n for (let i = 0; i < _.size(settings); i++) {\n if (settings[i].view === this.options.settings.view) {\n settings[i].orderBy = this.options.settings.orderBy;\n settings[i].orderAscending = this.options.settings.orderAscending;\n }\n }\n this.options.userSettings.set('settings', settings);\n this.options.userSettings.save();\n }\n },\n afterDataTableRender: function () {\n this.afterDataTableRenderChild();\n },\n afterDataTableRenderChild: function () {\n },\n getRowChildTable: function (childOpts) {\n },\n getRowChildData: function (row) {\n },\n setRowStyle: function (row, status, isBlacklisted) {\n },\n getContextMenuItems: function () {\n\n },\n statusChanged: function (statuses) {\n },\n getCustomFieldColumn: function (customField, isCompany) {\n return {\n \"columnData\": (isCompany ? 'companyCustomField' : 'contactCustomField') + '_' + customField.get('id'),\n \"title\": customField.get('fieldName'),\n \"render\": function (data, type, row) {\n let rowField;\n if (isCompany) {\n rowField = row.getCompanyCustomField(customField.get('id'));\n } else {\n rowField = row.getContactCustomField(customField.get('id'));\n }\n\n let fieldValue = null;\n if (rowField != null) {\n fieldValue = rowField.value;\n }\n switch (customField.get('fieldType')) {\n case PJQ.constants.customFields.fieldTypes.TEXT:\n if (fieldValue && type !== 'sort' && type !== 'type') {\n if (PJQ.helpers.urlHelpers.isURL(fieldValue))\n fieldValue = '<a target=\"_blank\" href=\"' + fieldValue + '\">' + fieldValue + '</a>';\n }\n break\n case PJQ.constants.customFields.fieldTypes.DATE:\n if (fieldValue) {\n if (type !== 'sort' && type !== 'type')\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE);\n }\n break;\n case PJQ.constants.customFields.fieldTypes.DATETIME:\n if (fieldValue) {\n if (type !== 'sort' && type !== 'type')\n fieldValue = PJQ.helpers.dateHelpers.getDateString(new Date(fieldValue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }\n break;\n case PJQ.constants.customFields.fieldTypes.BOOL:\n if (fieldValue != null)\n fieldValue = fieldValue ? 'Yes' : 'No';\n else\n fieldValue = '';\n break;\n case PJQ.constants.customFields.fieldTypes.CHOICE:\n if (fieldValue) {\n let choices = [];\n\n // convert single choice value into array so that the logic below can work for both types.\n if (typeof fieldValue === 'number')\n fieldValue = [fieldValue];\n\n _.each(customField.choices.models, _.bind(function (choice) {\n if (_.find(fieldValue, function (value) {\n return value === choice.get('id');\n }))\n choices.push(choice.get('choiceName'));\n }, this));\n\n fieldValue = choices.join((', '));\n }\n break;\n case PJQ.constants.customFields.fieldTypes.MONEY:\n if (type === 'sort' || type === 'type') {\n if (fieldValue && fieldValue !== '$')\n fieldValue = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(fieldValue, true));\n else\n fieldValue = 0;\n\n } else\n fieldValue = PJQ.helpers.formatHelpers.formatCurrency(fieldValue);\n break;\n case PJQ.constants.customFields.fieldTypes.PHONE:\n if (type !== 'sort' && type !== 'type') {\n let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n phoneFormatted = (fieldValue ? PJQ.helpers.formatHelpers.formatPhoneNumber(fieldValue) : 'N/A'),\n phoneWrapped = (fieldValue ? PJQ.helpers.formatHelpers.formatPhoneNumber(fieldValue, true) : 'N/A');\n\n if (fieldValue !== '')\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Phone #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-phone text-dark\"></i></button>';\n\n html += '<div class=\"flex-fill ' + (fieldValue ? '' : 'text-muted') + '\">' + phoneWrapped + '</div>';\n html += '</div>';\n\n fieldValue = html;\n }\n break;\n }\n return fieldValue;\n },\n \"customFieldId\": customField.get('id')\n };\n },\n gradeContactCompany: function (sender) {\n let $target = $(sender.currentTarget),\n contactCompanyId = $target.data('contactCompanyId'),\n tr = $target.closest('tr'),\n parentTR = $target.closest('tr').parent().closest('tr').prev(),\n row = this.getRow(tr);\n\n new PJQ.views.projects.GradeProjectContactModal({\n contactCompanyId: contactCompanyId,\n row: row,\n onGrade: _.bind(function (grade) {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'participants',\n value: row.data().get('contactCompanyId')\n\n },\n {\n endpoint: 'grade',\n value: row.data().get('grade')\n\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint\n }).post().done(_.bind(function (data) {\n row.data().set('gradeAverage', data);\n row.invalidate().draw();\n\n if (this.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n // update child table for this company\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n if (typeof childDT.statusChanged === 'function') {\n if (row.data().get('contactCompanyId') !== childDT.$el.data('id'))\n return;\n\n _.each(childDT.dataTable.data(), _.bind(function (item) {\n item.set('gradeAverage', data);\n item.set('grade', row.data().get('grade'));\n }, this));\n\n childDT.dataTable.rows().invalidate().draw();\n }\n }, this));\n\n } else if (this.options.view === PJQ.constants.projectMessaging.views.COMP_CONT || this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT) {\n // update all other rows in this table for the same company\n _.each(this.dataTable.data(), _.bind(function (item) {\n item.set('gradeAverage', data);\n item.set('grade', row.data().get('grade'));\n }, this));\n this.dataTable.rows().invalidate().draw();\n\n // update parent table / company row\n let rowParent = this.options.parentDataTable.getRow(parentTR);\n rowParent.data().set('gradeAverage', data);\n rowParent.data().set('grade', row.data().get('grade'));\n rowParent.invalidate().draw();\n }\n\n PJQ.notifications.notify.successNotify({\n message: 'Grade recorded successfully'\n });\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Unable to record Grade. Please contact customer service.'\n });\n });\n }, this)\n });\n },\n childRowToggle: function (sender) {\n let $target = $(sender.currentTarget),\n id = $target.data('id'),\n tr = $target.closest('tr'),\n row = this.getRow(tr);\n if (row.child.isShown()) {\n // This row is already open - close it\n row.child.hide();\n tr.removeClass('shown');\n $target.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n } else {\n $target.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n let childClass = 'subgrid-' + id.toString(),\n $childTable = $('<div data-id=\"' + id + '\" />', {\n class: childClass + ' p-2'\n });\n row.child($childTable).show();\n\n let childData = this.getRowChildData(row);\n if (childData != null) {\n childData.fetch({\n success: _.bind(function () {\n if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCONT) {\n let selectedContactGroups = [], groupId = parseInt(childData.options.groupIdList);\n _.each(childData.models, _.bind(function (contact) {\n _.each(this.options.projectMessagingView.options.selectedContactGroups, _.bind(function (contactGroup) {\n if (contactGroup.contactId === contact.get('contactId'))\n selectedContactGroups.push({\n contactId: contact.get('contactId'),\n groupId: groupId\n });\n }, this));\n }, this));\n this.options.projectMessagingView.addSelectedContactGroups(selectedContactGroups);\n }\n\n if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n let selectedContactGroups = [], groupId = parseInt(childData.options.groupIdList),\n isEnableDeclined = this.options.projectMessagingView.isEnableDeclined();\n\n _.each(childData.models, _.bind(function (company) {\n\n let selectedContacts = company.attributes.selectableContacts;\n if (isEnableDeclined)\n $.merge(selectedContacts, company.attributes.declinedContacts);\n\n _.each(selectedContacts, _.bind(function (contact) {\n _.each(this.options.projectMessagingView.options.selectedContactGroups, _.bind(function (contactGroup) {\n\n // iterate through selectable contacts and add em if their ids match the list\n if (contactGroup.contactId === contact)\n selectedContactGroups.push({contactId: contact, groupId: groupId});\n }, this));\n\n }, this));\n\n }, this));\n\n this.options.projectMessagingView.addSelectedContactGroups(selectedContactGroups);\n }\n\n let childTable = this.getRowChildTable({\n el: $childTable,\n data: childData.models,\n parentDataTable: this,\n parentId: id,\n projectMessagingView: this.options.projectMessagingView\n });\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== id;\n }, this));\n this.options.childDataTables.push(childTable);\n tr.addClass('shown');\n }, this)\n });\n }\n }\n },\n childRowToggleAll: function (sender) {\n let $target = $(sender.currentTarget);\n\n this.dataTable.rows().eq(0).each(_.bind(function (index) {\n let row = this.dataTable.row(index), id = row.data().get('groupId');\n\n if ($target.hasClass('fa-plus-circle') && !row.child.isShown()) {\n let childClass = 'subgrid-' + id.toString(),\n $childTable = $('<div data-id=\"' + id + '\" />', {\n class: childClass\n });\n row.child($childTable).show();\n\n let childData = this.getRowChildData(row);\n if (childData != null) {\n childData.fetch({\n success: _.bind(function () {\n let childTable = this.getRowChildTable({\n el: $childTable,\n data: childData.models,\n parentDataTable: this,\n parentId: id,\n projectMessagingView: this.options.projectMessagingView\n });\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== id;\n }, this));\n this.options.childDataTables.push(childTable);\n $(row.node()).addClass('shown');\n }, this)\n });\n }\n } else if ($target.hasClass('fa-minus-circle') && row.child.isShown()) {\n row.child.hide();\n $(row.node()).removeClass('shown');\n }\n\n }, this));\n\n if ($target.hasClass('fa-plus-circle'))\n $target.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n else\n $target.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n },\n onStatusChanged: function (e) {\n let $target = $(e.currentTarget),\n status = $target.val().toUpperCase(),\n row = this.getRow($target.closest('tr')),\n TR = $target.closest('tr'),\n parentTR = $target.closest('tr').parent().closest('tr').prev(),\n data = row.data(), callback = _.bind(function () {\n data.updateStatus(status, _.bind(function (statuses) {\n\n data.set('status', status);\n\n if (this.options.parentDataTable != null) {\n\n if (this.options.view !== PJQ.constants.projectMessaging.views.CONTGROUP ||\n (this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT &&\n this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.GROUPCONT_CONT) ||\n parseInt(this.options.parentDataTable.dataTable.rows(0).row().data().collection.options.groupIdList) === row.data().get('groupId')) {\n\n this.options.parentDataTable.statusChanged(statuses, parentTR, this.options.view);\n }\n }\n\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n if (typeof childDT.statusChanged === 'function') {\n let data = row.data();\n if ((data.collection.options.view === PJQ.constants.projectMessaging.views.COMP) && data.get('contactCompanyId') !== childDT.$el.data('id'))\n return;\n\n if ((data.collection.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT ||\n data.collection.options.view === PJQ.constants.projectMessaging.views.GROUPCONT_CONT ||\n data.collection.options.view === PJQ.constants.projectMessaging.views.COMP_CONT ||\n data.collection.options.view === PJQ.constants.projectMessaging.views.CONT ||\n data.collection.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT ||\n data.collection.options.view === PJQ.constants.projectMessaging.views.RSPCONT_CONT ||\n data.collection.options.view === PJQ.constants.projectMessaging.views.BIDPKGS_CONT)\n && data.get('contactId') !== childDT.$el.data('id'))\n return;\n\n childDT.statusChanged(statuses, null, this.options.view);\n }\n }, this));\n\n this.setRowStyle(TR, data.attributes.status, data.attributes.isBlacklisted || data.attributes.isCompanyBlacklisted);\n\n PJQ.notifications.notify.successNotify({\n message: 'Status updated'\n });\n }, this));\n }, this);\n\n let groupListArray = data.get('groupListDisplay') != null ? data.get('groupListDisplay').split(',') : [];\n if (groupListArray.length > 1 && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.RSVP_DISABLE_PER_GROUP) && this.options.view !== PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT && this.options.view !== PJQ.constants.projectMessaging.views.GROUPCONT_CONT && this.options.view !== PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n new PJQ.views.modals.YesNo({\n header: \"Confirm Status Change\",\n body: \"Are you sure you want to change the status for all Trades for this Participant?\",\n onYes: _.bind(function () {\n callback();\n }, this),\n onNo: _.bind(function () {\n $target.val(data.get('status'));\n }, this)\n });\n } else {\n callback();\n }\n },\n mouseoverComments: function (e) {\n let $target = $(e.currentTarget),\n row = this.getRow($target.closest('tr')),\n participant = row.data(),\n isCompanyComments = $target.hasClass('comment-company');\n if (_.size(isCompanyComments ? participant.get('lastCompanyComment') : participant.get('lastContactComment')) > 0) {\n this.commentHoverContactId = isCompanyComments ? null : participant.id;\n this.commentHoverContactCompanyId = isCompanyComments ? participant.id : null;\n let fnShowComments = _.bind(function (comments) {\n let tooltip = new PJQ.Tooltip($target, {\n template: this.options.subTemplates.commentsTooltip,\n container: this.$el,\n trigger: 'hover',\n renderData: function () {\n return {\n comments\n };\n }\n });\n tooltip.show();\n }, this);\n if (!isCompanyComments && participant.comments && participant.comments.isFetched) {\n fnShowComments(participant.comments);\n } else if (isCompanyComments && participant.companyComments && participant.companyComments.isFetched) {\n fnShowComments(participant.companyComments);\n } else {\n setTimeout(_.bind(function () {\n if ((isCompanyComments && this.commentHoverContactCompanyId === participant.id)\n || !isCompanyComments && this.commentHoverContactId === participant.id) {\n let comments = new PJQ.collections.projectParticipants.ProjectParticipantComments(null, {\n participant: participant,\n project: PJQ.app.session.project,\n isCompanyComments: isCompanyComments\n });\n comments.fetch({\n success: _.bind(function () {\n if (isCompanyComments) {\n participant.companyComments = comments;\n } else {\n participant.comments = comments;\n }\n fnShowComments(comments);\n }, this)\n });\n }\n }, this), 1000);\n }\n }\n },\n mouseleaveComments: function () {\n this.commentHoverContactId = null;\n this.commentHoverContactCompanyId = null;\n },\n addComment: function (e) {\n let $target = $(e.currentTarget),\n row = this.getRow($target.closest('tr')),\n participant = row.data(),\n isCompanyComments = $target.hasClass('btn-add-comment-company'),\n contextId = isCompanyComments ? participant.attributes.contactCompanyId : participant.attributes.contactId,\n tooltip = new PJQ.Tooltip($target, {\n template: this.options.subTemplates.addCommentTooltip,\n container: this.$el,\n trigger: 'click',\n title: '',\n onShow: _.bind(function () {\n setTimeout(_.bind(function () {\n this.$el.find('.comment-text-tooltip').focus();\n }, this), 300);\n }, this),\n afterRender: _.bind(function (tp) {\n this.$el.off('keypress', '.comment-text-tooltip[data-contact-id=\"'+contextId+'\"]');\n this.$el.on('keypress', '.comment-text-tooltip[data-contact-id=\"'+contextId+'\"]', function (e) {\n if (e.which === 13) {\n $(this).siblings('.btn-add-comment-tooltip[data-contact-id=\"'+contextId+'\"]').trigger('click');\n e.preventDefault();\n }\n });\n\n this.$el.off('click', '.btn-add-comment-tooltip[data-contact-id=\"'+contextId+'\"]');\n this.$el.on('click', '.btn-add-comment-tooltip[data-contact-id=\"'+contextId+'\"]', _.bind(function (e) {\n let $comment = $(e.currentTarget).parent().find('.comment-text-tooltip[data-contact-id=\"'+contextId+'\"]'),\n commentText = $comment.val();\n if (_.size(commentText) > 0) {\n let comment = new PJQ.models.projectParticipants.ProjectContactComment({\n comment: commentText\n }, {\n project: PJQ.app.session.project,\n contactId: contextId,\n isCompanyComments: isCompanyComments\n });\n comment.save(null, {\n success: _.bind(function () {\n tp.remove();\n\n let parentTR = $target.closest('tr').parent().closest('tr').prev(),\n rowParent = this.options.parentDataTable != null ? this.options.parentDataTable.getRow(parentTR) : null;\n this.onComment(row, rowParent, comment, isCompanyComments);\n }, this)\n });\n }\n }, this));\n }, this),\n renderData: function () {\n return {\n participant : participant,\n contactId: contextId\n };\n }\n });\n tooltip.show();\n },\n manageComments: function (e) {\n let row = this.getRow($(e.currentTarget).closest('tr')),\n parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n participant = row.data(),\n isCompanyComments = $(e.currentTarget).hasClass('btn-comment-company') || $(e.currentTarget).hasClass('btn-comment-contact-company'),\n comments = new PJQ.collections.projectParticipants.ProjectParticipantComments(null, {\n participant: participant,\n project: PJQ.app.session.project,\n isCompanyComments: isCompanyComments\n });\n comments.fetch({\n success: _.bind(function () {\n new PJQ.views.projects.ProjectParticipantCommentModal({\n participant: participant,\n comments: comments.models,\n project: PJQ.app.session.project,\n isCompanyComments: isCompanyComments,\n onComment: _.bind(function (comment) {\n let rowParent = this.options.parentDataTable != null ? this.options.parentDataTable.getRow(parentTR) : null;\n this.onComment(row, rowParent, comment, isCompanyComments);\n }, this)\n });\n }, this)\n });\n },\n onComment: function (row, rowParent, comment, isCompanyComments) {\n row.data().set(isCompanyComments ? 'lastCompanyComment' : 'lastContactComment', {\n comment: comment.get('comment')\n });\n row.invalidate().draw(false);\n\n if (isCompanyComments) {\n // if this is a contact child view, update the company parent in case it has a company comment column also\n if (this.options.view === PJQ.constants.projectMessaging.views.COMP_CONT || this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT) {\n // update parent table / company row\n if (rowParent != null) {\n rowParent.data().set('lastCompanyComment', {\n comment: comment.get('comment')\n });\n rowParent.invalidate().draw(false);\n }\n } else if (this.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n // if this is a company view, update the contact child view in case it has a company comment column also\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n if (typeof childDT.statusChanged === 'function') {\n if (row.data().get('contactCompanyId') !== childDT.$el.data('id'))\n return;\n\n _.each(childDT.dataTable.data(), _.bind(function (item) {\n item.set('lastCompanyComment', {\n comment: comment.get('comment')\n });\n }, this));\n childDT.dataTable.rows().invalidate().draw(false);\n\n }\n }, this));\n }\n }\n },\n getColumns: function () {\n },\n cleanup: function () {\n this.undelegateEvents();\n $(this.el).empty();\n },\n getIsRootView: function () {\n return (this.options.view.indexOf('-') === -1);\n },\n createdRow: function (row, data, dataIndex) {\n }\n});\n\nPJQ.views.projects.ProjectMessagingTradesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n events: {\n 'click i.trade-toggle-row': 'childRowToggle',\n 'click i.trade-toggle-all-rows': 'childRowToggleAll',\n 'change .trade-select-all-contacts': 'selectAll'\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [], includeColumns = ['groupName', 'groupStatus', 'groupCount'];\n\n this.totalParticipants = 0;\n this.selectColumnHeader = '';\n this.selectColumnWidth = '15px';\n _.each(this.options.data, _.bind(function (row) {\n this.totalParticipants += row.attributes.totalParticipants;\n }, this));\n if (this.totalParticipants < 1000) {\n this.selectColumnHeader = '<i class=\"fal fa-plus-circle trade-toggle-all-rows mr-1\"></i>';\n this.selectColumnWidth = '2.8em';\n }\n this.selectColumnHeader += '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"trade-select-all-contacts\" ' + (this.options.projectMessagingView && this.options.projectMessagingView.options.isTradesViewSelectAll ? 'checked=\"checked\"' : '') + ' /><div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\"> </label></div></div>';\n\n if (!includeAllColumns) {\n\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n columns.push({\n \"width\": this.selectColumnWidth,\n \"columnData\": \"groupMembers\",\n \"data\": null,\n \"title\": this.selectColumnHeader,\n \"className\": \"dt-center\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '<i class=\"fal fa-plus-circle trade-toggle-row\" data-id=\"' + row.get('groupId') + '\"></i>';\n }\n });\n }\n\n _.each(includeColumns, _.bind(function (columnName) {\n let cName,\n cNameTp = typeof columnName;\n if (cNameTp === 'string') {\n cName = columnName;\n } else if (cNameTp === 'object' && typeof cNameTp.data === 'string') {\n cName = cNameTp.data;\n } else {\n return;\n }\n switch (cName) {\n case 'groupName':\n columns.push({\n \"columnData\": \"groupName\",\n \"data\": {\n \"_\": \"attributes.sortOrder\",\n \"sort\": \"attributes.sortOrder\",\n \"filter\": \"attributes.groupName\",\n \"display\": \"attributes.groupName\"\n },\n \"title\": \"Trade\",\n });\n break;\n case 'groupStatus':\n columns.push({\n \"columnData\": \"groupStatus\",\n \"render\": function (data, type, row) {\n if (type === 'sort' || type === 'type')\n return '';\n\n let innerHtml = '';\n _.each(row.get('statuses'), _.bind(function (status) {\n let statusPercent = (status.count / row.get('totalParticipants')) * 100,\n textColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(status.backgroundColor);\n innerHtml += '<div class=\"progress-bar\" role=\"progressbar\" title=\"' + status.status + ' (' + status.count + ')\" style=\"background-color: ' + status.backgroundColor + ';color: ' + textColor + ';width:' + statusPercent + '%\">\\n' +\n status.count +\n '</div>';\n }, this));\n let outerHtml = '<div class=\"progress\">';\n outerHtml += innerHtml + '</div>';\n return outerHtml;\n },\n \"title\": \"Status\",\n \"orderable\": false,\n \"width\": \"60%\"\n });\n break;\n case 'groupCount':\n columns.push({\n \"columnData\": \"groupCount\",\n \"data\": \"attributes.totalParticipants\",\n \"title\": (this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? \"Companies\" : \"Contacts\"),\n \"width\": \"40px\",\n \"render\": function (data) {\n return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n }\n });\n break;\n }\n }, this));\n\n return columns;\n },\n getChildTableType: function () {\n if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n return PJQ.constants.projectMessaging.views.GROUPCOMP_COMP;\n } else if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCONT) {\n return PJQ.constants.projectMessaging.views.GROUPCONT_CONT;\n }\n },\n getChildTableSettings: function () {\n return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.userSettings;\n childOpts.projectMessagingView = this.options.projectMessagingView;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n return this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? new PJQ.views.projects.ProjectMessagingCompanyDataTable(childOpts) : new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n },\n getRowChildData: function (row) {\n let searchFor = this.options.projectMessagingView.getSearchFor(),\n statusFilter = [...this.options.projectMessagingView.options.filter.status];\n\n if (this.options.projectMessagingView.options.filter.isDelivered)\n statusFilter.push('DELIVERED');\n\n if (this.options.projectMessagingView.options.filter.isOpened)\n statusFilter.push('OPENED');\n\n if (this.options.projectMessagingView.options.filter.isVisited)\n statusFilter.push('VISITED');\n\n if (this.options.projectMessagingView.options.filter.isDownloaded)\n statusFilter.push('DOWNLOADS');\n\n if (this.options.projectMessagingView.options.filter.isPrintOrder)\n statusFilter.push('ORDERS ONLY');\n\n if (this.options.projectMessagingView.options.filter.publicPrivate)\n statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n project: PJQ.app.session.project,\n view: this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? PJQ.constants.projectMessaging.views.COMP : PJQ.constants.projectMessaging.views.CONT,\n groupIdList: row.data().get('groupId').toString(),\n statusFilter: _.uniq(statusFilter).join(','),\n searchFor: searchFor,\n isPerGroup: true,\n withCustomFields: this.getChildTableSettings().hasCustomFields\n });\n },\n selectAll: function (e) {\n let loader = new PJQ.Loader($('.nav-body'));\n let isSelected = $(e.currentTarget).prop('checked');\n this.options.projectMessagingView.options.isTradesViewSelectAll = isSelected;\n this.options.projectMessagingView.options.selectedContacts = [];\n if (isSelected) {\n // get company/contact list for project, iterate through it and add any that aren't declined (unless enabledeclined is true)\n this.options.projectMessagingView.getViewData(this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? 'company' : 'contact', _.bind(function (data) {\n let enableDeclined = this.options.projectMessagingView.isEnableDeclined();\n _.each(data.models, _.bind(function (model) {\n\n if (this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n _.each(model.get('selectableContacts'), _.bind(function (id) {\n this.options.projectMessagingView.options.selectedContacts.push(id);\n }, this));\n\n if ((enableDeclined) && _.size(model.get('declinedContacts')) > 0) {\n _.each(model.get('declinedContacts'), _.bind(function (id) {\n this.options.projectMessagingView.options.selectedContacts.push(id);\n }, this));\n\n }\n } else {\n let isDeclined = (this.options.projectStatusList[1].toString().split(',')[0].toLowerCase() === model.get('status').toString().toLowerCase());\n if ((enableDeclined || !isDeclined) && !model.attributes.isBlacklisted && !model.attributes.isCompanyBlacklisted)\n this.options.projectMessagingView.options.selectedContacts.push(model.id);\n }\n\n }, this));\n\n this.options.projectMessagingView.options.selectedContacts = _.uniq(this.options.projectMessagingView.options.selectedContacts);\n this.options.projectMessagingView.renderContactStats();\n this.options.projectMessagingView.renderView();\n loader.remove();\n }, this), {isPerGroup: true});\n } else {\n // clear any visible checkboxes in sub-grids\n this.$('.select-company,.select-contact').prop('checked', false);\n loader.remove();\n }\n\n this.options.projectMessagingView.renderContactStats();\n }\n});\n\nPJQ.views.projects.ProjectMessagingBidPackagesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n events: {\n 'click i.trade-toggle-row': 'childRowToggle',\n 'click i.trade-toggle-all-rows': 'childRowToggleAll',\n 'change .trade-select-all-contacts': 'selectAll',\n 'change select.bid-package-count': 'onBidPackageCountChanged',\n 'blur .bid-package-notes': 'onBidPackageNotesChanged'\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [], includeColumns = ['name', 'bidPackageStatus', 'participantsCount'];\n\n this.totalParticipants = 0;\n this.selectColumnHeader = '';\n this.selectColumnWidth = '15px';\n _.each(this.options.data, _.bind(function (row) {\n this.totalParticipants += row.attributes.totalParticipants;\n }, this));\n if (this.totalParticipants < 1000) {\n this.selectColumnHeader = '<i class=\"fal fa-plus-circle trade-toggle-all-rows mr-1\"></i>';\n this.selectColumnWidth = '2.8em';\n }\n this.selectColumnHeader += '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"trade-select-all-contacts\" ' + (this.options.projectMessagingView && this.options.projectMessagingView.options.isTradesViewSelectAll ? 'checked=\"checked\"' : '') + ' /><div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\"> </label></div></div>';\n\n let enableCount = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES_COUNT);\n if (!includeAllColumns) {\n if (enableCount) {\n includeColumns = ['name', 'bidPackageCount', 'bidPackageStatus', 'participantsCount'];\n } else {\n includeColumns = this.options.settings.columnsDefault;\n }\n\n columns.push({\n \"width\": this.selectColumnWidth,\n \"columnData\": \"groupMembers\",\n \"data\": null,\n \"title\": this.selectColumnHeader,\n \"className\": \"dt-center\",\n \"orderable\": false,\n \"width\": \"5%\",\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '<i class=\"fal fa-plus-circle trade-toggle-row\" data-id=\"' + row.get('groupId') + '\"></i>';\n }\n });\n }\n\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'name':\n columns.push({\n \"columnData\": \"sortOrder\",\n \"width\": \"30%\",\n \"data\": {\n \"_\": \"attributes.sortOrder\",\n \"sort\": \"attributes.sortOrder\",\n \"filter\": \"attributes.bidPackageName\",\n \"display\": \"attributes.bidPackageName\"\n },\n \"render\": function (d, type, row) {\n let note = row.get('notes') ? row.get('notes') : '';\n if (row.get('bidPackageId') > 0) {\n return '<div><div class=\"wd-100 ' + (enableCount ? 'ht-90p' : '') + '\"><div class=\"mb-1 fs-16\">' + row.get(\"bidPackageName\") + '</div>' + (enableCount ? '<div class=\"form-group mb-2 ht-75p\"><textarea class=\"form-control wd-100 ht-100 resize-vert bid-package-notes\" data-cid=\"' + row.cid + '\">' + note + '</textarea></div></div></div>' : '');\n } else {\n return '<span>' + row.get('bidPackageName') + '</span>'\n }\n },\n \"title\": \"Bid Package\",\n });\n break;\n case 'bidPackageCount':\n columns.push({\n \"columnData\": \"count\",\n \"data\": \"attributes.count\",\n \"width\": \"10%\",\n \"render\": function (data, type, row) {\n let count = row.get('count');\n if (row.get('bidPackageId') > 0) {\n let html = `<select class=\"form-control bid-package-count\" style=\"min-width:40px;\">`\n for (let i = 0; i <= 10; i++) {\n if (parseInt(count) === i) {\n html += `<option value=\"` + i + `\" selected>` + i + `</option>`\n } else {\n html += `<option value=\"` + i + `\">` + i + `</option>`\n }\n }\n if (count && count.toLowerCase() === 'designated') {\n html += `<option value=\"designated\" selected>Designated</option>`\n } else {\n html += `<option value=\"designated\">Designated</option>`\n }\n html += `</select>`\n\n return html;\n } else {\n return '<div></div>';\n }\n },\n \"title\": \"Count\"\n });\n break;\n case 'bidPackageStatus':\n columns.push({\n \"columnData\": \"bidPackageStatus\",\n \"render\": function (data, type, row) {\n if (type === 'sort' || type === 'type')\n return '';\n else if (_.size(row.get('statuses')) === 0) {\n return 'N/A';\n }\n\n let innerHtml = '';\n _.each(row.get('statuses'), _.bind(function (status) {\n let statusPercent = (status.count / row.get('totalParticipants')) * 100,\n textColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(status.backgroundColor);\n innerHtml += '<div class=\"progress-bar\" role=\"progressbar\" title=\"' + status.status + ' (' + status.count + ')\" style=\"background-color: ' + status.backgroundColor + ';color: ' + textColor + ';width:' + statusPercent + '%\">\\n' +\n status.count +\n '</div>';\n }, this));\n let outerHtml = '<div class=\"progress\">';\n outerHtml += innerHtml + '</div>';\n return outerHtml;\n },\n \"title\": \"Status\",\n \"orderable\": false,\n \"width\": \"50%\"\n });\n break;\n case 'participantsCount':\n columns.push({\n \"columnData\": \"participantCount\",\n \"data\": \"attributes.totalParticipants\",\n \"title\": \"Contacts\",\n \"width\": \"40px\",\n \"render\": function (data) {\n return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n }\n });\n break;\n }\n }, this));\n return columns;\n },\n getChildTableType: function () {\n return PJQ.constants.projectMessaging.views.BIDPKGS_CONT;\n },\n getChildTableSettings: function () {\n return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.userSettings;\n childOpts.projectMessagingView = this.options.projectMessagingView;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n return new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n },\n onBidPackageCountChanged: function (e) {\n let $target = $(e.currentTarget),\n count = $target.val().toLowerCase(),\n row = this.getRow($target.closest('tr')),\n data = row.data();\n\n data.set('count', count);\n this.updateBidPackageNotesCount(data.get('bidPackageId'), data.get('notes'), count);\n },\n onBidPackageNotesChanged: function (e) {\n let $target = $(e.currentTarget),\n notes = $target.val(),\n row = this.getRow($target.closest('tr')),\n data = row.data();\n\n data.set('notes', notes);\n this.updateBidPackageNotesCount(data.get('bidPackageId'), notes, data.get('count'));\n },\n updateBidPackageNotesCount: function (bidPackageId, notes, count) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.get('projectId')\n },\n {\n endpoint: 'bidpackages',\n value: bidPackageId\n },\n ]),\n data: {\n notes: notes,\n count: count\n }\n }).put().done(_.bind(function (response) {\n PJQ.notifications.notify.successNotify({\n message: 'Bid Package Successfully Updated'\n });\n }, this));\n },\n getRowChildData: function (row) {\n let searchFor = this.options.projectMessagingView.getSearchFor(),\n statusFilter = [...this.options.projectMessagingView.options.filter.status];\n\n if (this.options.projectMessagingView.options.filter.isDelivered)\n statusFilter.push('DELIVERED');\n\n if (this.options.projectMessagingView.options.filter.isOpened)\n statusFilter.push('OPENED');\n\n if (this.options.projectMessagingView.options.filter.isVisited)\n statusFilter.push('VISITED');\n\n if (this.options.projectMessagingView.options.filter.isDownloaded)\n statusFilter.push('DOWNLOADS');\n\n if (this.options.projectMessagingView.options.filter.isPrintOrder)\n statusFilter.push('ORDERS ONLY');\n\n if (this.options.projectMessagingView.options.filter.publicPrivate)\n statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n project: PJQ.app.session.project,\n view: this.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP ? PJQ.constants.projectMessaging.views.COMP : PJQ.constants.projectMessaging.views.CONT,\n groupIdList: '',\n statusFilter: _.uniq(statusFilter).join(','),\n searchFor: searchFor,\n isPerGroup: false,\n withCustomFields: this.getChildTableSettings().hasCustomFields,\n bidPackageId: row.data().get('bidPackageId') > 0 ? row.data().get('bidPackageId') : -1\n });\n },\n selectAll: function (e) {\n let loader = new PJQ.Loader($('.nav-body'));\n let isSelected = $(e.currentTarget).prop('checked');\n this.options.projectMessagingView.options.isTradesViewSelectAll = isSelected;\n this.options.projectMessagingView.options.selectedContacts = [];\n if (isSelected) {\n // get company/contact list for project, iterate through it and add any that aren't declined (unless enabledeclined is true)\n this.options.projectMessagingView.getViewData('contact', _.bind(function (data) {\n let enableDeclined = this.options.projectMessagingView.isEnableDeclined();\n _.each(data.models, _.bind(function (model) {\n\n\n let isDeclined = (this.options.projectStatusList[1].toString().split(',')[0].toLowerCase() === model.get('status').toString().toLowerCase());\n if ((enableDeclined || !isDeclined) && !model.attributes.isBlacklisted && !model.attributes.isCompanyBlacklisted)\n this.options.projectMessagingView.options.selectedContacts.push(model.id);\n\n\n }, this));\n\n this.options.projectMessagingView.options.selectedContacts = _.uniq(this.options.projectMessagingView.options.selectedContacts);\n this.options.projectMessagingView.renderContactStats();\n this.options.projectMessagingView.renderView();\n loader.remove();\n }, this), {isPerGroup: true});\n } else {\n // clear any visible checkboxes in sub-grids\n this.$('.select-company,.select-contact').prop('checked', false);\n loader.remove();\n }\n\n this.options.projectMessagingView.renderContactStats();\n }\n});\n\nPJQ.views.projects.ProjectMessagingMessagesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n events: {\n 'click i.message-toggle-row': 'childRowToggle',\n 'click .btn-show-message': 'showRowFullMessage',\n 'click .btn-view-attachments': 'viewAttachments'\n },\n getContextMenuItems: function () {\n return [\n {\n name: 'Resend Message',\n iconClass: 'fal fa-paper-plane',\n onClick: _.bind(function (row) {\n new PJQ.views.modals.YesNo({\n header: \"Resend Message\",\n body: \"Are you sure you want to resend this message to all participants?\",\n onYes: _.bind(function () {\n let enableDeclined = this.options.projectMessagingView.isEnableDeclined();\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'projectmessages',\n value: row.data().attributes.projectMessageId\n },\n {\n endpoint: 'resend'\n }\n ], [\n {\n parameter: 'resendAll',\n value: true\n },\n {\n parameter: 'enableDeclined',\n value: enableDeclined\n }\n ])\n }).post().done(_.bind(function (data) {\n PJQ.notifications.notify.successNotify({\n message: 'Message is being resent.'\n });\n }, this));\n\n }, this)\n });\n\n\n }, this),\n isShown: _.bind(function (row) {\n return ((this.options.view === PJQ.constants.projectMessaging.views.MSGCONT) && (row.data().get('projectMessageId') > 0));\n }, this)\n },\n {\n name: 'Copy Message',\n iconClass: 'fal fa-copy',\n onClick: _.bind(function (row) {\n this.options.projectMessagingView.copyProjectMessage(row.data().get('projectMessageId'));\n }, this),\n isShown: _.bind(function (row) {\n return (row.data().get('projectMessageId') > 0);\n }, this)\n },\n {\n name: 'Export Message',\n iconClass: 'fal fa-copy',\n onClick: _.bind(function (row) {\n this.export(row.data());\n }, this),\n isShown: _.bind(function (row) {\n return (row.data().get('projectMessageId') > 0);\n }, this)\n },\n {\n name: 'Delete Message',\n iconClass: 'fal fa-trash',\n onClick: _.bind(function (row) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Message\",\n body: \"Are you sure you want to delete this message?\",\n onDelete: _.bind(function () {\n this.options.projectMessagingView.deleteProjectMessage(row.data().get('projectMessageId'), _.bind(this.options.projectMessagingView.renderView, this.options.projectMessagingView));\n }, this)\n });\n }, this),\n isShown: _.bind(function (row) {\n return (row.data().get('projectMessageId') > 0);\n }, this)\n }\n ];\n },\n export: function (message) {\n PJQ.app.session.fetchProjectMessageEmailTemplates(_.bind(function (templates) {\n this.options.project = PJQ.app.session.project;\n _.each(templates.models, function (temp) {\n if (temp.get('templateName') === message.get('templateName')) {\n this.tempKey = temp.get('templateKey');\n }\n }, this)\n\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.get('projectId')\n },\n {\n endpoint: 'projectmessagepreview'\n }\n ], [\n {\n parameter: \"templateKey\",\n value: this.tempKey\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint\n }).post().done(_.bind(function (data) {\n this.options.tokens = data\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.get('projectId')\n },\n {\n endpoint: 'sendprojectmessages',\n value: message.get('projectMessageId')\n },\n {\n endpoint: 'export'\n }\n ]),\n data: {\n responseType: encodeURIComponent(this.options.tokens.projectMessage.responseType),\n responseDueDate: this.options.tokens.projectMessage.responseDueDate,\n templateKey: this.tempKey\n }\n }).post().success(_.bind(function (data) {\n PJQ.files.downloadFile(data.url, {isEndpoint: false});\n }, this));\n }, this)).fail(function () {\n });\n }, this));\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [],\n includeColumns = ['templateName', 'message', 'bidsDue', 'responseType', 'broadcastStatus', 'messageStatus', 'totalParticipants', 'sentBy', 'sentOn'];\n\n if (!includeAllColumns) {\n\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n columns.push({\n \"width\": '15px',\n \"columnData\": \"messageContacts\",\n \"data\": null,\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '<i class=\"fal fa-plus-circle message-toggle-row\" data-type=\"projectMessageId\" data-id=\"' + row.get('projectMessageId') + '\"></i>';\n }\n });\n }\n\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'templateName':\n columns.push({\n \"columnData\": \"templateName\",\n \"data\": \"attributes.templateName\",\n \"title\": \"Type\"\n });\n break;\n case 'message':\n columns.push({\n \"columnData\": \"message\",\n \"data\": \"attributes.message\",\n \"title\": \"Message\",\n \"orderable\": false,\n \"render\": function (data, type, row) {\n let html = '<div class=\"d-flex align-items-center\">';\n if (row.attributes.message && row.attributes.message !== \"\") {\n html += '<div class=\"flex-fill\">';\n if (_.size(row.attributes.message) > 40) {\n html += '<a href=\"javascript:void(0)\" data-id=\" ' + row.attributes.projectMessageId + '\" class=\"btn-show-message\" title=\"Click to view full message\">' + row.attributes.message.substr(0, 40) + '...</a>'\n } else {\n html += data;\n }\n html += '</div>';\n\n if (_.size(row.attributes.attachments) > 0) {\n html += '<div class=\"\"><button type=\"button\" class=\"btn btn-transparent-dark btn-view-attachments\" title=\"View ' + _.size(row.attributes.attachments) + ' Attachments\" ><i class=\"fal fa-sm fa-paperclip text-dark\"></i></button></div>';\n }\n }\n html += '</div>';\n return html;\n }\n });\n break;\n case 'bidsDue':\n columns.push({\n \"columnData\": \"bidsDue\",\n \"data\": \"attributes.bidsDue\",\n \"title\": \"Response Due\",\n \"render\": function (data, type, row) {\n let value = '';\n if (data) {\n value = PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n return value;\n }\n });\n break;\n case 'responseType':\n columns.push({\n \"columnData\": \"responseType\",\n \"data\": \"attributes.responseType\",\n \"title\": \"Response Type\",\n \"render\": function (data, type, row) {\n let value = 'N/A';\n if (data === 'PROJECT')\n value = 'Accept/Decline';\n if (data === 'MESSAGE')\n value = 'Yes/No';\n return value;\n }\n });\n break;\n case 'broadcastStatus':\n columns.push({\n \"columnData\": \"broadcastStatus\",\n \"render\": function (data, type, row) {\n if (type === 'sort' || type === 'type')\n return '';\n\n let innerHtml = '';\n _.each(row.get('broadcastStatuses'), _.bind(function (status) {\n let statusPercent = (status.count / row.get('totalParticipants')) * 100,\n foregroundColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(status.backgroundColor);\n innerHtml += '<div class=\"progress-bar\" role=\"progressbar\" title=\"' + status.status + ' (' + status.count + ')\" style=\"background-color: ' + status.backgroundColor + ';color: ' + foregroundColor + ';width:' + statusPercent + '%\">\\n' +\n status.count +\n '</div>';\n }, this));\n let outerHtml = '<div class=\"progress\">';\n outerHtml += innerHtml + '</div>';\n return outerHtml;\n },\n \"title\": \"Broadcast Status\",\n \"orderable\": false\n });\n break;\n case 'messageStatus':\n columns.push({\n \"columnData\": \"messageStatus\",\n \"render\": function (data, type, row) {\n if (type === 'sort' || type === 'type')\n return '';\n\n let innerHtml = '';\n _.each(row.get('messageStatuses'), _.bind(function (status) {\n let statusPercent = (status.count / row.get('totalParticipants')) * 100,\n foregroundColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(status.backgroundColor);\n innerHtml += '<div class=\"progress-bar\" role=\"progressbar\" title=\"' + status.status + ' (' + status.count + ')\" style=\"background-color: ' + status.backgroundColor + ';color: ' + foregroundColor + ';width:' + statusPercent + '%\">\\n' +\n status.count +\n '</div>';\n }, this));\n let outerHtml = '<div class=\"progress\">';\n outerHtml += innerHtml + '</div>';\n return outerHtml;\n },\n \"title\": \"Response\",\n \"orderable\": false\n });\n break;\n case 'totalParticipants':\n columns.push({\n \"columnData\": \"totalParticipants\",\n \"data\": \"attributes.totalParticipants\",\n \"title\": \"Contacts\",\n \"render\": function (data) {\n return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n }\n });\n break;\n case 'sentOn':\n columns.push(\n // There is no way to modify messages view columns currently, so just add sentBy column with sentOn.\n // If we ever add a way to modify columns for messages then we'll want to add a case for it.\n {\n \"columnData\": \"sentBy\",\n \"data\": \"attributes.sentBy\",\n \"title\": \"Sent By\",\n \"render\": function (data, type, row) {\n let result = '';\n if (data != null && data.id !== 0) {\n return PJQ.helpers.contacts.getContactAnchor({contact: data});\n } else {\n result = 'N/A';\n }\n return result;\n }\n },\n {\n \"columnData\": \"sentOn\",\n \"data\": \"attributes.sentOn\",\n \"title\": \"Sent On\",\n \"render\": function (data, type, row) {\n\n if (type === 'sort')\n return data ? data : '2222-01-01T01:01:01.01Z';\n\n let value = '';\n if (data) {\n value = PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, false);\n }\n return value;\n }\n });\n break;\n }\n }, this));\n\n return columns;\n },\n viewAttachments: function (e) {\n let tr = $(e.currentTarget).closest('tr'),\n row = this.getRow(tr);\n\n new PJQ.views.projects.dashboard.ViewMessageAttachmentsModal({\n attachments: row.data().get('attachments')\n });\n },\n showRowFullMessage: function (e) {\n let $target = $(e.currentTarget),\n message = _.find(this.options.data, function (data) {\n return data.attributes.projectMessageId === parseInt($target.data('id'));\n });\n e.target.outerHTML = message.attributes.message;\n },\n getChildTableType: function () {\n return PJQ.constants.projectMessaging.views.MSGCONT_CONT;\n },\n getChildTableSettings: function () {\n return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.userSettings;\n childOpts.projectMessagingView = this.options.projectMessagingView;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n return new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n },\n getRowChildData: function (row) {\n let searchFor = this.options.projectMessagingView.getSearchFor(),\n statusFilter = [...this.options.projectMessagingView.options.filter.status];\n\n if (this.options.projectMessagingView.options.filter.isDelivered)\n statusFilter.push('DELIVERED');\n\n if (this.options.projectMessagingView.options.filter.isOpened)\n statusFilter.push('OPENED');\n\n if (this.options.projectMessagingView.options.filter.isVisited)\n statusFilter.push('VISITED');\n\n if (this.options.projectMessagingView.options.filter.isDownloaded)\n statusFilter.push('DOWNLOADS');\n\n if (this.options.projectMessagingView.options.filter.isPrintOrder)\n statusFilter.push('ORDERS ONLY');\n\n if (row.data().get('projectMessageId') === 0)\n statusFilter.push('UNSENT');\n\n if (this.options.projectMessagingView.options.filter.publicPrivate)\n statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n project: PJQ.app.session.project,\n view: PJQ.constants.projectMessaging.views.CONT,\n projectMessageId: row.data().get('projectMessageId'),\n responseType: row.data().get('responseType'),\n statusFilter: _.uniq(statusFilter).join(','),\n searchFor: searchFor,\n withCustomFields: this.getChildTableSettings().hasCustomFields\n });\n },\n afterDataTableRenderChild: function () {\n if (this.options.projectMessagingView && this.options.projectMessagingView.options.viewProjectMessageId) {\n let page_info = this.dataTable.page.info(),\n new_row_index = this.dataTable.row(_.bind(function (idx, data, node) {\n return data.get('projectMessageId') == this.options.projectMessagingView.options.viewProjectMessageId;\n }, this)).index(),\n row_position = this.dataTable.rows({search: 'applied'})[0].indexOf(new_row_index);\n\n if (!(row_position >= page_info.start && row_position < page_info.end) && row_position > -1) {\n let page_to_display = Math.floor(row_position / this.dataTable.page.len());\n this.dataTable.page(page_to_display).draw(false);\n }\n\n if (row_position > -1)\n this.childRowToggle({currentTarget: this.$dataTable.find('i.message-toggle-row[data-id=\"' + this.options.projectMessagingView.options.viewProjectMessageId + '\"]')});\n\n this.options.projectMessagingView.options.viewProjectMessageId = null;\n }\n }\n});\n\nPJQ.views.projects.ProjectMessagingResponsesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n events: {\n 'click i.response-toggle-row': 'childRowToggle'\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [], includeColumns = ['status', 'totalParticipants'];\n\n if (!includeAllColumns) {\n\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n columns.push({\n \"width\": '15px',\n \"columnData\": \"responseContacts\",\n \"data\": null,\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '<i class=\"fal fa-plus-circle response-toggle-row\" data-type=\"status\" data-id=\"' + row.get('status') + '\"></i>';\n }\n });\n }\n\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'status':\n columns.push({\n \"columnData\": \"status\",\n \"data\": \"attributes.status\",\n \"title\": \"Response\",\n \"orderable\": false\n });\n break;\n case 'totalParticipants':\n columns.push({\n \"columnData\": \"totalParticipants\",\n \"data\": \"attributes.totalParticipants\",\n \"title\": \"Contacts\",\n \"orderable\": false,\n \"render\": function (data) {\n return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n }\n });\n break;\n }\n }, this));\n\n return columns;\n },\n getChildTableType: function () {\n return this.options.view + '-contact';\n },\n getChildTableSettings: function () {\n return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.userSettings;\n childOpts.projectMessagingView = this.options.projectMessagingView;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n return new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n },\n getRowChildData: function (row) {\n let searchFor = this.options.projectMessagingView.getSearchFor(),\n statusFilter = [];\n\n statusFilter.push(row.data().get('status'));\n\n if (this.options.projectMessagingView.options.filter.isDelivered)\n statusFilter.push('DELIVERED');\n\n if (this.options.projectMessagingView.options.filter.isOpened)\n statusFilter.push('OPENED');\n\n if (this.options.projectMessagingView.options.filter.isVisited)\n statusFilter.push('VISITED');\n\n if (this.options.projectMessagingView.options.filter.isDownloaded)\n statusFilter.push('DOWNLOADS');\n\n if (this.options.projectMessagingView.options.filter.isPrintOrder)\n statusFilter.push('ORDERS ONLY');\n\n if (this.options.projectMessagingView.options.filter.publicPrivate)\n statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n project: PJQ.app.session.project,\n view: PJQ.constants.projectMessaging.views.CONT,\n statusFilter: _.uniq(statusFilter).join(','),\n searchFor: searchFor,\n withCustomFields: this.getChildTableSettings().hasCustomFields\n });\n }\n});\n\nPJQ.views.projects.ProjectMessagingCompanyDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n events: {\n 'click i.company-toggle-row': 'childRowToggle',\n 'change select.company-project-status': 'onStatusChanged',\n 'click .btn-grade-project-contact-company': 'gradeContactCompany',\n 'change .select-company': 'companySelectChanged',\n 'mouseover .comment-company': 'mouseoverComments',\n 'mouseleave .comment-company': 'mouseleaveComments',\n 'click .btn-comment-company': 'manageComments',\n 'click .btn-add-comment-company': 'addComment',\n 'change .select-all-companies': 'companySelectAllChanged',\n \"click .btn-show-groups\": \"showRowGroups\"\n },\n getContextMenuItems: function () {\n return [\n {\n name: 'Upload Bid Docs',\n iconClass: 'fal fa-cloud-upload',\n onClick: _.bind(function (row) {\n new PJQ.views.projects.UploadParticipantBidDocumentsModal({\n contact: row.data(),\n onSave: _.bind(function () {\n this.options.projectMessagingView.renderView();\n }, this)\n });\n }, this),\n isShown: _.bind(function () {\n return PJQ.app.session.project.hasPermission('messaging.canManage') && this.options.view === PJQ.constants.projectMessaging.views.COMP;\n }, this)\n },\n {\n name: 'Remove Company',\n iconClass: 'fal fa-trash',\n isDanger: true,\n onClick: _.bind(function (row) {\n new PJQ.views.projects.DeleteProjectParticipants({\n title: \"Remove Company\",\n body: \"Are you sure you want to remove this company from this project?\",\n onDelete: _.bind(function (isRemoveFromAB) {\n this.options.projectMessagingView.deleteContacts(_.union(row.data().get('selectableContacts'), row.data().get('declinedContacts')), isRemoveFromAB);\n }, this)\n });\n }, this),\n isShown: _.bind(function (row) {\n return PJQ.app.session.project.hasPermission('messaging.canManage');\n }, this)\n }\n ];\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [],\n includeColumns = ['icons', 'companyName', 'unionStatus', 'sector', 'certifications', 'groupListDisplay', 'status', 'bidAmountTotal', 'commentsCompany', 'grade', 'contactCount'];\n _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n includeColumns.push('companyCustomField_' + customField.id);\n }, this));\n\n if (!includeAllColumns) {\n\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n if (this.options.projectMessagingView && !this.options.projectMessagingView.options.canViewBidAmount) {\n includeColumns = _.filter(includeColumns, function(column) { return column != 'bidAmountTotal' });\n }\n\n columns.push({\n \"columnData\": 'selectCompany',\n \"title\": '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"select-all-companies\" /><div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\"> </label></div></div>',\n \"width\": \"20px\",\n \"data\": \"null\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data, type, row) {\n let selectedContacts = _.filter(row.get('selectableContacts'), _.bind(function (contact) {\n return this.options.projectMessagingView.isContactSelected(contact);\n }, this));\n\n _.each(row.get('declinedContacts'), _.bind(function (contact) {\n if (this.options.projectMessagingView.isContactSelected(contact))\n selectedContacts.push(contact);\n }, this));\n\n let isSelected = selectedContacts.length > 0,\n isIndeterminate = isSelected && (selectedContacts.length < _.size(row.get('selectableContacts')) + _.size(row.get('declinedContacts'))),\n enableDeclined = this.options.projectMessagingView.isEnableDeclined(),\n isDisabled = !enableDeclined && (this.options.projectStatusList[1].toString().split(',')[0].toLowerCase() === row.get('status').toString().toLowerCase());\n return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-icon p-smooth p-has-indeterminate fs-18 m-0\">' +\n '<input type=\"checkbox\" ' + (isSelected ? ' checked ' : '') + (isDisabled ? ' disabled ' : '') + (isIndeterminate ? ' indeterminate ' : '') + ' class=\"select-company ' + (isIndeterminate ? ' indeterminate ' : '') + '\" />' +\n '<div class=\"state\"><i class=\"icon fal fa-check-double\"></i> <label class=\"wd-0\"> </label></div>' +\n '<div class=\"state p-is-indeterminate\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\"> </label></div>' +\n '</div></div>');\n }, this)\n });\n\n columns.push({\n \"columnData\": \"groupCompanyContacts\",\n \"data\": null,\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '<i class=\"fal fa-plus-circle company-toggle-row\" data-type=\"contactCompanyId\" data-id=\"' + row.get('contactCompanyId') + '\"></i>';\n }\n });\n }\n\n let distanceThreshold = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_DISTANCE_ICON_THRESHOLD),\n canManage = PJQ.app.session.project.hasPermission('messaging.canManage');\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'icons':\n columns.push({\n \"columnData\": \"icons\",\n \"data\": null,\n \"title\": 'Info',\n \"width\": '50px',\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let icons = [];\n\n // directory stuff\n if (row.get('networkVerificationLevel') === 1)\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/select_network_icon.png' title='Select Network Member' />\");\n else if (row.get('networkVerificationLevel') === 2)\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/verified_network_icon.png' title='Verified Network Member' />\");\n else if (row.get('isDirectoryContact'))\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/directory_sub.png' title='Pantera Directory Member' />\");\n\n if (row.get('hasPrequal')) {\n icons.push(\"<i class='fas fa-check text-gold fs-18 mr-1' title='Prequalification Available'></i>\");\n }\n\n let dist = row.get('distance');\n if (typeof distanceThreshold === 'number' && dist != null && dist <= distanceThreshold) {\n icons.push(\"<i class='fas fa-map-marker-check text-orange fs-18 mr-1' title='Within \" + distanceThreshold.toString() + \" miles'></i>\");\n }\n\n return '<div class=\"d-flex justify-content-center\">' + icons.join('') + '</div>';\n }, this)\n });\n break;\n case 'companyName':\n columns.push({\n \"columnData\": \"companyName\",\n \"data\": \"attributes.companyName\",\n \"title\": \"Company\",\n });\n break;\n case 'unionStatus':\n columns.push({\n \"columnData\": 'unionStatus',\n \"title\": 'Union Status',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isUnion'))\n status.push('Union');\n if (row.get('isNonUnion'))\n status.push('Non-Union');\n if (row.get('isPrevailingWage'))\n status.push('Prevailing Wage');\n\n if (status.length === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'sector':\n columns.push({\n \"columnData\": 'sector',\n \"title\": 'Labor Sector',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isPublicSector'))\n status.push('Public');\n if (row.get('isPrivateSector'))\n status.push('Private');\n\n if (status.length === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'certifications':\n columns.push({\n \"columnData\": 'certifications',\n \"title\": 'Certification',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isDBE'))\n status.push('DBE');\n if (row.get('isDVBE'))\n status.push('DVBE');\n if (row.get('isMBE'))\n status.push('MBE');\n if (row.get('isSBE'))\n status.push('SBE');\n if (row.get('isSDVBE'))\n status.push('SDVBE');\n if (row.get('isWBE'))\n status.push('WBE');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'groupListDisplay':\n columns.push({\n \"columnData\": \"groupListDisplay\",\n \"data\": \"attributes.groupListDisplay\",\n \"title\": \"Trades\",\n \"render\": function (data) {\n let groupDisplayLimit = 0, groupArray = data ? data.split(',') : [];\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY)) {\n groupDisplayLimit = parseInt(PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY));\n }\n\n if (groupDisplayLimit > 0 && (_.size(groupArray) > groupDisplayLimit)) {\n return _.rest(groupArray.reverse(), _.size(groupArray) - groupDisplayLimit).reverse().join(', ') + \" <br>\" +\n \"<a href='javascript:void(0)' class='btn-show-groups' title='Click to show complete list of Trades'> \" + (_.size(groupArray) - groupDisplayLimit) + \" more item(s)</a>\";\n } else {\n return data;\n }\n }\n });\n break;\n case 'status':\n columns.push({\n \"columnData\": 'status',\n \"data\": {\n \"_\": function (row) {\n return row.get('status') ? row.get('status') : 'PENDING';\n },\n \"display\": function (row) {\n\n if (canManage) {\n let html = '<select class=\"form-control company-project-status\" style=\"min-width:100px;\">',\n statuses = PJQ.app.session.project.getProjectStatusList();\n statuses.unshift(['PENDING', true]);\n _.each(statuses, _.bind(function (status, index) {\n html += '<option value=\"' + status[0] + '\"' + (status[0] === row.get('status') ? ' SELECTED' : '') + '>' + status[0] + '</option>';\n }, this));\n html += '</select>';\n return html;\n }\n\n let status = row.get('status');\n return '<span>' + (_.size(status) > 0 ? status.toUpperCase() : 'PENDING') + '</span>';\n }\n },\n \"title\": 'Status',\n });\n break;\n case 'bidAmountTotal':\n columns.push({\n \"columnData\": \"bidAmountTotal\",\n \"data\": \"attributes.bidAmount\",\n \"title\": \"Bid Total\",\n \"render\": function (data, type, row) {\n return \"<span class='bid-amount-total'>\" + PJQ.helpers.formatHelpers.formatCurrency(row.get(\"bidAmount\")) + \"</span>\";\n }\n });\n break;\n case 'commentsCompany':\n columns.push({\n \"columnData\": 'commentsCompany',\n \"title\": 'Comments',\n \"render\": function (data, type, row) {\n let html = '<div style=\"min-width:150px;\" class=\"d-flex align-items-center\">';\n html += '<div class=\"flex-fill comment-company ' + (row.get('lastCompanyComment') ? '' : 'text-muted') + '\">' + (row.get('lastCompanyComment') ? row.get('lastCompanyComment').comment : 'No Comments Added') + '</div>';\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-add-comment-company\" title=\"Add Comment\"><i class=\"far fa-comment-plus text-dark\"></i></button>';\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-comment-company\" title=\"Comments\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"far fa-comments text-dark\"></i></button>';\n html += '</div>';\n return html;\n }\n });\n break;\n case 'grade':\n columns.push({\n \"columnData\": 'grade',\n \"title\": 'Grade',\n \"width\": \"40px\",\n \"render\": function (data, type, row) {\n let html = '<span class=\"mr-1\">' + row.get('gradeAverage').toString() + '</span>';\n //todo: add preference for this\n if (PJQ.app.session.get('portalId') !== 506) {\n html += (row.get('grade') !== 0) ? '<button type=\"button\" class=\"btn btn-transparent-dark btn-grade-project-contact-company\" title=\"Review Grade\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"fas fa-star text-gold\"></i></button>' : '<button type=\"button\" class=\"btn btn-transparent-dark btn-grade-project-contact-company\" title=\"Grade\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"far fa-star text-muted\"></i></button>';\n }\n return html;\n }\n });\n break;\n case 'contactCount':\n columns.push({\n \"columnData\": \"contactCount\",\n \"data\": \"attributes.contactCount\",\n \"title\": \"Contacts\",\n \"render\": function (data) {\n return '<div class=\"text-align-center\">' + data.toString() + '</div>';\n }\n });\n break;\n }\n\n if (columnName.startsWith('companyCustomField_')) {\n let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n if (customField.id === customFieldId)\n columns.push(this.getCustomFieldColumn(customField, true));\n }, this));\n }\n }, this));\n\n return columns;\n },\n afterDataTableRenderChild: function () {\n this.$el.find('.select-company.indeterminate').prop('indeterminate', 'true');\n },\n getChildTableType: function () {\n return this.options.view + '-contact';\n },\n getChildTableSettings: function () {\n return this.options.projectMessagingView.options.settings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.userSettings;\n childOpts.projectMessagingView = this.options.projectMessagingView;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n return new PJQ.views.projects.ProjectMessagingContactDataTable(childOpts);\n },\n getRowChildData: function (row) {\n let searchFor = this.options.projectMessagingView.getSearchFor(),\n statusFilter = [...this.options.projectMessagingView.options.filter.status];\n\n if (this.options.projectMessagingView.options.filter.isDelivered)\n statusFilter.push('DELIVERED');\n\n if (this.options.projectMessagingView.options.filter.isOpened)\n statusFilter.push('OPENED');\n\n if (this.options.projectMessagingView.options.filter.isVisited)\n statusFilter.push('VISITED');\n\n if (this.options.projectMessagingView.options.filter.isDownloaded)\n statusFilter.push('DOWNLOADS');\n\n if (this.options.projectMessagingView.options.filter.isPrintOrder)\n statusFilter.push('ORDERS ONLY');\n\n if (this.options.projectMessagingView.options.filter.publicPrivate)\n statusFilter.push(this.options.projectMessagingView.options.filter.publicPrivate);\n\n _.each(this.options.projectMessagingView.options.filter.laborStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n _.each(this.options.projectMessagingView.options.filter.minorityStatus, _.bind(function (status) {\n statusFilter.push('IS_' + status);\n }, this));\n\n return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n project: PJQ.app.session.project,\n view: PJQ.constants.projectMessaging.views.CONT,\n contactCompanyId: row.data().get('contactCompanyId'),\n statusFilter: _.uniq(statusFilter).join(','),\n searchFor: searchFor,\n groupIdList: row.data().collection.options.groupIdList,\n isPerGroup: row.data().collection.options.isPerGroup,\n withCustomFields: this.getChildTableSettings().hasCustomFields\n });\n },\n statusChanged: function (statuses, parentTR) {\n let row = this.getRow(parentTR);\n switch (this.options.view) {\n case PJQ.constants.projectMessaging.views.COMP:\n // this view cannot have a group status, so update the regular status column and redraw the row.\n row.data().set('status', statuses.companyStatus);\n break;\n case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP:\n // this view must have a group status\n row.data().set('status', statuses.companyGroupStatus);\n break;\n }\n row.invalidate().draw();\n this.setRowStyle(parentTR, row.data().get('status'), row.data().get('isBlacklisted') || row.data().get('isCompanyBlacklisted'));\n },\n companySelectChanged: function (e) {\n let tr = $(e.currentTarget).closest('tr'),\n row = this.getRow(tr);\n\n // if we were partially checked, force ourself to be unchecked\n if ($(e.currentTarget).hasClass('indeterminate'))\n $(e.currentTarget).prop('checked', false).prop('indeterminate', false).removeClass('indeterminate');\n\n if ($(e.currentTarget).prop('checked')) {\n if (row.data().get('declinedContacts').length > 0)\n $(e.currentTarget).prop('checked', false).prop('indeterminate', true).addClass('indeterminate');\n else\n $(e.currentTarget).prop('indeterminate', false).removeClass('indeterminate');\n\n if (_.size(row.data().get('selectableContacts')) > 0)\n this.options.projectMessagingView.addSelectedContacts(row.data().get('selectableContacts'));\n else\n $(e.currentTarget).prop('checked', false);\n\n if (this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n let groupId = parseInt(row.data().collection.options.groupIdList), contactGroups = [];\n _.each(row.data().get('selectableContacts'), _.bind(function (contact) {\n contactGroups.push({contactId: contact, groupId: groupId});\n }, this));\n this.options.projectMessagingView.addSelectedContactGroups(contactGroups);\n }\n } else {\n this.options.projectMessagingView.removeSelectedContacts(_.union(row.data().get('selectableContacts'), row.data().get('declinedContacts')));\n\n if (this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n let groupId = parseInt(row.data().collection.options.groupIdList), contactGroups = [];\n _.each(_.union(row.data().get('selectableContacts'), row.data().get('declinedContacts')), _.bind(function (contact) {\n contactGroups.push({contactId: contact, groupId: groupId});\n }, this));\n this.options.projectMessagingView.removeSelectedContactGroups(contactGroups);\n }\n }\n\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n if (row.data().get('contactCompanyId') !== childDT.$el.data('id'))\n return;\n\n _.each(childDT.$el.find('.select-contact'), _.bind(function (input) {\n let childRow = childDT.getRow($(input).closest('tr'));\n $(input).prop('checked', this.options.projectMessagingView.isContactSelected(childRow.data().get('contactId')));\n }, this));\n\n }, this));\n\n },\n companySelectAllChanged: function (e) {\n let projectStatusList = PJQ.app.session.project.getProjectStatusList(),\n isChecked = $(e.currentTarget).prop('checked'),\n isEnableDeclined = this.options.projectMessagingView.isEnableDeclined(), selectedContacts = [];\n\n _.each(this.dataTable.data(), _.bind(function (row) {\n if (isChecked) {\n if (!row.attributes.isBlacklisted)\n $.merge(selectedContacts, row.attributes.selectableContacts);\n\n if (isEnableDeclined)\n $.merge(selectedContacts, row.attributes.declinedContacts);\n } else {\n $.merge(selectedContacts, row.attributes.selectableContacts);\n $.merge(selectedContacts, row.attributes.declinedContacts);\n }\n }, this));\n\n let selectedContactGroups = [], isGroupsView = false;\n if (this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n let groupId = parseInt(this.options.data[0].collection.options.groupIdList);\n _.each(selectedContacts, _.bind(function (contact) {\n selectedContactGroups.push({contactId: contact, groupId: groupId});\n }, this));\n isGroupsView = true;\n }\n\n if (isChecked) {\n this.options.projectMessagingView.addSelectedContacts(selectedContacts);\n\n if (isGroupsView)\n this.options.projectMessagingView.addSelectedContactGroups(selectedContactGroups);\n } else {\n this.options.projectMessagingView.removeSelectedContacts(selectedContacts);\n\n if (isGroupsView)\n this.options.projectMessagingView.removeSelectedContactGroups(selectedContactGroups);\n }\n\n _.each(this.$dataTable.find('tbody tr[role=\"row\"]'), _.bind(function (tr) {\n let row = this.getRow(tr), input = $(tr).find('input.select-company');\n\n if (input.length === 0)\n return;\n\n // if is declined, skip it unless enable declined is turned on\n $(input).prop('indeterminate', false).removeClass('indeterminate');\n if ($(e.currentTarget).prop('checked') === false || (!isEnableDeclined && projectStatusList[1].toString().split(',')[0].toLowerCase() === row.data().get('status').toString().toLowerCase()) || _.size(selectedContacts) == 0)\n $(input).prop('checked', false);\n else {\n $(input).prop('checked', $(e.currentTarget).prop('checked'));\n\n if (row.data().get('declinedContacts').length > 0 && !isEnableDeclined)\n $(input).prop('indeterminate', true).addClass('indeterminate');\n }\n\n\n }, this));\n\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n _.each(childDT.$el.find('.select-contact'), _.bind(function (input) {\n let childRow = childDT.getRow($(input).closest('tr'));\n $(input).prop('checked', this.options.projectMessagingView.isContactSelected(childRow.data().get('contactId')));\n }, this));\n }, this));\n\n this.refresh(false);\n },\n createdRow: function (row, data, dataIndex) {\n this.setRowStyle(row, data.attributes.status, data.attributes.isBlacklisted)\n },\n setRowStyle: function (row, status, isBlacklisted) {\n let statusColor = _.find(this.options.projectMessagingView.options.settings.attributes.statusColors, function (statusColor) {\n return statusColor.status === status\n });\n\n let blackListed = '';\n if (isBlacklisted)\n blackListed = 'text-decoration: line-through !important;';\n\n if (statusColor) {\n let foregroundColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(statusColor.backgroundColor);\n $(row).css({cssText: 'background-color:' + statusColor.backgroundColor + ' !important;' + 'color:' + foregroundColor + ' !important;' + blackListed});\n } else\n $(row).css({cssText: \"background-color: ''; color: '';\" + blackListed});\n },\n showRowGroups: function (e) {\n let target = $(e.currentTarget),\n row = this.getRow(target.closest('tr')),\n data = row.data(),\n groups = data.get('groupListDisplay').split(','),\n groupDisplayLimit = parseInt(PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY));\n target[0].outerHTML = ' ' + _.rest(groups, groupDisplayLimit).join(', ')\n }\n});\n\nPJQ.views.projects.ProjectMessagingContactDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n events: {\n 'click i.contact-toggle-row': 'childRowToggle',\n 'change select.contact-project-status': 'onStatusChanged',\n 'change select.contact-message-status': 'onMessageStatusChanged',\n 'click .btn-grade-project-contact': 'gradeContactCompany',\n 'mouseover .comment-contact,.comment-company': 'mouseoverComments',\n 'mouseleave .comment-contact,.comment-company': 'mouseleaveComments',\n 'click .btn-add-comment-contact,.btn-add-comment-company': 'addComment',\n 'click .btn-comment-contact,.btn-comment-contact-company': 'manageComments',\n 'keyup .contact-bid-amount': 'bidAmountChanged',\n 'blur .contact-bid-amount': 'bidAmountExited',\n 'change .select-contact': 'contactSelectChanged',\n 'change .select-all-contacts': 'contactSelectAllChanged',\n 'click .btn-copy-access-key': 'copyAccessKey',\n 'click .btn-copy-phone': 'copyPhone',\n 'click .btn-copy-email': 'copyEmail',\n \"click .btn-show-groups\": \"showRowGroups\"\n },\n afterDataTableRenderChild: function () {\n PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.contact-bid-amount'), 2);\n },\n getContextMenuItems: function () {\n return [\n {\n name: 'View Contact',\n iconClass: 'fal fa-search',\n onClick: _.bind(function (row) {\n new PJQ.views.contacts.BaseEditContactModal({\n model: new PJQ.models.projectParticipants.ProjectParticipant({\n id: row.data().get('contactId'),\n projectId: PJQ.app.session.project.id,\n }),\n showNotes: true,\n showActive: true\n });\n }, this),\n isShown: _.bind(function (row) {\n return !PJQ.app.session.hasPermission('contacts.isAdmin')\n && (PJQ.app.session.hasPermission('contacts.canView') || PJQ.app.session.project.hasPermission('projectContacts.canView'));\n }, this)\n },\n {\n name: 'Edit Contact',\n iconClass: 'fal fa-pencil',\n onClick: _.bind(function (row) {\n new PJQ.views.contacts.BaseEditContactModal({\n model: new PJQ.models.projectParticipants.ProjectParticipant({\n id: row.data().get('contactId'),\n projectId: PJQ.app.session.project.id\n }),\n isShowAddContact: true,\n showNotes: true,\n showActive: true,\n deleteLabel: 'Remove from Project',\n onDelete: _.bind(function (model) {\n this.options.projectMessagingView.deleteContacts([row.data().get('contactId')], false);\n\n }, this),\n onSave: _.bind(function (model, isNew) {\n if (isNew) {\n this.options.projectMessagingView.renderView();\n return;\n }\n\n let becameInactive = false;\n if (model.get('isBlacklisted') && !row.data().get('isBlacklisted')) {\n becameInactive = true;\n row.data().set('status', this.options.projectStatusList[1].toString().split(',')[0]);\n }\n\n row.data().set('isAutoSelectDisabled', model.get('isAutoSelectDisabled'));\n row.data().set('isBlacklisted', model.get('isBlacklisted'));\n row.data().set('contactTitle', model.get('contactTitle'));\n row.data().set('fax', model.get('fax'));\n row.data().set('cell', model.get('cell'));\n row.data().set('address1', model.get('address1'));\n row.data().set('address2', model.get('address2'));\n row.data().set('city', model.get('city'));\n row.data().set('zip', model.get('zip'));\n row.data().set('state', model.get('state'));\n row.data().set('country', model.get('country'));\n // row.data().set('groupIdList', model.get('groupIdList'));\n // row.data().set('groupListDisplay', model.get('groupListDisplay'));\n row.data().set('isCompanyBlacklisted', model.get('isCompanyBlacklisted'));\n row.data().set('isUnion', model.get('isUnion'));\n row.data().set('isNonUnion', model.get('isNonUnion'));\n row.data().set('isPrevailingWage', model.get('isPrevailingWage'));\n row.data().set('isPublicSector', model.get('isPublicSector'));\n row.data().set('isPrivateSector', model.get('isPrivateSector'));\n row.data().set('isDBE', model.get('isDBE'));\n row.data().set('isDVBE', model.get('isDVBE'));\n row.data().set('isMBE', model.get('isMBE'));\n row.data().set('isSBE', model.get('isSBE'));\n row.data().set('isSDVBE', model.get('isSDVBE'));\n row.data().set('isUDBE', model.get('isUDBE'));\n row.data().set('isVSBE', model.get('isVSBE'));\n row.data().set('isWBE', model.get('isWBE'));\n row.data().set('phone', model.get('phone'));\n row.data().set('phoneExtension', model.get('phoneExtension'));\n row.data().set('companyName', model.get('companyName'));\n row.data().set('contactName', model.get('contactName'));\n row.data().set('distance', model.get('distance'));\n row.data().set('email', model.get('email'));\n row.data().set('notes', model.get('notes'));\n row.data().set('contactCustomFieldValues', model.get('contactCustomFieldValues'));\n row.data().set('companyCustomFieldValues', model.get('companyCustomFieldValues'));\n\n row.invalidate().draw();\n this.setRowStyle(row.node(), row.data().attributes.status, row.data().attributes.isBlacklisted || row.data().attributes.isCompanyBlacklisted);\n\n let removeRow = _.bind(function () {\n let parentRow = this.options.parentDataTable.getRow($(row.node()).parent().closest('tr').prev());\n row.remove().draw();\n\n // remove company if this was the only contact listed\n if (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP &&\n parentRow.data().get('contactCount') === 1) {\n parentRow.remove().draw();\n }\n }, this),\n callback = _.bind(function () {\n if (row.child.isShown()) {\n row.child.hide();\n\n this.childRowToggle({\n currentTarget: row.selector.rows.find('i.contact-toggle-row')[0]\n });\n }\n\n if (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP ||\n this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT)) {\n\n let groupId = parseInt(row.data().collection.options.groupIdList);\n if (groupId === 0) {\n if (_.size(model.get('groups')) > 0) {\n // they had no groups but now have groups, remove from no group\n removeRow();\n }\n } else if (_.size(_.filter(model.get('groups'), function (group) {\n return group.groupId === groupId\n })) === 0) {\n // they no longer have the group of the row they are being edited in\n removeRow();\n }\n }\n }, this);\n\n if (becameInactive && this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP)) {\n // update parent status and redraw\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'participants',\n value: row.data().get('contactId')\n\n },\n {\n endpoint: 'companystatus'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint\n }).get().done(_.bind(function (data) {\n let parentTR = $(row.node()).parent().closest('tr').prev();\n let rowParent = this.options.parentDataTable.getRow(parentTR);\n rowParent.data().set('status', data.status);\n rowParent.invalidate().draw();\n this.options.parentDataTable.setRowStyle(parentTR, data.status, row.data().get('isCompanyBlacklisted'));\n callback();\n\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Unable to get Company Status.'\n });\n });\n } else {\n callback();\n }\n\n }, this)\n });\n }, this),\n isShown: _.bind(function (row) {\n return PJQ.app.session.hasPermission('contacts.isAdmin');\n }, this)\n },\n {\n name: 'Manage Trades',\n iconClass: 'fal fa-hard-hat',\n onClick: _.bind(function (row) {\n new PJQ.views.projects.ManageProjectParticipantTradesModal({\n contactId: row.data().get('contactId'),\n onSave: _.bind(function (data) {\n // close/hide/dispose of child datatable so that it can be refreshed. update current row's grouplist display.\n let groupIdList = [];\n let groupNameList = [];\n _.each(data.models, _.bind(function (model) {\n if (model.get('isSelected')) {\n groupIdList.push(model.get('groupId'));\n groupNameList.push(model.get('groupName'));\n }\n }, this));\n\n row.data().set('groupIdList', groupIdList.join(','));\n row.data().set('groupListDisplay', groupNameList.join(', '));\n row.invalidate().draw();\n\n if (row.child.isShown()) {\n row.child.hide();\n\n this.childRowToggle({\n currentTarget: row.selector.rows.find('i.contact-toggle-row')[0]\n });\n }\n\n }, this)\n });\n }, this),\n isShown: _.bind(function (row) {\n return PJQ.app.session.project.hasPermission('messaging.canManage') && this.options.view !== PJQ.constants.projectMessaging.views.MSGCONT_CONT;\n }, this)\n\n },\n {\n name: 'Project History',\n iconClass: 'fal fa-history',\n onClick: _.bind(function (row) {\n new PJQ.views.projects.ProjectParticipantHistoryModal({\n project: this.options.project,\n contactId: row.data().get('contactId')\n });\n }, this),\n isShown: _.bind(function (row) {\n return true;\n }, this)\n },\n {\n name: 'Resend Message',\n iconClass: 'fal fa-paper-plane',\n onClick: _.bind(function (row) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'projectmessages',\n value: row.data().collection.options.projectMessageId\n },\n {\n endpoint: 'resend'\n }\n ], [\n {\n parameter: 'projectMessageContactBroadcastIds',\n value: [row.data().attributes.projectMessageContactBroadcastId]\n }\n ])\n }).post().done(_.bind(function (data) {\n PJQ.notifications.notify.successNotify({\n message: 'Message is being resent.'\n });\n }, this));\n\n }, this),\n isShown: _.bind(function (row) {\n return PJQ.app.session.project.hasPermission('messaging.canManage') && this.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT;\n }, this)\n },\n {\n name: 'Upload Bid Docs',\n iconClass: 'fal fa-cloud-upload',\n onClick: _.bind(function (row) {\n new PJQ.views.projects.UploadParticipantBidDocumentsModal({\n contact: row.data(),\n onSave: _.bind(function () {\n this.options.projectMessagingView.renderView();\n }, this)\n });\n }, this),\n isShown: function () {\n return PJQ.app.session.project.hasPermission('messaging.canManage');\n }\n },\n {\n name: 'Order Prints',\n iconClass: 'fal fa-shopping-cart',\n onClick: _.bind(function (row) {\n new PJQ.views.files.OrderPrintsModal({\n recipients: [row.data()],\n onOrderPlaced: _.bind(function () {\n this.options.projectMessagingView.clearSelectedContacts();\n }, this)\n });\n }, this),\n isShown: function () {\n return PJQ.app.session.project.hasPermission('messaging.canManage');\n }\n },\n {\n name: 'Send Update Request',\n iconClass: 'fal fa-poll-h',\n onClick: _.bind(function (row) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: row.data().get('contactId')\n },\n {\n endpoint: 'updater'\n }\n ])\n }).post().done(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Contact Updater Request sent'\n });\n }, this)).fail(function (xhr, err, result) {\n PJQ.notifications.notify.errorNotify({\n message: 'Contact Updater Request failed'\n });\n });\n\n }, this),\n isShown: function (row) {\n return PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_CONTACT_UPDATER_ENABLED) &&\n PJQ.app.session.project.hasPermission('messaging.canManage') &&\n !row.data().get('isDirectoryContact');\n }\n },\n {\n name: 'Request Prequal',\n iconClass: 'fal fa-envelope-open-text',\n onClick: _.bind(function (row) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: row.data().get('contactId')\n },\n {\n endpoint: 'prequal'\n },\n {\n endpoint: 'request'\n }\n ])\n }).post().done(_.bind(function (data) {\n if (data && data.success) {\n PJQ.notifications.notify.successNotify({\n message: 'Qualification request sent'\n });\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 }, this),\n isShown: function () {\n return PJQ.app.session.hasPermission('prequal.canView') && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PREQUAL);\n }\n },\n {\n name: 'Export vCard',\n iconClass: 'fal fa-address-card',\n onClick: _.bind(function (row) {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: row.data().get('contactId')\n },\n {\n endpoint: 'vcard'\n }\n ]));\n }, this)\n },\n {\n name: 'Copy Public Vendor',\n iconClass: 'fal fa-copy',\n onClick: _.bind(function (row) {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: row.data().get('contactId')\n },\n {\n endpoint: 'copydirectorycontact'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint\n }).post().done(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Contact copied successfully.'\n });\n // todo: update this view and maybe parent view if parent view is a company?\n }, this)).fail(function (xhr, err, result) {\n let logicError = xhr.responseJSON.message.indexOf('logic') === -1;\n PJQ.notifications.notify.errorNotify({\n title: logicError ? 'Duplicate Contact' : 'Something went wrong!',\n message: logicError ? 'Directory contact already exists in your address book.' : 'Something went wrong!'\n });\n });\n }, this),\n isShown: function (row) {\n return PJQ.app.session.project.hasPermission('messaging.canManage') && row.data().get('isDirectoryContact');\n }\n },\n {\n name: 'Report',\n iconClass: 'fal fa-flag-alt',\n onClick: _.bind(function (row) {\n new PJQ.views.contacts.ReportContactModal({\n contactId: row.data().get('contactId'),\n showRemoveFromProject: true,\n onReport: _.bind(function (removeFromProject) {\n if (removeFromProject)\n this.options.projectMessagingView.renderView();\n }, this)\n });\n }, this),\n isShown: function (row) {\n return PJQ.app.session.project.hasPermission('messaging.canManage') && row.data().get('isDirectoryContact');\n }\n },\n {\n name: 'Remove Contact',\n iconClass: 'fal fa-trash',\n isDanger: true,\n onClick: _.bind(function (row) {\n new PJQ.views.projects.DeleteProjectParticipants({\n title: \"Remove Participant\",\n body: \"Are you sure you want to remove this contact from this project?\",\n onDelete: _.bind(function (isRemoveFromAB) {\n this.options.projectMessagingView.deleteContacts([row.data().get('contactId')], isRemoveFromAB);\n }, this)\n });\n }, this),\n isShown: _.bind(function (row) {\n return PJQ.app.session.project.hasPermission('messaging.canManage') && this.options.view !== PJQ.constants.projectMessaging.views.MSGCONT_CONT;\n }, this)\n }\n ];\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [],\n includeColumns = ['icons', 'companyName', 'contactName', 'contactTitle', 'address1', 'address2', 'city', 'state', 'zip', 'country', 'phone', 'cell', 'fax', 'email', 'unionStatus', 'sector', 'certifications', 'groupListDisplay', 'distance', 'grade', 'userType', 'commentsCompany', 'commentsContact', 'bidAmount', 'status'];\n\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_ACTIVITY_RANK_STATUS_LIST))\n includeColumns.push('activityRank');\n\n if (this.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT) {\n includeColumns.push('accessKey');\n includeColumns.push('broadcastStatus');\n includeColumns.push('deliveredOn');\n includeColumns.push('openedOn');\n includeColumns.push('responded');\n }\n\n _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n includeColumns.push('companyCustomField_' + customField.id);\n }, this));\n\n _.each(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n includeColumns.push('contactCustomField_' + customField.id);\n }, this));\n\n if (!includeAllColumns) {\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n if (this.options.projectMessagingView && !this.options.projectMessagingView.options.canViewBidAmount) {\n includeColumns = _.filter(includeColumns, function(column) { return column != 'bidAmount' });\n }\n\n columns.push({\n \"columnData\": '',\n \"title\": (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP)) ? '' : '<div class=\"pretty p-default p-icon p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"select-all-contacts\" /><div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\"> </label></div></div>',\n \"width\": \"20px\",\n \"data\": \"null\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data, type, row) {\n let isSelected = this.options.projectMessagingView.isContactSelected(row.get('contactId')),\n enableDeclined = this.options.projectMessagingView.isEnableDeclined(),\n isDisabled = !enableDeclined && (this.options.projectStatusList[1].toString().split(',')[0].toLowerCase() === row.get('status').toString().toLowerCase());\n return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-icon p-smooth fs-18 m-0\">' +\n '<input type=\"checkbox\"' + (isSelected ? ' checked ' : '') + (isDisabled ? ' disabled ' : '') + ' class=\"select-contact\" />' +\n '<div class=\"state\"><i class=\"icon fal fa-check\"></i> <label class=\"wd-0\"> </label></div>' +\n '</div></div>');\n }, this)\n });\n\n if (!this.options.parentDataTable || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.RSPCONT || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n columns.push({\n \"columnData\": 'contactGroups',\n \"data\": null,\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '<i class=\"fal fa-plus-circle contact-toggle-row\" data-id=\"' + row.get('contactId') + '\"></i>';\n }\n });\n }\n }\n\n let maxEmailWidth = $(window).width() > 1200 ? 225 : 100,\n canManage = PJQ.app.session.project.hasPermission('messaging.canManage'),\n distanceThreshold = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_DISTANCE_ICON_THRESHOLD);\n _.each(includeColumns, _.bind(function (columnName) {\n let cName,\n cNameTp = typeof columnName;\n if (cNameTp === 'string') {\n cName = columnName;\n } else if (cNameTp === 'object' && typeof cNameTp.data === 'string') {\n cName = cNameTp.data;\n } else {\n return;\n }\n switch (cName) {\n case 'icons':\n columns.push({\n \"columnData\": \"icons\",\n \"data\": null,\n \"title\": 'Info',\n \"width\": '50px',\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let icons = [];\n\n if (row.get('isDefaultContact'))\n icons.push(\"<i class='far fa-crown mr-1' title='Primary Contact'></i>\");\n\n // proqual stuff\n if (row.get('hasUnpaidInvites'))\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_pending.gif' title='Qualification Pending' />\");\n else if (row.get('minScreeningStatusId') < PJQ.constants.proQual.screeningStatuses.Complete &&\n row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_inprocess.gif' title='Qualification In Process' />\");\n else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.Complete &&\n row.get('maxScreeningInviteId') > 0 && row.get('minScreeningGradeId') === 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_review.gif' title='Qualification Needs Review' />\");\n else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.Complete &&\n row.get('maxScreeningInviteId') > 0 && row.get('minScreeningGradeId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_allclear.png' title='Qualification Approved' />\");\n else if (row.get('minScreeningStatusId') >= PJQ.constants.proQual.screeningStatuses.InProcess &&\n row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_processed.gif' title='All Enrolled' />\");\n\n if (row.get('maxScreeningInviteId') > 0 && row.get('screeningCountFeedbackItems') > 0 && new Date(row.get('maxInviteExpiresOn')) > new Date())\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_grade2.gif' title='Qualification Feedback Required' />\");\n\n if (row.get('maxScreeningInviteId') > 0 && new Date(row.get('maxInviteExpiresOn')) < new Date())\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/screening_expired.png' title='Qualification Expired' />\");\n\n // directory stuff\n if (row.get('networkVerificationLevel') === 1)\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/select_network_icon.png' title='Select Network Member' />\");\n else if (row.get('networkVerificationLevel') === 2)\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/verified_network_icon.png' title='Verified Network Member' />\");\n else if (row.get('isDirectoryContact'))\n icons.push(\"<img class='project-participant-icon mr-1' src='/assets/modules2/global/images/directory_sub.png' title='Pantera Directory Member' />\");\n\n // message stats stuff\n\n if (row.get('lastDownloadedOn'))\n icons.push(\"<i class='far fa-download mr-1' title='Last downloaded on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('lastDownloadedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n else if (row.get('lastViewedOn') && (!this.options.parentDataTable || this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.MSGCONT))\n icons.push(\"<i class='far fa-eye mr-1' title='Last visited on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('lastViewedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n else if (row.get('viewedOn') && this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.MSGCONT)\n icons.push(\"<i class='far fa-eye mr-1' title='Visited on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('viewedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n else if (row.get('openedOn') && this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.MSGCONT)\n icons.push(\"<i class='far fa-envelope-open mr-1' title='Opened email on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('openedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n else if (row.get('lastOpenedOn') && (!this.options.parentDataTable || this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.MSGCONT))\n icons.push(\"<i class='far fa-envelope-open mr-1' title='Last opened email on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('lastOpenedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n else if (row.get('deliveredOn') && this.options.parentDataTable && this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.MSGCONT)\n icons.push(\"<i class='far fa-envelope mr-1' title='Delivered on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('deliveredOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n else if (row.get('lastDeliveredOn') && (!this.options.parentDataTable || this.options.parentDataTable.options.view !== PJQ.constants.projectMessaging.views.MSGCONT))\n icons.push(\"<i class='far fa-envelope mr-1' title='Last delivered email on \" + PJQ.helpers.dateHelpers.getDateString(new Date(row.get('lastDeliveredOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"'></i>\");\n\n if (row.get('lastBroadcastStatus') && (row.get('lastBroadcastStatus').toLowerCase().indexOf('fail') !== -1 || row.get('lastBroadcastStatus').toLowerCase().indexOf('error') !== -1))\n icons.push(\"<i class='far fa-exclamation-triangle mr-1' title='Last Message Failed'></i>\");\n\n let dist = row.get('distance');\n if (typeof distanceThreshold === 'number' && dist != null && dist <= distanceThreshold) {\n icons.push(\"<i class='fas fa-map-marker-check text-orange fs-18 mr-1' title='Within \" + distanceThreshold.toString() + \" miles'></i>\");\n }\n\n return '<div class=\"d-flex justify-content-center\">' + icons.join('') + '</div>';\n }, this)\n });\n break;\n case 'companyName':\n columns.push({\n \"columnData\": \"companyName\",\n \"data\": \"attributes.companyName\",\n \"title\": \"Company\",\n });\n break;\n case 'contactName':\n columns.push({\n \"columnData\": \"contactName\",\n \"data\": \"attributes.contactName\",\n \"title\": \"Contact\",\n });\n break;\n case 'contactTitle':\n columns.push({\n \"columnData\": \"contactTitle\",\n \"data\": \"attributes.contactTitle\",\n \"title\": \"Title\"\n });\n break;\n case 'address1':\n columns.push({\n \"columnData\": \"address1\",\n \"data\": \"attributes.address1\",\n \"title\": \"Address 1\"\n });\n break;\n case 'address2':\n columns.push({\n \"columnData\": \"address2\",\n \"data\": \"attributes.address2\",\n \"title\": \"Address 2\"\n });\n break;\n case 'city':\n columns.push({\n \"columnData\": \"city\",\n \"data\": \"attributes.city\",\n \"title\": \"City\"\n });\n break;\n case 'state':\n columns.push({\n \"columnData\": \"state\",\n \"data\": \"attributes.state\",\n \"title\": \"State\",\n });\n break;\n case 'zip':\n columns.push({\n \"columnData\": \"zip\",\n \"data\": \"attributes.zip\",\n \"title\": \"Zip\",\n });\n break;\n case 'country':\n columns.push({\n \"columnData\": \"country\",\n \"data\": \"attributes.country\",\n \"title\": \"Country\",\n });\n break;\n case 'phone':\n columns.push({\n \"columnData\": \"phone\",\n \"data\": \"attributes.phone\",\n \"title\": \"Phone\",\n \"width\": \"110px\",\n \"render\": _.bind(function (data, type, row) {\n let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n phoneFormatted = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone')) + (_.size(row.get('phoneExtension')) === 0 ? '' : ' x' + row.get('phoneExtension')) : 'N/A'),\n phoneWrapped = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone'), true) + (_.size(row.get('phoneExtension')) === 0 ? '' : ' x' + row.get('phoneExtension')) : 'N/A');\n\n if (row.get('phone') !== '')\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Phone #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-phone text-dark\"></i></button>';\n\n html += '<div class=\"flex-fill ' + (row.get('phone') ? '' : 'text-muted') + '\">' + phoneWrapped + '</div>';\n html += '</div>';\n return html;\n }, this)\n });\n break;\n case 'cell':\n columns.push({\n \"columnData\": \"cell\",\n \"data\": \"attributes.cell\",\n \"title\": \"Cell\",\n \"width\": \"110px\",\n \"render\": _.bind(function (data, type, row) {\n let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n phoneFormatted = (row.get('cell') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('cell')) : 'N/A'),\n phoneWrapped = (row.get('cell') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('cell'), true) : 'N/A');\n\n if (row.get('cell') !== '')\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Cell #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-mobile-alt text-dark\"></i></button>';\n\n html += '<div class=\"flex-fill ' + (row.get('cell') ? '' : 'text-muted') + '\">' + phoneWrapped + '</div>';\n html += '</div>';\n return html;\n }, this)\n });\n break;\n case 'fax':\n columns.push({\n \"columnData\": \"fax\",\n \"data\": \"attributes.fax\",\n \"title\": \"Fax\",\n \"width\": \"110px\",\n \"render\": _.bind(function (data, type, row) {\n let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">',\n phoneFormatted = (row.get('fax') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('fax')) : 'N/A'),\n phoneWrapped = (row.get('fax') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('fax'), true) : 'N/A');\n\n if (row.get('fax') !== '')\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-phone\" title=\"Copy Fax #\" data-phone=\"' + phoneFormatted + '\"><i class=\"far fa-fax text-dark\"></i></button>';\n\n html += '<div class=\"flex-fill ' + (row.get('fax') ? '' : 'text-muted') + '\">' + phoneWrapped + '</div>';\n html += '</div>';\n return html;\n }, this)\n });\n break;\n case 'email':\n columns.push({\n \"columnData\": \"email\",\n \"data\": \"attributes.email\",\n \"title\": \"Email\",\n \"render\": function (data, type, row) {\n let email = data;\n if (_.size(email) === 0) {\n return '';\n }\n\n let project = PJQ.app.session.project,\n subject = project.get('projectName') + ' - ' + project.get('city') + ', ' + project.get('state'),\n accessKey = row.get('accessKey'),\n body;\n if (accessKey != null && _.size(accessKey.trim()) > 0) {\n let projectUrl = window.location.origin + '/?accessKey=' + accessKey + '#projects/' + project.id.toString() + '';\n body = 'Click here to view the project: ' + projectUrl;\n } else {\n body = '';\n }\n\n let html = '<div style=\"max-width:' + (maxEmailWidth != null ? (maxEmailWidth.toString() + 'px;') : 'auto') + '\" class=\"d-flex align-items-center wd-100\">',\n mailto = email + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body),\n emailFormatted = '<a target=\"_blank\" title=\"' + email + '\" style=\"color: inherit;\" href=\"mailto:' + mailto + '\">' + email + '</a>';\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-email\" title=\"Copy Email\" data-email=\"' + row.get('email') + '\"><i class=\"far fa-envelope text-dark\"></i></button>';\n html += '<div class=\"flex-fill of-hidden tof-ellipsis no-wrap' + (row.get('email') ? '' : 'text-muted') + '\">' + emailFormatted + '</div></div>';\n return html;\n }\n });\n break;\n case 'unionStatus':\n columns.push({\n \"columnData\": 'unionStatus',\n \"title\": 'Union Status',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isUnion'))\n status.push('Union');\n if (row.get('isNonUnion'))\n status.push('Non-Union');\n if (row.get('isPrevailingWage'))\n status.push('Prevailing Wage');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'sector':\n columns.push({\n \"columnData\": 'sector',\n \"title\": 'Labor Sector',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isPublicSector'))\n status.push('Public');\n if (row.get('isPrivateSector'))\n status.push('Private');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'certifications':\n columns.push({\n \"columnData\": 'certifications',\n \"title\": 'Certification',\n \"render\": function (data, type, row) {\n let status = [];\n if (row.get('isDBE'))\n status.push('DBE');\n if (row.get('isDVBE'))\n status.push('DVBE');\n if (row.get('isMBE'))\n status.push('MBE');\n if (row.get('isSBE'))\n status.push('SBE');\n if (row.get('isSDVBE'))\n status.push('SDVBE');\n if (row.get('isWBE'))\n status.push('WBE');\n\n if (_.size(status) === 0)\n status.push('N/A');\n\n return status.join(',');\n }\n });\n break;\n case 'groupListDisplay':\n columns.push({\n \"columnData\": \"groupListDisplay\",\n \"data\": \"attributes.groupListDisplay\",\n \"title\": \"Trades\",\n \"render\": function (data) {\n let groupDisplayLimit = 0, groupArray = data ? data.split(',') : [];\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY)) {\n groupDisplayLimit = parseInt(PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY));\n }\n\n if (groupDisplayLimit > 0 && (_.size(groupArray) > groupDisplayLimit)) {\n return _.rest(groupArray.reverse(), _.size(groupArray) - groupDisplayLimit).reverse().join(', ') + \" <br>\" +\n \"<a href='javascript:void(0)' class='btn-show-groups' title='Click to show complete list of Trades'> \" + (_.size(groupArray) - groupDisplayLimit) + \" more item(s)</a>\";\n } else {\n return data;\n }\n }\n });\n break;\n case 'distance':\n columns.push({\n \"columnData\": 'distance',\n \"data\": {\n \"_\": function (row) {\n return row.get('distance') == null ? 0 : row.get('distance');\n },\n \"display\": function (row) {\n if (row.get('distance') == null) {\n return '';\n }\n return row.get('distance').toFixed(2).toString() + ' mi.';\n }\n },\n \"title\": 'Distance',\n });\n break;\n case 'grade':\n columns.push({\n \"columnData\": 'grade',\n \"title\": 'Grade',\n \"width\": \"40px\",\n \"render\": function (data, type, row) {\n let html = '<span class=\"mr-1\">' + row.get('gradeAverage').toString() + '</span>';\n html += (row.get('grade') !== 0) ? '<button type=\"button\" class=\"btn btn-transparent-dark btn-grade-project-contact\" title=\"Review Grade\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"fas fa-star text-gold\"></i></button>' : '<button type=\"button\" class=\"btn btn-transparent-dark btn-grade-project-contact\" title=\"Grade\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"far fa-star text-muted\"></i></button>';\n return html;\n }\n });\n break;\n case 'userType':\n columns.push({\n \"columnData\": 'userType',\n \"title\": 'Contact Type',\n \"data\": 'userType',\n \"render\": function (data, type, row) {\n let userType = _.filter(PJQ.app.session.userTypes.getByIsCompany(false), _.bind(function (userType) {\n return row.get('userTypeId') === userType.get('userTypeId');\n }, this))[0];\n\n return userType != null ? userType.get('name') : 'N/A';\n }\n });\n break;\n case 'commentsCompany':\n columns.push({\n \"columnData\": 'commentsCompany',\n \"title\": 'Comments (Company)',\n \"render\": function (data, type, row) {\n let html = '<div style=\"min-width:150px;\" class=\"d-flex align-items-center\">';\n html += '<div data-id=\"' + row.get('contactCompanyId') + '\" class=\"flex-fill comment-company ' + (row.get('lastCompanyComment') ? '' : 'text-muted') + '\">' + (row.get('lastCompanyComment') ? row.get('lastCompanyComment').comment : 'No Comments Added') + '</div>';\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-add-comment-company\" title=\"Add Comment\"><i class=\"far fa-comment-plus text-dark\"></i></button>';\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-comment-contact-company\" title=\"Comments\" data-contact-company-id=\"' + row.get('contactCompanyId') + '\"><i class=\"far fa-comments text-dark\"></i></button>';\n html += '</div>';\n return html;\n }\n });\n break;\n case 'commentsContact':\n columns.push({\n \"columnData\": 'commentsContact',\n \"title\": 'Comments (Contact)',\n \"render\": function (data, type, row) {\n let html = '<div style=\"min-width:150px;\" class=\"d-flex align-items-center\">';\n html += '<div data-id=\"' + row.get('contactId') + '\" class=\"flex-fill comment-contact ' + (row.get('lastContactComment') ? '' : 'text-muted') + '\">' + (row.get('lastContactComment') ? row.get('lastContactComment').comment : 'No Comments Added') + '</div>';\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-add-comment-contact\" title=\"Add Comment\"><i class=\"far fa-comment-plus text-dark\"></i></button>';\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-comment-contact\" title=\"Comments\" data-contact-id=\"' + row.get('contactId') + '\"><i class=\"far fa-comments text-dark\"></i></button>';\n html += '</div>';\n return html;\n }\n });\n break;\n case 'bidAmount':\n columns.push({\n \"columnData\": \"bidAmount\",\n \"data\": {\n \"_\": function (row) {\n return row.get('bidAmount');\n },\n \"display\": function (row) {\n if (canManage) {\n return '<input type=\"text\" class=\"form-control contact-bid-amount input-dollars-full\" value=\"' + PJQ.helpers.formatHelpers.formatCurrency(row.get('bidAmount'), 2, false) + '\" />';\n }\n\n return '<span>' + PJQ.helpers.formatHelpers.formatCurrency(row.get('bidAmount'), 2, true) + '</span>'\n }\n },\n \"title\": \"Bid Amount\"\n });\n break;\n case 'status':\n if (this.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT) {\n columns.push({\n \"columnData\": 'status',\n \"title\": 'Response',\n \"width\": \"100px\",\n \"data\": {\n \"_\": function (row) {\n return row.get('status') ? row.get('status') : 'PENDING';\n },\n \"display\": function (row) {\n let html = '<select class=\"form-control contact-message-status\" style=\"min-width:100px;\">',\n statuses = [],\n isProjectResponse = PJQ.app.session.project.getProjectStatusList().indexOf(row.get('status')) != -1;\n\n if (row.collection.options.responseType === 'PROJECT')\n statuses = PJQ.app.session.project.getProjectStatusList();\n else if (row.collection.options.responseType === 'MESSAGE')\n statuses = PJQ.app.session.project.getMessageStatusList();\n else\n return _.size(row.get('status')) === 0 ? 'N/A' : row.get('status');\n\n statuses.unshift(['PENDING', true]);\n\n _.each(statuses, _.bind(function (status, index) {\n html += '<option value=\"' + status[0] + '\"' + (status[0] === row.get('status') ? ' SELECTED' : '') + '>' + status[0] + '</option>';\n }, this));\n\n html += '</select>';\n\n if (row.collection.options.responseType === '')\n html = _.size(row.get('status')) === 0 ? 'N/A' : row.get('status');\n\n return html;\n }\n }\n });\n } else {\n columns.push({\n \"columnData\": 'status',\n \"title\": 'Status',\n \"width\": \"120px\",\n \"data\": {\n \"_\": function (row) {\n return row.get('status') ? row.get('status') : 'PENDING';\n },\n \"display\": function (row) {\n if (canManage) {\n let html = '<select class=\"form-control contact-project-status\" style=\"min-width: 100px;\">',\n statuses = PJQ.app.session.project.getProjectStatusList();\n statuses.unshift(['PENDING', true]);\n _.each(statuses, _.bind(function (status, index) {\n html += '<option value=\"' + status[0] + '\"' + (status[0] === row.get('status') ? ' SELECTED' : '') + '>' + status[0] + '</option>';\n }, this));\n html += '</select>';\n return html;\n }\n\n let status = row.get('status');\n return '<span>' + (_.size(status) > 0 ? status.toUpperCase() : 'PENDING') + '</span>';\n }\n }\n });\n }\n break;\n case 'accessKey':\n columns.push({\n \"columnData\": \"accessKey\",\n \"data\": \"attributes.accessKey\",\n \"title\": \"Access Key\",\n \"render\": function (data, type, row) {\n let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">';\n html += '<div class=\"flex-fill ' + (row.get('accessKey') ? '' : 'text-muted') + '\">' + (row.get('accessKey') ? row.get('accessKey') : '') + '</div>';\n if (row.get('accessKey') !== '' && row.get('accessKey') !== ' ')\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-access-key\" title=\"Copy Access Key\" data-access-key=\"' + row.get('accessKey') + '\"><i class=\"far fa-key text-dark\"></i></button>';\n html += '</div>';\n return html;\n }\n });\n break;\n case 'broadcastStatus':\n columns.push({\n \"columnData\": 'broadcastStatus',\n \"data\": \"attributes.broadcastStatus\",\n \"title\": 'Broadcast Status',\n \"render\": function (data, type, row) {\n let broadcastStatus = _.size(row.get('broadcastStatus')) === 0 ? 'PENDING' : row.get('broadcastStatus');\n return '<span title=\"' + (_.size(row.get('broadcastErrorMessage')) === 0 ? broadcastStatus : row.get('broadcastErrorMessage')) + '\" >' + broadcastStatus + '</span>';\n }\n });\n break;\n case 'responded':\n columns.push({\n \"columnData\": \"responded\",\n \"data\": {\n \"_\": function (row) {\n return new Date(row.get('rsvpOn'));\n },\n \"filter\": \"attributes.rsvpOn\",\n \"display\": function (row) {\n return row.get('rsvpOn') ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('rsvpOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true) : 'N/A';\n }\n },\n \"title\": \"Responded\"\n });\n break;\n case 'deliveredOn':\n columns.push({\n \"columnData\": \"deliveredOn\",\n \"data\": {\n \"_\": function (row) {\n return new Date(row.get('deliveredOn'));\n },\n \"filter\": \"attributes.deliveredOn\",\n \"display\": function (row) {\n return row.get('deliveredOn') ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('deliveredOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true) : 'N/A';\n }\n },\n \"title\": \"Delivered\"\n });\n break;\n case 'openedOn':\n columns.push({\n \"columnData\": \"openedOn\",\n \"data\": {\n \"_\": function (row) {\n return new Date(row.get('openedOn'));\n },\n \"filter\": \"attributes.openedOn\",\n \"display\": function (row) {\n return row.get('openedOn') ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('openedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true) : 'N/A';\n }\n },\n \"title\": \"Opened\"\n });\n break;\n case 'activityRank':\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_ACTIVITY_RANK_STATUS_LIST)) {\n columns.push({\n \"columnData\": 'activityRank',\n \"data\": 'attributes.activityRank',\n \"title\": 'Activity'\n });\n }\n break;\n\n }\n\n if (columnName.startsWith('companyCustomField_')) {\n let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n\n _.each(PJQ.app.session.customFields.company[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n if (customField.id === customFieldId)\n columns.push(this.getCustomFieldColumn(customField, true));\n }, this));\n }\n\n if (columnName.startsWith('contactCustomField_')) {\n let customFieldId = parseInt(columnName.substring(columnName.indexOf('_') + 1));\n\n _.each(PJQ.app.session.customFields.contact[PJQ.app.session.get('masterUserId')].models, _.bind(function (customField) {\n if (customField.id === customFieldId)\n columns.push(this.getCustomFieldColumn(customField, false));\n }, this));\n }\n\n }, this));\n\n return columns;\n },\n getChildTableType: function () {\n return PJQ.constants.projectMessaging.views.CONTGROUP;\n },\n getRowChildTable: function (childOpts) {\n childOpts.view = this.getChildTableType();\n childOpts.dom = 't';\n childOpts.parentDataTable = this;\n childOpts.paging = false;\n return new PJQ.views.projects.ProjectMessagingContactTradesDataTable(childOpts);\n },\n getRowChildData: function (row) {\n return new PJQ.collections.projectParticipants.ProjectParticipantsForView(null, {\n project: PJQ.app.session.project,\n view: PJQ.constants.projectMessaging.views.CONTGROUP,\n contactId: row.data().get('contactId')\n });\n },\n statusChanged: function (statuses, parentTR, parentView) {\n\n let self = this;\n if (parentTR) {\n this.statusChangedHelper(this.getRow(parentTR), statuses, parentTR, parentView);\n } else {\n this.dataTable.rows().every(function (rowIdx, tableLoop, rowLoop) {\n self.statusChangedHelper(this, statuses, parentTR, parentView);\n });\n }\n this.dataTable.draw();\n\n // if this is the child of the company view, update the parent as well\n if (this.options.parentDataTable != null) {\n this.options.parentDataTable.statusChanged(statuses, parentTR ? parentTR.parent().closest('tr').prev() : null, parentView);\n }\n\n },\n statusChangedHelper: function (row, statuses, parentTR, parentView) {\n switch (this.options.view) {\n case PJQ.constants.projectMessaging.views.COMP_CONT:\n case PJQ.constants.projectMessaging.views.CONT:\n case PJQ.constants.projectMessaging.views.RSPCONT_CONT:\n // these views cannot have a group status, so update the regular status column and redraw the row.\n row.data().set('status', statuses.projectStatus);\n row.invalidate();\n this.setRowStyle(row.node(), row.data().get('status'), row.data().get('isBlacklisted') || row.data().get('isCompanyBlacklisted'));\n\n\n // update the groups subgrid if it exists\n if (parentView !== PJQ.constants.projectMessaging.views.CONTGROUP) {\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n if (typeof childDT.statusChanged === 'function') {\n childDT.statusChanged(statuses, null, this.options.view);\n }\n }, this));\n }\n break;\n case PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT:\n case PJQ.constants.projectMessaging.views.GROUPCONT_CONT:\n // these views must have a group status, so update the group status column and redraw the row.\n row.data().set('status', statuses.groupStatus);\n row.invalidate();\n this.setRowStyle(row.node(), row.data().get('status'), row.data().get('isBlacklisted') || row.data().get('isCompanyBlacklisted'));\n\n // update the groups subgrid if it exists\n _.each(this.options.childDataTables, _.bind(function (childDT) {\n if (row.data().get('contactId') !== childDT.options.parentId)\n return;\n\n if (typeof childDT.statusChanged === 'function') {\n childDT.statusChanged(statuses, null, this.options.view);\n }\n }, this));\n break;\n }\n },\n onMessageStatusChanged: function (e) {\n let $target = $(e.currentTarget),\n status = $target.val().toUpperCase(),\n row = this.getRow($target.closest('tr')),\n data = row.data();\n\n data.updateStatus(status, _.bind(function () {\n this.setRowStyle(row.node(), row.data().get('status'), row.data().get('isBlacklisted') || row.data().get('isCompanyBlacklisted'));\n PJQ.notifications.notify.successNotify({\n message: 'Status updated'\n });\n }, this));\n // no parents or children to update in this case as it is a Message status.\n },\n bidAmountExited: function(e) {\n let bidAmount = PJQ.helpers.inputHelpers.getMoneyInputValue($(e.currentTarget).parent());\n $(e.currentTarget).val(PJQ.helpers.formatHelpers.formatCurrency(bidAmount, 2, false));\n },\n bidAmountChanged: function (e) {\n if (e.ctrlKey && e.key != 'v') {\n e.stopPropagation();\n return false;\n }\n\n let tr = $(e.currentTarget).closest('tr'),\n parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n row = this.getRow(tr),\n bidAmount = PJQ.helpers.inputHelpers.getMoneyInputValue($(e.currentTarget).parent()),\n callback = function (context) {\n if (context.options.parentDataTable !== undefined && (context.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.COMP || context.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP)) {\n let bidAmountTotal = 0;\n _.each(context.dataTable.data(), _.bind(function (item) {\n if (item.get('contactCompanyId') === row.data().get('contactCompanyId'))\n bidAmountTotal += item.get('bidAmount');\n }, context));\n\n let rowParent = context.options.parentDataTable.getRow(parentTR);\n rowParent.data().set('bidAmount', bidAmountTotal);\n //rowParent.invalidate().draw();\n $(parentTR).find('.bid-amount-total').text(PJQ.helpers.formatHelpers.formatCurrency(bidAmountTotal, 2, true));\n }\n };\n\n row.data().set('bidAmount', bidAmount);\n row.data().set('contactCompanyId', row.data().get('contactCompanyId'));\n row.data().set('projectId', PJQ.app.session.project.id);\n row.data().set('isUpdateBidAmount', true);\n row.data().queueSave({bidAmount: bidAmount}, {\n //patch: true,\n success: _.bind(function () {\n callback(this);\n }, this)\n }, 800);\n\n },\n contactSelectChanged: function (e) {\n let tr = $(e.currentTarget).closest('tr'),\n parentTR = $(e.currentTarget).closest('tr').parent().closest('tr').prev(),\n row = this.getRow(tr);\n\n if ($(e.currentTarget).prop('checked')) {\n this.options.projectMessagingView.addSelectedContacts([row.data().get('contactId')]);\n\n if (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT)) {\n let groupId = parseInt(row.data().collection.options.groupIdList);\n this.options.projectMessagingView.addSelectedContactGroups([{\n contactId: row.data().get('contactId'),\n groupId: groupId\n }]);\n }\n } else {\n this.options.projectMessagingView.removeSelectedContacts([row.data().get('contactId')]);\n if (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT)) {\n let groupId = parseInt(row.data().collection.options.groupIdList);\n this.options.projectMessagingView.removeSelectedContactGroups([{\n contactId: row.data().get('contactId'),\n groupId: groupId\n }]);\n }\n }\n\n if (this.options.parentDataTable === undefined)\n return;\n\n let totalContacts = 0, selectedContacts = 0;\n _.each(this.dataTable.data(), _.bind(function (item) {\n if (item.get('contactCompanyId') === row.data().get('contactCompanyId')) {\n totalContacts++;\n if (this.options.projectMessagingView.isContactSelected(item.get('contactId')))\n selectedContacts++;\n }\n }, this));\n\n if (selectedContacts === 0) {\n parentTR.find('input.select-company').prop('checked', false).prop('indeterminate', false).removeClass('indeterminate');\n } else if (selectedContacts === totalContacts) {\n parentTR.find('input.select-company').prop('checked', true).prop('indeterminate', false).removeClass('indeterminate');\n } else {\n // indeterminate\n parentTR.find('input.select-company').prop('checked', false).prop('indeterminate', true).addClass('indeterminate');\n }\n },\n contactSelectAllChanged: function (e) {\n let projectStatusList = PJQ.app.session.project.getProjectStatusList(),\n isChecked = $(e.currentTarget).prop('checked'),\n isEnableDeclined = this.options.projectMessagingView.isEnableDeclined(), selectedContacts = [],\n groupId = null, isGroupsView = false, selectedContactGroups = [];\n\n if (this.options.parentDataTable && (this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP || this.options.parentDataTable.options.view === PJQ.constants.projectMessaging.views.GROUPCONT)) {\n isGroupsView = true;\n groupId = parseInt(this.options.data[0].collection.options.groupIdList);\n }\n\n _.each(this.dataTable.data(), _.bind(function (row) {\n if (isChecked) {\n if ((isEnableDeclined || projectStatusList[1].toString().split(',')[0].toLowerCase() !== row.attributes.status.toString().toLowerCase()) &&\n !row.attributes.isBlacklisted && !row.attributes.isCompanyBlacklisted)\n selectedContacts.push(row.attributes.contactId);\n } else {\n selectedContacts.push(row.attributes.contactId);\n }\n }, this));\n\n if (isGroupsView) {\n _.each(selectedContacts, _.bind(function (selectedContact) {\n selectedContactGroups.push({contactId: selectedContact, groupId: groupId});\n }, this));\n }\n\n if (isChecked) {\n this.options.projectMessagingView.addSelectedContacts(selectedContacts);\n if (isGroupsView)\n this.options.projectMessagingView.addSelectedContactGroups(selectedContactGroups);\n } else {\n this.options.projectMessagingView.removeSelectedContacts(selectedContacts);\n if (isGroupsView)\n this.options.projectMessagingView.removeSelectedContactGroups(selectedContactGroups);\n }\n\n this.refresh(false);\n },\n createdRow: function (row, data, dataIndex) {\n let status = data.attributes.status;\n if (this.options.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT &&\n data.collection.options.responseType !== 'PROJECT'\n && data.collection.options.responseType !== 'MESSAGE')\n status = '';\n\n this.setRowStyle(row, status, data.attributes.isBlacklisted || data.attributes.isCompanyBlacklisted)\n },\n setRowStyle: function (row, status, isBlacklisted) {\n let statusColor = _.find(this.options.projectMessagingView.options.settings.attributes.statusColors, function (statusColor) {\n return statusColor.status === status\n }), rowCss = '';\n\n if (statusColor) {\n let foregroundColor = PJQ.helpers.colorHelpers.idealLinkColorForBackground(statusColor.backgroundColor);\n rowCss = 'background-color:' + statusColor.backgroundColor + ' !important;' + 'color:' + foregroundColor + ' !important;';\n }\n\n if (isBlacklisted)\n rowCss += ' text-decoration: line-through !important;';\n\n $(row).css({cssText: rowCss});\n\n },\n copyAccessKey: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('<input>', {\n value: $(e.currentTarget).data('accessKey'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Access Key copied to clipboard.'\n });\n },\n copyPhone: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('<input>', {\n value: $(e.currentTarget).data('phone').replace(/ /g,''),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Number copied to clipboard.'\n });\n },\n copyEmail: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('<input>', {\n value: $(e.currentTarget).data('email'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Email copied to clipboard.'\n });\n },\n showRowGroups: function (e) {\n let target = $(e.currentTarget),\n row = this.getRow(target.closest('tr')),\n data = row.data(),\n groups = data.get('groupListDisplay').split(','),\n groupDisplayLimit = parseInt(PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_MAX_GROUP_DISPLAY));\n target[0].outerHTML = ' ' + _.rest(groups, groupDisplayLimit).join(', ')\n }\n});\n\nPJQ.views.projects.ProjectMessagingContactTradesDataTable = PJQ.views.projects.ProjectMessagingDataTable.extend({\n events: {\n 'change select.project-contact-group-status': 'onStatusChanged',\n 'keyup .contact-group-bid-amount': 'bidAmountChanged',\n 'blur .contact-group-bid-amount': 'bidAmountExited'\n },\n afterDataTableRenderChild: function () {\n PJQ.helpers.inputHelpers.inputMaskCurrency(this.$('.contact-group-bid-amount'), 2);\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [];\n columns.push({\n \"columnData\": \"groupName\",\n \"data\": \"attributes.groupName\",\n \"title\": \"Trade\",\n \"orderable\": false\n });\n\n columns.push({\n \"columnData\": 'groupStatus',\n \"width\": \"150px\",\n \"title\": 'Trade Status',\n \"render\": function (data, type, row) {\n let html = '<select class=\"form-control project-contact-group-status\">',\n statuses = PJQ.app.session.project.getProjectStatusList();\n statuses.unshift(['PENDING', true]);\n _.each(statuses, _.bind(function (status, index) {\n html += '<option value=\"' + status[0] + '\"' + (status[0] === row.get('groupStatus') ? ' SELECTED' : '') + '>' + status[0] + '</option>';\n\n }, this));\n html += '</select>';\n return html;\n },\n \"orderable\": false\n });\n\n if (this.options.projectMessagingView && this.options.projectMessagingView.options.canViewBidAmount) {\n columns.push({\n \"columnData\": \"bidAmount\",\n \"data\": \"attributes.bidAmount\",\n \"width\": \"100px\",\n \"title\": \"Bid Amount\",\n \"render\": function (data, type, row) {\n return '<input type=\"text\" class=\"form-control contact-group-bid-amount input-dollars-full\" value=\"' + PJQ.helpers.formatHelpers.formatCurrency(row.get('bidAmount'), 2, false) + '\" />';\n }\n });\n }\n\n\n return columns;\n },\n statusChanged: function (statuses, parentTR, parentView) {\n if (!(parentView === PJQ.constants.projectMessaging.views.CONT || parentView === PJQ.constants.projectMessaging.views.COMP || parentView === PJQ.constants.projectMessaging.views.COMP_CONT || parentView === PJQ.constants.projectMessaging.views.GROUPCONT_CONT || parentView === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT || parentView === PJQ.constants.projectMessaging.views.RSPCONT_CONT || parentView === PJQ.constants.projectMessaging.views.BIDPKGS_CONT))\n return;\n\n let groupId = 0;\n if (parentView === PJQ.constants.projectMessaging.views.GROUPCONT_CONT || parentView === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT)\n groupId = parseInt(this.options.parentDataTable.dataTable.rows(0).row().data().collection.options.groupIdList);\n\n // if we are being called, we must update ALL rows(trades) in our datatable and then redraw the whole thing.\n _.each(this.dataTable.data(), _.bind(function (item) {\n if (groupId === 0 || groupId === item.get('groupId'))\n item.set('groupStatus', statuses.groupStatus);\n }, this));\n\n this.dataTable.rows().invalidate().draw();\n },\n bidAmountExited: function(e) {\n let bidAmount = PJQ.helpers.inputHelpers.getMoneyInputValue($(e.currentTarget).parent());\n $(e.currentTarget).val(PJQ.helpers.formatHelpers.formatCurrency(bidAmount, 2, false));\n },\n bidAmountChanged: function (e) {\n\n if (e.ctrlKey && e.key != 'v') {\n e.stopPropagation();\n return false;\n }\n\n let tr = $(e.currentTarget).closest('tr'),\n parentTR = tr.parent().closest('tr').prev(),\n row = this.getRow(tr),\n bidAmount = PJQ.helpers.inputHelpers.getMoneyInputValue($(e.currentTarget).parent());\n\n /*\n\t\trow.data().set('contactCompanyId', row.data().get('contactCompanyId'));\n\t\trow.data().set('projectId', PJQ.app.session.project.id);\n\t\t*/\n\n row.data().set('bidAmount', bidAmount);\n row.data().queueSave({bidAmount: bidAmount}, {\n patch: true,\n success: _.bind(function (response) {\n //row.invalidate().draw(); -- 2023-07-31 blue: this causes the field to lose focus\n\n // iterate through all rows in this table to get the total for this contact\n let contactBidTotal = 0;\n _.each(this.dataTable.data(), _.bind(function (item) {\n contactBidTotal += item.get('bidAmount');\n }, this));\n\n // update the contact's Bid Amount field\n let parentRow = this.options.parentDataTable.getRow(parentTR);\n parentRow.data().set('bidAmount', contactBidTotal);\n //parentRow.invalidate().draw(); -- 2023-07-31 blue: this causes the field to lose focus\n $(parentTR).find('.contact-bid-amount').val(PJQ.helpers.formatHelpers.formatCurrency(contactBidTotal, 2, false));\n\n // if main view is Company, iterate through all contacts to get their bid amounts\n if (this.options.projectMessagingView.currentView === PJQ.constants.projectMessaging.views.COMP || this.options.projectMessagingView.currentView === PJQ.constants.projectMessaging.views.GROUPCOMP) {\n\n let companyBidTotal = 0, parentParentTR = parentTR.parent().closest('tr').prev();\n _.each(this.options.parentDataTable.dataTable.data(), _.bind(function (item) {\n companyBidTotal += item.get('bidAmount');\n }, this));\n\n // update parent company row's Bid Amount Total\n let parentParentRow = this.options.parentDataTable.options.parentDataTable.getRow(parentParentTR);\n parentParentRow.data().set('bidAmount', companyBidTotal);\n //parentParentRow.invalidate().draw(); -- 2023-07-31 blue: this causes the field to lose focus\n $(parentParentTR).find('.bid-amount-total').text(PJQ.helpers.formatHelpers.formatCurrency(contactBidTotal, 2, true));\n\n }\n }, this)\n }, 800);\n\n }\n});\n","// Models\nPJQ.models.projectParticipants.ProjectContactComment = PJQ.models.BaseModel.extend({\n\tidAttribute: \"projectContactCommentId\",\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.options.contactId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'comments',\n\t\t\t\tvalue: this.get('projectContactCommentId')\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'isCompanyComments',\n\t\t\t\tvalue: this.options.isCompanyComments\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectParticipantForView = PJQ.models.projectParticipants.ProjectParticipant.extend({\n\tupdateStatus: function (status, callback) {\n\t\tlet endpointArr = [\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t];\n\n\t\tif (this.collection != null && this.collection.options.groupId > 0) {\n\t\t\tendpointArr.push({\n\t\t\t\tendpoint: 'groups',\n\t\t\t\tvalue: this.collection.options.groupId\n\t\t\t});\n\t\t}\n\t\telse if (this.collection != null && this.collection.options.isPerGroup) {\n\t\t\tendpointArr.push({\n\t\t\t\tendpoint: 'groups',\n\t\t\t\tvalue: parseInt(this.collection.options.groupIdList)\n\t\t\t});\n\t\t}\n\n\t\tif (this.collection != null && this.collection.options.projectMessageId > 0) {\n\t\t\tendpointArr.push({\n\t\t\t\tendpoint: 'messages',\n\t\t\t\tvalue: this.get('projectMessageContactBroadcastId')\n\t\t\t});\n\t\t}\n\n\t\tendpointArr.push({\n\t\t\tendpoint: 'status'\n\t\t});\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpointArr, [\n\t\t\t\t{\n\t\t\t\t\tparameter: \"status\",\n\t\t\t\t\tvalue: status\n\t\t\t\t}\n\t\t\t])\n\t\t}).post().done(_.bind(function (response) {\n\t\t\tthis.set('status', status);\n\t\t\tcallback(response);\n\t\t}, this));\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectParticipantGroupForView = PJQ.models.projectParticipants.ProjectParticipant.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.get('contactId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'groups',\n\t\t\t\tvalue: this.get('groupId')\n\t\t\t}\n\t\t]);\n\t},\n\tupdateStatus: function (status, callback) {\n\t\tlet endpointArr = [\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.get('contactId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'groups',\n\t\t\t\tvalue: this.get('groupId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'status'\n\t\t\t}\n\t\t];\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpointArr, [\n\t\t\t\t{\n\t\t\t\t\tparameter: \"status\",\n\t\t\t\t\tvalue: status\n\t\t\t\t}\n\t\t\t])\n\t\t}).post().done(_.bind(function (response) {\n\t\t\tthis.set('status', status);\n\t\t\tcallback(response);\n\t\t}, this));\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectParticipantCompanyForView = PJQ.models.projectParticipants.ProjectParticipantForView.extend({});\n\nPJQ.models.projectParticipants.ProjectMessageForView = PJQ.models.BaseModel.extend({});\n\nPJQ.models.projectParticipants.ProjectResponseForView = PJQ.models.BaseModel.extend({});\n\nPJQ.models.projectParticipants.ProjectGroupForView = PJQ.models.BaseModel.extend({});\n\nPJQ.models.projectParticipants.FilterInfo = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'views'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'filter'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'searchFor',\n\t\t\t\tvalue: encodeURIComponent(this.options.searchFor ? this.options.searchFor : '')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'view',\n\t\t\t\tvalue: this.options.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'projectMessageBroadcastId',\n\t\t\t\tvalue: this.options.projectMessageBroadcastId\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectMessageViewSettings = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessaging'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'settings'\n\t\t\t}\n\t\t]);\n\t},\n\tgetSettings: function (view) {\n\t\treturn _.find(this.attributes.settings, _.bind(function (setting) {\n\t\t\treturn setting.view === view;\n\t\t}, this));\n\t},\n\tparse: function (model) {\n\t\tif (model != null) {\n\t\t\t_.each(model.settings, function (setting) {\n\t\t\t\tif (setting.view === PJQ.constants.projectMessaging.views.COMP || setting.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP) {\n\t\t\t\t\tsetting.hasCustomFields = _.find(setting.columns, function (column) {\n\t\t\t\t\t\treturn column.toLowerCase().indexOf('companycustomfield_') !== -1;\n\t\t\t\t\t}) != null;\n\t\t\t\t}\n\t\t\t\telse if (setting.view === PJQ.constants.projectMessaging.views.CONT || setting.view === PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT\n\t\t\t\t\t|| setting.view === PJQ.constants.projectMessaging.views.GROUPCONT_CONT || setting.view === PJQ.constants.projectMessaging.views.MSGCONT_CONT\n\t\t\t\t\t|| setting.view === PJQ.constants.projectMessaging.views.RSPCONT_CONT || setting.view === PJQ.constants.projectMessaging.views.BIDPKGS_CONT) {\n\t\t\t\t\tsetting.hasCustomFields = _.find(setting.columns, function (column) {\n\t\t\t\t\t\treturn column.toLowerCase().indexOf('contactcustomfield_') !== -1 || column.toLowerCase().indexOf('companycustomfield_') !== -1;\n\t\t\t\t\t}) != null;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsetting.hasCustomFields = false;\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t\treturn model;\n\t}\n});\n\nPJQ.models.projectParticipants.ProjectMessageDeclineQuestionSettings = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessaging'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'declinequestion'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'settings'\n\t\t\t}\n\t\t]);\n\t}\n});\n\n//Collections\nPJQ.collections.projectParticipants.ProjectParticipantsForView = PJQ.collections.BaseCollection.extend({\n\tbeforeConstruct: function (models, options) {\n\t\tswitch (options.view) {\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCOMP:\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCONT:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectGroupForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.MSGCONT:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectMessageForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.RSPCONT:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectResponseForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCOMP_COMP:\n\t\t\tcase PJQ.constants.projectMessaging.views.COMP:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectParticipantCompanyForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCOMP_COMP_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.GROUPCONT_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.RSPCONT_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.MSGCONT_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.COMP_CONT:\n\t\t\tcase PJQ.constants.projectMessaging.views.CONT:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectParticipantForView;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.projectMessaging.views.CONTGROUP:\n\t\t\t\tthis.model = PJQ.models.projectParticipants.ProjectParticipantGroupForView;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'views'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: this.options.view\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'contactId',\n\t\t\t\tvalue: this.options.contactId\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'contactCompanyId',\n\t\t\t\tvalue: this.options.contactCompanyId\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'groupIdList',\n\t\t\t\tvalue: this.options.groupIdList\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'projectMessageId',\n\t\t\t\tvalue: this.options.projectMessageId\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'statusFilter',\n\t\t\t\tvalue: this.options.statusFilter\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'isPerGroup',\n\t\t\t\tvalue: this.options.isPerGroup\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'searchFor',\n\t\t\t\tvalue: encodeURIComponent(this.options.searchFor ? this.options.searchFor : '')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'withCustomFields',\n\t\t\t\tvalue: this.options.withCustomFields != null ? this.options.withCustomFields : false\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'bidPackageId',\n\t\t\t\tvalue: this.options.bidPackageId\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.collections.projectParticipants.ProjectParticipantComments = PJQ.collections.BaseCollection.extend({\n\tidAttribute: 'commentId',\n\tmodel: PJQ.models.projectParticipants.ProjectContactComment,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.options.isCompanyComments ? this.options.participant.get('contactCompanyId') : this.options.participant.get('contactId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'comments'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'isCompanyComments',\n\t\t\t\tvalue: this.options.isCompanyComments\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.collections.projectParticipants.ProjectParticipantGroups = PJQ.collections.BaseCollection.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: \"projects\",\n\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: \"participants\",\n\t\t\t\tvalue: this.options.contactId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: \"groups\"\n\t\t\t}\n\t\t]);\n\t}\n});\n","PJQ.views.projects.QuickAddParticipantsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Quick-Add-Participants'),\n\t\tminWidth: '400px',\n\t\tonSave: null\n\t},\n\tevents: {\n\t\t'keyup .input-email': 'emailChanged',\n\t\t'click .btn-add': 'addParticipant'\n\t},\n\temailChanged: function (e) {\n\t\tthis.$('.btn-add').prop('disabled', _.size($(e.currentTarget).val()) === 0);\n\t},\n\taddParticipant: function () {\n\t\tlet emails = this.$('.input-email').val().split(';');\n\t\t_.each(emails, function (email) {\n\t\t\tlet newParticipant = new PJQ.models.projectParticipants.ProjectParticipant({\n\t\t\t\tproject: this.options.project,\n\t\t\t\temail: email,\n\t\t\t\tgroups: null,\n\t\t\t\tisQuickAdd: true\n\t\t\t});\n\t\t\tnewParticipant.save(null, {\n\t\t\t\tnotify: false,\n\t\t\t\tsuccess: _.bind(function (mod, data) {\n\t\t\t\t\tif (newParticipant.get('projectId') == null && newParticipant.groups != null && _.size(newParticipant.groups.models) > 0) {\n\t\t\t\t\t\tnewParticipant.set({\n\t\t\t\t\t\t\tid: null,\n\t\t\t\t\t\t\tprojectId: this.options.project.id\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnew PJQ.views.groups.SelectGroupsModal({\n\t\t\t\t\t\t\talertText: 'Select trades to add with this participant',\n\t\t\t\t\t\t\tselectorOptions: {\n\t\t\t\t\t\t\t\tincludeGroupIds: _.map(newParticipant.groups.models, function (group) {\n\t\t\t\t\t\t\t\t\treturn group.id;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonSave: _.bind(function (groups) {\n\t\t\t\t\t\t\t\tnewParticipant.groups.reset(groups.selected);\n\t\t\t\t\t\t\t\tnewParticipant.save(null, {\n\t\t\t\t\t\t\t\t\tnotify: false,\n\t\t\t\t\t\t\t\t\tsuccess: _.bind(function (mod, data) {\n\t\t\t\t\t\t\t\t\t\tthis.removeModal();\n\t\t\t\t\t\t\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\t\t\t\t\t\t\tthis.options.onSave(newParticipant);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\t\t\terror: _.bind(function () {\n\t\t\t\t\t\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\t\t\t\t\t\tmessage: newParticipant.get('email') + ' already exists on this project.'\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.removeModal();\n\t\t\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\t\t\tthis.options.onSave(newParticipant);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\terror: _.bind(function () {\n\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\tmessage: newParticipant.get('email') + ' already exists on this project.'\n\t\t\t\t\t});\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}, this);\n\t}\n});","PJQ.views.projects.AutoReport = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Auto-Report'),\n minWidth: '800px'\n },\n events: {\n 'click .export-pdf': 'exportPDF'\n },\n afterRender: function() {\n // fetch and display the report contents (in HTML format)\n let loader = new PJQ.Loader(this.$('div.report-content'));\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'autoreport'\n }\n ])\n }).get().done(_.bind(function (response) {\n loader.remove();\n jQuery('div.report-content').html(atob(response.data));\n jQuery('div.report-content div div table tbody tr td[width=\"100%\"]').attr('width', '0px');\n }, this));\n },\n exportPDF: function() {\n // export the report to PDF and serve up the download.\n PJQ.files.downloadFile(\n PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'autoreport'\n },\n {\n endpoint: 'export'\n }\n ])\n );\n }\n});"]}