{"version":3,"sources":["admin.js","archive.js","awaylog.js","dashboard.js","gx/authWorker.js","gx/initGx.js","logbook.js","login.js","manage.js","navbar.js","portal.js","portalmanage.js","property.js","reports.js","servicerequests.js","shifts.js","site.js","staff.js","start.js","stats.js","tasks.js","ultimate.js","vendors.js"],"names":["window","receiversTable","awayLogTable","awayLogTableFromPortal","autoAdmitTable","autoAdmitOverviewTable","autoAdmitFromPortalTable","headsupTable","broadcastTable","receiversTableOnChangeDisabled","receiversEdited","receiversDeleted","autoAdmitsDeleted","awayLogTableOnChangeDisabled","awayLogTableFromPortalOnChangeDisabled","autoAdmitVisitorType","autoAdmitVisitorCategory","autoAdmitVendorCategory","autoAdmitResidentCategory","autoAdmitCarType","autoAdmitPropertyType","autoAdmitTableOnChangeDisabled","autoAdmitOverviewTableOnChangeDisabled","autoAdmitFromPortalTableOnChangeDisabled","headsupTableOnChangeDisabled","broadcastTableOnChangeDisabled","unitsAlreadyInAwayLog","notificationByOptionsFromNumber","notifyBy","ret","notificationWhenOptionsFromNumber","notifyWhen","arr","push","length","join","broadcastExemptFromNumber","setting","CreatePeopleTables","residentTerm","dateFormat","capitalizeFirstLetterPeoplesPage","tableHeight","innerHeight","menuWidth","pageMarginAndPaddingTotal","location","href","indexOf","tableWidth","innerWidth","addEventListener","event","console","log","newWidth","$","width","jexcel","document","getElementById","allowManualInsertColumn","allowInsertColumn","allowDeleteColumn","allowRenameColumn","allowInsertRow","allowManualInsertRow","allowManualDeleteRow","columnDrag","data","pagination","minDimensions","search","columnSorting","tableOverflow","columns","title","type","readOnly","wordWrap","onload","instance","find","each","i","obj","residentUnitValue","text","css","prepend","border","margin-top","onbeforechange","cell","x","y","value","setValueFromCoords","onbeforedeleterow","numOfRows","idsStr","deletedReceiverId","parseInt","getRowData","isNaN","e","DotNet","invokeMethodAsync","oneditionstart","onselection","x1","y1","x2","y2","origin","updateSelectionFromCoords","onbeforeinsertrow","cel","val","alert","onchange","rowResize","receiverUnits","receiverNames","receiversInCacheCount","receiversCache","rowValue","isEmptyOrSpaces","awayLogResidentDropdownFilter","c","r","source","allReceivers","allReceiversCount","receiversInTableAll","getColumnData","receiversInTable","receiversToDisplay","rowCount","receiversInTableCount","ix","jx","receiverAlreadyInTable","kx","toLowerCase","trim","filter","options","format","multiple","border-color","border-width","border-style","attr","columnValue","receiverLookedUp","dataChangedValue","lastReceiverLookedUpCache","html","allowDeleteRow","selectionCopy","resetSelection","t","getSelectedColumns","removeClass","parent","residentNameDropdown","async","personsNameList","then","sort","screenNameDropdown","allowExport","setTimeout","time","PopulateAutoAdmitTable","admitType","receiversInDatabase","col4Title","col7Title","col8Title","setHeader","autoAdmitsStrings","autoAdmits","autoAdmitsFromPortal","forEach","receiver","receiverAllowList","gatehouseGridRowCounter","portalGridRowCounter","receiverCount","k","autoAdmitForReceiver","JSON","parse","line","updatedString","autoAdmitCreatedFormatted","autoAdmitCreatedFormattedIso","currentRowNumber","gridIndex","autoAdmitAddedByReceiver","createPassGridButton","autoAdmitId","assignTransponderAutoAdmit","EntrancesAutoAdmitGridButton","RemoveAutoAdmitGridButton","extraAutoAdmit","category","autoAdmitCategory","col4Val","autoAdmitDriverLicense","col7Val","autoAdmitRepresentative","col8Val","autoAdmitReceiverRelation","receiverName","screenNames","autoAdmitScreenIdsAllowList","dataObject","autoAdmitName","autoAdmitPlateNumber","autoAdmitIdentification","autoAdmitPhone","autoAdmitRfidTagBlob","autoAdmitDue","timestampToJexcelDate","autoAdmitDueFrom","autoAdmitDueTo","autoAdmitDescription","autoAdmitBanned","autoAdmitComment","setData","PopulateBroadcastAndHeadsup","receiversInDatabaseString","receiversInDatabaseConst","BINDING","conv_string","broadcastExempts","headsUpsStrings","receiverBroadcastExemptSetting","receiverUnit","receiverHeadsUpList","headsUps","k2","headsUpForReceiver","kx2","ReceiverUnit","ReceiverName","HeadsUpFrom","HeadsUpTo","CheckInAlert","HeadsUpNotes","AddRow","arg","ReadAutoAdmitGrid","autoAdmitGridIndex","resultr","datar","getJson","row","AutoAdmitId","AutoAdmitName","AutoAdmitPlateNumber","AutoAdmitCategory","AutoAdmitDriverLicense","AutoAdmitIdentification","AutoAdmitPhone","AutoAdmitRepresentative","String","AutoAdmitReceiverRelation","AutoAdmitDue","AutoAdmitDueFrom","jexcelDateTimeParse","AutoAdmitDueTo","AutoAdmitDescription","AutoAdmitBanned","AutoAdmitComment","AutoAdmitScreenIdsAllowList","AutoAdmitRfidTag","AutoAdmitRfidTagBlob","toString","AutoAdmitAddedByReceiver","ReadHeadsUpGrid","ReadBroadcastExemptListGrid","ReceiverBroadcastExemptSetting","SaveReceiversTable","args","SaveAutoAdmitTable","result","autoAdmitList","autoAdmitListFromPortal","concat","GetReceiversToDelete","ResetReceiversToDelete","PopulateAwayLog","awaylog","receiverAwayEnabled","receiverAwayFrom","receiverAwayTo","receiverHoldsEnabled","receiverHoldsWhat","receiverHoldsFrom","receiverHoldsTo","receiverHoldsOther","receiverHoldsComment","SaveAwayLogTable","ReceiverAwayEnabled","ReceiverAwayFrom","ReceiverAwayTo","ReceiverHoldsEnabled","ReceiverHoldsWhat","ReceiverHoldsFrom","ReceiverHoldsTo","ReceiverHoldsOther","ReceiverHoldsComment","SaveAwayLogTableFromPortal","AwayLogReceiverUnit","AwayLogReceiverName","AwayLogIsEnabled","AwayLogDueFrom","AwayLogDueTo","AwayLogHoldsEnabled","AwayLogHoldsWhat","AwayLogHoldsFrom","AwayLogHoldsTo","AwayLogHoldsOther","AwayLogComment","AwayLogDescription","awayLogId","AwayLogId","SaveGuardsTable","guardsTable","GuardName","GuardEmail","GuardPhonenumber","GuardNumber","GuardColorShift","GuardLicensePlate","GetCheckoutMethod","radios","getElementsByName","checked","FileChosen","fileName","prop","name","innerHTML","FileChosenPortalImage","UploadFile","screenid","url","release","file_data","form_data","FormData","append","ajax","dataType","cache","contentType","processData","beforeSend","xhr","setRequestHeader","success","response","error","UploadWelcomeImageFile","myFunction","className","replace","showPeopleNotificationToast","message","confirmPinChange","newPinToDisplay","swal","showCancelButton","confirmButtonClass","confirmButtonText","closeOnConfirm","showColumnHelp","imageUrl","customClass","imageSize","showTextServiceLicense","showReceiverUnitDuplicateError","initSortable","ready","sortable","connectWith","placeholder","update","requiredInputsInOrder1","GetRequiredInputsConfiguration","requiredInputsInOrder2","requiredInputsInOrder3","el","requiredInputArray","index","element","requiredInputId","requiredInputStatus","this","ShowAutoAdmitDetails","receiverId","unit","ManageResidents","GenerateAutoAdmitPass","gridRowNumber","rowNumber","rowData","RemoveAutoAdmit","OpenAutoAdmitSchedule","OpenAutoAdmitEntrances","AssignTransponderAutoAdmit","ExtraAutoAdmit","confirmRevokePass","autoAdmitPassId","cancelButtonText","confirmEmailPass","blobIdentifier","inputPlaceholder","inputValue","showInputError","validateEmail","setAppGuideScreenPinDisplay","pin","appGuideNext","carousel","appGuidePrev","createIssuedPassTooltip","tippy","content","allowHTML","cacheAwayLogTableHeight","cacheAwayLogTableIsExpanded","setAwayLogTableHeight","toogleAwayLogTableHeight","readMaxHeight","newHeight","maxHeight","cacheAutoAdmitDetailsTableHeight","cacheAutoAdmitDetailsTableIsExpanded","setAutoAdmitDetailsTableHeight","toogleAutoAdmitDetailsTableHeight","string","charAt","toUpperCase","slice","triggerGetListTableDataFromListPage","handler","triggerGetListTableDataOverviewFromListPage","setReceiversCacheFromComponentUnmarshalled","cacheString","receiversConst","archiveAnnouncementsTable","archiveNotificationsTable","CreateArchiveTables","severityNameLookup","severity","PopulateAnnouncementArchiveTable","announcementsInDatabase","dateformat","announcements","announcement","timestampToUsDate","announcementCreated","announcementExpires","announcementAuthor","announcementReceiverUnit","announcementReceiverName","announcementSeverity","announcementText","translateNotificationMode","notification","notificationBroadcast","notificationManual","PopulateNotificationsArchiveTable","notificationsInDatabase","notifications","notificationType","notificationTimestamp","notificationStatus","notificationReceiverUnit","notificationReceiverName","notificationPhoneNumber","notificationText","awayLogSummaryTable","InitAwayLogSummaryDataTable","destroy","DataTable","order","pageLength","autoWidth","columnDefs","targets","language","emptyTable","info","infoEmpty","infoFiltered","lengthMenu","render","awayLogSummaryToDate","on","taskNumberParsed","taskNumber","resultDate","dd","getDate","yy","getFullYear","parsedDate","moment","FilterTaskDataTableOnAssignedTo","assignedToName","draw","RemoveAssignedToFilterAwayLogSummaryDataTable","PopulateToAwayLogSummaryDataTable","rows","summary","awayLogSummaryEntryUnit","awayLogSummaryEntryName","description","awayLogSummaryEntryDescription","departed","awayLogSummaryEntryDeparted","Date","returning","awayLogSummaryEntryReturning","duration","awayLogSummaryEntryDurationFormatted","returnsin","awayLogSummaryEntryReturnsInFormatted","awayLogSummaryEntryExtra","remove","add","excelTableDashboard","excelTableLog","excelTableCheckedInLog","excelTableCheckedInLogVendor","excelTableCheckedInLogEvents","excelTableCheckedInLogHosts","excelTableCompleteLog","excelTableCompleteLogVendor","excelTableCheckedInLogElement","excelTableCheckedInLogElementVendor","excelTableCheckedInLogElementEvents","excelTableCheckedInLogElementHosts","excelTableCompleteLogElement","excelTableCompleteLogElementVendor","GetTableData","Name","Surname","Email","Phone","CreateCheckedInGridForDashboard","vendor","siteType","requiredInputs","imageUploadEnabled","widthForGrid","CalculateGridWidthSpace","columnWidth","columnHeaderTitle","getColumnName","id","columnLength","filters","RefreshCheckedInGridForDashboard","checkinData","RefreshCompleteGridForDashboard","CreateCompleteCheckedInGridForDashboard","screen","dashboardCheckinDateRangePickerElementId","dashboardCheckinDateRangePickerStartSelected","dashboardCheckinDateRangePickerEndSelected","dashboardCheckoutDateRangePickerElementId","dashboardCheckoutDateRangePickerStartSelected","dashboardCheckoutDateRangePickerEndSelected","buildDashboardsDateRangePickers","daterangepicker","start","end","label","toISOString","getDashboardCheckinDateRangePickerStartSelected","getDashboardCheckinDateRangePickerEndSelected","getDashboardCheckoutDateRangePickerStartSelected","getDashboardCheckoutDateRangePickerEndSelected","checkoutCurrentGridConfirm","visitorCountToBeCheckedOut","visitorTitle","checkoutAllConfirm","siteName","CalculateWidthForVisitTimeline","visitTimelineBaseHolderWidth","tippyInstancesDashboard","createTimelineVisitTooltip","tippyInstance","clearTippyInstancesDashboard","tippyInstancesCount","hide","disable","showGuardOnDutyColumn","visible","showColumn","hideColumn","dashboardDisplayImage","checkinId","openDashboardDisplayCheckinImageModal","modal","ShowLogbookFullText","confirmClearLogbook","logbookId","InitOperationResidentSpecificLogbookTypeahead","people","peopleRaw","count","buildTypeahead","SetResidentSpecificCheckboxToFalse","logbookSentSuccess","showConfirmButton","timer","InitLoginPage","RedirectTo","path","RedirectToRaw","ShowSuccessRegistration","clientJsMethods","confirmSiteDeletion","siteNameToDelete","siteId","templatesSavedSuccess","defaultMessagesSavedSuccess","confirmSetDefaults","arg0","arg1","confirmSaveTemplates","toggleEditGuardDeviceDialog","guardDeviceId","closeEditGuardDeviceDialog","confirmDeleteDevice","toggleEditIpNumberDialog","ipNumberId","closeEditIpNumberDialog","confirmDeleteIpNumber","ForceDefaultTextSwitchInAccountPage","replaceStartTextURLs","hyperlink","match","DisplayUserAdminStartCustomText","htmlToDisplay","siteMemberInviteSentSuccess","confirmDeleteSiteMember","siteMemberId","toggleEditSiteMemberDialog","closeEditSiteMemberDialog","toggleEditRoleDialog","closeEditRoleDialog","StartCreateNewScreen","copyScreenUrl","copyText","select","setSelectionRange","execCommand","SetScreenDisplayLink","screenlink","mainurl","style","visibility","arrow","ShowAppPwaInformation","SetScreenDisplayTitle","closeNav","toggleClass","showSideBar","addClass","hideSideBar","initSystemPopover","down","click","memoTable","InitMemoDataTable","memoNumber","FilterMemoDataTableOnAssignedTo","RemoveAssignedToFilterMemoDataTable","PopulateToMemoDataTable","memos","memoId","created","memoCreated","memoTitle","author","memoAuthor","memoText","ReloadMemoDataTable","createPortalPageTooltip","confirmSetAllActivated","allEnabled","deleteMemoFromgrid","reKeyPortal","portalCode","recreateCode","is","showSendPortalInformationMessageModal","InitPortalInfoResidentsTypeahead","email","receiverPhonenumber","receiverEmail","showPortalInfoInvalidEmailAddress","confirmSendPortalInfo","residentUnit","residentName","emailAddress","includeCredentials","portalEditRequestPendingTable","portalEditRequestAcceptedTable","portalEditRequestPendingTableOnChangeDisabled","portalEditRequestAcceptedTableOnChangeDisabled","CreatePortalEditRequestTables","proxyPopulatePendingEditRequestTable","editRequestsPending","proxyPopulateAcceptedEditRequestTable","editRequestsAccepted","HandlePortalRequest","act","portalRequestId","startHandleAll","argument","confirmRemoveProperty","propertyName","propertyId","FileChosenPropertyImage","UploadPropertyImageFile","propertyid","reportDateRangePickerElementId","reportDateRangePickerStartSelected","reportDateRangePickerEndSelected","buildReportsDateRangePicker","getDateRangerPickerStartSelected","getDateRangerPickerEndSelected","showReportGenerationModal","reportNumber","hideReportGenerationModal","initSortableReports","requiredInputsInOrder","serviceRequestTable","InitServiceRequestDataTable","documentElement","setProperty","split","serviceRequestNumberParsed","serviceRequestNumber","FilterServiceRequestDataTableOnAssignedTo","RemoveAssignedToFilterServiceRequestDataTable","PopulateToServiceRequestDataTable","serviceRequests","serviceRequestId","serviceRequestUnit","serviceRequestLocation","serviceRequestTimestamp","duedate","serviceRequestDueDate","priority","serviceRequestPriority","typeCategoryList","serviceRequestTypeCategoryList","serviceRequestTitle","followUpNeeded","serviceRequestFollowUpNeeded","assignedTo","serviceRequestAssignedTo","serviceRequestReceiverUnit","serviceRequestText","ReloadServiceRequestDataTable","ForceStateSelectIndex","valueToSelect","ForcePrioritySelectIndex","InitServiceRequestViewGuardsTypeahead","guards","guardsRaw","guardName","InitServiceRequestViewAssignedToGuardsTypeahead","InitServiceRequestViewResidentsTypeahead","InitServiceRequestViewVendorsTypeahead","vendors","vendorsRaw","vendorName","InitServiceRequestViewVendorsAssignedtoTypeahead","serviceRequestDueDateRangePickerElementId","serviceRequestDueDateRangePickerStartSelected","lastServiceRequestViewDateRangeValueShown","buildServiceRequestDueDateRangePickers","startDate","ev","picker","n2","date","month","year","container","currentValue","singleDatePicker","timePicker","setServiceRequestDueDateRangerPickerDate","dateToSet","setStartDate","setEndDate","getServiceRequestDueDateRangePickerStartSelected","serviceRequestBoardApprovalDateRangePickerElementId","serviceRequestBoardApprovalDateRangePickerStartSelected","lastServiceRequestViewBoardApprovalDateRangeValueShown","buildServiceRequestBoardApprovalDateRangePickers","setServiceRequestBoardApprovalDateRangerPickerDate","getServiceRequestBoardApprovalDateRangePickerStartSelected","serviceRequestCompletedOnDateRangePickerElementId","serviceRequestCompletedOnDateRangePickerStartSelected","lastServiceRequestViewCompletedOnDateRangeValueShown","buildServiceRequestCompletedOnDateRangePickers","setServiceRequestCompletedOnDateRangerPickerDate","getServiceRequestCompletedOnDateRangePickerStartSelected","maintenanceServiceRequestDone","maintenanceServiceRequestId","buttonElement","removeAllDoneButtonAnimations","createMaintenanceServiceRequestStatusTooltip","overdue","ongoing","endsSoon","createMaintenanceServiceRequestTooltip","showMaintenanceServiceRequestModalInfo","maintenanceServiceRequest","maintenanceServiceRequestTitle","maintenanceServiceRequestIntervalDescription","show","maintenanceServiceRequestDescriptionHelpInfo","helpInfoMessageText","maintenanceServiceRequestDescription","uploadServiceRequestImage","inputid","blobidentifier","StartServiceRequestImageUpload","FileChosenServiceRequest","serviceRequestDisplayImage","openServiceRequestDisplayImageModal","excelTableGuardShiftLog","excelTableGuardShiftLogElement","CreateGuardShiftListGrid","RefreshGuardShiftListGrid","guardShiftData","shiftsDateRangePickerElementId","shiftsDateRangePickerStartSelected","shiftsDateRangePickerEndSelected","buildShiftsDateRangePickers","getShiftsDateRangePickerStartSelected","getShiftsDateRangePickerEndSelected","CalculateWidthForTimeline","shiftTimelineBaseHolderWidth","createShiftTimelineTooltip","GetLocalTimestamp","getMonth","getHours","getMinutes","getSeconds","TGetYear","TGetMonth","TGetDate","TGetHour","TGetMinute","TGetSeconds","TWriteLine","CreateGuardsTable","guardTerm","PopulateGuardsTable","guardsInDatabase","guard","guardEmail","guardPhonenumber","guardNumber","guardColorShift","guardLicensePlate","showGuardDuplicateError","initStaffColorPicker","colorPicker","preview","setStaffColorPicker","col","backgroundColor","getStaffColorPickerValue","toggleNewStaffDialog","staffId","closeNewStaffDialog","FileChosenStaffProfileImage","auth","clearStaffProfilePictureInput","StartProfileUpload","clearInputFile","StartRemoveProfilePicture","StartDeleteStaff","animation","showStaffDuplicateError","openSiteItem","chartColors","red","orange","yellow","green","blue","purple","grey","buildBusyHoursGraph","busyHoursData","dataArray","labelArray","busyHoursCountDistribution","barChartData","labels","datasets","borderColor","borderWidth","ctx","getContext","myBar","Chart","responsive","legend","position","display","scales","xAxes","gridLines","scaleLabel","labelString","yAxes","ticks","taskTable","InitTaskDataTable","circleColor","stateText","RemoveAssignedToFilterTaskDataTable","PopulateToTaskDataTable","tasks","taskId","state","taskState","taskCreated","taskDueDate","taskPriority","taskTitle","taskAssignedTo","taskReceiverUnit","taskText","ReloadTaskDataTable","InitTaskViewGuardsTypeahead","InitTaskViewResidentsTypeahead","peopleString","peopleConst","taskDueDateRangePickerElementId","taskDueDateRangePickerStartSelected","lastTaskViewDateRangeValueShown","buildTaskDueDateRangePickers","setTaskDueDateRangerPickerDate","getTaskDueDateRangePickerStartSelected","maintenanceTaskDone","maintenanceTaskId","createMaintenanceTaskStatusTooltip","createMaintenanceTaskTooltip","showMaintenanceTaskModalInfo","maintenanceTask","maintenanceTaskTitle","maintenanceTaskIntervalDescription","maintenanceTaskDescriptionHelpInfo","maintenanceTaskDescription","includePayPalLibrary","customScript","createElement","setAttribute","head","appendChild","buildPayPalButtons","subscriptionId","paypal","Buttons","shape","color","layout","createSubscription","actions","subscription","create","plan_id","quantity","onApprove","subscriptionID","vendorsTable","vendorsTypesTable","vendorsAutoAdmitTable","vendorsTableOnChangeDisabled","vendorsTypesTableOnChangeDisabled","vendorsAutoAdmitTableOnChangeDisabled","CreateVendorTables","vendorTypes","vendorTypesToDisplay","defaultVendors","vendorTypesCount","vx","vendorTypeName","BuildVendorsAutoAdmitTable","vendorsInDatabase","vendorNames","PopulateVendorAutoAdmitTable","vendorAutoAdmitsStrings","vendorAutoAdmits","vendorReceiverAutoAllowList","vendorCount","vendorAutoAdmitForVendor","VendorName","VendorAutoAdmitName","VendorAutoAdmitReceiverRelation","VendorAutoAdmitDue","VendorAutoAdmitDueFrom","VendorAutoAdmitDueTo","VendorAutoAdmitBanned","VendorAutoAdmitComment","ReadVendorAutoAdmitGrid","vendorAutoAdmitName","PopulateVendorsTable","vendorType","vendorRepresentative","vendorVehicleRegistrationPlate","vendorInsuranceRequired","vendorInsuranceOnFile","vendorInsuranceExpirationDate","vendorComment","SaveVendorsTable","vendorAutoAdmitList","vendorAutoAdmitCount","allowList","rowVendorName","j","trimEnd","VendorReceiverAutoAllowList","stringify","setDefaultVendors","PopulateVendorsTypesTable","vendorsTypeInDatabase","vendorsTypes","vendorTypeDescription","SaveVendorsTypesTable","VendorTypeName","SaveVendorsLogTable","VendorUnit","VendorAwayEnabled","VendorAwayFrom","VendorAwayTo","VendorHoldsEnabled","VendorHoldsWhat","VendorHoldsFrom","VendorHoldsTo","VendorHoldsOther","VendorHoldsComment","showVendorsNotificationToast","GenerateVendorAutoAdmitPass","getSelectedRows","cells"],"mappings":"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","file":"vf.min.js","sourcesContent":["window.receiversTable = null;\r\nvar receiversTableOnChangeDisabled = false;\r\nvar receiversEdited = [];\r\nvar receiversDeleted = [];\r\n\r\nvar autoAdmitsDeleted = [];\r\n\r\nvar awayLogTable;\r\nvar awayLogTableOnChangeDisabled = false;\r\n\r\nvar awayLogTableFromPortal;\r\nvar awayLogTableFromPortalOnChangeDisabled = false;\r\n\r\n\r\nvar autoAdmitVisitorType = 0;\r\nvar autoAdmitVisitorCategory = 0;\r\nvar autoAdmitVendorCategory = 1;\r\nvar autoAdmitResidentCategory = 4;\r\n\r\nvar autoAdmitCarType = 1;\r\nvar autoAdmitPropertyType = 1;\r\n\r\n\r\n\r\nvar autoAdmitTable;\r\nvar autoAdmitTableOnChangeDisabled = false;\r\n\r\nvar autoAdmitOverviewTable;\r\nvar autoAdmitOverviewTableOnChangeDisabled = false;\r\n\r\nvar autoAdmitFromPortalTable;\r\nvar autoAdmitFromPortalTableOnChangeDisabled = false;\r\n\r\n//var autoAdmitPassesTable;\r\n//var autoAdmitPassesTableOnChangeDisabled = false;\r\n\r\n\r\n\r\nvar headsupTable\r\nvar headsupTableOnChangeDisabled = false;\r\n\r\nvar broadcastTable\r\nvar broadcastTableOnChangeDisabled = false;\r\n\r\nvar unitsAlreadyInAwayLog = [];\r\n\r\nfunction notificationByOptionsFromNumber(notifyBy) {\r\n\r\n var ret = \"\";\r\n if (notifyBy == 3) {\r\n ret = \"Email;Text\";\r\n }\r\n else if (notifyBy == 2) {\r\n ret = \"Email\";\r\n }\r\n else if (notifyBy == 1) {\r\n ret = \"Text\";\r\n }\r\n return ret;\r\n}\r\n\r\nfunction notificationWhenOptionsFromNumber(notifyWhen) {\r\n\r\n\r\n var arr = [];\r\n\r\n var ret = \"\";\r\n\r\n if ((notifyWhen & 1) > 0) {\r\n arr.push(\"Visitor\");\r\n }\r\n if ((notifyWhen & 2) > 0) {\r\n arr.push(\"Vendor\");\r\n }\r\n if ((notifyWhen & 4) > 0) {\r\n arr.push(\"Auto-Admit visitor\");\r\n }\r\n if ((notifyWhen & 8) > 0) {\r\n arr.push(\"Parcel\");\r\n }\r\n if ((notifyWhen & 16) > 0) {\r\n arr.push(\"Visitor turned away\");\r\n }\r\n\r\n\r\n\r\n\r\n\r\n if (arr.length > 0) {\r\n ret = arr.join(\";\");\r\n }\r\n\r\n //console.log(\"parsed notifyWhen : \" + notifyWhen + \" to : \" + ret);\r\n // console.log(ret);\r\n\r\n return ret;\r\n}\r\n\r\nfunction broadcastExemptFromNumber(setting) {\r\n\r\n var ret = \"\";\r\n if (setting == 3) {\r\n ret = \"Both\";\r\n }\r\n else if (setting == 2) {\r\n ret = \"Emails\";\r\n }\r\n else if (setting == 1) {\r\n ret = \"Texts\";\r\n }\r\n return ret;\r\n}\r\n\r\n\r\n\r\n\r\nfunction CreatePeopleTables(residentTerm, dateFormat) {\r\n\r\n residentTerm = capitalizeFirstLetterPeoplesPage(residentTerm);\r\n\r\n var tableHeight = window.innerHeight - 128 - 256\r\n\r\n if (tableHeight < 256) {\r\n tableHeight = 256;\r\n }\r\n\r\n var showIndex = false;\r\n\r\n var menuWidth = 250;\r\n\r\n var pageMarginAndPaddingTotal = 100;\r\n\r\n if (window.location.href.indexOf(\"screen/people\") > -1) {\r\n pageMarginAndPaddingTotal = 64;\r\n menuWidth = 0;\r\n\r\n tableHeight = window.innerHeight - 300 - 48;\r\n }\r\n\r\n var tableWidth = window.innerWidth - menuWidth - pageMarginAndPaddingTotal;\r\n\r\n window.addEventListener('resize', function (event) {\r\n\r\n if (window.location.href.indexOf(\"screen/people\") > -1) {\r\n pageMarginAndPaddingTotal = 0;\r\n menuWidth = 0;\r\n\r\n if (tableHeight < 256) {\r\n tableHeight = 256;\r\n }\r\n\r\n var newHeight = window.innerHeight - 300 - 48;\r\n console.log(\"window.innerHeight is \" + window.innerHeight);\r\n //$('#receivers .jexcel_content').css({ \"maxHeight\": newHeight + \"px\" });\r\n //$('#awayloggrid .jexcel_content').css({ \"maxHeight\": newHeight + \"px\" });\r\n //$('#awayloggridportal .jexcel_content').css({ \"maxHeight\": newHeight + \"px\" });\r\n\r\n //$('#autoadmitgridoverview .jexcel_content').css({ \"maxHeight\": newHeight + \"px\" });\r\n //$('#autoadmitgrid .jexcel_content').css({ \"maxHeight\": newHeight / 3 + \"px\" });\r\n //$('#autoadmitgridfromportal .jexcel_content').css({ \"maxHeight\": newHeight / 3 + \"px\" });\r\n\r\n\r\n\r\n }\r\n\r\n var newWidth = window.innerWidth - menuWidth - pageMarginAndPaddingTotal;\r\n $('#receivers .jexcel_content').width(newWidth);\r\n $('#awayloggrid .jexcel_content').width(newWidth);\r\n $('#awayloggridportal .jexcel_content').width(newWidth);\r\n\r\n $('#autoadmitgridoverview .jexcel_content').width(newWidth);\r\n $('#autoadmitgrid .jexcel_content').width(newWidth);\r\n $('#autoadmitgridfromportal .jexcel_content').width(newWidth);\r\n }, true);\r\n\r\n \r\n window.receiversTable = jexcel(document.getElementById('receivers'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n allowInsertRow: false,\r\n allowManualInsertRow: false,\r\n allowManualDeleteRow: true,\r\n //allowDeleteRow: false,\r\n \r\n columnDrag: false,\r\n data: null,\r\n pagination: 100,\r\n tableWidth: tableWidth + 'px',\r\n tableHeight: tableHeight + 'px',\r\n minDimensions: [2, 0],\r\n search: true,\r\n columnSorting: false,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'ReceiverId',\r\n type: 'hidden',\r\n width: '20px',\r\n },\r\n {\r\n title: 'Edited',\r\n type: 'hidden',\r\n width: '20px',\r\n },\r\n {\r\n title: 'Unit',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Unit Group',\r\n type: 'text',\r\n width: '140px',\r\n readOnly: true\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Name',\r\n type: 'string',\r\n width: '240px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Cell Phone',\r\n type: 'text',\r\n width: '140px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Home Phone',\r\n type: 'text',\r\n width: '140px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Email',\r\n type: 'text',\r\n width: '140px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Comment',\r\n type: 'text',\r\n width: '140px',\r\n wordWrap: true,\r\n readOnly: true\r\n },\r\n {\r\n title: 'Member #',\r\n type: 'text',\r\n width: '80px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Rented',\r\n type: 'checkbox',\r\n width: '60px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Req. Call',\r\n type: 'checkbox',\r\n width: '70px',\r\n readOnly: true\r\n },\r\n {\r\n title: ' ',\r\n type: 'html',\r\n width: '160px',\r\n wordWrap: true\r\n },\r\n //{\r\n // type: 'dropdown',\r\n // width: '150',\r\n // source: ['Email', 'Text'],\r\n // title: 'Auto notification opt',\r\n // multiple: true\r\n //},\r\n //{\r\n // type: 'dropdown',\r\n // width: '160',\r\n // source: ['Visitor', 'Vendor', 'Auto-Admit visitor', 'Parcel', 'Visitor turned away'],\r\n // title: 'Auto notification event',\r\n // multiple: true\r\n //}\r\n ],\r\n //toolbar: [\r\n // {\r\n // type: 'text',\r\n // content: 'New Resident',\r\n // width: '122px',\r\n // onclick: function () {\r\n // }\r\n // }],\r\n onload: function (instance) {\r\n\r\n \r\n //$($(instance).find('table')).each(function (i, obj) {\r\n // $(obj).addClass('jexcel_hidden_index');\r\n //});\r\n \r\n\r\n //console.log(instance);\r\n\r\n //if (!showIndex) {\r\n // $($(instance).find('table')).each(function (i, obj) {\r\n // $(obj).addClass('jexcel_hidden_index');\r\n // });\r\n //}\r\n\r\n\r\n $($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n var residentUnitValue = $(obj).text();\r\n\r\n if (residentUnitValue != null && residentUnitValue.length > 0 && i > 0) {\r\n\r\n // $(obj).css(\"color\", \"#ccc\");\r\n // $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"3\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"4\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f8f8f8\");\r\n $(obj).css(\"color\", \"#333\");\r\n });\r\n\r\n\r\n $($(instance).find('td[data-x=\"13\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n\r\n\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#people-residents-header-checkin-title\"));\r\n });\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n $(\".jexcel_search\").css({ \"margin-top\": \"20px\" });\r\n\r\n\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n \r\n if (!receiversTableOnChangeDisabled) {\r\n receiversTableOnChangeDisabled = true;\r\n console.log(\"set edit for x, y = \" + x + \", \" + y);\r\n window.receiversTable.setValueFromCoords(1, y, 'true', true);\r\n receiversTableOnChangeDisabled = false;\r\n }\r\n\r\n receiversEdited.push(y);\r\n \r\n },\r\n onbeforedeleterow: function (instance, y, numOfRows) {\r\n console.log(\"set delete for x, y = \" + y + \" and forward \" + numOfRows);\r\n var idsStr = \"\";\r\n for (var i = 0; i < numOfRows; i++) {\r\n try {\r\n var deletedReceiverId = parseInt(window.receiversTable.getRowData(y + i)[0]);\r\n if (!isNaN(deletedReceiverId)) {\r\n console.log(\"Deleted: \" + deletedReceiverId);\r\n receiversDeleted.push(deletedReceiverId);\r\n idsStr = idsStr + deletedReceiverId + \",\";\r\n }\r\n \r\n }\r\n catch (e) {\r\n\r\n }\r\n }\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStartDeleteReceiver', idsStr);\r\n\r\n\r\n\r\n \r\n\r\n },\r\n oneditionstart: function (instance, cell, x, y) {\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n //Used to jump to next column while marking the columnSeperator\r\n if (x1 == 4) {\r\n window.receiversTable.updateSelectionFromCoords(5, y1, 5, y2);\r\n console.log(\"selected\" + x1 + y1 + x2 + y2);\r\n }\r\n },\r\n onbeforeinsertrow: function (obj, cel, val) {\r\n alert(\"inserted row!\");\r\n },\r\n onchange: function (obj, cel, val) { },\r\n rowResize: true\r\n });\r\n \r\n console.log(\"recv table created\");\r\n\r\n\r\n var receiverUnits = [];\r\n var receiverNames = [];\r\n\r\n var receiversInCacheCount = receiversCache.length;\r\n for (var i = 0; i < receiversInCacheCount; i++) {\r\n\r\n var rowValue = receiversCache[i]['receiverUnit'];\r\n if (isEmptyOrSpaces(rowValue) == false) {\r\n receiverUnits.push(rowValue);\r\n }\r\n\r\n rowValue = receiversCache[i]['receiverName'];\r\n if (isEmptyOrSpaces(rowValue) == false) {\r\n receiverNames.push(rowValue);\r\n }\r\n }\r\n\r\n awayLogResidentDropdownFilter = function (instance, cell, c, r, source) {\r\n\r\n\r\n var allReceivers = receiverUnits;\r\n var allReceiversCount = allReceivers.length;\r\n\r\n var receiversInTableAll = awayLogTable.getColumnData(0);\r\n var receiversInTable = [];\r\n\r\n var receiversToDisplay = [];\r\n\r\n\r\n var rowCount = 100;\r\n if (receiversInTableAll != null) {\r\n rowCount = receiversInTableAll.length;\r\n }\r\n\r\n var receiversInTableCount = 0;\r\n for (var ix = 0; ix < rowCount; ix++) {\r\n if (receiversInTableAll[ix] != null && receiversInTableAll[ix] != \"\") {\r\n receiversInTable.push(receiversInTableAll[ix]);\r\n receiversInTableCount++;\r\n }\r\n }\r\n\r\n for (var jx = 0; jx < allReceiversCount; jx++) {\r\n var receiverAlreadyInTable = false;\r\n\r\n for (var kx = 0; kx < receiversInTableCount; kx++) {\r\n\r\n if (allReceivers[jx] != null && allReceivers[jx] != \"\") {\r\n try {\r\n if (allReceivers[jx].toLowerCase().trim() == receiversInTable[kx].toLowerCase().trim()) {\r\n receiverAlreadyInTable = true;\r\n break;\r\n }\r\n } catch (e) {\r\n\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n if (receiverAlreadyInTable == false) {\r\n receiversToDisplay.push(allReceivers[jx]);\r\n }\r\n }\r\n\r\n\r\n return receiversToDisplay;\r\n\r\n }\r\n\r\n\r\n\r\n\r\n awayLogTable = jexcel(document.getElementById('awayloggrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n tableHeight: tableHeight/2 + 'px',\r\n tableWidth: tableWidth + 'px',\r\n search: true,\r\n minDimensions: [2, 100],\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'AwayLogId',\r\n type: 'hidden',\r\n width: '200px',\r\n },\r\n {\r\n title: residentTerm + ' Unit',\r\n type: 'dropdown',\r\n source: receiverUnits,\r\n width: '220px',\r\n filter: awayLogResidentDropdownFilter\r\n },\r\n {\r\n title: residentTerm + ' Name',\r\n type: 'string',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Away',\r\n type: 'checkbox',\r\n width: '80px',\r\n },\r\n {\r\n title: 'Away from',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '120px',\r\n },\r\n {\r\n title: 'Away to',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '120px',\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Holds',\r\n type: 'checkbox',\r\n width: '80px',\r\n },\r\n {\r\n title: 'Holds content',\r\n type: 'dropdown',\r\n source: ['Mail', 'Parcels', 'Newspapers', 'Water delivery', 'Other (specify in Other)'],\r\n width: '150px',\r\n multiple: true,\r\n wordWrap: true\r\n },\r\n {\r\n title: 'Holds from',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '120px',\r\n },\r\n {\r\n title: 'Holds to',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '120px',\r\n },\r\n\r\n {\r\n title: 'Other',\r\n type: 'text',\r\n width: '150px',\r\n wordWrap: true\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Comment',\r\n type: 'text',\r\n width: '150px',\r\n wordWrap: true\r\n }\r\n //,\r\n //{\r\n // title: 'Desc.',\r\n // type: 'text',\r\n // width: '75px',\r\n // wordWrap: true\r\n //}\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n $($(instance).find('td[data-x=\"3\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"7\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"13\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#people-awaylog-header-checkin-title\"));\r\n });\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n\r\n\r\n\r\n $($(instance).find('.jexcel_content')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css({\r\n \"border-color\": \"#f0f0f0\",\r\n \"border-width\": \"1px\",\r\n \"border-style\": \"solid\"\r\n });\r\n }\r\n });\r\n \r\n \r\n\r\n\r\n },\r\n onchange: function (obj, cel, val) {\r\n // Used to avoid onchange event to propagate\r\n if (awayLogTableOnChangeDisabled) {\r\n return;\r\n }\r\n\r\n var checkinId = 0;\r\n var newValue = \"\";\r\n var columnToUpdate = \"\";\r\n\r\n\r\n\r\n //Grid coordinates of data just updated\r\n var x = parseInt($(cel).attr(\"data-x\"));\r\n var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n //We changed something in the first row / check in row\r\n\r\n //Check if the column we changed belongs to the Receiver data information\r\n if (x == 1) {\r\n //Get the ID of Receiver data changed\r\n\r\n var receiverLookedUp = null;\r\n //Get the string value of the data we just changed\r\n var dataChangedValue = awayLogTable.getRowData(y)[1];\r\n\r\n //Search through receivers that has a property with that data value\r\n for (var i = 0; i < receiversCache.length; i++) {\r\n if (receiversCache[i]['receiverUnit'] == dataChangedValue) {\r\n receiverLookedUp = receiversCache[i];\r\n }\r\n }\r\n\r\n //If we didnt find any receiver with corresponding data, return\r\n if (receiverLookedUp == null) {\r\n return;\r\n }\r\n\r\n lastReceiverLookedUpCache = receiverLookedUp;\r\n\r\n var columnX = 2;\r\n\r\n // Dont propagate onchange events\r\n awayLogTableOnChangeDisabled = true;\r\n\r\n // Fetch data from looked up receiver\r\n var columnValue = receiverLookedUp['receiverName'];\r\n\r\n // Set internal value\r\n awayLogTable.setValueFromCoords(columnX, y, columnValue, true);\r\n\r\n $($('#awayloggrid').find('td[data-x=\"2\"][data-y=\"' + y + '\"]')).each(function (i, obj) {\r\n //Set visual value, since we are using a custom dropdow. Setting the internal data wont update the visual data for some reason\r\n if (i == y) {\r\n $(obj).html(columnValue);\r\n }\r\n });\r\n\r\n awayLogTableOnChangeDisabled = false;\r\n\r\n\r\n }\r\n\r\n\r\n\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n //Used to jump to next column while marking the columnSeperator\r\n if (x1 == 3 || x1 == 7 || x1 == 13) {\r\n awayLogTable.updateSelectionFromCoords(x1 + 1, y1, x2 + 1, y2);\r\n console.log(\"selected\" + x1 + y1 + x2 + y2);\r\n }\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n });\r\n\r\n\r\n awayLogTableFromPortal = jexcel(document.getElementById('awayloggridportal'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n tableHeight: tableHeight / 2 + 'px',\r\n tableWidth: tableWidth + 'px',\r\n search: true,\r\n minDimensions: [2, 100],\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'AwayLogId',\r\n type: 'hidden',\r\n width: '200px',\r\n },\r\n {\r\n title: residentTerm + ' Unit',\r\n type: 'dropdown',\r\n source: receiverUnits,\r\n width: '220px',\r\n filter: awayLogResidentDropdownFilter\r\n },\r\n {\r\n title: residentTerm + ' Name',\r\n type: 'string',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Away',\r\n type: 'checkbox',\r\n width: '80px',\r\n },\r\n {\r\n title: 'Away from',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '120px',\r\n },\r\n {\r\n title: 'Away to',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '120px',\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Holds',\r\n type: 'checkbox',\r\n width: '80px',\r\n },\r\n {\r\n title: 'Holds content',\r\n type: 'dropdown',\r\n source: ['Mail', 'Parcels', 'Newspapers', 'Water delivery', 'Other (specify in Other)'],\r\n width: '150px',\r\n multiple: true,\r\n wordWrap: true\r\n },\r\n {\r\n title: 'Holds from',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '120px',\r\n },\r\n {\r\n title: 'Holds to',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '120px',\r\n },\r\n\r\n {\r\n title: 'Other',\r\n type: 'text',\r\n width: '150px',\r\n wordWrap: true\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Comment',\r\n type: 'text',\r\n width: '75px',\r\n wordWrap: true\r\n },\r\n {\r\n title: 'Desc.',\r\n type: 'text',\r\n width: '75px',\r\n wordWrap: true\r\n }\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n $($(instance).find('td[data-x=\"3\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"7\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"13\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#people-awaylogportal-header-checkin-title\"));\r\n });\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n\r\n\r\n\r\n $($(instance).find('.jexcel_content')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css({\r\n \"border-color\": \"#f0f0f0\",\r\n \"border-width\": \"1px\",\r\n \"border-style\": \"solid\"\r\n });\r\n }\r\n });\r\n\r\n },\r\n onchange: function (obj, cel, val) {\r\n // Used to avoid onchange event to propagate\r\n if (awayLogTableFromPortalOnChangeDisabled) {\r\n return;\r\n }\r\n\r\n var checkinId = 0;\r\n var newValue = \"\";\r\n var columnToUpdate = \"\";\r\n\r\n\r\n \r\n //Grid coordinates of data just updated\r\n var x = parseInt($(cel).attr(\"data-x\"));\r\n var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n //We changed something in the first row / check in row\r\n\r\n //Check if the column we changed belongs to the Receiver data information\r\n if (x == 1) {\r\n //Get the ID of Receiver data changed\r\n\r\n \r\n\r\n var receiverLookedUp = null;\r\n //Get the string value of the data we just changed\r\n var dataChangedValue = awayLogTableFromPortal.getRowData(y)[1];\r\n\r\n //Search through receivers that has a property with that data value\r\n for (var i = 0; i < receiversCache.length; i++) {\r\n if (receiversCache[i]['receiverUnit'] == dataChangedValue) {\r\n receiverLookedUp = receiversCache[i];\r\n }\r\n }\r\n\r\n //If we didnt find any receiver with corresponding data, return\r\n if (receiverLookedUp == null) {\r\n return;\r\n }\r\n\r\n lastReceiverLookedUpCache = receiverLookedUp;\r\n\r\n var columnX = 2;\r\n\r\n // Dont propagate onchange events\r\n awayLogTableFromPortalOnChangeDisabled = true;\r\n\r\n // Fetch data from looked up receiver\r\n var columnValue = receiverLookedUp['receiverName'];\r\n\r\n // Set internal value\r\n awayLogTableFromPortal.setValueFromCoords(columnX, y, columnValue, true);\r\n\r\n $($('#awayloggridportal').find('td[data-x=\"2\"][data-y=\"' + y + '\"]')).each(function (i, obj) {\r\n //Set visual value, since we are using a custom dropdow. Setting the internal data wont update the visual data for some reason\r\n if (i == y) {\r\n $(obj).html(columnValue);\r\n }\r\n });\r\n\r\n awayLogTableFromPortalOnChangeDisabled = false;\r\n\r\n\r\n }\r\n\r\n\r\n\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n //Used to jump to next column while marking the columnSeperator\r\n if (x1 == 3 || x1 == 7 || x1 == 13) {\r\n awayLogTableFromPortal.updateSelectionFromCoords(x1 + 1, y1, x2 + 1, y2);\r\n console.log(\"selected\" + x1 + y1 + x2 + y2);\r\n }\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n });\r\n\r\n autoAdmitOverviewTable = jexcel(document.getElementById('autoadmitgridoverview'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n allowInsertRow: false,\r\n allowManualInsertRow: false,\r\n allowDeleteRow: false,\r\n selectionCopy: false,\r\n columnDrag: false,\r\n data: null,\r\n pagination: 100,\r\n tableWidth: tableWidth + 'px',\r\n tableHeight: tableHeight + 'px',\r\n minDimensions: [2, 100],\r\n wordWrap: true,\r\n search: true,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: residentTerm + ' Unit',\r\n type: 'text',\r\n width: '250px',\r\n readOnly: true\r\n },\r\n {\r\n title: residentTerm + ' Name',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n readOnly: true\r\n },\r\n {\r\n title: ' ',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: ' ',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n //{\r\n // title: 'Property Access',\r\n // type: 'html',\r\n // width: '200px',\r\n // readOnly: true\r\n //},\r\n {\r\n title: 'Vehicle Access',\r\n type: 'html',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Auto-Admit Access',\r\n type: 'html',\r\n readOnly: true,\r\n width: '200px'\r\n },\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n\r\n $($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"5\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"6\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"7\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n\r\n $($(instance).find('td')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f8f8f8\");\r\n $(obj).css(\"color\", \"#333\");\r\n });\r\n\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#people-autoadmit-header-checkin-title\"));\r\n });\r\n\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n\r\n\r\n try {\r\n\r\n //$($(instance).find('td[data-x=\"7\"]')).each(function (i, obj) {\r\n // if (i == 0) {\r\n // $(obj).html('' + 'Property Access' + '');\r\n // }\r\n //});\r\n\r\n $($(instance).find('td[data-x=\"6\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).html('' + 'Vehicle Access' + '');\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"5\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).html('' + 'Auto-Admit Access' + '');\r\n }\r\n });\r\n \r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n\r\n },\r\n onchange: function (obj, cel, val) {\r\n // Used to avoid onchange event to propagate\r\n if (autoAdmitTableOnChangeDisabled) {\r\n return;\r\n }\r\n\r\n var checkinId = 0;\r\n var newValue = \"\";\r\n var columnToUpdate = \"\";\r\n\r\n //Grid coordinates of data just updated\r\n var x = parseInt($(cel).attr(\"data-x\"));\r\n var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n\r\n \r\n \r\n autoAdmitOverviewTable.resetSelection(false);\r\n\r\n ////Used to jump to next column while marking the columnSeperator\r\n //if (x1 == 2) {\r\n // autoAdmitOverviewTable.updateSelectionFromCoords(x1 + 1, y1, x2 + 1, y2);\r\n // console.log(\"selected\" + x1 + y1 + x2 + y2);\r\n //}\r\n\r\n /*\r\n var t = autoAdmitOverviewTable.getSelectedColumns(true);\r\n var buttonColumnIndex = 6;\r\n \r\n //Stop the selection if user selects checkin timestamp or checkout button cols\r\n if (t != null && (t.indexOf(buttonColumnIndex) >= 0 && t.indexOf(1) == -1)) {\r\n\r\n // autoAdmitOverviewTable.resetSelection(false);\r\n }*/\r\n\r\n var t = autoAdmitOverviewTable.getSelectedColumns(true);\r\n var buttonColumnIndex = 7;\r\n var buttonColumnIndex2 = 6;\r\n var buttonColumnIndex3 = 5;\r\n\r\n //Stop the selection if user selects checkin timestamp or checkout button cols\r\n if (t != null && ((t.indexOf(buttonColumnIndex) >= 0 || t.indexOf(buttonColumnIndex2) >= 0 || t.indexOf(buttonColumnIndex3) >= 0) && t.indexOf(1) == -1)) {\r\n\r\n \r\n\r\n $($(instance).find('td[data-x=\"5\"]')).each(function (i, obj) {\r\n\r\n\r\n $(obj).removeClass(\"highlight-selected\");\r\n\r\n $(obj).removeClass(\"highlight-top\");\r\n $(obj).removeClass(\"highlight-right\");\r\n $(obj).removeClass(\"highlight-bottom\");\r\n $(obj).removeClass(\"highlight-left\");\r\n\r\n $(obj).removeClass(\"selected\");\r\n\r\n $(obj).parent().removeClass(\"jexcel_corner\");\r\n $(obj).parent().parent().removeClass(\"jexcel_corner\");\r\n $(obj).parent().parent().parent().removeClass(\"jexcel_corner\");\r\n $(obj).parent().parent().parent().parent().removeClass(\"jexcel_corner\");\r\n $(obj).parent().parent().parent().parent().parent().removeClass(\"jexcel_corner\");\r\n\r\n //$('.jexcel_corner').css({ display: 'none' });\r\n //$(\".jexcel_corner\").css(\"display\", \"none\");\r\n //setTimeout(function () {\r\n // $(\".jexcel_corner\").css(\"display\", \"block\");\r\n //}, 3000);\r\n \r\n\r\n\r\n $(obj).removeClass(\"highlight\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"6\"]')).each(function (i, obj) {\r\n\r\n\r\n $(obj).removeClass(\"highlight-selected\");\r\n\r\n $(obj).removeClass(\"highlight-top\");\r\n $(obj).removeClass(\"highlight-right\");\r\n $(obj).removeClass(\"highlight-bottom\");\r\n $(obj).removeClass(\"highlight-left\");\r\n\r\n $(obj).removeClass(\"selected\");\r\n\r\n $(obj).removeClass(\"highlight\");\r\n });\r\n \r\n\r\n $($(instance).find('td[data-x=\"7\"]')).each(function (i, obj) {\r\n\r\n\r\n $(obj).removeClass(\"highlight-selected\");\r\n\r\n $(obj).removeClass(\"highlight-top\");\r\n $(obj).removeClass(\"highlight-right\");\r\n $(obj).removeClass(\"highlight-bottom\");\r\n $(obj).removeClass(\"highlight-left\");\r\n\r\n $(obj).removeClass(\"selected\");\r\n\r\n $(obj).removeClass(\"highlight\");\r\n });\r\n\r\n }\r\n\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n });\r\n\r\n residentNameDropdown = async function (instance, cell, c, r, source) {\r\n var personsNameList = ['', ''];\r\n\r\n var unit = '';\r\n\r\n var allPersonsForUnitPromise = DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'GetAllPersonsForUnitFromGrid', unit)\r\n .then(r => {\r\n return r;\r\n });\r\n\r\n personsNameList = await allPersonsForUnitPromise;\r\n\r\n try {\r\n personsNameList = personsNameList.sort();\r\n } catch (e) {\r\n }\r\n\r\n return personsNameList;\r\n }\r\n\r\n screenNameDropdown = async function (instance, cell, c, r, source) {\r\n var screenNameList = ['', ''];\r\n\r\n var unit = '';\r\n\r\n var allScreensPromise = DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'GetAllScreenNamesFromGrid', unit)\r\n .then(r => {\r\n return r;\r\n });\r\n\r\n screenNameList = await allScreensPromise;\r\n\r\n //try {\r\n // personsNameList = personsNameList.sort();\r\n //} catch (e) {\r\n //}\r\n\r\n return screenNameList;\r\n }\r\n\r\n //transponderDropdown = async function (instance, cell, c, r, source) {\r\n // var transponderList = ['', ''];\r\n\r\n // var unit = '';\r\n\r\n // var allScreensPromise = DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'GetAllTransponderNumbersForCurrentUnitFromGrid', unit)\r\n // .then(r => {\r\n // return r;\r\n // });\r\n\r\n // transponderList = await allScreensPromise;\r\n\r\n // try {\r\n // transponderList = transponderList.sort();\r\n // } catch (e) {\r\n // }\r\n\r\n // return transponderList;\r\n //}\r\n\r\n\r\n autoAdmitTable = jexcel(document.getElementById('autoadmitgrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteRow: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n allowInsertRow: false,\r\n allowManualInsertRow: false,\r\n columnDrag: false,\r\n data: null,\r\n tableWidth: tableWidth + 'px',\r\n tableHeight: tableHeight / 3 + 'px',\r\n minDimensions: [2, 100],\r\n wordWrap: false,\r\n allowExport: false,\r\n search: true,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'AdmitId',\r\n type: 'hidden',\r\n width: '200px',\r\n },\r\n {\r\n title: 'Name *',\r\n type: 'text',\r\n width: '250px',\r\n },\r\n {\r\n title: 'Plate',\r\n type: 'text',\r\n width: '100px',\r\n },\r\n {\r\n title: 'Category',\r\n type: 'dropdown',\r\n source: ['Visitor', 'Vendor', 'Resident'],\r\n width: '100px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Driver License #',\r\n type: 'text',\r\n width: '120px'\r\n },\r\n {\r\n title: 'Identification',\r\n type: 'text',\r\n width: '150px'\r\n },\r\n {\r\n title: 'Phone',\r\n type: 'text',\r\n width: '150px'\r\n },\r\n {\r\n title: 'Representative',\r\n type: 'text',\r\n width: '120px'\r\n },\r\n {\r\n title: 'Relationship to resident',\r\n type: 'text',\r\n width: '200px',\r\n },\r\n {\r\n title: 'Visit Resident',\r\n type: 'dropdown',\r\n source: ['', ''],\r\n filter: residentNameDropdown,\r\n width: '250px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Entrance',\r\n type: 'dropdown',\r\n source: ['', ''],\r\n readOnly: true,\r\n filter: screenNameDropdown,\r\n width: '250px',\r\n multiple: true\r\n },\r\n {\r\n title: 'Transponder/Tag #',\r\n type: 'text',\r\n readOnly: true,\r\n width: '200px'\r\n },\r\n {\r\n title: 'Duration',\r\n type: 'dropdown',\r\n source: ['Temporary', 'Permanent'],\r\n width: '100px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Entry from',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '100px',\r\n },\r\n {\r\n title: 'Entry to',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '100px',\r\n },\r\n {\r\n title: 'Description',\r\n type: 'text',\r\n width: '200px',\r\n },\r\n {\r\n title: 'Access',\r\n type: 'dropdown',\r\n source: ['Allow', 'Banned'],\r\n width: '100px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Comment',\r\n type: 'text',\r\n width: '100px',\r\n wordWrap: true\r\n },\r\n {\r\n title: 'Added',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Pass',\r\n type: 'html',\r\n readOnly: true,\r\n width: '100px'\r\n },\r\n {\r\n title: ' ',\r\n type: 'html',\r\n readOnly: true,\r\n width: '100px'\r\n },\r\n {\r\n title: ' ',\r\n type: 'html',\r\n readOnly: true,\r\n width: '100px'\r\n },\r\n {\r\n title: ' ',\r\n type: 'html',\r\n readOnly: true,\r\n width: '100px'\r\n },\r\n {\r\n title: ' ',\r\n type: 'html',\r\n readOnly: true,\r\n width: '100px'\r\n },\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n\r\n //$($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n // $(obj).css(\"background-color\", \"#ccc\");\r\n //});\r\n\r\n //$($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n // if (i == 0) {\r\n // $(obj).css(\"font-weight\", \"bold\");\r\n // }\r\n //});\r\n\r\n //$($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n // if (i == 0) {\r\n // $(obj).css(\"font-weight\", \"bold\");\r\n // }\r\n //});\r\n\r\n //Middle Mouse Horizontal Scroll Bugfix\r\n setTimeout(function () {\r\n try {\r\n autoAdmitTable.updateSelectionFromCoords(0, 0, 0, 0);\r\n }\r\n catch { }\r\n }, 3000);\r\n\r\n \r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#people-autoadmitdetails-header-checkin-title\"));\r\n });\r\n\r\n\r\n $($(instance).find('.jexcel_content')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css({\r\n \"border-color\": \"#f0f0f0\",\r\n \"border-width\": \"1px\",\r\n \"border-style\": \"solid\"\r\n });\r\n }\r\n });\r\n\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n },\r\n onchange: function (obj, cel, val) {\r\n // Used to avoid onchange event to propagate\r\n //if (autoAdmitTableOnChangeDisabled) {\r\n // return;\r\n //}\r\n\r\n //var checkinId = 0;\r\n //var newValue = \"\";\r\n //var columnToUpdate = \"\";\r\n\r\n\r\n\r\n ////Grid coordinates of data just updated\r\n var x = parseInt($(cel).attr(\"data-x\"));\r\n var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n //We changed something in the first row / check in row\r\n\r\n \r\n console.log(\"Changed, x=\" + x + \",y=\" + y);\r\n\r\n\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n onbeforedeleterow: function (instance, y, numOfRows) {\r\n //var idsStr = \"\";\r\n //for (var i = 0; i < numOfRows; i++) {\r\n // try {\r\n // var deletedAutoAdmitId = parseInt(window.autoAdmitTable.getRowData(y + i)[0]);\r\n // if (!isNaN(deletedAutoAdmitId)) {\r\n // idsStr = idsStr + deletedAutoAdmitId + \",\";\r\n // }\r\n \r\n // }\r\n // catch (e) {\r\n\r\n // }\r\n //}\r\n //idsStr += \"0\";\r\n\r\n\r\n //DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStartDeleteAutoAdmit', idsStr);\r\n },\r\n });\r\n\r\n \r\n\r\n autoAdmitFromPortalTable = jexcel(document.getElementById('autoadmitgridfromportal'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowDeleteRow: false,\r\n allowRenameColumn: false,\r\n allowInsertRow: false,\r\n allowManualInsertRow: false,\r\n columnDrag: false,\r\n data: null,\r\n allowExport: false,\r\n tableWidth: tableWidth + 'px',\r\n tableHeight: tableHeight / 3 + 'px',\r\n minDimensions: [2, 100],\r\n wordWrap: false,\r\n search: true,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'AdmitId',\r\n type: 'hidden',\r\n width: '200px',\r\n },\r\n {\r\n title: 'Name *',\r\n type: 'text',\r\n width: '250px',\r\n },\r\n {\r\n title: 'Plate',\r\n type: 'text',\r\n width: '100px',\r\n },\r\n {\r\n title: 'Category',\r\n type: 'dropdown',\r\n source: ['Visitor', 'Vendor', 'Resident'],\r\n width: '100px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Driver License #',\r\n type: 'text',\r\n width: '120px'\r\n },\r\n {\r\n title: 'Identification',\r\n type: 'text',\r\n width: '150px'\r\n },\r\n {\r\n title: 'Phone',\r\n type: 'text',\r\n width: '150px'\r\n },\r\n {\r\n title: 'Representative',\r\n type: 'text',\r\n width: '120px'\r\n },\r\n {\r\n title: 'Relationship to resident',\r\n type: 'text',\r\n width: '200px',\r\n },\r\n {\r\n title: 'Visit Resident',\r\n type: 'dropdown',\r\n source: [],\r\n width: '250px',\r\n filter: residentNameDropdown,\r\n multiple: false\r\n },\r\n {\r\n title: 'Entrance',\r\n type: 'dropdown',\r\n source: ['', ''],\r\n filter: screenNameDropdown,\r\n width: '250px',\r\n multiple: true\r\n },\r\n {\r\n title: 'Transponder/Tag #',\r\n type: 'text',\r\n readOnly: true,\r\n width: '200px'\r\n },\r\n {\r\n title: 'Duration',\r\n type: 'dropdown',\r\n source: ['Temporary', 'Permanent'],\r\n width: '100px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Entry from',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '100px',\r\n },\r\n {\r\n title: 'Entry to',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '100px',\r\n },\r\n {\r\n title: 'Description',\r\n type: 'text',\r\n width: '200px',\r\n },\r\n {\r\n title: 'Access',\r\n type: 'dropdown',\r\n source: ['Allow', 'Banned'],\r\n width: '100px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Comment',\r\n type: 'text',\r\n width: '100px',\r\n wordWrap: true\r\n },\r\n {\r\n title: 'Added',\r\n type: 'text',\r\n readOnly: true,\r\n width: '200px'\r\n },\r\n {\r\n title: 'Pass',\r\n type: 'html',\r\n readOnly: true,\r\n width: '100px'\r\n },\r\n {\r\n title: ' ',\r\n type: 'html',\r\n readOnly: true,\r\n width: '100px'\r\n },\r\n {\r\n title: ' ',\r\n type: 'html',\r\n readOnly: true,\r\n width: '100px'\r\n },\r\n {\r\n title: ' ',\r\n type: 'html',\r\n readOnly: true,\r\n width: '100px'\r\n },\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n\r\n //$($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n // $(obj).css(\"background-color\", \"#ccc\");\r\n //});\r\n\r\n //$($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n // if (i == 0) {\r\n // $(obj).css(\"font-weight\", \"bold\");\r\n // }\r\n //});\r\n\r\n //$($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n // if (i == 0) {\r\n // $(obj).css(\"font-weight\", \"bold\");\r\n // }\r\n //});\r\n\r\n\r\n //Middle Mouse Horizontal Scroll Bugfix\r\n setTimeout(function () {\r\n try {\r\n autoAdmitFromPortalTable.updateSelectionFromCoords(0, 0, 0, 0);\r\n }\r\n catch { }\r\n }, 3000);\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#people-autoadmitaddedbyuser-header-checkin-title\"));\r\n });\r\n\r\n\r\n \r\n\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n\r\n $($(instance).find('.jexcel_content')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css({\r\n \"border-color\": \"#f0f0f0\",\r\n \"border-width\": \"1px\",\r\n \"border-style\": \"solid\"\r\n });\r\n }\r\n });\r\n },\r\n onchange: function (obj, cel, val) {\r\n // Used to avoid onchange event to propagate\r\n if (autoAdmitTableOnChangeDisabled) {\r\n return;\r\n }\r\n\r\n var checkinId = 0;\r\n var newValue = \"\";\r\n var columnToUpdate = \"\";\r\n\r\n\r\n\r\n //Grid coordinates of data just updated\r\n var x = parseInt($(cel).attr(\"data-x\"));\r\n var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n //We changed something in the first row / check in row\r\n\r\n \r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n //Used to jump to next column while marking the columnSeperator\r\n //if (x1 == 2) {\r\n // autoAdmitFromPortalTable.updateSelectionFromCoords(x1 + 1, y1, x2 + 1, y2);\r\n // console.log(\"selected\" + x1 + y1 + x2 + y2);\r\n //}\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n onbeforedeleterow: function (instance, y, numOfRows) {\r\n //var idsStr = \"\";\r\n //for (var i = 0; i < numOfRows; i++) {\r\n // try {\r\n // var deletedAutoAdmitId = parseInt(window.autoAdmitFromPortalTable.getRowData(y + i)[0]);\r\n // if (!isNaN(deletedAutoAdmitId)) {\r\n // idsStr = idsStr + deletedAutoAdmitId + \",\";\r\n // }\r\n \r\n // }\r\n // catch (e) {\r\n\r\n // }\r\n //}\r\n //idsStr += \"0\";\r\n\r\n //DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStartDeleteAutoAdmit', idsStr);\r\n },\r\n });\r\n \r\n\r\n\r\n headsupTable = jexcel(document.getElementById('headsupgrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n tableWidth: tableWidth + 'px',\r\n tableHeight: tableHeight + 'px',\r\n minDimensions: [2, 100],\r\n wordWrap: true,\r\n search: true,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: residentTerm + ' Unit',\r\n type: 'dropdown',\r\n source: receiverUnits,\r\n width: '250px',\r\n },\r\n {\r\n title: residentTerm + ' Name',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Active from',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY HH24:MI' : 'MM/DD/YYYY HH24:MI', time: 1 },\r\n width: '150px',\r\n },\r\n {\r\n title: 'Active to',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY HH24:MI' : 'MM/DD/YYYY HH24:MI', time: 1 },\r\n width: '150px',\r\n },\r\n {\r\n title: 'Check in alert',\r\n type: 'checkbox',\r\n width: '100px',\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Note',\r\n type: 'text',\r\n width: '500px',\r\n wordWrap: true\r\n }\r\n //,\r\n //{\r\n // title: 'Duration',\r\n // type: 'dropdown',\r\n // source: ['Temporary', 'Permanent'],\r\n // width: '150px',\r\n // multiple: false\r\n //},\r\n\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n\r\n $($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"6\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#people-eventlist-header-checkin-title\"));\r\n });\r\n\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n\r\n },\r\n onchange: function (obj, cel, val) {\r\n // Used to avoid onchange event to propagate\r\n if (headsupTableOnChangeDisabled) {\r\n return;\r\n }\r\n\r\n var checkinId = 0;\r\n var newValue = \"\";\r\n var columnToUpdate = \"\";\r\n\r\n\r\n\r\n //Grid coordinates of data just updated\r\n var x = parseInt($(cel).attr(\"data-x\"));\r\n var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n //We changed something in the first row / check in row\r\n\r\n //Check if the column we changed belongs to the Receiver data information\r\n if (x == 0) {\r\n //Get the ID of Receiver data changed\r\n\r\n var receiverLookedUp = null;\r\n //Get the string value of the data we just changed\r\n var dataChangedValue = headsupTable.getRowData(y)[0];\r\n\r\n //Search through receivers that has a property with that data value\r\n for (var i = 0; i < receiversCache.length; i++) {\r\n if (receiversCache[i]['receiverUnit'] == dataChangedValue) {\r\n receiverLookedUp = receiversCache[i];\r\n }\r\n }\r\n\r\n //If we didnt find any receiver with corresponding data, return\r\n if (receiverLookedUp == null) {\r\n return;\r\n }\r\n\r\n lastReceiverLookedUpCache = receiverLookedUp;\r\n\r\n var columnX = 1;\r\n\r\n // Dont propagate onchange events\r\n headsupTableOnChangeDisabled = true;\r\n\r\n // Fetch data from looked up receiver\r\n var columnValue = receiverLookedUp['receiverName'];\r\n\r\n // Set internal value\r\n headsupTable.setValueFromCoords(columnX, y, columnValue, true);\r\n\r\n $($('#headsupgrid').find('td[data-x=\"1\"][data-y=\"' + y + '\"]')).each(function (i, obj) {\r\n //Set visual value, since we are using a custom dropdow. Setting the internal data wont update the visual data for some reason\r\n if (i == y) {\r\n $(obj).html(columnValue);\r\n }\r\n });\r\n\r\n headsupTableOnChangeDisabled = false;\r\n\r\n\r\n }\r\n\r\n\r\n\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n //Used to jump to next column while marking the columnSeperator\r\n if (x1 == 2 || x1 == 6) {\r\n headsupTable.updateSelectionFromCoords(x1 + 1, y1, x2 + 1, y2);\r\n console.log(\"selected\" + x1 + y1 + x2 + y2);\r\n }\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n });\r\n\r\n\r\n broadcastTable = jexcel(document.getElementById('broadcastgrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n tableWidth: tableWidth + 'px',\r\n tableHeight: tableHeight + 'px',\r\n minDimensions: [2, 100],\r\n wordWrap: true,\r\n search: false,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: residentTerm + ' Unit',\r\n type: 'dropdown',\r\n source: receiverUnits,\r\n width: '250px',\r\n },\r\n {\r\n title: residentTerm + ' Name',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Exclude',\r\n type: 'dropdown',\r\n source: ['Texts', 'Emails', 'Both'],\r\n width: '150px',\r\n multiple: false,\r\n wordWrap: true\r\n },\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n\r\n $($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n //$($(instance).find('td[data-x=\"6\"]')).each(function (i, obj) {\r\n // $(obj).css(\"background-color\", \"#ccc\");\r\n //});\r\n\r\n $($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n //$($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n // $(obj).prepend($(\"#people-eventlist-header-checkin-title\"));\r\n //});\r\n\r\n //$(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n\r\n },\r\n onchange: function (obj, cel, val) {\r\n // Used to avoid onchange event to propagate\r\n if (broadcastTableOnChangeDisabled) {\r\n return;\r\n }\r\n\r\n var checkinId = 0;\r\n var newValue = \"\";\r\n var columnToUpdate = \"\";\r\n\r\n\r\n\r\n //Grid coordinates of data just updated\r\n var x = parseInt($(cel).attr(\"data-x\"));\r\n var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n //We changed something in the first row / check in row\r\n\r\n //Check if the column we changed belongs to the Receiver data information\r\n if (x == 0) {\r\n //Get the ID of Receiver data changed\r\n\r\n var receiverLookedUp = null;\r\n //Get the string value of the data we just changed\r\n var dataChangedValue = broadcastTable.getRowData(y)[0];\r\n\r\n //Search through receivers that has a property with that data value\r\n for (var i = 0; i < receiversCache.length; i++) {\r\n if (receiversCache[i]['receiverUnit'] == dataChangedValue) {\r\n receiverLookedUp = receiversCache[i];\r\n }\r\n }\r\n\r\n //If we didnt find any receiver with corresponding data, return\r\n if (receiverLookedUp == null) {\r\n return;\r\n }\r\n\r\n lastReceiverLookedUpCache = receiverLookedUp;\r\n\r\n var columnX = 1;\r\n\r\n // Dont propagate onchange events\r\n broadcastTableOnChangeDisabled = true;\r\n\r\n // Fetch data from looked up receiver\r\n var columnValue = receiverLookedUp['receiverName'];\r\n\r\n // Set internal value\r\n broadcastTable.setValueFromCoords(columnX, y, columnValue, true);\r\n\r\n $($('#broadcastgrid').find('td[data-x=\"1\"][data-y=\"' + y + '\"]')).each(function (i, obj) {\r\n //Set visual value, since we are using a custom dropdow. Setting the internal data wont update the visual data for some reason\r\n if (i == y) {\r\n $(obj).html(columnValue);\r\n }\r\n });\r\n\r\n broadcastTableOnChangeDisabled = false;\r\n\r\n\r\n }\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n //Used to jump to next column while marking the columnSeperator\r\n if (x1 == 2) {\r\n broadcastTable.updateSelectionFromCoords(x1 + 1, y1, x2 + 1, y2);\r\n }\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n });\r\n\r\n return 1;\r\n}\r\n\r\n\r\n\r\n//function proxyPopulateTable(receivers) {\r\n\r\n// if (receiversTable != null) {\r\n// console.log(\"json parse time 1\");\r\n// console.log((new Date()).toISOString());\r\n// const data = BINDING.conv_string(receivers);\r\n// window.receiversTable.setData(JSON.parse(data), false);\r\n// console.log(\"json parse time 2\");\r\n// console.log((new Date()).toISOString());\r\n// } else {\r\n// }\r\n//}\r\n//function proxyPopulateAutoAdmitOverviewTable(overviewData) {\r\n\r\n// if (receiversTable != null) {\r\n// console.log(\"json parse time\");\r\n// console.log(new Date());\r\n// const data = BINDING.conv_string(overviewData);\r\n// autoAdmitOverviewTable.setData(JSON.parse(data), false);\r\n// console.log(new Date());\r\n// } else {\r\n// }\r\n//}\r\n\r\n//Tab 1\r\n//function PopulateReceiverTable(receiversInDatabase) {\r\n// var receivers = [];\r\n\r\n// console.log(\"receiversInDatabase\");\r\n// console.log(receiversInDatabase);\r\n\r\n\r\n// console.log(\"date1\");\r\n// console.log(new Date());\r\n// console.log(\"date2\");\r\n// try {\r\n// receiversInDatabase.forEach(function (receiver) {\r\n// receivers.push([\r\n// receiver.receiverId,\r\n// 'false',\r\n// receiver.receiverUnit,\r\n// receiver.receiverName,\r\n// '',\r\n// receiver.receiverPhonenumber,\r\n// receiver.receiverPhonenumberTwo,\r\n// receiver.receiverEmail,\r\n// receiver.receiverComment,\r\n// receiver.receiverRequireCall,\r\n// notificationByOptionsFromNumber(receiver.receiverNotifyBy),\r\n// notificationWhenOptionsFromNumber(receiver.receiverNotifyWhen)]);\r\n// });\r\n\r\n// var receiverCount = receivers.length;\r\n\r\n// if (receiversTable != null) {\r\n// console.log(\"SET RECV DATA, count: receiverCount\" + receiverCount);\r\n// console.log(new Date());\r\n// console.log(\"date3\");\r\n// window.receiversTable.setData(receivers, false);\r\n// console.log(\"date4\");\r\n// console.log(new Date());\r\n// } else {\r\n// }\r\n\r\n\r\n\r\n// //Make sure receiver unit for current residents are read only, do not allow editing unit\r\n// for (var ri = 1; ri <= receiverCount; ri++) {\r\n// window.receiversTable.setReadOnly('A' + ri, true);\r\n// window.receiversTable.setReadOnly('B' + ri, true);\r\n// window.receiversTable.setReadOnly('C' + ri, true);\r\n// //window.receiversTable.setReadOnly('D' + ri, true);\r\n// // window.receiversTable.setStyle('B' + ri, 'background-color', 'red');\r\n// }\r\n// } catch (e) {\r\n// console.log(\"PopulateReceiverTable Error\");\r\n// console.log(e);\r\n// }\r\n\r\n// return 1;\r\n//}\r\n\r\n//Tab 3\r\n\r\n//function PopulateAutoAdmitOverviewTable(receiversInDatabase, dateFormat) {\r\n\r\n// alert(\"abc1!!\");\r\n\r\n// try {\r\n\r\n// var receivers = [];\r\n\r\n// alert(\"abc2!!\");\r\n\r\n \r\n// receiversInDatabase.forEach(function (receiver) {\r\n\r\n// var unitArgument = \"\" + receiver.receiverId + \",'\" + receiver.receiverUnit + \"','\" + receiver.receiverName + \"'\";\r\n// var showVehicleAutoAdmitsBtn = '
Manage
';\r\n\r\n// var showAutoAdmitsBtn = '
Manage
';\r\n\r\n// var showPropertyAutoAdmitsBtn = '
Manage
';\r\n\r\n// var autoAdmitVisitorTotalCount = 0;\r\n// var autoAdmitVisitorCount = 0;\r\n// var autoAdmitVendorCount = 0;\r\n\r\n// var autoAdmitVisitorCount = 0;\r\n// var autoAdmitVendorCount = 0;\r\n\r\n// var lastUpdated = null;\r\n\r\n// try {\r\n// var autoAdmitForReceiver = JSON.parse(receiver.receiverAllowList);\r\n \r\n// autoAdmitVisitorTotalCount = autoAdmitForReceiver.length;\r\n// for (var i = 0; i < autoAdmitVisitorTotalCount; i++) {\r\n// if (autoAdmitForReceiver[i].AutoAdmitIsVendor) {\r\n// autoAdmitVendorCount++;\r\n// }\r\n// else {\r\n// autoAdmitVisitorCount++;\r\n// }\r\n\r\n// try {\r\n \r\n\r\n// var lastUpdateTemp = new Date(autoAdmitForReceiver[i].AutoAdmitUpdated);\r\n \r\n\r\n// if (lastUpdated == null) {\r\n// lastUpdated = lastUpdateTemp;\r\n// } else {\r\n// if (lastUpdateTemp > lastUpdated) {\r\n// lastUpdated = lastUpdateTemp;\r\n// }\r\n// }\r\n// } catch (e) {\r\n\r\n// }\r\n\r\n\r\n// }\r\n\r\n \r\n\r\n\r\n// }\r\n// catch {\r\n\r\n// }\r\n\r\n// var lastUpdatedFormatted = '';\r\n// if (lastUpdated != null) {\r\n// if (dateFormat == 0) {\r\n// lastUpdatedFormatted = timestampToJexcelDate(lastUpdated);\r\n// }\r\n// else {\r\n// lastUpdatedFormatted = timestampToUsDate(lastUpdated);\r\n// }\r\n// }\r\n\r\n// receivers.push([\r\n// receiver.receiverUnit,\r\n// receiver.receiverName,\r\n// '',\r\n// '',\r\n// '',\r\n// showAutoAdmitsBtn,\r\n// showVehicleAutoAdmitsBtn,\r\n// showPropertyAutoAdmitsBtn]);\r\n// });\r\n\r\n// var receiverCount = receivers.length;\r\n\r\n// if (autoAdmitOverviewTable != null) {\r\n// autoAdmitOverviewTable.setData(receivers, false);\r\n// } else {\r\n// }\r\n\r\n// //Make sure receiver unit for current residents are read only, do not allow editing unit\r\n// console.log(\"autoadmitoverview receiverCount:\" + receiverCount);\r\n// for (var ri = 1; ri <= receiverCount; ri++) {\r\n// autoAdmitOverviewTable.setReadOnly('A' + ri, true);\r\n// // window.receiversTable.setStyle('B' + ri, 'background-color', 'red');\r\n// }\r\n// } catch (e) {\r\n// console.log(\"PopulateAutoAdmitOverviewTable Error\");\r\n// console.log(e);\r\n// }\r\n\r\n\r\n// return 1;\r\n\r\n//}\r\n\r\nfunction PopulateAutoAdmitTable(admitType, receiversInDatabase, dateFormat) {\r\n\r\n try {\r\n\r\n var col4Title = \"Driver License #\";\r\n var col7Title = \"Representative\";\r\n var col8Title = \"Relationship to Resident\";\r\n\r\n\r\n if (admitType == 1) {\r\n var col4Title = \"License #\";\r\n var col7Title = \"Representative\";\r\n var col8Title = \"Relation\";\r\n }\r\n\r\n if (admitType == 2) {\r\n var col4Title = \"License #\";\r\n var col7Title = \"Key\";\r\n var col8Title = \"PIN\";\r\n }\r\n\r\n autoAdmitTable.setHeader(4, col4Title);\r\n autoAdmitTable.setHeader(7, col7Title);\r\n autoAdmitTable.setHeader(8, col8Title);\r\n\r\n autoAdmitFromPortalTable.setHeader(4, col4Title);\r\n autoAdmitFromPortalTable.setHeader(7, col7Title);\r\n autoAdmitFromPortalTable.setHeader(8, col8Title);\r\n\r\n\r\n\r\n\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n try {\r\n var autoAdmitsStrings = [];\r\n var autoAdmits = [];\r\n var autoAdmitsFromPortal = [];\r\n\r\n receiversInDatabase.forEach(receiver => autoAdmitsStrings.push(receiver.receiverAllowList));\r\n\r\n var gatehouseGridRowCounter = 0;\r\n var portalGridRowCounter = 0;\r\n\r\n var receiverCount = receiversInDatabase.length;\r\n \r\n for (var k = 0; k < receiverCount; k++) {\r\n if (autoAdmitsStrings[k] != null && autoAdmitsStrings[k] != \"\") {\r\n var autoAdmitForReceiver = JSON.parse(autoAdmitsStrings[k]);\r\n for (var kx = 0; kx < autoAdmitForReceiver.length; kx++) {\r\n\r\n \r\n var line = autoAdmitForReceiver[kx];\r\n\r\n var updatedString = line.autoAdmitCreatedFormatted;\r\n if (dateFormat == 0) { \r\n updatedString = line.autoAdmitCreatedFormattedIso;\r\n }\r\n\r\n var currentRowNumber = 0;\r\n\r\n var gridIndex = 0;\r\n if (line.autoAdmitAddedByReceiver == true) {\r\n gridIndex = 1;\r\n currentRowNumber = portalGridRowCounter;\r\n }\r\n else {\r\n currentRowNumber = gatehouseGridRowCounter;\r\n }\r\n\r\n \r\n\r\n var createPassGridButton = '
Create
';\r\n var assignTransponderAutoAdmit = '
Transponder
';\r\n var EntrancesAutoAdmitGridButton = '
Entrances
';\r\n //var ScheduleAutoAdmitGridButton = '
Schedule
';\r\n var RemoveAutoAdmitGridButton = '
Remove
'; \r\n var extraAutoAdmit = '
Advanced
';\r\n\r\n var category = 'Visitor';\r\n if (line.autoAdmitCategory == autoAdmitVendorCategory) {\r\n category = 'Vendor';\r\n } else if (line.autoAdmitCategory == autoAdmitResidentCategory) {\r\n category = 'Resident';\r\n }\r\n\r\n var col4Val = line.autoAdmitDriverLicense;\r\n var col7Val = line.autoAdmitRepresentative;\r\n var col8Val = line.autoAdmitReceiverRelation;\r\n\r\n //if (admitType == 1) {\r\n // col4Val = line.autoAdmitDriverLicense;\r\n // col7Val = line.autoAdmitRepresentative;\r\n // col8Val = line.autoAdmitReceiverRelation;\r\n //}\r\n\r\n //if (admitType == 2) {\r\n // col4val = line.autoAdmitDriverLicense;\r\n // col7val = line.autoAdmitRfidTag;\r\n // col8val = line.autoAdmitBarcode;\r\n //}\r\n\r\n var receiverName = '';\r\n\r\n try {\r\n receiverName = line.receiverName;\r\n }\r\n catch { }\r\n\r\n var screenNames = '';\r\n\r\n try {\r\n screenNames = line.autoAdmitScreenIdsAllowList;\r\n }\r\n catch { }\r\n\r\n\r\n var dataObject = [line.autoAdmitId, line.autoAdmitName, line.autoAdmitPlateNumber, category, col4Val, line.autoAdmitIdentification, line.autoAdmitPhone, col7Val, col8Val,\r\n receiverName,\r\n screenNames,\r\n line.autoAdmitRfidTagBlob,\r\n line.autoAdmitDue,\r\n line.autoAdmitDue == \"Permanent\" ? \"\" : timestampToJexcelDate(line.autoAdmitDueFrom),\r\n line.autoAdmitDue == \"Permanent\" ? \"\" : timestampToJexcelDate(line.autoAdmitDueTo),\r\n line.autoAdmitDescription, line.autoAdmitBanned, line.autoAdmitComment, updatedString, createPassGridButton, assignTransponderAutoAdmit, EntrancesAutoAdmitGridButton, extraAutoAdmit, RemoveAutoAdmitGridButton];\r\n\r\n\r\n if (line.autoAdmitAddedByReceiver == true) {\r\n autoAdmitsFromPortal.push(dataObject);\r\n }\r\n else {\r\n autoAdmits.push(dataObject);\r\n }\r\n\r\n\r\n if (line.autoAdmitAddedByReceiver == true) {\r\n portalGridRowCounter++;\r\n }\r\n else {\r\n gatehouseGridRowCounter++;\r\n }\r\n \r\n\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n if (autoAdmitTable != null) {\r\n autoAdmitTable.setData(autoAdmits, false);\r\n } else {\r\n }\r\n\r\n if (autoAdmitFromPortalTable != null) {\r\n autoAdmitFromPortalTable.setData(autoAdmitsFromPortal, false);\r\n } else {\r\n }\r\n\r\n } catch (e) {\r\n console.log(\"PopulateAutoAdmitTable Error\");\r\n console.log(e);\r\n }\r\n\r\n return 1;\r\n\r\n}\r\n\r\nfunction PopulateBroadcastAndHeadsup(receiversInDatabaseString) {\r\n\r\n const receiversInDatabaseConst = BINDING.conv_string(receiversInDatabaseString);\r\n\r\n var receiversInDatabase = JSON.parse(receiversInDatabaseConst);\r\n\r\n\r\n try {\r\n var receivers = [];\r\n\r\n var broadcastExempts = [];\r\n var headsUpsStrings = [];\r\n\r\n receiversInDatabase.forEach(function (receiver) {\r\n if (receiver.receiverBroadcastExemptSetting > 0) {\r\n broadcastExempts.push([\r\n receiver.receiverUnit,\r\n receiver.receiverName,\r\n '',\r\n broadcastExemptFromNumber(receiver.receiverBroadcastExemptSetting)]);\r\n }\r\n\r\n });\r\n\r\n\r\n receiversInDatabase.forEach(receiver => headsUpsStrings.push(receiver.receiverHeadsUpList));\r\n\r\n var receiverCount = receiversInDatabase.length;\r\n\r\n var headsUps = [];\r\n\r\n for (var k2 = 0; k2 < receiverCount; k2++) {\r\n if (headsUpsStrings[k2] != null && headsUpsStrings[k2] != \"\") {\r\n var headsUpForReceiver = JSON.parse(headsUpsStrings[k2]);\r\n for (var kx2 = 0; kx2 < headsUpForReceiver.length; kx2++) {\r\n\r\n var line = headsUpForReceiver[kx2];\r\n\r\n headsUps.push([line.ReceiverUnit, line.ReceiverName, '', timestampToJexcelDate(line.HeadsUpFrom), timestampToJexcelDate(line.HeadsUpTo),\r\n line.CheckInAlert, '', line.HeadsUpNotes]);\r\n }\r\n }\r\n\r\n }\r\n\r\n if (headsupTable != null) {\r\n headsupTable.setData(headsUps, false);\r\n } else {\r\n }\r\n\r\n //-----\r\n\r\n if (broadcastTable != null) {\r\n broadcastTable.setData(broadcastExempts, false);\r\n } else {\r\n }\r\n\r\n } catch (e) {\r\n\r\n console.log(\"PopulateBroadcastAndHeadsup Error\");\r\n console.log(e);\r\n\r\n }\r\n\r\n return 1;\r\n}\r\n\r\n\r\nfunction AddRow(arg) {\r\n var element = document.getElementById('spreadsheet');\r\n document.getElementById('spreadsheet').jexcel('insertRow')\r\n}\r\n\r\n\r\nfunction ReadAutoAdmitGrid(autoAdmitGridIndex) {\r\n var resultr = []\r\n var datar = [];\r\n\r\n if (autoAdmitGridIndex == 0) {\r\n datar = autoAdmitTable.getJson(false);\r\n }\r\n else {\r\n datar = autoAdmitFromPortalTable.getJson(false);\r\n }\r\n \r\n\r\n var rowCount = 100;\r\n if (datar != null) {\r\n rowCount = datar.length;\r\n }\r\n\r\n for (var i = 0; i < rowCount; i++) {\r\n var line = datar[i];\r\n if (line[1] && line[1] != \"\") {\r\n\r\n var autoAdmitId = 0;\r\n try {\r\n autoAdmitId = parseInt(line[0]);\r\n \r\n } catch (e) {\r\n\r\n }\r\n var autoAdmitName = line[1];\r\n try {\r\n autoAdmitName = autoAdmitName.trim();\r\n } catch (e) {\r\n\r\n }\r\n\r\n if (isNaN(autoAdmitId)) {\r\n autoAdmitId = 0;\r\n }\r\n\r\n var autoAdmitCategory = autoAdmitVisitorCategory;\r\n if (line[3] == 'Resident') {\r\n autoAdmitCategory = autoAdmitResidentCategory;\r\n }\r\n else if (line[3] == 'Vendor') {\r\n autoAdmitCategory = autoAdmitVendorCategory;\r\n }\r\n\r\n\r\n var row = {\r\n AutoAdmitId: autoAdmitId,\r\n AutoAdmitName: autoAdmitName,\r\n AutoAdmitPlateNumber: line[2],\r\n AutoAdmitCategory: autoAdmitCategory,\r\n AutoAdmitDriverLicense: line[4],\r\n AutoAdmitIdentification: line[5],\r\n AutoAdmitPhone: line[6],\r\n AutoAdmitRepresentative: String(line[7]),\r\n AutoAdmitReceiverRelation: String(line[8]),\r\n AutoAdmitDue: line[12],\r\n AutoAdmitDueFrom: jexcelDateTimeParse(line[13]),\r\n AutoAdmitDueTo: jexcelDateTimeParse(line[14]),\r\n AutoAdmitDescription: line[15],\r\n AutoAdmitBanned: line[16],\r\n AutoAdmitComment: line[17]\r\n };\r\n\r\n try {\r\n row.ReceiverName = line[9];\r\n }\r\n catch { }\r\n\r\n try {\r\n row.AutoAdmitScreenIdsAllowList = line[10];\r\n }\r\n catch { }\r\n\r\n try {\r\n row.AutoAdmitRfidTag = parseInt(line[11]);\r\n if (isNaN(row.AutoAdmitRfidTag)) {\r\n row.AutoAdmitRfidTag = 0;\r\n }\r\n }\r\n catch { }\r\n\r\n try {\r\n row.AutoAdmitRfidTagBlob = line[11].toString();\r\n }\r\n catch { }\r\n\r\n //try {\r\n \r\n \r\n // row.AutoAdmitRfidTag = parseInt(line[7]);\r\n // if (isNaN(row.AutoAdmitRfidTag)) {\r\n // row.AutoAdmitRfidTag = 0;\r\n // }\r\n \r\n //} catch {\r\n \r\n // }\r\n\r\n //try {\r\n // row.AutoAdmitBarcode = parseInt(line[8]);\r\n\r\n // if (isNaN(row.AutoAdmitBarcode)) {\r\n // row.AutoAdmitBarcode = 0;\r\n // }\r\n\r\n //} catch { }\r\n \r\n\r\n\r\n if (autoAdmitGridIndex == 0) {\r\n row.AutoAdmitAddedByReceiver = false;\r\n }\r\n else {\r\n row.AutoAdmitAddedByReceiver = true;\r\n }\r\n\r\n\r\n resultr.push(row);\r\n }\r\n }\r\n return resultr;\r\n}\r\n\r\nfunction ReadHeadsUpGrid() {\r\n var resultr = []\r\n var datar = headsupTable.getJson(false);\r\n\r\n var rowCount = 100;\r\n if (datar != null) {\r\n rowCount = datar.length;\r\n }\r\n\r\n for (var i = 0; i < rowCount; i++) {\r\n var line = datar[i];\r\n if (line[0] && line[0] != \"\") {\r\n\r\n var row = {\r\n ReceiverUnit: line[0],\r\n ReceiverName: line[1],\r\n HeadsUpFrom: jexcelDateTimeParse(line[3]),\r\n HeadsUpTo: jexcelDateTimeParse(line[4]),\r\n CheckInAlert: line[5],\r\n HeadsUpNotes: line[7]\r\n };\r\n\r\n resultr.push(row);\r\n }\r\n }\r\n return resultr;\r\n}\r\n\r\nfunction ReadBroadcastExemptListGrid() {\r\n var resultr = []\r\n var datar = broadcastTable.getJson(false);\r\n\r\n var rowCount = 100;\r\n if (datar != null) {\r\n rowCount = datar.length;\r\n }\r\n\r\n for (var i = 0; i < rowCount; i++) {\r\n var line = datar[i];\r\n if (line[0] && line[0] != \"\") {\r\n\r\n var row = {\r\n ReceiverUnit: line[0],\r\n ReceiverName: line[1],\r\n ReceiverBroadcastExemptSetting: line[3]\r\n };\r\n\r\n resultr.push(row);\r\n }\r\n }\r\n return resultr;\r\n}\r\n\r\n\r\nfunction SaveReceiversTable(args) {\r\n //var result = []\r\n //var data = window.receiversTable.getJson(false);\r\n //console.log(data);\r\n\r\n //var autoAdmitList = ReadAutoAdmitGrid();\r\n\r\n //var autoAdmitCount = 0;\r\n //if (autoAdmitList != null) {\r\n // autoAdmitCount = autoAdmitList.length;\r\n //}\r\n\r\n //var headsUpList = ReadHeadsUpGrid();\r\n\r\n //var headsUpCount = 0;\r\n //if (headsUpList != null) {\r\n // headsUpCount = headsUpList.length;\r\n //}\r\n\r\n\r\n //var broadcastExemptList = ReadBroadcastExemptListGrid();\r\n\r\n //var broadcastExemptListCount = 0;\r\n //if (broadcastExemptList != null) {\r\n // broadcastExemptListCount = broadcastExemptList.length;\r\n //}\r\n\r\n //var rowCount = 100;\r\n //if (data != null) {\r\n // rowCount = data.length;\r\n //}\r\n\r\n //for (var i = 0; i < rowCount; i++) {\r\n // var line = data[i];\r\n // if (line[1]=='true' && line[2] && line[2] != \"\") {\r\n\r\n // var notifyBy = 0;\r\n\r\n // if (line[10].includes(\"Email\")) {\r\n // notifyBy |= 2;\r\n // }\r\n // if (line[10].includes(\"Text\")) {\r\n // notifyBy |= 1;\r\n // }\r\n\r\n // var notifyWhen = 0;\r\n\r\n // try {\r\n\r\n // var notifyWhenStringArr = [];\r\n\r\n // if (line[11].includes(\";\")) {\r\n // notifyWhenStringArr = line[11].split(\";\");\r\n // } else {\r\n // notifyWhenStringArr.push(line[11]);\r\n // }\r\n\r\n\r\n\r\n // var notifyWhenStringComponentsLength = notifyWhenStringArr.length;\r\n // for (var nx = 0; nx < notifyWhenStringComponentsLength; nx++) {\r\n\r\n // // console.log(\"notifyWhenStringArr[nx]: \" + notifyWhenStringArr[nx]);\r\n // if (notifyWhenStringArr[nx] == \"Visitor\") {\r\n // notifyWhen |= 1;\r\n // }\r\n\r\n // if (notifyWhenStringArr[nx] == \"Vendor\") {\r\n // notifyWhen |= 2;\r\n // }\r\n\r\n // if (notifyWhenStringArr[nx] == \"Auto-Admit visitor\") {\r\n // notifyWhen |= 4;\r\n // }\r\n\r\n // if (notifyWhenStringArr[nx] == \"Parcel\") {\r\n // notifyWhen |= 8;\r\n // }\r\n\r\n // if (notifyWhenStringArr[nx] == \"Visitor turned away\") {\r\n // notifyWhen |= 16;\r\n // }\r\n\r\n // }\r\n\r\n // //console.log(\"notifyWhen : \" + notifyWhen);\r\n\r\n // } catch (e) {\r\n\r\n // }\r\n\r\n // //var requireCall = 0; // line[7]\r\n // //if (line[9]) {\r\n // // requireCall = 1;\r\n // //}\r\n\r\n\r\n // var comment = '';\r\n // try {\r\n // comment = line[8].toString();\r\n // } catch (e) {\r\n // }\r\n\r\n // var unit = '';\r\n // try {\r\n // unit = line[2].toString();\r\n // } catch (e) {\r\n\r\n // }\r\n\r\n // var name = '';\r\n // try {\r\n // name = line[3].toString();\r\n // } catch (e) {\r\n\r\n // }\r\n\r\n // var phone1 = '';\r\n // var phone2 = '';\r\n\r\n // try {\r\n // phone1 = line[5].toString();\r\n // } catch (e) {\r\n\r\n // }\r\n // try {\r\n // phone2 = line[6].toString();\r\n // } catch (e) {\r\n\r\n // }\r\n\r\n\r\n // var email = '';\r\n // try {\r\n // email = line[7].toString();\r\n // } catch (e) {\r\n\r\n // }\r\n\r\n\r\n // var row = {\r\n // ReceiverUnit: unit,\r\n // ReceiverName: name,\r\n // ReceiverPhonenumber: phone1,\r\n // ReceiverPhonenumberTwo: phone2,\r\n // ReceiverEmail: email,\r\n // ReceiverComment: comment,\r\n // ReceiverRequireCall: requireCall,\r\n // ReceiverNotifyBy: notifyBy,\r\n // ReceiverNotifyWhen: notifyWhen,\r\n // ReceiverAllowList: ''\r\n // };\r\n\r\n\r\n // if (autoAdmitCount > 0) {\r\n // var allowList = [];\r\n\r\n // var rowReceiverUnit = row.ReceiverUnit.toLowerCase();\r\n // for (var j = 0; j < autoAdmitCount; j++) {\r\n // try {\r\n // if (rowReceiverUnit.trimEnd() == autoAdmitList[j].ReceiverUnit.toLowerCase().trimEnd()) {\r\n // allowList.push(autoAdmitList[j]);\r\n // }\r\n // } catch (e) {\r\n\r\n // }\r\n // }\r\n\r\n\r\n // try {\r\n // row.ReceiverAllowList = JSON.stringify(allowList);\r\n // } catch (e) {\r\n\r\n // }\r\n\r\n // }\r\n // else {\r\n // row.ReceiverAllowList = '';\r\n // }\r\n\r\n\r\n // if (headsUpCount > 0) {\r\n // var headsUp = [];\r\n\r\n // var rowReceiverUnit = row.ReceiverUnit.toLowerCase();\r\n \r\n // for (var j = 0; j < headsUpCount; j++) {\r\n // try {\r\n // if (rowReceiverUnit.trimEnd() == headsUpList[j].ReceiverUnit.toLowerCase().trimEnd()) {\r\n // headsUp.push(headsUpList[j]);\r\n // }\r\n // } catch (e) {\r\n\r\n // }\r\n // }\r\n // try {\r\n \r\n // row.ReceiverHeadsUpList = JSON.stringify(headsUp);\r\n // } catch (e) {\r\n\r\n // }\r\n\r\n // }\r\n // else {\r\n // row.ReceiverHeadsUpList = '';\r\n // }\r\n\r\n // if (broadcastExemptListCount > 0) {\r\n // var broadcastExemptSetting = 0;\r\n\r\n // var rowReceiverUnit = row.ReceiverUnit.toLowerCase();\r\n // for (var j = 0; j < broadcastExemptListCount; j++) {\r\n // try {\r\n // if (rowReceiverUnit.trimEnd() == broadcastExemptList[j].ReceiverUnit.toLowerCase().trimEnd()) {\r\n // console.log(\"found entry!: \" + broadcastExemptList[j].ReceiverBroadcastExemptSetting);\r\n // if (broadcastExemptList[j].ReceiverBroadcastExemptSetting == \"Both\") {\r\n // broadcastExemptSetting = 3;\r\n // }\r\n // else if (broadcastExemptList[j].ReceiverBroadcastExemptSetting == \"Emails\") {\r\n // broadcastExemptSetting = 2;\r\n // }\r\n // else if (broadcastExemptList[j].ReceiverBroadcastExemptSetting == \"Texts\") {\r\n // broadcastExemptSetting = 1;\r\n // }\r\n // }\r\n // } catch (e) {\r\n\r\n // }\r\n // }\r\n // try {\r\n // row.ReceiverBroadcastExemptSetting = broadcastExemptSetting;\r\n // } catch (e) {\r\n\r\n // }\r\n\r\n // }\r\n // else {\r\n // row.ReceiverBroadcastExemptSetting = 0;\r\n // }\r\n\r\n\r\n\r\n // result.push(row);\r\n // }\r\n //}\r\n\r\n //console.log(result);\r\n\r\n //return result;\r\n}\r\n\r\nfunction SaveAutoAdmitTable(args) {\r\n var result = []\r\n \r\n\r\n var autoAdmitList = ReadAutoAdmitGrid(0);\r\n var autoAdmitListFromPortal = ReadAutoAdmitGrid(1);\r\n\r\n autoAdmitList = autoAdmitList.concat(autoAdmitListFromPortal);\r\n\r\n console.log(\"autoAdmitList\");\r\n console.log(autoAdmitList);\r\n\r\n var autoAdmitCount = 0;\r\n if (autoAdmitList != null) {\r\n autoAdmitCount = autoAdmitList.length;\r\n result = autoAdmitList;\r\n }\r\n\r\n\r\n\r\n\r\n console.log(result);\r\n\r\n return result;\r\n}\r\n\r\n\r\n\r\nfunction GetReceiversToDelete() {\r\n return receiversDeleted;\r\n}\r\n\r\nfunction ResetReceiversToDelete() {\r\n receiversDeleted = [];\r\n return 1;\r\n}\r\n\r\n\r\nfunction PopulateAwayLog(receiversInDatabase) {\r\n try {\r\n var awaylog = [];\r\n\r\n receiversInDatabase.forEach(receiver => awaylog.push([\r\n '',\r\n receiver.receiverUnit,\r\n receiver.receiverName,\r\n '',\r\n receiver.receiverAwayEnabled,\r\n receiver.receiverAwayEnabled ? timestampToJexcelDate(receiver.receiverAwayFrom) : '',\r\n receiver.receiverAwayEnabled ? timestampToJexcelDate(receiver.receiverAwayTo) : '',\r\n '',\r\n receiver.receiverHoldsEnabled,\r\n receiver.receiverHoldsEnabled ? receiver.receiverHoldsWhat : '',\r\n receiver.receiverHoldsEnabled ? timestampToJexcelDate(receiver.receiverHoldsFrom) : '',\r\n receiver.receiverHoldsEnabled ? timestampToJexcelDate(receiver.receiverHoldsTo) : '',\r\n receiver.receiverHoldsEnabled ? receiver.receiverHoldsOther : '',\r\n '',\r\n receiver.receiverHoldsComment]))\r\n\r\n var awayLogToShow = [];\r\n\r\n if (awayLogTable != null) {\r\n awayLogTable.setData(awaylog, false);\r\n } else {\r\n }\r\n } catch (e) {\r\n\r\n console.log(\"PopulateAwayLog Error\");\r\n console.log(e);\r\n\r\n }\r\n\r\n\r\n\r\n return 1;\r\n}\r\n\r\n\r\nfunction SaveAwayLogTable(args) {\r\n var result = []\r\n var data = awayLogTable.getJson(false);\r\n\r\n var rowCount = 100;\r\n if (data != null) {\r\n rowCount = data.length;\r\n }\r\n\r\n for (var i = 0; i < rowCount; i++) {\r\n var line = data[i];\r\n if (line[1] && line[1] != \"\") {\r\n //3,4,7,8\r\n\r\n //Datetime columns\r\n\r\n //////////////////////////\r\n\r\n line[5] = jexcelDateTimeParse(line[5]);\r\n line[6] = jexcelDateTimeParse(line[6]);\r\n line[10] = jexcelDateTimeParse(line[10]);\r\n line[11] = jexcelDateTimeParse(line[11]);\r\n\r\n //////////////////////////\r\n\r\n var row = {\r\n ReceiverUnit: line[1],\r\n ReceiverName: line[2],\r\n ReceiverAwayEnabled: line[4],\r\n ReceiverAwayFrom: line[5],\r\n ReceiverAwayTo: line[6],\r\n ReceiverHoldsEnabled: line[8],\r\n ReceiverHoldsWhat: line[9],\r\n ReceiverHoldsFrom: line[10],\r\n ReceiverHoldsTo: line[11],\r\n ReceiverHoldsOther: line[12],\r\n ReceiverHoldsComment: line[14]\r\n };\r\n result.push(row);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n\r\n//////////////////////////\r\n\r\n//function PopulateAwayLogFromPortal(receiversInDatabase) {\r\n// try {\r\n// var awaylog = [];\r\n\r\n// receiversInDatabase.forEach(awayLogEntry => awaylog.push([\r\n// awayLogEntry.awayLogId,\r\n// awayLogEntry.awayLogReceiverUnit,\r\n// awayLogEntry.awayLogReceiverName,\r\n// '',\r\n// awayLogEntry.awayLogIsEnabled,\r\n// awayLogEntry.awayLogIsEnabled ? timestampToJexcelDate(awayLogEntry.awayLogDueFrom) : '',\r\n// awayLogEntry.awayLogIsEnabled ? timestampToJexcelDate(awayLogEntry.awayLogDueTo) : '',\r\n// '',\r\n// awayLogEntry.awayLogHoldsEnabled,\r\n// awayLogEntry.awayLogHoldsEnabled ? awayLogEntry.awayLogHoldsWhat : '',\r\n// awayLogEntry.awayLogHoldsEnabled ? timestampToJexcelDate(awayLogEntry.awayLogHoldsFrom) : '',\r\n// awayLogEntry.awayLogHoldsEnabled ? timestampToJexcelDate(awayLogEntry.awayLogHoldsTo) : '',\r\n// awayLogEntry.awayLogHoldsEnabled ? awayLogEntry.awayLogHoldsOther : '',\r\n// '',\r\n// awayLogEntry.awayLogComment,\r\n// awayLogEntry.awayLogDescription]))\r\n\r\n// var awayLogToShow = [];\r\n\r\n// if (awayLogTableFromPortal != null) {\r\n// awayLogTableFromPortal.setData(awaylog, false);\r\n// } else {\r\n// }\r\n// } catch (e) {\r\n\r\n// console.log(\"PopulateAwayLogFromPortal Error\");\r\n// console.log(e);\r\n\r\n// }\r\n\r\n\r\n\r\n// return 1;\r\n//}\r\n\r\n\r\nfunction SaveAwayLogTableFromPortal(args) {\r\n var result = []\r\n var data = awayLogTableFromPortal.getJson(false);\r\n\r\n var rowCount = 100;\r\n if (data != null) {\r\n rowCount = data.length;\r\n }\r\n\r\n for (var i = 0; i < rowCount; i++) {\r\n var line = data[i];\r\n if (line[1] && line[1] != \"\") {\r\n //3,4,7,8\r\n\r\n //Datetime columns\r\n\r\n //////////////////////////\r\n\r\n line[5] = jexcelDateTimeParse(line[5]);\r\n line[6] = jexcelDateTimeParse(line[6]);\r\n line[10] = jexcelDateTimeParse(line[10]);\r\n line[11] = jexcelDateTimeParse(line[11]);\r\n\r\n //////////////////////////\r\n\r\n var row = {\r\n AwayLogReceiverUnit: line[1],\r\n AwayLogReceiverName: line[2],\r\n AwayLogIsEnabled: line[4],\r\n AwayLogDueFrom: line[5],\r\n AwayLogDueTo: line[6],\r\n AwayLogHoldsEnabled: line[8],\r\n AwayLogHoldsWhat: line[9],\r\n AwayLogHoldsFrom: line[10],\r\n AwayLogHoldsTo: line[11],\r\n AwayLogHoldsOther: line[12],\r\n AwayLogComment: line[14],\r\n AwayLogDescription: line[15]\r\n };\r\n\r\n var awayLogId = 0;\r\n \r\n try {\r\n awayLogId = parseInt(line[0]);\r\n } catch (e) {\r\n\r\n }\r\n\r\n if (isNaN(awayLogId)) {\r\n awayLogId = 0;\r\n }\r\n\r\n row.AwayLogId = awayLogId;\r\n\r\n result.push(row);\r\n }\r\n }\r\n\r\n console.log(\"result\");\r\n console.log(result)\r\n\r\n return result;\r\n}\r\n\r\n///////////////\r\n\r\nfunction SaveGuardsTable(args) {\r\n var result = []\r\n var data = guardsTable.getJson(false);\r\n\r\n var rowCount = 100;\r\n if (data != null) {\r\n rowCount = data.length;\r\n }\r\n\r\n for (var i = 0; i < rowCount; i++) {\r\n var line = data[i];\r\n if (line[0] && line[0] != \"\") {\r\n var row = { GuardName: line[0], GuardEmail: line[1], GuardPhonenumber: line[2], GuardNumber: line[3], GuardColorShift: line[4], GuardLicensePlate: line[5] };\r\n result.push(row);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction GetCheckoutMethod(arg) {\r\n var radios = document.getElementsByName('checkoutRadioGroup');\r\n var r = 1;\r\n for (var i = 0, length = radios.length; i < length; i++) {\r\n if (radios[i].checked) {\r\n return r;\r\n break;\r\n }\r\n r = r * 2;\r\n }\r\n return r;\r\n}\r\n\r\nfunction FileChosen(e) {\r\n\r\n try {\r\n var fileName = $('#inputGroupFile01').prop('files')[0].name;\r\n document.getElementById('chosenFileLabel').innerHTML = fileName;\r\n } catch (e) {\r\n\r\n }\r\n\r\n\r\n}\r\n\r\nfunction FileChosenPortalImage(e) {\r\n\r\n try {\r\n var fileName = $('#inputGroupFile02').prop('files')[0].name;\r\n document.getElementById('chosenFile2Label').innerHTML = fileName;\r\n } catch (e) {\r\n\r\n }\r\n\r\n\r\n}\r\n\r\n//Used in Admin page to upload logo image\r\nfunction UploadFile(arg, screenid) {\r\n var url = 'https://visitform.com/app/api/Image/imageupload/';\r\n if (release == false) {\r\n url = 'https://localhost:5001/api/Image/imageupload/';\r\n }\r\n // $('#upload').on('click', function () {\r\n var file_data = $('#inputGroupFile01').prop('files')[0];\r\n console.log(file_data);\r\n var form_data = new FormData();\r\n form_data.append('file', file_data);\r\n $.ajax({\r\n url: url + screenid,\r\n dataType: 'text',\r\n cache: false,\r\n contentType: false,\r\n processData: false,\r\n data: form_data,\r\n type: 'post',\r\n beforeSend: function (xhr) { //Include the bearer token in header\r\n xhr.setRequestHeader(\"Authorization\", 'Bearer ' + arg);\r\n },\r\n success: function (response) {\r\n // $('#msg').html(response); \r\n },\r\n error: function (response) {\r\n // $('#msg').html(response); \r\n }\r\n });\r\n // });\r\n}\r\n\r\nfunction UploadWelcomeImageFile(arg, screenid) {\r\n var url = 'https://visitform.com/app/api/Image/imageupload/welcome/';\r\n if (release == false) {\r\n url = 'https://localhost:5001/api/Image/imageupload/welcome/';\r\n }\r\n // $('#upload').on('click', function () {\r\n var file_data = $('#inputGroupFile02').prop('files')[0];\r\n console.log(file_data);\r\n var form_data = new FormData();\r\n form_data.append('file', file_data);\r\n $.ajax({\r\n url: url + screenid,\r\n dataType: 'text',\r\n cache: false,\r\n contentType: false,\r\n processData: false,\r\n data: form_data,\r\n type: 'post',\r\n beforeSend: function (xhr) { //Include the bearer token in header\r\n xhr.setRequestHeader(\"Authorization\", 'Bearer ' + arg);\r\n },\r\n success: function (response) {\r\n // $('#msg').html(response); \r\n },\r\n error: function (response) {\r\n // $('#msg').html(response); \r\n }\r\n });\r\n // });\r\n}\r\n\r\nfunction myFunction() {\r\n var x = document.getElementById(\"snackbar\");\r\n x.className = \"show\";\r\n setTimeout(function () { x.className = x.className.replace(\"show\", \"\"); }, 3000);\r\n}\r\n\r\nfunction showPeopleNotificationToast(message) {\r\n var x = document.getElementById(\"snackbarPeople\");\r\n x.className = \"show\";\r\n x.innerHTML = message;\r\n setTimeout(function () { x.className = x.className.replace(\"show\", \"\"); x.innerHTML = \"\"; }, 3000);\r\n}\r\n\r\n//function InitializeRequiredInputsMultiselect(arg) {\r\n// $(document).ready(function () {\r\n// $('#framework').multiselect({\r\n// nonSelectedText: 'Select Framework',\r\n// enableFiltering: true,\r\n// enableCaseInsensitiveFiltering: true,\r\n// buttonWidth: '400px'\r\n// });\r\n\r\n// //$('#framework_form').on('submit', function (event) {\r\n// // event.preventDefault();\r\n// // var form_data = $(this).serialize();\r\n// // $.ajax({\r\n// // url: \"insert.php\",\r\n// // method: \"POST\",\r\n// // data: form_data,\r\n// // success: function (data) {\r\n// // $('#framework option:selected').each(function () {\r\n// // $(this).prop('selected', false);\r\n// // });\r\n// // $('#framework').multiselect('refresh');\r\n// // alert(data);\r\n// // }\r\n// // });\r\n// //});\r\n\r\n\r\n// });\r\n\r\n\r\n//}\r\n\r\nfunction confirmPinChange(newPinToDisplay) {\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"If you change the Screen Password all the monitors you have setup will need to enter the new Password.\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-warning\",\r\n confirmButtonText: \"Yes, change Password.\",\r\n closeOnConfirm: false\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnPinChangeConfirmed', newPinToDisplay);\r\n swal(\"Changed.\", \"Screen Password was changed to \" + newPinToDisplay, \"success\");\r\n\r\n });\r\n}\r\n\r\nfunction showColumnHelp() {\r\n swal({\r\n title: \"\",\r\n text: \" \",\r\n imageUrl: 'img/colhelp.png',\r\n customClass: 'swal-wide-column-tips',\r\n imageSize: '1024x400'\r\n });\r\n}\r\n\r\nfunction showTextServiceLicense() {\r\n\r\n $(\"#sendTextCheckIn\").prop('checked', false);\r\n $(\"#sendTextCheckInParcel\").prop('checked', false);\r\n\r\n swal({\r\n title: \"Text provider\",\r\n text: \"\\nThis option requires a Text/SMS notification license.\\n\\nContact us at info@visitform.com for a quote.\",\r\n });\r\n}\r\n\r\nfunction showReceiverUnitDuplicateError() {\r\n swal({\r\n title: \"Unit must be unique\",\r\n text: \"\\nThe unit number must be unique. Verify there are no duplicates in the column 'Unit'\\n\\nChanges have not been saved\",\r\n type: \"info\"\r\n });\r\n}\r\n\r\nfunction initSortable(arg) {\r\n $(document).ready(function () {\r\n\r\n $('#sortable-div .sortable-list').sortable({\r\n connectWith: '#sortable-div .sortable-list',\r\n placeholder: 'placeholder',\r\n update: function (x, y) {\r\n\r\n var requiredInputsInOrder1 = GetRequiredInputsConfiguration('AdminVisitor-sortable');\r\n var requiredInputsInOrder2 = GetRequiredInputsConfiguration('AdminVendor-sortable');\r\n var requiredInputsInOrder3 = GetRequiredInputsConfiguration('AdminHost-sortable');\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnAdminColumnOrderChange', requiredInputsInOrder1, 0);\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnAdminColumnOrderChange', requiredInputsInOrder2, 1);\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnAdminColumnOrderChange', requiredInputsInOrder3, 2);\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction GetRequiredInputsConfiguration(el) {\r\n\r\n var requiredInputArray = [];\r\n\r\n $('#' + el + ' .sortable-required-input').each(function (index, element) {\r\n\r\n var requiredInputId = $(element).attr(\"data-id\");\r\n var requiredInputStatus = false;\r\n\r\n $(element).find('input:checkbox:first').each(function () {\r\n if (this.checked) {\r\n requiredInputStatus = true;\r\n }\r\n });\r\n\r\n if (requiredInputStatus) {\r\n requiredInputArray.push(requiredInputId);\r\n }\r\n\r\n });\r\n\r\n var requiredInputsInOrder = requiredInputArray.join();\r\n\r\n return requiredInputsInOrder;\r\n}\r\n\r\nfunction ShowAutoAdmitDetails(admitType, receiverId, unit, name) {\r\n\r\n \r\n //var rowNumber = autoAdmitOverviewTable.getSelectedRows();\r\n\r\n //console.log(\"selected rows:\");\r\n //console.log(rowNumber);\r\n\r\n //var rowData = \"\";\r\n\r\n //for (var i = 1; i < 2; i++) {\r\n // rowData += rowNumber[0].cells[i].innerHTML + \";\";\r\n //}\r\n\r\n try {\r\n\r\n var col4Title = \"Driver License #\";\r\n var col7Title = \"Representative\";\r\n var col8Title = \"Relationship to Resident\";\r\n \r\n\r\n if (admitType == 1) {\r\n var col4Title = \"License #\";\r\n var col7Title = \"Tag\";\r\n var col8Title = \"Barcode\";\r\n }\r\n\r\n if (admitType == 2) {\r\n var col4Title = \"License #\";\r\n var col7Title = \"Key\";\r\n var col8Title = \"PIN\";\r\n }\r\n\r\n autoAdmitTable.setHeader(4, col4Title);\r\n autoAdmitTable.setHeader(7, col7Title);\r\n autoAdmitTable.setHeader(8, col8Title);\r\n\r\n autoAdmitFromPortalTable.setHeader(4, col4Title);\r\n autoAdmitFromPortalTable.setHeader(7, col7Title);\r\n autoAdmitFromPortalTable.setHeader(8, col8Title);\r\n\r\n\r\n \r\n \r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n var rowData = admitType + \";\" + receiverId + \";\" + unit + \";\" + name + \";\";\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnShowAutoAdmitDetailsList', rowData);\r\n}\r\n\r\nfunction ManageResidents(receiverId) {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnShowResidentsDetailsList', receiverId);\r\n}\r\n\r\n\r\nfunction GenerateAutoAdmitPass(autoAdmitId, gridRowNumber, autoAdmitGridIndex) {\r\n\r\n try {\r\n var rowNumber = [];\r\n\r\n console.log(\"autoAdmitGridIndex:\" + autoAdmitGridIndex);\r\n\r\n if (autoAdmitGridIndex == 0) {\r\n console.log(\"fetching from gatehouse table: \" + gridRowNumber);\r\n //rowNumber = autoAdmitTable.getSelectedRows();\r\n rowNumber = autoAdmitTable.getRowData(gridRowNumber);\r\n }\r\n else {\r\n console.log(\"fetching from portal table: \" + gridRowNumber);\r\n rowNumber = autoAdmitFromPortalTable.getRowData(gridRowNumber);\r\n }\r\n \r\n\r\n console.log(\"selected rows:\");\r\n console.log(rowNumber);\r\n\r\n var rowData = autoAdmitId + \";\";\r\n\r\n for (var i = 1; i < 10; i++) {\r\n //rowData += rowNumber[0].cells[i].innerHTML + \";\";\r\n rowData += rowNumber[i] + \";\";\r\n }\r\n\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnGenerateAutoAdmitPass', rowData);\r\n\r\n autoAdmitTable.resetSelection();\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction RemoveAutoAdmit(autoAdmitId, gridRowNumber, autoAdmitGridIndex) {\r\n\r\n try {\r\n var rowNumber = [];\r\n\r\n console.log(\"RemoveAutoAdmit:\" + autoAdmitId);\r\n\r\n //if (autoAdmitGridIndex == 0) {\r\n // console.log(\"fetching from gatehouse table: \" + gridRowNumber);\r\n // rowNumber = autoAdmitTable.getRowData(gridRowNumber);\r\n //}\r\n //else {\r\n // console.log(\"fetching from portal table: \" + gridRowNumber);\r\n // rowNumber = autoAdmitFromPortalTable.getRowData(gridRowNumber);\r\n //}\r\n\r\n \r\n\r\n\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStartDeleteAutoAdmit', autoAdmitId.toString());\r\n\r\n\r\n // DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnGenerateAutoAdmitPass', rowData);\r\n\r\n //autoAdmitTable.resetSelection();\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction OpenAutoAdmitSchedule(autoAdmitId, gridRowNumber, autoAdmitGridIndex) {\r\n\r\n try {\r\n var rowNumber = [];\r\n\r\n console.log(\"OpenAutoAdmitSchedule:\" + autoAdmitId);\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStartOpenScheduleAutoAdmit', autoAdmitId.toString());\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction OpenAutoAdmitEntrances(autoAdmitId, gridRowNumber, autoAdmitGridIndex) {\r\n\r\n try {\r\n var rowNumber = [];\r\n\r\n console.log(\"OpenAutoAdmitEntrances:\" + autoAdmitId);\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStartOpenEntrancesAutoAdmit', autoAdmitId.toString());\r\n\r\n //DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStartDeleteAutoAdmit', autoAdmitId.toString());\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction AssignTransponderAutoAdmit(autoAdmitId, gridRowNumber, autoAdmitGridIndex) {\r\n\r\n try {\r\n var rowNumber = [];\r\n\r\n console.log(\"AssignTransponderAutoAdmit:\" + autoAdmitId);\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStartAssignTransponderAutoAdmit', autoAdmitId.toString());\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction ExtraAutoAdmit(autoAdmitId, gridRowNumber, autoAdmitGridIndex) {\r\n\r\n try {\r\n var rowNumber = [];\r\n\r\n console.log(\"ExtraAutoAdmit:\" + autoAdmitId);\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStartOpenExtraDataAutoAdmit', autoAdmitId.toString());\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction confirmRevokePass(autoAdmitPassId) {\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \" \",\r\n showCancelButton: true,\r\n confirmButtonText: \"Yes, revoke.\",\r\n confirmButtonClass: \"btn-warning\",\r\n cancelButtonText: \"No\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnRevokePass', autoAdmitPassId);\r\n });\r\n}\r\n\r\nfunction confirmEmailPass(autoAdmitPassId, blobIdentifier) {\r\n\r\n swal({\r\n title: \"Send Auto-Admit pass by email\",\r\n text: \"Enter recipient email address:\",\r\n type: \"input\",\r\n showCancelButton: true,\r\n confirmButtonText: \"Send\",\r\n closeOnConfirm: false,\r\n inputPlaceholder: \"Email\"\r\n }, function (inputValue) {\r\n if (inputValue === false) return false;\r\n if (inputValue === \"\") {\r\n swal.showInputError(\"Empty input\");\r\n return false\r\n }\r\n\r\n if (validateEmail(inputValue)) {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnEmailPass', autoAdmitPassId, inputValue, blobIdentifier);\r\n swal(\"Email sent\", \"Auto-Admit pass was sent to \" + inputValue, \"success\");\r\n }\r\n else {\r\n swal.showInputError(\"Invalid email address\");\r\n return false;\r\n }\r\n \r\n\r\n \r\n });\r\n}\r\n\r\nfunction setAppGuideScreenPinDisplay(pin) {\r\n document.getElementById('appGuideScreenPin').innerHTML = pin;\r\n document.getElementById('appGuideScreenPinAndroid').innerHTML = pin;\r\n}\r\n\r\nfunction appGuideNext() {\r\n $('#appInformationGuide').carousel('next');\r\n $('#appInformationGuideAndroid').carousel('next');\r\n}\r\n\r\nfunction appGuidePrev() {\r\n $('#appInformationGuide').carousel('prev');\r\n $('#appInformationGuideAndroid').carousel('prev');\r\n}\r\n\r\n\r\n\r\nfunction createIssuedPassTooltip(el, text) {\r\n\r\n\r\n setTimeout(function () {\r\n tippy(el, {\r\n content: '' + text + '',\r\n allowHTML: true\r\n });\r\n }, 1500);\r\n\r\n}\r\n\r\n//////////////////////////////////////////\r\nvar cacheAwayLogTableHeight = [256, 256];\r\nvar cacheAwayLogTableIsExpanded = [false, false];\r\n\r\nfunction setAwayLogTableHeight(gridIndex) {\r\n\r\n if (gridIndex == 0) {\r\n\r\n $($('#awayloggrid').find('.jexcel_content')).each(function (i, obj) {\r\n if (i == 0) {\r\n toogleAwayLogTableHeight(obj, gridIndex);\r\n }\r\n });\r\n }\r\n else if (gridIndex == 1) {\r\n $($('#awayloggridportal').find('.jexcel_content')).each(function (i, obj) {\r\n if (i == 0) {\r\n toogleAwayLogTableHeight(obj, gridIndex);\r\n }\r\n });\r\n } \r\n}\r\n\r\nfunction toogleAwayLogTableHeight(obj, gridIndex) {\r\n\r\n if (!cacheAwayLogTableIsExpanded[gridIndex]) {\r\n\r\n var readMaxHeight = $(obj).css('max-height');\r\n cacheAwayLogTableHeight[gridIndex] = parseInt(readMaxHeight);\r\n\r\n var newHeight = cacheAwayLogTableHeight[gridIndex] * 2;\r\n $(obj).css({ \"maxHeight\": newHeight + \"px\" });\r\n\r\n cacheAwayLogTableIsExpanded[gridIndex] = true;\r\n }\r\n else {\r\n\r\n var newHeight = cacheAwayLogTableHeight[gridIndex]\r\n $(obj).css({ \"maxHeight\": newHeight + \"px\" });\r\n\r\n cacheAwayLogTableIsExpanded[gridIndex] = false;\r\n }\r\n\r\n}\r\n//////////////////////////////////////////\r\n//////////////////////////////////////////\r\n\r\nvar cacheAutoAdmitDetailsTableHeight = [256, 256];\r\nvar cacheAutoAdmitDetailsTableIsExpanded = [false, false];\r\n\r\nfunction setAutoAdmitDetailsTableHeight(gridIndex) {\r\n\r\n if (gridIndex == 0) {\r\n\r\n $($('#autoadmitgrid').find('.jexcel_content')).each(function (i, obj) {\r\n if (i == 0) {\r\n toogleAutoAdmitDetailsTableHeight(obj, gridIndex);\r\n }\r\n });\r\n }\r\n else if (gridIndex == 1) {\r\n $($('#autoadmitgridfromportal').find('.jexcel_content')).each(function (i, obj) {\r\n if (i == 0) {\r\n toogleAutoAdmitDetailsTableHeight(obj, gridIndex);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction toogleAutoAdmitDetailsTableHeight(obj, gridIndex) {\r\n\r\n if (!cacheAutoAdmitDetailsTableIsExpanded[gridIndex]) {\r\n\r\n var readMaxHeight = $(obj).css('max-height');\r\n cacheAutoAdmitDetailsTableHeight[gridIndex] = parseInt(readMaxHeight);\r\n\r\n var newHeight = cacheAutoAdmitDetailsTableHeight[gridIndex] * 2;\r\n $(obj).css({ \"maxHeight\": newHeight + \"px\" });\r\n\r\n cacheAutoAdmitDetailsTableIsExpanded[gridIndex] = true;\r\n }\r\n else {\r\n\r\n var newHeight = cacheAutoAdmitDetailsTableHeight[gridIndex]\r\n $(obj).css({ \"maxHeight\": newHeight + \"px\" });\r\n\r\n cacheAutoAdmitDetailsTableIsExpanded[gridIndex] = false;\r\n }\r\n\r\n}\r\n//////////////////////////////////////////\r\n\r\nfunction capitalizeFirstLetterPeoplesPage(string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n}\r\n\r\n\r\nasync function triggerGetListTableDataFromListPage(handler) {\r\n handler.invokeMethodAsync(\"FetchTableDataFromListPage\").then((value) => {\r\n if (receiversTable != null) {\r\n window.receiversTable.setData(value, false);\r\n } \r\n\r\n });\r\n}\r\n\r\nasync function triggerGetListTableDataOverviewFromListPage(handler) {\r\n handler.invokeMethodAsync(\"FetchTableDataOverviewFromListPage\").then((value) => {\r\n if (receiversTable != null) {\r\n autoAdmitOverviewTable.setData(value, false);\r\n }\r\n\r\n });\r\n}\r\n\r\nvar receiversCache = [];\r\n\r\nfunction setReceiversCacheFromComponentUnmarshalled(cacheString) {\r\n const receiversConst = BINDING.conv_string(cacheString);\r\n receiversCache = JSON.parse(receiversConst);\r\n}","\r\nvar archiveAnnouncementsTable;\r\nvar archiveNotificationsTable;\r\n\r\nfunction CreateArchiveTables() {\r\n $(document).ready(function () {\r\n var tableHeight = window.innerHeight - 64 - 256;\r\n\r\n if (tableHeight < 256) {\r\n tableHeight = 256;\r\n }\r\n\r\n archiveAnnouncementsTable = jexcel(document.getElementById('expiredannouncementsgrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n tableWidth: '100%',\r\n tableHeight: 500 + 'px',\r\n search: true,\r\n columnSorting: false,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'Created',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Expiration',\r\n type: 'string',\r\n width: '250px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Author',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Resident Unit',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Resident Name',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Severity',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Text',\r\n type: 'text',\r\n width: '520px',\r\n readOnly: true,\r\n }\r\n ],\r\n onload: function (instance) {\r\n\r\n\r\n $($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n var residentUnitValue = $(obj).text();\r\n\r\n if (residentUnitValue != null && residentUnitValue.length > 0 && i > 0) {\r\n\r\n // $(obj).css(\"color\", \"#ccc\");\r\n // $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n //$($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n // $(obj).css(\"background-color\", \"#ccc\");\r\n //});\r\n\r\n\r\n\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#archive-announcements-title\"));\r\n });\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n $(\".jexcel_search\").css({ \"margin-top\": \"20px\" });\r\n\r\n\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) { },\r\n oneditionstart: function (instance, cell, x, y) {\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n ////Used to jump to next column while marking the columnSeperator\r\n //if (x1 == 2) {\r\n // archiveAnnouncementsTable.updateSelectionFromCoords(3, y1, 3, y2);\r\n // console.log(\"selected\" + x1 + y1 + x2 + y2);\r\n //}\r\n },\r\n onchange: function (obj, cel, val) { },\r\n rowResize: true\r\n });\r\n\r\n\r\n //notifications\r\n\r\n archiveNotificationsTable = jexcel(document.getElementById('notificationsarchivegrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n tableWidth: '100%',\r\n tableHeight: 500 + 'px',\r\n search: true,\r\n columnSorting: false,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'Mode',\r\n type: 'text',\r\n width: '100px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Type',\r\n type: 'string',\r\n width: '50px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Timestamp',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Status',\r\n type: 'text',\r\n width: '100px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Unit',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Name',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Receiver',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true,\r\n },\r\n {\r\n title: 'Message',\r\n type: 'text',\r\n width: '600px',\r\n readOnly: true,\r\n }\r\n ],\r\n onload: function (instance) {\r\n\r\n\r\n //$($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n // var residentUnitValue = $(obj).text();\r\n\r\n // if (residentUnitValue != null && residentUnitValue.length > 0 && i > 0) {\r\n\r\n // // $(obj).css(\"color\", \"#ccc\");\r\n // // $(obj).css(\"font-weight\", \"bold\");\r\n // }\r\n //});\r\n\r\n //$($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n // if (i == 0) {\r\n // $(obj).css(\"font-weight\", \"bold\");\r\n // }\r\n //});\r\n\r\n //$($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n // if (i == 0) {\r\n // $(obj).css(\"font-weight\", \"bold\");\r\n // }\r\n //});\r\n\r\n //$($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n // $(obj).css(\"background-color\", \"#ccc\");\r\n //});\r\n\r\n\r\n\r\n\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n $(\".jexcel_search\").css({ \"margin-top\": \"20px\" });\r\n\r\n\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) { },\r\n oneditionstart: function (instance, cell, x, y) {\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n ////Used to jump to next column while marking the columnSeperator\r\n //if (x1 == 2) {\r\n // archiveAnnouncementsTable.updateSelectionFromCoords(3, y1, 3, y2);\r\n // console.log(\"selected\" + x1 + y1 + x2 + y2);\r\n //}\r\n },\r\n onchange: function (obj, cel, val) { },\r\n rowResize: true\r\n });\r\n\r\n});\r\n\r\n return 1;\r\n}\r\n\r\n\r\nfunction severityNameLookup(severity) {\r\n if (severity == 1) {\r\n return \"Info\";\r\n }\r\n else if (severity == 2) {\r\n return \"Warning\";\r\n }\r\n else if (severity == 3) {\r\n return \"Emergency\";\r\n }\r\n\r\n return \"Info\";\r\n}\r\n\r\n\r\nfunction PopulateAnnouncementArchiveTable(announcementsInDatabase, dateformat) {\r\n try {\r\n var announcements = [];\r\n\r\n console.log(announcementsInDatabase);\r\n\r\n announcementsInDatabase.forEach(announcement => announcements.push([\r\n dateformat ? timestampToUsDate(announcement.announcementCreated) : timestampToJexcelDate(announcement.announcementCreated),\r\n dateformat ? timestampToUsDate(announcement.announcementExpires) : timestampToJexcelDate(announcement.announcementExpires),\r\n announcement.announcementAuthor,\r\n announcement.announcementReceiverUnit,\r\n announcement.announcementReceiverName,\r\n severityNameLookup(announcement.announcementSeverity),\r\n announcement.announcementText]));\r\n\r\n if (archiveAnnouncementsTable != null) {\r\n archiveAnnouncementsTable.setData(announcements, false);\r\n } else {\r\n }\r\n } catch (e) {\r\n\r\n console.log(\"PopulateAnnouncementArchiveTable Error\");\r\n console.log(e);\r\n\r\n }\r\n\r\n return 1;\r\n}\r\n\r\n\r\nfunction translateNotificationMode(notification) {\r\n if (notification != null) {\r\n if (notification.notificationBroadcast == 1) {\r\n return \"Broadcast\";\r\n }\r\n else if (notification.notificationManual == 1) {\r\n return \"Manual\";\r\n }\r\n else {\r\n return \"Automatic\";\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nfunction PopulateNotificationsArchiveTable(notificationsInDatabase, dateformat) {\r\n try {\r\n var notifications = [];\r\n\r\n console.log(notificationsInDatabase);\r\n\r\n notificationsInDatabase.forEach(notification => notifications.push([\r\n translateNotificationMode(notification),\r\n notification.notificationType == 0 ? \"Text\" : \"Email\",\r\n dateformat ? timestampToUsDate(notification.notificationTimestamp) : timestampToJexcelDate(notification.notificationTimestamp),\r\n notification.notificationStatus,\r\n notification.notificationReceiverUnit,\r\n notification.notificationReceiverName,\r\n notification.notificationPhoneNumber,\r\n notification.notificationText]));\r\n\r\n if (archiveNotificationsTable != null) {\r\n archiveNotificationsTable.setData(notifications, false);\r\n } else {\r\n }\r\n } catch (e) {\r\n\r\n console.log(\"PopulateAnnouncementArchiveTable Error\");\r\n console.log(e);\r\n\r\n }\r\n\r\n return 1;\r\n}\r\n","var awayLogSummaryTable;\r\n\r\nfunction InitAwayLogSummaryDataTable(dateFormat) {\r\n\r\n /* $(document).ready(function () {*/\r\n console.log(\"creating new table1\");\r\n\r\n if (awayLogSummaryTable != null) {\r\n try {\r\n awayLogSummaryTable.destroy();\r\n awayLogSummaryTable = null;\r\n } catch (e) {\r\n\r\n }\r\n }\r\n\r\n awayLogSummaryTable = $('#awayLogSummaryViewList').DataTable({\r\n \"order\": [[2, \"desc\"]],\r\n pageLength: 25,\r\n autoWidth: false,\r\n \"columnDefs\": [\r\n { \"width\": \"48px\", \"targets\": 0 }, //Unit\r\n { \"width\": \"64px\", \"targets\": 1 }, //Name\r\n { \"width\": \"64px\", \"targets\": 2 }, //Description\r\n { \"width\": \"96px\", \"targets\": 3 }, //Departed\r\n { \"width\": \"96px\", \"targets\": 4 }, //Returning\r\n { \"width\": \"56px\", \"targets\": 5 }, //Duration\r\n { \"width\": \"56px\", \"targets\": 6 }, //Title\r\n { \"width\": \"56px\", \"targets\": 7 } //Assigned to\r\n ],\r\n \"language\": {\r\n \"emptyTable\": \"There are currently no away log entries.\",\r\n \"info\": \"Showing _START_ to _END_ of _TOTAL_ away log entries\",\r\n \"infoEmpty\": \"Showing 0 to 0 of 0 away log entries\",\r\n \"infoFiltered\": \"(filtered from _MAX_ total away log entries)\",\r\n \"lengthMenu\": \"Show _MENU_ away log entries\"\r\n },\r\n columns: [\r\n {\r\n data: 'unit',\r\n },\r\n {\r\n data: \"name\"\r\n },\r\n {\r\n data: \"description\"\r\n },\r\n {\r\n data: 'departed',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n return awayLogSummaryToDate(data, dateFormat);\r\n }\r\n\r\n return data;\r\n }\r\n },\r\n {\r\n data: 'returning',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n return awayLogSummaryToDate(data, dateFormat);\r\n \r\n }\r\n\r\n return data;\r\n }\r\n },\r\n {\r\n data: \"duration\"\r\n },\r\n {\r\n data: \"returnsin\"\r\n },\r\n {\r\n data: \"text\"\r\n },\r\n \r\n\r\n ]\r\n });\r\n\r\n $('#awayLogSummaryViewList tbody').on('click', 'tr', function () {\r\n var data = awayLogSummaryTable.row(this).data();\r\n console.log(data);\r\n\r\n var taskNumberParsed = -1;\r\n\r\n try {\r\n taskNumberParsed = parseInt(data.taskNumber);\r\n } catch (e) {\r\n\r\n }\r\n\r\n if (taskNumberParsed > 0) {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnTaskClickedFromGrid', taskNumberParsed);\r\n }\r\n\r\n\r\n\r\n });\r\n\r\n $(\"#awayLogSummaryViewList tr\").css('cursor', 'pointer');\r\n\r\n //});\r\n\r\n return 1;\r\n}\r\n\r\nfunction awayLogSummaryToDate(data, dateFormat) {\r\n\r\n var resultDate = '';\r\n\r\n try {\r\n \r\n var dd = data.getDate();\r\n var yy = data.getFullYear();\r\n var parsedDate = moment(data);\r\n if (data != null) {\r\n if (dateFormat == 0) {\r\n\r\n resultDate = dd + \" \" + parsedDate.format('MMMM') + \", \" + yy\r\n } else {\r\n resultDate = parsedDate.format('MMMM') + \" \" + dd + \", \" + yy;\r\n }\r\n\r\n \r\n }\r\n } catch (e) {\r\n resultDate = '';\r\n }\r\n\r\n return resultDate;\r\n}\r\n\r\nfunction FilterTaskDataTableOnAssignedTo(assignedToName) {\r\n if (awayLogSummaryTable != null) {\r\n awayLogSummaryTable.columns(6).search(assignedToName).draw();\r\n }\r\n\r\n}\r\n\r\nfunction RemoveAssignedToFilterAwayLogSummaryDataTable(arg) {\r\n if (awayLogSummaryTable != null) {\r\n awayLogSummaryTable.columns(6).search('').draw();\r\n }\r\n\r\n}\r\n\r\nfunction PopulateToAwayLogSummaryDataTable(rows) {\r\n\r\n console.log(\"PopulateToAwayLogSummaryDataTable\");\r\n console.log(rows);\r\n\r\n var summary = [];\r\n\r\n rows.forEach(row => summary.push({\r\n unit: row.awayLogSummaryEntryUnit,\r\n name: row.awayLogSummaryEntryName,\r\n description: row.awayLogSummaryEntryDescription,\r\n departed: row.awayLogSummaryEntryDeparted == null ? null : new Date(row.awayLogSummaryEntryDeparted),\r\n returning: row.awayLogSummaryEntryReturning == null ? null : new Date(row.awayLogSummaryEntryReturning),\r\n duration: row.awayLogSummaryEntryDurationFormatted,\r\n returnsin: row.awayLogSummaryEntryReturnsInFormatted,\r\n text: row.awayLogSummaryEntryExtra\r\n }));\r\n\r\n // tasks = tasks.reverse();\r\n\r\n \r\n\r\n try {\r\n awayLogSummaryTable.rows().remove()\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n\r\n try {\r\n awayLogSummaryTable.rows.add(summary);\r\n awayLogSummaryTable.draw();\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n\r\n\r\n console.log(\"updated\");\r\n}","var excelTableDashboard;\r\nvar excelTableLog;\r\n\r\nvar excelTableCheckedInLog;\r\nvar excelTableCheckedInLogElement = 'currentlycheckedingrid';\r\n\r\nvar excelTableCheckedInLogVendor;\r\nvar excelTableCheckedInLogElementVendor = 'currentlycheckedingridvendor';\r\n\r\nvar excelTableCheckedInLogEvents;\r\nvar excelTableCheckedInLogElementEvents = 'currentlycheckedingridevents';\r\n\r\nvar excelTableCheckedInLogHosts;\r\nvar excelTableCheckedInLogElementHosts = 'currentlycheckedingridhosts';\r\n\r\nvar excelTableCompleteLog;\r\nvar excelTableCompleteLogElement = 'completecheckedingrid';\r\n\r\nvar excelTableCompleteLogVendor;\r\nvar excelTableCompleteLogElementVendor = 'completecheckedingridvendor';\r\n\r\n\r\nfunction GetTableData(args) {\r\n var result = []\r\n var data = excelTableDashboard.getJson(false);\r\n for (var i = 0; i < 500; i++) {\r\n var line = data[i];\r\n console.log(line);\r\n console.log(line[0]);\r\n if (line[0] && line[0] != \"\") {\r\n var row = { Name: line[0], Surname: line[1], Email: line[2], Phone: line[3] };\r\n result.push(row);\r\n console.log(row);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n\r\nfunction CreateCheckedInGridForDashboard(vendor, siteType, requiredInputs, imageUploadEnabled, type) {\r\n\r\n var tableHeight = window.innerHeight - 64 - 256;\r\n\r\n if (tableHeight < 256) {\r\n tableHeight = 256;\r\n }\r\n\r\n var widthForGrid = CalculateGridWidthSpace();\r\n\r\n var largeColumnWidth = widthForGrid * 0.12;\r\n var mediumColumnWidth = widthForGrid * 0.10;\r\n var smallColumnWidth = widthForGrid * 0.06;\r\n\r\n var columnWidth = widthForGrid / requiredInputs.length;\r\n \r\n var columns = [];\r\n\r\n if (columnWidth < 142) {\r\n columnWidth = 142;\r\n }\r\n\r\n requiredInputs.forEach(function (arg) {\r\n\r\n var columnHeaderTitle = getColumnName(arg);//arg.friendlyName;\r\n //If site is not gated community\r\n if (siteType == 1) {\r\n columnHeaderTitle = columnHeaderTitle.replace(\"Resident\", \"Host\");\r\n }\r\n\r\n if (arg.id == \"ColumnSeparator\") {\r\n columns.push({ type: 'hidden', width: 2, title: '', name: '', readOnly: true })\r\n }\r\n else if (arg.id == \"CheckinTimestamp\") {\r\n columns.push({ type: 'text', width: 200, title: 'Check in', name: arg.id, readOnly: true })\r\n }\r\n else if (arg.id == \"CheckoutTimestamp\") {\r\n columns.push({ type: 'text', width: 200, title: 'Check out', name: arg.id, readOnly: true })\r\n }\r\n else {\r\n columns.push({ type: 'text', width: columnWidth, title: columnHeaderTitle, name: arg.id, readOnly: false })\r\n }\r\n\r\n \r\n });\r\n\r\n //var spectrumEditor = {\r\n // // Methods\r\n // closeEditor: function (cell, save) {\r\n // // Get value\r\n // // var value = $(cell).find('.editor').spectrum('get').toHexString();\r\n\r\n // //// Set visual value\r\n // //$(cell).html(value);\r\n // //$(cell).css('color', value);\r\n\r\n // //// Close edition\r\n // //$(cell).removeClass('edition');\r\n\r\n // // Save history\r\n // return 'value';\r\n // },\r\n // openEditor: function (cell) {\r\n // //// Get current content\r\n // //var html = $(cell).html();\r\n\r\n // //// Create the editor\r\n // //var editor = document.createElement('div');\r\n // //$(cell).html(editor);\r\n \r\n\r\n \r\n // },\r\n // getValue: function (cell) {\r\n // return $(cell).html() + 'hej';\r\n // },\r\n // setValue: function (cell, value) {\r\n // $(cell).html(value);\r\n // $(cell).css('color', value);\r\n\r\n // return true;\r\n // }\r\n //}\r\n\r\n if (imageUploadEnabled) {\r\n columns.push({ type: 'text', width: columnWidth, title: 'Image', name: 'Image' })\r\n }\r\n\r\n if (type == 0 || type == 1 || type == 4) {\r\n if (vendor == 0) {\r\n \r\n excelTableCheckedInLog = jexcel(document.getElementById(excelTableCheckedInLogElement), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowManualInsertRow: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n search: true,\r\n data: null,\r\n columns: columns,\r\n tableOverflow: true,\r\n tableWidth: widthForGrid + \"px\",\r\n tableHeight: tableHeight + 'px',\r\n onload: function (instance) {\r\n\r\n //$($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n // $(obj).prepend($(\"#dashboard-checkinlog-header-title\"));\r\n //});\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n $(\".jexcel_search\").css({ \"margin-top\": \"20px\" });\r\n\r\n\r\n },\r\n });\r\n\r\n\r\n }\r\n else if (vendor == 4) {\r\n\r\n if (excelTableCheckedInLogHosts != null) {\r\n excelTableCheckedInLogHosts.destroy();\r\n }\r\n \r\n excelTableCheckedInLogHosts = jexcel(document.getElementById(excelTableCheckedInLogElementHosts), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowManualInsertRow: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n search: true,\r\n data: null,\r\n columns: columns,\r\n tableOverflow: true,\r\n tableWidth: widthForGrid + \"px\",\r\n //tableWidth: '100%',\r\n tableHeight: tableHeight + 'px'\r\n });\r\n \r\n \r\n\r\n\r\n }\r\n else {\r\n excelTableCheckedInLogVendor = jexcel(document.getElementById(excelTableCheckedInLogElementVendor), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowManualInsertRow: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n search: true,\r\n data: null,\r\n columns: columns,\r\n tableOverflow: true,\r\n tableWidth: widthForGrid + \"px\",\r\n //tableWidth: '100%',\r\n tableHeight: tableHeight + 'px'\r\n });\r\n }\r\n }\r\n else if (type == 5 && vendor == 5) {\r\n\r\n var columnLength = columns.length;\r\n for (var x = 0; x < columnLength; x++) {\r\n if (columns[x].name == \"CheckinTimestamp\") {\r\n columns[x].title = \"Time\";\r\n }\r\n\r\n if (columns[x].name == \"ExpectedCheckinTimestamp\") {\r\n columns[x].title = \"Start\";\r\n }\r\n\r\n if (columns[x].name == \"ExpectedCheckoutTimestamp\") {\r\n columns[x].title = \"End\";\r\n }\r\n }\r\n\r\n if (excelTableCheckedInLogEvents != null) {\r\n excelTableCheckedInLogEvents.destroy();\r\n }\r\n\r\n\r\n excelTableCheckedInLogEvents = jexcel(document.getElementById(excelTableCheckedInLogElementEvents), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowManualInsertRow: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n search: true,\r\n filters: true,\r\n data: null,\r\n columns: columns,\r\n tableOverflow: true,\r\n tableWidth: widthForGrid + \"px\",\r\n tableHeight: tableHeight + 'px',\r\n onload: function (instance) {\r\n\r\n //$($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n // $(obj).prepend($(\"#dashboard-checkinlog-header-title\"));\r\n //});\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n $(\".jexcel_search\").css({ \"margin-top\": \"20px\" });\r\n\r\n\r\n \r\n\r\n\r\n },\r\n onchange: function (obj, cel, val) {\r\n\r\n \r\n try {\r\n document.getElementById('events-filtered-count').innerHTML = val;\r\n }\r\n catch (e) { }\r\n }\r\n });\r\n\r\n }\r\n\r\n \r\n\r\n\r\n //setTimeout(function () {\r\n // showGuardOnDutyColumn(0, false);\r\n //}, 250);\r\n \r\n}\r\n\r\nfunction RefreshCheckedInGridForDashboard(vendor, checkinData) {\r\n try {\r\n if (vendor == 0) {\r\n if (excelTableCheckedInLog != null) {\r\n excelTableCheckedInLog.setData(checkinData, false);\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n else if (vendor == 1){\r\n if (excelTableCheckedInLogVendor != null) {\r\n excelTableCheckedInLogVendor.setData(checkinData, false);\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n else if (vendor == 4) {\r\n if (excelTableCheckedInLogHosts != null) {\r\n excelTableCheckedInLogHosts.setData(checkinData, false);\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n else if (vendor == 5) {\r\n if (excelTableCheckedInLogEvents != null) {\r\n excelTableCheckedInLogEvents.setData(checkinData, false);\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n } catch (e) {\r\n console.log(\"RefreshCheckedInGridForDashboard Error\");\r\n console.log(e);\r\n }\r\n \r\n}\r\n\r\nfunction RefreshCompleteGridForDashboard(vendor, checkinData) {\r\n try {\r\n if (vendor == 0) {\r\n if (excelTableCompleteLog != null) {\r\n excelTableCompleteLog.setData(checkinData, false);\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n } else {\r\n if (excelTableCompleteLogVendor != null) {\r\n excelTableCompleteLogVendor.setData(checkinData, false);\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n } catch (e) {\r\n console.log(\"RefreshCompleteGridForDashboard Error\");\r\n console.log(e);\r\n }\r\n \r\n}\r\n\r\n\r\nfunction CreateCompleteCheckedInGridForDashboard(vendor, siteType, requiredInputs, imageUploadEnabled, type) {\r\n\r\n var tableHeight = window.innerHeight - 64 - 256;\r\n\r\n if (tableHeight < 256) {\r\n tableHeight = 256;\r\n }\r\n\r\n var columns = [];\r\n\r\n var widthForGrid = CalculateGridWidthSpace();\r\n\r\n var largeColumnWidth = widthForGrid * 0.12;\r\n var mediumColumnWidth = widthForGrid * 0.10;\r\n var smallColumnWidth = widthForGrid * 0.06;\r\n\r\n var columnWidth = widthForGrid / requiredInputs.length;\r\n\r\n if (columnWidth < 142) {\r\n columnWidth = 142;\r\n }\r\n\r\n\r\n requiredInputs.forEach(function (arg) {\r\n\r\n var columnHeaderTitle = getColumnName(arg);//arg.friendlyName;\r\n //If site is not gated community\r\n if (siteType == 1) {\r\n columnHeaderTitle = columnHeaderTitle.replace(\"Resident\", \"Host\");\r\n }\r\n\r\n if (arg.id == \"ColumnSeparator\") {\r\n columns.push({ type: 'hidden', width: 2, title: '', name: '', readOnly: true })\r\n }\r\n else if (arg.id == \"CheckinTimestamp\") {\r\n columns.push({ type: 'text', width: 200, title: 'Check in', name: arg.id, readOnly: true })\r\n }\r\n else if (arg.id == \"CheckoutTimestamp\") {\r\n columns.push({ type: 'text', width: 200, title: 'Check out', name: arg.id, readOnly: true })\r\n }\r\n else {\r\n columns.push({ type: 'text', width: columnWidth, title: columnHeaderTitle, name: arg.id, readOnly: false })\r\n }\r\n\r\n });\r\n\r\n if (imageUploadEnabled) {\r\n columns.push({ type: 'text', width: columnWidth, title: 'Image', name: 'Image' })\r\n }\r\n\r\n if (type == 0 || type == 1) {\r\n\r\n \r\n if (vendor == 0) {\r\n excelTableCompleteLog = jexcel(document.getElementById(excelTableCompleteLogElement), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n columns: columns,\r\n tableOverflow: true,\r\n tableWidth: widthForGrid + \"px\",\r\n tableHeight: tableHeight + 'px'\r\n });\r\n } else {\r\n excelTableCompleteLogVendor = jexcel(document.getElementById(excelTableCompleteLogElementVendor), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n columns: columns,\r\n tableOverflow: true,\r\n tableWidth: widthForGrid + \"px\",\r\n tableHeight: tableHeight + 'px'\r\n });\r\n }\r\n }\r\n \r\n\r\n}\r\n\r\nfunction CalculateGridWidthSpace() {\r\n var width = screen.width;\r\n //var width = vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\r\n console.log(width);\r\n\r\n //var sidebarWidth = $(\".sidebar\").width();\r\n //console.log(sidebarWidth);\r\n\r\n var sidebarWidth = 250;\r\n\r\n ////Mobile case\r\n //if (sidebarWidth == width) {\r\n // sidebarWidth = 0;\r\n //}\r\n\r\n var widthForGrid = width - sidebarWidth - 90; //24px is page padding\r\n return widthForGrid;\r\n}\r\n\r\n\r\n//Dashboard Date range pickers start\r\n\r\nvar dashboardCheckinDateRangePickerElementId = 'dashboardCheckinDateRangePicker';\r\nvar dashboardCheckinDateRangePickerStartSelected = '';\r\nvar dashboardCheckinDateRangePickerEndSelected = '';\r\n\r\nvar dashboardCheckoutDateRangePickerElementId = 'dashboardCheckoutDateRangePicker';\r\nvar dashboardCheckoutDateRangePickerStartSelected = '';\r\nvar dashboardCheckoutDateRangePickerEndSelected = '';\r\n\r\nfunction buildDashboardsDateRangePickers() {\r\n $(document).ready(function () {\r\n $('#' + dashboardCheckinDateRangePickerElementId).daterangepicker(null, function (start, end, label) {\r\n dashboardCheckinDateRangePickerStartSelected = start.toISOString();\r\n dashboardCheckinDateRangePickerEndSelected = end.toISOString();\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnChangeCheckedInTimePeriodFromDateRange');\r\n });\r\n\r\n $('#' + dashboardCheckoutDateRangePickerElementId).daterangepicker(null, function (start, end, label) {\r\n dashboardCheckoutDateRangePickerStartSelected = start.toISOString();\r\n dashboardCheckoutDateRangePickerEndSelected = end.toISOString();\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnChangeCheckedOutTimePeriodFromDateRange');\r\n });\r\n });\r\n}\r\n\r\nfunction getDashboardCheckinDateRangePickerStartSelected() {\r\n return dashboardCheckinDateRangePickerStartSelected;\r\n}\r\nfunction getDashboardCheckinDateRangePickerEndSelected() {\r\n return dashboardCheckinDateRangePickerEndSelected;\r\n}\r\n\r\nfunction getDashboardCheckoutDateRangePickerStartSelected() {\r\n return dashboardCheckoutDateRangePickerStartSelected;\r\n}\r\nfunction getDashboardCheckoutDateRangePickerEndSelected() {\r\n return dashboardCheckoutDateRangePickerEndSelected;\r\n}\r\n\r\n// Dashboard Date range pickers end\r\n\r\n\r\nfunction checkoutCurrentGridConfirm(vendor, visitorCountToBeCheckedOut) {\r\n\r\n var visitorTitle = visitorCountToBeCheckedOut == 1 ? \"visitor\" : \"visitors\";\r\n\r\n if (vendor == 1) {\r\n visitorTitle = visitorCountToBeCheckedOut == 1 ? \"vendor\" : \"vendors\";\r\n }\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: visitorCountToBeCheckedOut + \" \" + visitorTitle + \" currently shown in the check in list will be checked out\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-success\",\r\n confirmButtonText: \"Yes, check out.\",\r\n closeOnConfirm: false\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnCheckoutCurrentGridConfirmed');\r\n swal(\"Checked out.\", visitorCountToBeCheckedOut + \" \" + visitorTitle + \" checked out\", \"success\");\r\n\r\n });\r\n}\r\n\r\nfunction checkoutAllConfirm(vendor, siteName) {\r\n\r\n var visitorTitle = \"visitors\";\r\n if (vendor == 1) {\r\n visitorTitle = \"vendors\";\r\n }\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"All \" + visitorTitle + \" in \" + siteName + \" will be checked out.\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-success\",\r\n confirmButtonText: \"Yes, check out.\",\r\n closeOnConfirm: false\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnCheckoutAllConfirmed');\r\n swal(\"Checked out.\", \"All \" + visitorTitle + \" in \" + siteName + \" checked out\", \"success\");\r\n\r\n });\r\n\r\n}\r\n\r\nfunction CalculateWidthForVisitTimeline() {\r\n\r\n\r\n var visitTimelineBaseHolderWidth = $(\"#visitTimelineBaseHolder\").width();\r\n console.log(\"visitTimelineBaseHolderWidth\");\r\n console.log(visitTimelineBaseHolderWidth);\r\n\r\n return visitTimelineBaseHolderWidth;\r\n}\r\n\r\n\r\nvar tippyInstancesDashboard = [];\r\n\r\n\r\nfunction createTimelineVisitTooltip(el, text) {\r\n \r\n setTimeout(function () {\r\n var tippyInstance = tippy('#' + el, {\r\n content: '' + text + '',\r\n allowHTML: true\r\n });\r\n\r\n tippyInstancesDashboard.push(tippyInstance);\r\n }, 1500);\r\n\r\n \r\n}\r\n\r\nfunction clearTippyInstancesDashboard() {\r\n var tippyInstancesCount = 0;\r\n if (tippyInstancesDashboard != null) {\r\n tippyInstancesCount = tippyInstancesDashboard.length;\r\n\r\n \r\n\r\n for (var i = 0; i < tippyInstancesCount; i++) {\r\n\r\n try {\r\n tippyInstancesDashboard[i].hide();\r\n } catch (e) {\r\n\r\n }\r\n\r\n\r\n try {\r\n tippyInstancesDashboard[i].disable();\r\n } catch (e) {\r\n\r\n }\r\n\r\n\r\n try {\r\n tippyInstancesDashboard[i].destroy();\r\n } catch (e) {\r\n\r\n }\r\n }\r\n\r\n tippyInstancesDashboard = [];\r\n }\r\n\r\n console.log(\"Cleared tippy instances Dashboard\");\r\n\r\n}\r\n\r\n\r\nfunction showGuardOnDutyColumn(gridIndex, visible) {\r\n\r\n var guardNameColNumber = 1;\r\n\r\n //if (gridIndex == 0) {\r\n // if (visible) {\r\n // excelTableCheckedInLog.showColumn(guardNameColNumber);\r\n // } else {\r\n // excelTableCheckedInLog.hideColumn(guardNameColNumber);\r\n // }\r\n //}\r\n //else if (gridIndex == 1) {\r\n // if (visible) {\r\n // excelTableCheckedInLogVendor.showColumn(guardNameColNumber);\r\n // } else {\r\n // excelTableCheckedInLogVendor.hideColumn(guardNameColNumber);\r\n // }\r\n //}\r\n\r\n try {\r\n if (visible) {\r\n excelTableCheckedInLog.showColumn(guardNameColNumber);\r\n excelTableCheckedInLogVendor.showColumn(guardNameColNumber);\r\n } else {\r\n excelTableCheckedInLog.hideColumn(guardNameColNumber);\r\n excelTableCheckedInLogVendor.hideColumn(guardNameColNumber);\r\n }\r\n } catch (e) {\r\n\r\n }\r\n \r\n \r\n //alert(visible);\r\n}\r\n\r\nfunction dashboardDisplayImage(checkinId, blobIdentifier) {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnDashboardShowPhotoOpenedByUser', checkinId, blobIdentifier);\r\n}\r\n\r\n\r\nfunction openDashboardDisplayCheckinImageModal(arg) {\r\n $('#dashboardShowPhotoModal').modal();\r\n}","//console.log(\"[WebWorker]: init\");\r\n\r\n//setInterval(() => {\r\n// // console.log(\"web working trigger\");\r\n// postMessage(\"CHECK_TOKEN_EXPIRATION\");\r\n//}, 1000);\r\n","\r\n\r\n//window._webWorker = null;\r\n\r\n//window.markdownToHtml = (markdown) => {\r\n// const converter = new showdown.Converter();\r\n// return converter.makeHtml(markdown);\r\n//};\r\n\r\n//window.initWebWorker = (handler, method) => {\r\n// this.stopWebWorker();\r\n\r\n// console.log(\"Initializing WebWorker.\");\r\n// this._webWorker = new Worker(new URL(\"./authWorker.js\", import.meta.url));\r\n\r\n// this._webWorker.onmessage = (msg) => {\r\n// handler.invokeMethodAsync(method, msg.data);\r\n// const accessToken = localStorage.getItem(\"accessToken\");\r\n// if (accessToken) {\r\n// try {\r\n// handler.invokeMethodAsync(method, msg.data);\r\n// } catch (e) {\r\n// console.warn(\"Failed to call WebWorker callback: \" + e);\r\n// }\r\n// }\r\n// };\r\n//};\r\n\r\n//window.stopWebWorker = () => {\r\n// if (this._webWorker) {\r\n// console.log(\"Stopping WebWorker.\");\r\n// this._webWorker.terminate();\r\n// this._webWorker = null;\r\n// }\r\n//};\r\n\r\n\r\n//window.getElementAttribute = (el, attrName, handler, method) => {\r\n// handler.invokeMethodAsync(method, el[attrName]);\r\n//};\r\n\r\n//window.setElementAttribute = (el, attrName, value) => {\r\n// el.setAttribute(attrName, value);\r\n//};\r\n\r\n//window.callMethodOnObject = (el, func, ...args) => {\r\n// el[func](...args);\r\n//};\r\n\r\n//window.callFunc = (func, ...args) => {\r\n// if (window.visitformgxJs[func]) {\r\n// try {\r\n// return window.visitformgxJs[func](...args);\r\n// } catch (e) {\r\n// console.warn(e);\r\n// }\r\n// } else {\r\n// console.error(\"interop func not defined: \" + func);\r\n// }\r\n//};\r\n","\r\n\r\nfunction ShowLogbookFullText(text) {\r\n\r\n console.log(\"here\");\r\n console.log(text);\r\n\r\n if (text != null) {\r\n try {\r\n text = text.replace(/"/g, '\\\"');\r\n } catch (e) {\r\n\r\n }\r\n //text = text.replaceAll(\""\", \"\\\"\");\r\n }\r\n\r\n swal({\r\n title: \"\",\r\n text: text,\r\n customClass: 'swal-wide-column-tips'\r\n });\r\n}\r\n\r\nfunction confirmClearLogbook(logbookId) {\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \" \",\r\n showCancelButton: true,\r\n confirmButtonText: \"Yes, cancel.\",\r\n cancelButtonText: \"No\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnClearLogbookConfirmed', logbookId);\r\n });\r\n}\r\n\r\n\r\n\r\nfunction InitOperationResidentSpecificLogbookTypeahead(people) {\r\n\r\n var peopleRaw = [];\r\n\r\n var count = people.length;\r\n for (var i = 0; i < count; i++) {\r\n var name = people[i].receiverName;\r\n var unit = people[i].receiverUnit;\r\n if (name !== \"\") {\r\n peopleRaw.push(unit + \", \" + name);\r\n }\r\n }\r\n\r\n buildTypeahead('#logbookReceiverSelect .typeahead', \"people\", peopleRaw);\r\n\r\n return true;\r\n}\r\n\r\nfunction SetResidentSpecificCheckboxToFalse(arg) {\r\n $('#residentSpecificSwitch').prop('checked', false);\r\n}\r\n\r\n\r\n\r\nfunction logbookSentSuccess(arg) {\r\n swal({\r\n title: \"Sent\",\r\n text: \"Logbook sent\",\r\n type: \"success\",\r\n showCancelButton: false,\r\n showConfirmButton: false,\r\n timer: 1500\r\n });\r\n\r\n}\r\n\r\n\r\n","\r\nfunction InitLoginPage(arg) {\r\n \r\n $(document).ready(function () {\r\n // $('.login-info-box').fadeOut();\r\n // $('.login-show').addClass('show-log-panel');\r\n });\r\n\r\n\r\n //$('.login-reg-panel input[type=\"radio\"]').on('change', function () {\r\n \r\n // if ($('#log-login-show').is(':checked')) {\r\n // $('.register-info-box').fadeOut();\r\n // $('.login-info-box').fadeIn();\r\n\r\n // $('.white-panel').addClass('right-log');\r\n // $('.register-show').addClass('show-log-panel');\r\n // $('.login-show').removeClass('show-log-panel');\r\n\r\n // }\r\n // else if ($('#log-reg-show').is(':checked')) {\r\n // $('.register-info-box').fadeIn();\r\n // $('.login-info-box').fadeOut();\r\n\r\n // $('.white-panel').removeClass('right-log');\r\n\r\n // $('.login-show').addClass('show-log-panel');\r\n // $('.register-show').removeClass('show-log-panel');\r\n // }\r\n //});\r\n\r\n}\r\n\r\n\r\nwindow.clientJsMethods = {\r\n RedirectTo: function (path) {\r\n if (release) {\r\n path = '/app' + path;\r\n }\r\n window.location = path;\r\n }\r\n };\r\n\r\n\r\nfunction RedirectTo(path) {\r\n if (release) {\r\n path = '/app' + path;\r\n }\r\n window.location = path;\r\n}\r\n\r\nfunction RedirectToRaw(path) {\r\n window.location = path;\r\n}\r\n\r\n\r\nfunction ShowSuccessRegistration() {\r\n swal({\r\n title: \"Success!\",\r\n text: \"Registration successful\\n\\nClick the verification link in the verification email we've sent you and click OK to go to login.\\n\\nMake sure to check your spam inbox in case you do not receive a verification email.\\n\",\r\n type: \"success\",\r\n showCancelButton: false,\r\n showConfirmButton: true\r\n },\r\n function () {\r\n if (release) {\r\n RedirectTo(\"/login\");\r\n } else {\r\n RedirectTo(\"login\");\r\n }\r\n \r\n });\r\n\r\n\r\n //swal({\r\n // title: \"Confirmation\",\r\n // text: \r\n // type: \"info\",\r\n // showCancelButton: true,\r\n // confirmButtonClass: \"btn-success\",\r\n // confirmButtonText: \"Yes, send.\",\r\n // closeOnConfirm: false\r\n //},\r\n // function () {\r\n // DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnSendManualNotificationConfirmed', '-');\r\n\r\n\r\n // swal(\"Notification\" + (sendtext & sendemail ? \"s\" : \"\") + \" sent\", \"See the analytics page to see the statuses of all notifications\", \"success\");\r\n\r\n // });\r\n\r\n}","\r\n\r\nfunction confirmSiteDeletion(siteNameToDelete, siteId) {\r\n\r\n\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"Removing the site will deactive all screens and all data will be unavailable.\",\r\n type: \"warning\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-danger\",\r\n confirmButtonText: \"Yes, remove \" + siteNameToDelete,\r\n closeOnConfirm: false\r\n },\r\n function () {\r\n\r\n swal({\r\n title: \"Deletion security\",\r\n text: \"Write '\" + siteNameToDelete + \"'\",\r\n type: \"input\",\r\n showCancelButton: true,\r\n closeOnConfirm: false,\r\n inputPlaceholder: \"Site name\"\r\n }, function (inputValue) {\r\n if (inputValue === false) return false;\r\n if (inputValue === \"\") {\r\n //swal.showInputError(\"You need to write something!\");\r\n return false\r\n }\r\n\r\n if (inputValue == siteNameToDelete) {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnSiteDeleteConfirmed', siteId);\r\n swal(\"Removed.\", siteNameToDelete + \" was removed\", \"success\");\r\n }\r\n\r\n });\r\n \r\n \r\n });\r\n}\r\n\r\nfunction templatesSavedSuccess(arg) {\r\n swal({\r\n title: \"Saved\",\r\n text: \"Templates saved\",\r\n type: \"success\",\r\n showCancelButton: false,\r\n showConfirmButton: false,\r\n timer: 1500\r\n });\r\n\r\n}\r\n\r\nfunction defaultMessagesSavedSuccess(arg) {\r\n swal({\r\n title: \"Saved\",\r\n text: \"Default reply saved\",\r\n type: \"success\",\r\n showCancelButton: false,\r\n showConfirmButton: false,\r\n timer: 1500\r\n });\r\n\r\n}\r\n\r\nfunction confirmSetDefaults(arg0, arg1) {\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"Setting default templates will undo all changes you made to the templates, this cannot be undone.\",\r\n type: \"warning\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-warning\",\r\n confirmButtonText: \"Yes, set defaults\",\r\n closeOnConfirm: false\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnDefaultTemplatesConfirmed', 0);\r\n });\r\n}\r\n\r\nfunction confirmSaveTemplates(siteName, siteId) {\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"Saving the templates will apply immediately.\",\r\n type: \"warning\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-warning\",\r\n confirmButtonText: \"Yes, save\",\r\n closeOnConfirm: false\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnSaveTemplatesConfirmed', siteName, siteId);\r\n });\r\n}\r\n\r\n\r\nfunction toggleEditGuardDeviceDialog(guardDeviceId) {\r\n $('#editModalGuardDevice').modal('toggle');\r\n return 1;\r\n}\r\n\r\nfunction closeEditGuardDeviceDialog() {\r\n $('#editModalGuardDevice').modal('hide');\r\n return 1;\r\n}\r\n\r\nfunction confirmDeleteDevice(guardDeviceId) {\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"If you remove this device, it wont be able to authenticate anymore.\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-warning\",\r\n confirmButtonText: \"Yes, delete.\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnDeleteGuardDeviceConfirmed', guardDeviceId);\r\n \r\n\r\n });\r\n}\r\n\r\nfunction toggleEditIpNumberDialog(ipNumberId) {\r\n $('#editModalIpNumber').modal('toggle');\r\n return 1;\r\n}\r\n\r\nfunction closeEditIpNumberDialog() {\r\n $('#editModalIpNumber').modal('hide');\r\n return 1;\r\n}\r\n\r\nfunction confirmDeleteIpNumber(ipNumberId) {\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"If you remove this IP, it wont be able to authenticate anymore.\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-warning\",\r\n confirmButtonText: \"Yes, delete.\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnDeleteSafeIpNumberConfirmed', ipNumberId);\r\n\r\n\r\n });\r\n}\r\n\r\n\r\n\r\n\r\n//Not in manage page\r\n\r\nfunction ForceDefaultTextSwitchInAccountPage(val) {\r\n document.getElementById(\"adminStartTextSwitch\").checked = val;\r\n}\r\n\r\nfunction replaceStartTextURLs(message) {\r\n if (!message) return;\r\n\r\n var urlRegex = /(((https?:\\/\\/)|(www\\.))[^\\s]+)/g;\r\n return message.replace(urlRegex, function (url) {\r\n var hyperlink = url;\r\n if (!hyperlink.match('^https?:\\/\\/')) {\r\n hyperlink = 'http://' + hyperlink;\r\n }\r\n return '' + url + ''\r\n });\r\n}\r\n\r\nfunction DisplayUserAdminStartCustomText(text) {\r\n\r\n try {\r\n if (text != null) {\r\n var htmlToDisplay = text.replace(/\\n/g, \"
\");\r\n document.getElementById(\"customAdminStartMessageDisplay\").innerHTML = replaceStartTextURLs(htmlToDisplay);\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n}\r\n\r\n//\r\n\r\nfunction siteMemberInviteSentSuccess(arg) {\r\n swal({\r\n title: \"Sent\",\r\n text: \"Invite sent\",\r\n type: \"success\",\r\n showCancelButton: false,\r\n showConfirmButton: false,\r\n timer: 1500\r\n });\r\n\r\n}\r\n\r\nfunction confirmDeleteSiteMember(siteMemberId) {\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"If you remove this user they wont be able to access this location anymore. To get access again they will need to accept an invite again.\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-warning\",\r\n confirmButtonText: \"Yes, remove.\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnDeleteSiteMemberConfirmed', siteMemberId);\r\n\r\n\r\n });\r\n}\r\n\r\nfunction toggleEditSiteMemberDialog(siteMemberId) {\r\n $('#editModalSiteMember').modal('toggle');\r\n return 1;\r\n}\r\n\r\nfunction closeEditSiteMemberDialog() {\r\n $('#editModalSiteMember').modal('hide');\r\n return 1;\r\n}\r\n\r\n\r\n //\r\n\r\nfunction toggleEditRoleDialog() {\r\n $('#editModalRole').modal('toggle');\r\n return 1;\r\n}\r\n\r\nfunction closeEditRoleDialog() {\r\n $('#editModalRole').modal('hide');\r\n return 1;\r\n}\r\n//\r\n\r\nfunction StartCreateNewScreen(siteId) {\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-info\",\r\n confirmButtonText: \"Yes\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnCreateNewScreenConfirmed', siteId);\r\n });\r\n}","function copyScreenUrl() {\r\n\r\n /* Get the text field */\r\n var copyText = document.getElementById(\"screenUrlDisplay\");\r\n\r\n /* Select the text field */\r\n copyText.select();\r\n copyText.setSelectionRange(0, 99999); /*For mobile devices*/\r\n\r\n /* Copy the text inside the text field */\r\n document.execCommand(\"copy\");\r\n\r\n /* Alert the copied text */\r\n //alert(\"Copied the text: \" + copyText.value);\r\n\r\n swal({\r\n title: \" \",\r\n text: \"Screen URL copied to clipboard\",\r\n type: \"success\",\r\n showCancelButton: false,\r\n showConfirmButton: false,\r\n timer: 2000\r\n });\r\n}\r\n\r\nfunction SetScreenDisplayLink(screenlink) {\r\n\r\n if (screenlink == \"\") {\r\n document.getElementById(\"screenLinkDisplayDiv\").style.visibility = \"hidden\";\r\n document.getElementById(\"screenLinkAppDisplayDiv\").style.visibility = \"hidden\";\r\n \r\n }\r\n else {\r\n document.getElementById(\"screenLinkDisplayDiv\").style.visibility = \"visible\";\r\n\r\n var mainurl = \"https://visitform.com/app/s/\" + screenlink;\r\n\r\n if (release == false) {\r\n mainurl = \"https://localhost:5001/s/\" + screenlink;\r\n }\r\n\r\n \r\n document.getElementById('screenUrlDisplay').value = mainurl;\r\n document.getElementById('screenMainLink').href = mainurl;\r\n\r\n\r\n \r\n\r\n document.getElementById(\"screenLinkAppDisplayDiv\").style.visibility = \"visible\";\r\n\r\n\r\n //var mainurlApp = \"https://visitform.com/mw/\" + screenlink;\r\n\r\n //if (release == false) {\r\n // mainurlApp = \"https://localhost:5001/mw/\" + screenlink;\r\n //}\r\n\r\n // var appUrlInput = ' ';\r\n\r\n \r\n document.getElementById('screenUrlDisplayAppUrl').innerHTML = screenlink;\r\n document.getElementById('screenUrlDisplayAppUrlAndroid').innerHTML = screenlink;\r\n\r\n var tooltipText = 'Click to see app information';\r\n\r\n setTimeout(function () {\r\n tippy('#' + 'screenUrlDisplayApp', {\r\n arrow: true,\r\n content: '' + tooltipText + '',\r\n allowHTML: true,\r\n });\r\n }, 500);\r\n\r\n var tooltipText2 = 'Click to open screen in a new tab';\r\n\r\n setTimeout(function () {\r\n tippy('#' + 'screenMainLink', {\r\n arrow: true,\r\n content: '' + tooltipText2 + '',\r\n allowHTML: true,\r\n });\r\n }, 500);\r\n\r\n var tooltipText3 = 'Click to copy link to the clipboard';\r\n\r\n setTimeout(function () {\r\n tippy('#' + 'copyToClipboardNavbarButton', {\r\n arrow: true,\r\n content: '' + tooltipText3 + '',\r\n allowHTML: true,\r\n });\r\n }, 500);\r\n\r\n\r\n \r\n\r\n // document.getElementById('screenUrlDisplayApp').value = mainurlApp;\r\n //document.getElementById('screenUrlDisplayApp').href = mainurlApp;\r\n\r\n \r\n }\r\n \r\n\r\n}\r\n\r\nfunction ShowAppPwaInformation() {\r\n $('#appPwaInfoModal').modal();\r\n}\r\n\r\nfunction SetScreenDisplayTitle(title) {\r\n\r\n document.getElementById('navbarTitleDisplay').innerHTML = title;\r\n\r\n\r\n}\r\n\r\nfunction closeNav() {\r\n\r\n console.log(\"hej\");\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnToggleMenuEventShortcut');\r\n \r\n $(\".rotate-ico\").toggleClass(\"down\");\r\n\r\n}\r\n\r\nfunction showSideBar() {\r\n $(\".sidebar\").removeClass(\"hidden-sidebar\");\r\n $(\".sidebar\").addClass(\"full-size-sidebar\");\r\n}\r\n\r\n\r\nfunction hideSideBar() {\r\n $(\".sidebar\").addClass(\"hidden-sidebar\");\r\n $(\".sidebar\").removeClass(\"full-size-sidebar\");\r\n \r\n}\r\n\r\n\r\n//system message popover\r\nfunction initSystemPopover() {\r\n $(function () {\r\n var down = false;\r\n\r\n $('#bell').click(function (e) {\r\n\r\n var color = $(this).text();\r\n if (down) {\r\n\r\n $('#box').css('height', '0px');\r\n $('#box').css('display', 'none');\r\n $('#box').css('z-index', 'auto');\r\n //$('#box').css('opacity', '0');\r\n down = false;\r\n } else {\r\n\r\n $('#box').css('height', '480px');\r\n $('#box').css('display', 'block');\r\n $('#box').css('z-index', '100');\r\n //$('#box').css('opacity', '1');\r\n down = true;\r\n\r\n }\r\n\r\n });\r\n });\r\n}\r\n\r\n \r\n\r\n\r\n //","var memoTable;\r\n\r\nfunction InitMemoDataTable(dateFormat) {\r\n\r\n /* $(document).ready(function () {*/\r\n console.log(\"creating new table1\");\r\n\r\n if (memoTable != null) {\r\n try {\r\n memoTable.destroy();\r\n memoTable = null;\r\n } catch (e) {\r\n\r\n }\r\n }\r\n\r\n memoTable = $('#memoViewList').DataTable({\r\n \"order\": [[1, \"desc\"]],\r\n pageLength: 25,\r\n autoWidth: false,\r\n \"columnDefs\": [\r\n { \"width\": \"56px\", \"targets\": 0 }, //Memo #\r\n { \"width\": \"196px\", \"targets\": 1 }, //State\r\n { \"width\": \"256px\", \"targets\": 2 }, //Created\r\n { \"width\": \"256px\", \"targets\": 3 }, //Due date\r\n { \"width\": \"256px\", \"targets\": 4 }, //Due date\r\n { \"width\": \"128px\", \"targets\": 5 }, //Priority\r\n //{ \"width\": \"196px\", \"targets\": 5 }, //Title\r\n //{ \"width\": \"148px\", \"targets\": 6 }, //Assigned to\r\n //{ \"width\": \"128px\", \"targets\": 7 }, //Unit\r\n ],\r\n \"language\": {\r\n \"emptyTable\": \"There are currently no memos. Create a new memo with the button in the top right\",\r\n \"info\": \"Showing _START_ to _END_ of _TOTAL_ memos\",\r\n \"infoEmpty\": \"Showing 0 to 0 of 0 memos\",\r\n \"infoFiltered\": \"(filtered from _MAX_ total memos)\",\r\n \"lengthMenu\": \"Show _MENU_ memos\"\r\n },\r\n columns: [\r\n {\r\n data: 'memoNumber',\r\n },\r\n {\r\n data: 'created',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n if (dateFormat == 0) {\r\n return timestampToJexcelDate(data);\r\n }\r\n else {\r\n return timestampToUsDate(data);\r\n }\r\n\r\n\r\n }\r\n\r\n return data;\r\n }\r\n },\r\n {\r\n data: \"title\"\r\n },\r\n {\r\n data: \"text\"\r\n },\r\n {\r\n data: \"author\"\r\n },\r\n {\r\n data: 'memoNumber',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n\r\n var deleteMemoButton = '
Remove
';\r\n\r\n\r\n return deleteMemoButton;\r\n //return ' ' + data;\r\n }\r\n\r\n return data;\r\n }\r\n },\r\n\r\n ]\r\n });\r\n\r\n $('#memoViewList tbody').on('click', 'tr', function () {\r\n var data = memoTable.row(this).data();\r\n console.log(data);\r\n\r\n var memoNumberParsed = -1;\r\n\r\n try {\r\n memoNumberParsed = parseInt(data.memoNumber);\r\n } catch (e) {\r\n\r\n }\r\n\r\n if (memoNumberParsed > 0) {\r\n //use to open memo\r\n // DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnMemoClickedFromGrid', memoNumberParsed);\r\n }\r\n\r\n\r\n\r\n });\r\n\r\n $(\"#memoViewList tr\").css('cursor', 'pointer');\r\n\r\n //});\r\n\r\n return 1;\r\n}\r\n\r\nfunction FilterMemoDataTableOnAssignedTo(assignedToName) {\r\n if (memoTable != null) {\r\n memoTable.columns(6).search(assignedToName).draw();\r\n }\r\n\r\n}\r\n\r\nfunction RemoveAssignedToFilterMemoDataTable(arg) {\r\n if (memoTable != null) {\r\n memoTable.columns(6).search('').draw();\r\n }\r\n\r\n}\r\n\r\nfunction PopulateToMemoDataTable(rows) {\r\n\r\n console.log(\"rows\");\r\n console.log(rows);\r\n\r\n var memos = [];\r\n\r\n rows.forEach(row => memos.push({\r\n memoNumber: row.memoId,\r\n created: new Date(row.memoCreated),\r\n title: row.memoTitle,\r\n author: row.memoAuthor,\r\n text: row.memoText\r\n }));\r\n\r\n // memos = memos.reverse();\r\n\r\n console.log(\"memos\");\r\n console.log(memos);\r\n\r\n try {\r\n memoTable.rows().remove()\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n\r\n try {\r\n memoTable.rows.add(memos);\r\n memoTable.draw();\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n\r\n\r\n console.log(\"updated\");\r\n}\r\n\r\nfunction ReloadMemoDataTable(row) {\r\n\r\n console.log(\"reloading table..\");\r\n if (memoTable != null) {\r\n console.log(\"destroying table..\");\r\n memoTable.destroy();\r\n setTimeout(function () {\r\n console.log(\"buuilding table..\");\r\n InitMemoDataTable();\r\n }, 2000);\r\n }\r\n\r\n // memoTable.row.add([row.memoEventMemoId, row.memoEventState, 'Edinburgh']);\r\n\r\n //$(document).ready(function () {\r\n // //$('#example').DataTable().destroy();\r\n // console.log(\"creating new table2\");\r\n // // $('#example').DataTable();\r\n\r\n // //memoTable.clear();\r\n // var data = memoTable.data();\r\n // memoTable.draw();\r\n //});\r\n}\r\n\r\nfunction createPortalPageTooltip(el, text) {\r\n\r\n setTimeout(function () {\r\n tippy(el, {\r\n content: '' + text + '',\r\n allowHTML: true\r\n });\r\n }, 1500);\r\n\r\n}\r\n\r\n\r\nfunction confirmSetAllActivated(allEnabled) {\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"This will \" + (allEnabled ? \"enable\" : \"disable\") + \" the portal for all units\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-info\",\r\n confirmButtonText: \"Yes\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnAllActivatedChangedConfirmed', allEnabled);\r\n \r\n });\r\n}\r\n\r\nfunction deleteMemoFromgrid(memoId) {\r\n \r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"This will remove the clicked memo\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-danger\",\r\n confirmButtonText: \"Yes\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnDeleteMemoConfirmed', memoId);\r\n\r\n });\r\n}\r\n\r\nfunction reKeyPortal(portalCode) {\r\n\r\n swal({\r\n title: 'Are you sure?',\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-warning\",\r\n confirmButtonText: \"Yes\",\r\n closeOnConfirm: true,\r\n text: \"This will create a new PIN code for this unit

Also create a new resident code

This will make the current code and PIN unusable\",\r\n html: true\r\n }, function () {\r\n\r\n // var checkedRecreateCode = $('#checkbox-recreate-code').val();\r\n // alert(\"checkedRecreateCode: \" + checkedRecreateCode);\r\n\r\n var recreateCode = false;\r\n\r\n if ($('#checkbox-recreate-code').is(\":checked\"))\r\n {\r\n recreateCode = true;\r\n }\r\n \r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnReKeyPortalConfirmed', portalCode, recreateCode);\r\n\r\n\r\n });\r\n\r\n}\r\n\r\nfunction showSendPortalInformationMessageModal(arg) {\r\n $('#showPortalSendInformationMessageModal').modal();\r\n}\r\n\r\nfunction InitPortalInfoResidentsTypeahead(people) {\r\n\r\n var peopleRaw = [];\r\n\r\n var count = people.length;\r\n for (var i = 0; i < count; i++) {\r\n var name = people[i].receiverName;\r\n var unit = people[i].receiverUnit;\r\n var phone = people[i].receiverPhonenumber;\r\n var email = people[i].receiverEmail;\r\n if (name !== \"\") {\r\n peopleRaw.push(unit + \", \" + name + \", \" + email);\r\n }\r\n }\r\n\r\n buildTypeahead('#residentUnitPortalInfoSelect .typeahead', \"people\", peopleRaw);\r\n\r\n return true;\r\n}\r\n\r\nfunction showPortalInfoInvalidEmailAddress() {\r\n swal({\r\n title: \"Invalid email address\",\r\n text: \"\\nPlease enter a valid email address\",\r\n type: \"info\"\r\n });\r\n}\r\n\r\nfunction confirmSendPortalInfo(residentUnit, residentName, emailAddress, includeCredentials) {\r\n\r\n var infoText = \"This will send an email to \" + residentName + \" (\" + emailAddress + \") with an attached document of how to login to the portal\";\r\n\r\n if (includeCredentials) {\r\n infoText = \"This will send an email to \" + residentName + \" (\" + emailAddress + \") with an attached document of how to login to the portal including their resident code and PIN code.\";\r\n }\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: infoText,\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-info\",\r\n confirmButtonText: \"Yes, send.\",\r\n closeOnConfirm: false\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnSendPortalInfoToResidentConfirmed', residentUnit, residentName, emailAddress, includeCredentials);\r\n\r\n $('#showPortalSendInformationMessageModal').modal('hide');\r\n swal(\"Sent.\", \"Document was sent to \" + residentName + \" (\" + emailAddress + \")\", \"success\");\r\n\r\n\r\n });\r\n}","var portalEditRequestPendingTable;\r\nvar portalEditRequestPendingTableOnChangeDisabled = false;\r\n\r\nvar portalEditRequestAcceptedTable;\r\nvar portalEditRequestAcceptedTableOnChangeDisabled = false;\r\n\r\nfunction CreatePortalEditRequestTables() {\r\n\r\n var residentTerm = \"Resident\";\r\n var tableHeight = window.innerHeight - 128 - 256;\r\n\r\n if (tableHeight < 256) {\r\n tableHeight = 256;\r\n }\r\n try {\r\n\r\n portalEditRequestPendingTable = jexcel(document.getElementById('portaleditrequestpendinggrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n allowInsertRow: false,\r\n allowManualInsertRow: false,\r\n allowDeleteRow: false,\r\n selectionCopy: false,\r\n columnDrag: false,\r\n data: null,\r\n pagination: 100,\r\n tableWidth: '100%',\r\n tableHeight: tableHeight + 'px',\r\n minDimensions: [2, 20],\r\n wordWrap: true,\r\n search: true,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'Time',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: residentTerm + ' Unit',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true\r\n },\r\n {\r\n title: residentTerm + ' Name',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Field',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Field',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Data',\r\n type: 'text',\r\n width: '150px'\r\n },\r\n {\r\n title: 'Accept',\r\n type: 'html',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Reject',\r\n type: 'html',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Comment',\r\n type: 'html',\r\n readOnly: true,\r\n width: '200px'\r\n },\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n\r\n //$($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n // $(obj).css(\"background-color\", \"#ccc\");\r\n //});\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"6\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"7\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"8\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n\r\n\r\n $($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#people-autoadmit-header-checkin-title\"));\r\n });\r\n\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n\r\n\r\n try {\r\n\r\n $($(instance).find('td[data-x=\"6\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).html('' + 'Accept' + '');\r\n }\r\n });\r\n\r\n\r\n $($(instance).find('td[data-x=\"7\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).html('' + 'Reject' + '');\r\n }\r\n });\r\n\r\n\r\n $($(instance).find('td[data-x=\"8\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).html('' + 'Comment' + '');\r\n }\r\n });\r\n\r\n \r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n\r\n },\r\n onchange: function (obj, cel, val) {\r\n // Used to avoid onchange event to propagate\r\n if (portalEditRequestPendingTableOnChangeDisabled) {\r\n return;\r\n }\r\n\r\n var checkinId = 0;\r\n var newValue = \"\";\r\n var columnToUpdate = \"\";\r\n\r\n //Grid coordinates of data just updated\r\n var x = parseInt($(cel).attr(\"data-x\"));\r\n var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n\r\n\r\n\r\n \r\n\r\n var t = portalEditRequestPendingTable.getSelectedColumns(true);\r\n var buttonColumnIndex = 8;\r\n var buttonColumnIndex2 = 7;\r\n var buttonColumnIndex3 = 6;\r\n\r\n //Stop the selection if user selects checkin timestamp or checkout button cols\r\n if (t != null && ((t.indexOf(buttonColumnIndex) >= 0 || t.indexOf(buttonColumnIndex2) >= 0 || t.indexOf(buttonColumnIndex3) >= 0) && t.indexOf(1) == -1)) {\r\n\r\n\r\n portalEditRequestPendingTable.resetSelection(false);\r\n\r\n\r\n }\r\n\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n });\r\n\r\n\r\n portalEditRequestAcceptedTable = jexcel(document.getElementById('portaleditrequestacceptedgrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n allowInsertRow: false,\r\n allowManualInsertRow: false,\r\n allowDeleteRow: false,\r\n selectionCopy: false,\r\n columnDrag: false,\r\n data: null,\r\n pagination: 100,\r\n tableWidth: '100%',\r\n tableHeight: tableHeight + 'px',\r\n minDimensions: [2, 20],\r\n wordWrap: true,\r\n search: true,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'Time',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: residentTerm + ' Unit',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true\r\n },\r\n {\r\n title: residentTerm + ' Name',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Field',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Field',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Data',\r\n type: 'text',\r\n width: '150px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Accept',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Reject',\r\n type: 'text',\r\n width: '200px',\r\n readOnly: true\r\n },\r\n {\r\n title: 'Comment',\r\n type: 'text',\r\n readOnly: true,\r\n width: '200px'\r\n },\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n\r\n //$($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n // $(obj).css(\"background-color\", \"#ccc\");\r\n //});\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"6\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"7\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"8\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#f0f0f0\");\r\n });\r\n\r\n\r\n\r\n $($(instance).find('td[data-x=\"2\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#people-autoadmit-header-checkin-title\"));\r\n });\r\n\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n\r\n\r\n try {\r\n\r\n $($(instance).find('td[data-x=\"6\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).html('' + 'Accepted' + '');\r\n }\r\n });\r\n\r\n\r\n $($(instance).find('td[data-x=\"7\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).html('' + 'Rejected' + '');\r\n }\r\n });\r\n\r\n\r\n $($(instance).find('td[data-x=\"8\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).html('' + 'Comment' + '');\r\n }\r\n });\r\n\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n\r\n },\r\n onchange: function (obj, cel, val) {\r\n // Used to avoid onchange event to propagate\r\n if (portalEditRequestAcceptedTableOnChangeDisabled) {\r\n return;\r\n }\r\n\r\n var checkinId = 0;\r\n var newValue = \"\";\r\n var columnToUpdate = \"\";\r\n\r\n //Grid coordinates of data just updated\r\n var x = parseInt($(cel).attr(\"data-x\"));\r\n var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n\r\n\r\n\r\n portalEditRequestAcceptedTable.resetSelection(false);\r\n\r\n var t = portalEditRequestAcceptedTable.getSelectedColumns(true);\r\n var buttonColumnIndex = 8;\r\n var buttonColumnIndex2 = 7;\r\n var buttonColumnIndex3 = 6;\r\n\r\n //Stop the selection if user selects checkin timestamp or checkout button cols\r\n if (t != null && ((t.indexOf(buttonColumnIndex) >= 0 || t.indexOf(buttonColumnIndex2) >= 0 || t.indexOf(buttonColumnIndex3) >= 0) && t.indexOf(1) == -1)) {\r\n\r\n\r\n\r\n\r\n\r\n }\r\n\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n });\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction proxyPopulatePendingEditRequestTable(editRequestsPending) {\r\n\r\n if (portalEditRequestPendingTable != null) {\r\n console.log(\"json parse time 1\");\r\n console.log(new Date());\r\n const data = BINDING.conv_string(editRequestsPending);\r\n portalEditRequestPendingTable.setData(JSON.parse(data), false);\r\n console.log(\"json parse time 2\");\r\n console.log(new Date());\r\n } else {\r\n }\r\n}\r\n\r\nfunction proxyPopulateAcceptedEditRequestTable(editRequestsAccepted) {\r\n\r\n if (portalEditRequestAcceptedTable != null) {\r\n console.log(\"json parse time 1\");\r\n console.log(new Date());\r\n const data = BINDING.conv_string(editRequestsAccepted);\r\n portalEditRequestAcceptedTable.setData(JSON.parse(data), false);\r\n console.log(\"json parse time 2\");\r\n console.log(new Date());\r\n } else {\r\n }\r\n}\r\n\r\n\r\nfunction HandlePortalRequest(act, portalRequestId) {\r\n console.log(\"act: \" + act + \" - portalRequestId: \" + portalRequestId);\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnHandlePortalRequestFromGrid', act, portalRequestId);\r\n}\r\n\r\n\r\n\r\nfunction startHandleAll(argument) {\r\n\r\n\r\n\r\n swal({\r\n title: \"Confirm\",\r\n text: \"Are you sure?\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-warning\",\r\n confirmButtonText: \"Yes\",\r\n closeOnConfirm: false\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnHandleAllPortalRequestFromGrid', 0, argument);\r\n swal(\"OK.\", \"yes\", \"success\");\r\n\r\n });\r\n}","function confirmRemoveProperty(propertyName, propertyId) {\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: propertyName + \" will be removed from the property list\",\r\n type: \"info\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-warning\",\r\n confirmButtonText: \"Yes, remove.\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnDeletePropertyConfirmed', propertyId);\r\n\r\n\r\n });\r\n}\r\n\r\n\r\n\r\nfunction FileChosenPropertyImage(e) {\r\n\r\n try {\r\n var fileName = $('#inputGroupFileProperty').prop('files')[0].name;\r\n document.getElementById('chosenFilePropertyLabel').innerHTML = fileName;\r\n } catch (e) {\r\n\r\n }\r\n\r\n\r\n}\r\n\r\n\r\n\r\nfunction UploadPropertyImageFile(arg, propertyid) {\r\n var url = 'https://visitform.com/app/api/Image/imageupload/property/';\r\n if (release == false) {\r\n url = 'https://localhost:5001/api/Image/imageupload/property/';\r\n }\r\n // $('#upload').on('click', function () {\r\n var file_data = $('#inputGroupFileProperty').prop('files')[0];\r\n console.log(file_data);\r\n var form_data = new FormData();\r\n form_data.append('file', file_data);\r\n $.ajax({\r\n url: url + propertyid,\r\n dataType: 'text',\r\n cache: false,\r\n contentType: false,\r\n processData: false,\r\n data: form_data,\r\n type: 'post',\r\n beforeSend: function (xhr) { //Include the bearer token in header\r\n xhr.setRequestHeader(\"Authorization\", 'Bearer ' + arg);\r\n },\r\n success: function (response) {\r\n // $('#msg').html(response); \r\n },\r\n error: function (response) {\r\n // $('#msg').html(response); \r\n }\r\n });\r\n // });\r\n}","var reportDateRangePickerElementId = 'reportDateRangePicker';\r\nvar reportDateRangePickerStartSelected = '';\r\nvar reportDateRangePickerEndSelected = '';\r\n\r\nfunction buildReportsDateRangePicker() {\r\n $(document).ready(function () {\r\n $('#' + reportDateRangePickerElementId).daterangepicker(null, function (start, end, label) {\r\n console.log(start.toISOString(), end.toISOString(), label);\r\n\r\n reportDateRangePickerStartSelected = start.toISOString();\r\n reportDateRangePickerEndSelected = end.toISOString();\r\n });\r\n });\r\n}\r\nfunction getDateRangerPickerStartSelected() {\r\n return reportDateRangePickerStartSelected;\r\n}\r\nfunction getDateRangerPickerEndSelected() {\r\n return reportDateRangePickerEndSelected;\r\n}\r\n\r\n\r\nfunction showReportGenerationModal(reportNumber) {\r\n var modalId = '#reportCreateModal' + reportNumber;\r\n $(modalId).modal();\r\n}\r\n\r\nfunction hideReportGenerationModal(reportNumber) {\r\n var modalId = '#reportCreateModal' + reportNumber;\r\n $(modalId).modal('toggle');\r\n}\r\n\r\n\r\nfunction initSortableReports(arg) {\r\n $(document).ready(function () {\r\n\r\n $('#Reports' + arg + '-sortable ' + '.sortable-list').sortable({\r\n connectWith: '#Reports' + arg + '-sortable ' + '.sortable-list',\r\n placeholder: 'placeholder',\r\n update: function (x, y) {\r\n\r\n var requiredInputsInOrder = GetRequiredInputsConfiguration(\"Reports\" + arg + \"-sortable\");\r\n\r\n console.log(\"changed!\");\r\n console.log(requiredInputsInOrder);\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnReportsColumnOrderChange', requiredInputsInOrder, arg);\r\n\r\n }\r\n });\r\n\r\n\r\n });\r\n\r\n}","var serviceRequestTable;\r\n\r\nfunction InitServiceRequestDataTable(dateFormat) {\r\n\r\n document.documentElement.style.setProperty('--toolbelt-loadingbar-color', 'transparent')\r\n\r\n if (serviceRequestTable != null) {\r\n try {\r\n serviceRequestTable.destroy();\r\n serviceRequestTable = null;\r\n } catch (e) {\r\n\r\n }\r\n }\r\n\r\n serviceRequestTable = $('#serviceRequestViewList').DataTable({\r\n \"order\": [[2, \"desc\"]],\r\n pageLength: 25,\r\n autoWidth: false,\r\n \"columnDefs\": [\r\n { \"width\": \"122px\", \"targets\": 0 }, //ServiceRequest #\r\n { \"width\": \"186px\", \"targets\": 1 }, //Placed\r\n { \"width\": \"100px\", \"targets\": 2 }, //Unit\r\n { \"width\": \"100px\", \"targets\": 3 }, //Location\r\n { \"width\": \"118px\", \"targets\": 4 }, //Title\r\n { \"width\": \"345px\", \"targets\": 5 }, //Description\r\n { \"width\": \"64px\", \"targets\": 6 }, //Follow up needed\r\n { \"width\": \"128px\", \"targets\": 7 } //Category list\r\n ],\r\n \"language\": {\r\n \"emptyTable\": \"There are currently no service requests. Create a new service request with the button in the top right\",\r\n \"info\": \"Showing _START_ to _END_ of _TOTAL_ service requests\",\r\n \"infoEmpty\": \"Showing 0 to 0 of 0 service requests\",\r\n \"infoFiltered\": \"(filtered from _MAX_ total service requests)\",\r\n \"lengthMenu\": \"Show _MENU_ service requests\"\r\n },\r\n columns: [\r\n {\r\n data: 'serviceRequestNumber',\r\n\r\n },\r\n {\r\n data: 'created',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n if (dateFormat == 0) {\r\n return timestampToJexcelDate(data);}\r\n else {\r\n return timestampToUsDate(data);\r\n }\r\n \r\n \r\n }\r\n\r\n return data;\r\n }\r\n },\r\n {\r\n data: 'unit'\r\n },\r\n {\r\n data: 'location'\r\n },\r\n {\r\n data: \"title\"\r\n },\r\n {\r\n data: \"text\"\r\n },\r\n {\r\n data: 'followUpNeeded',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n if (data == true) {\r\n return \"yes\";\r\n }\r\n else {\r\n return \"no\";\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n //render: function (data, type, row, meta) {\r\n // return type === 'display' ?\r\n // '' :\r\n // data;\r\n //}\r\n },\r\n {\r\n data: 'typeCategoryList',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n try {\r\n var categories = data.split(\";\");\r\n var displayText = categories.filter(function (val) { return val; }).join(', ');\r\n return displayText;\r\n\r\n } catch {}\r\n \r\n }\r\n\r\n return data;\r\n }\r\n //render: function (data, type, row, meta) {\r\n // return type === 'display' ?\r\n // '' :\r\n // data;\r\n //}\r\n },\r\n //{\r\n // data: 'priority',\r\n // render: function (data, type) {\r\n // if (type === 'display') {\r\n\r\n // if (data == 3) {\r\n // return 'Critical';\r\n // } else if (data == 2){\r\n // return 'High';\r\n // }\r\n // else if (data == 1) {\r\n // return 'Medium';\r\n // }\r\n // else if (data == 0) {\r\n // return 'Low';\r\n // }\r\n\r\n // return \"\";\r\n // }\r\n\r\n // return data;\r\n // }\r\n //}\r\n ]\r\n });\r\n\r\n $('#serviceRequestViewList tbody').on('click', 'tr', function () {\r\n var data = serviceRequestTable.row(this).data();\r\n console.log(data);\r\n\r\n var serviceRequestNumberParsed = -1;\r\n\r\n try {\r\n serviceRequestNumberParsed = parseInt(data.serviceRequestNumber);\r\n } catch (e) {\r\n\r\n }\r\n\r\n if (serviceRequestNumberParsed > 0) {\r\n console.log(\"serviceRequestNumberParsed:\" + serviceRequestNumberParsed);\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnServiceRequestClickedFromGrid', serviceRequestNumberParsed);\r\n }\r\n\r\n \r\n \r\n });\r\n\r\n $(\"#serviceRequestViewList tr\").css('cursor', 'pointer');\r\n\r\n // });\r\n}\r\n\r\nfunction FilterServiceRequestDataTableOnAssignedTo(assignedToName) {\r\n if (serviceRequestTable != null) {\r\n serviceRequestTable.columns(6).search(assignedToName).draw();\r\n }\r\n \r\n}\r\n\r\nfunction RemoveAssignedToFilterServiceRequestDataTable(arg) {\r\n if (serviceRequestTable != null) {\r\n serviceRequestTable.columns(6).search('').draw();\r\n }\r\n \r\n}\r\n\r\nfunction PopulateToServiceRequestDataTable(rows) {\r\n\r\n var serviceRequests = [];\r\n\r\n rows.forEach(row => serviceRequests.push({\r\n serviceRequestNumber: row.serviceRequestId,\r\n unit: row.serviceRequestUnit,\r\n location: row.serviceRequestLocation,\r\n created: new Date(row.serviceRequestTimestamp),\r\n duedate: row.serviceRequestDueDate == null ? null : new Date(row.serviceRequestDueDate),\r\n priority: row.serviceRequestPriority,\r\n typeCategoryList: row.serviceRequestTypeCategoryList,\r\n title: row.serviceRequestTitle,\r\n followUpNeeded: row.serviceRequestFollowUpNeeded,\r\n assignedTo: row.serviceRequestAssignedTo,\r\n unit: row.serviceRequestReceiverUnit,\r\n text: row.serviceRequestText\r\n }));\r\n\r\n // serviceRequests = serviceRequests.reverse();\r\n\r\n console.log(\"serviceRequests\");\r\n console.log(serviceRequests);\r\n\r\n try {\r\n serviceRequestTable.rows().remove()\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n\r\n try {\r\n serviceRequestTable.rows.add(serviceRequests);\r\n serviceRequestTable.draw();\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n}\r\n\r\nfunction ReloadServiceRequestDataTable(row) {\r\n\r\n console.log(\"reloading table..\");\r\n if (serviceRequestTable != null) {\r\n console.log(\"destroying table..\");\r\n serviceRequestTable.destroy();\r\n setTimeout(function () {\r\n console.log(\"buuilding table..\");\r\n InitServiceRequestDataTable();\r\n }, 2000);\r\n }\r\n\r\n // serviceRequestTable.row.add([row.serviceRequestEventServiceRequestId, row.serviceRequestEventState, 'Edinburgh']);\r\n\r\n //$(document).ready(function () {\r\n // //$('#example').DataTable().destroy();\r\n // console.log(\"creating new table2\");\r\n // // $('#example').DataTable();\r\n\r\n // //serviceRequestTable.clear();\r\n // var data = serviceRequestTable.data();\r\n // serviceRequestTable.draw();\r\n //});\r\n}\r\n\r\n\r\nfunction ForceStateSelectIndex(valueToSelect) {\r\n var element = document.getElementById(\"serviceRequestDetailViewStateSelect\");\r\n element.value = valueToSelect;\r\n}\r\n\r\nfunction ForcePrioritySelectIndex(valueToSelect) {\r\n var element = document.getElementById(\"serviceRequestDetailViewPrioritySelect\");\r\n element.value = valueToSelect;\r\n}\r\n\r\n\r\nfunction InitServiceRequestViewGuardsTypeahead(guards) {\r\n\r\n var guardsRaw = [];\r\n\r\n var count = guards.length;\r\n for (var i = 0; i < count; i++) {\r\n var name = guards[i].guardName;\r\n if (name !== \"\") {\r\n guardsRaw.push(name);\r\n }\r\n }\r\n\r\n console.log(guardsRaw);\r\n\r\n $(document).ready(function () {\r\n buildTypeahead('#guardServiceRequestViewSelect .typeahead', \"guards\", guardsRaw);\r\n });\r\n\r\n \r\n\r\n return true;\r\n}\r\n\r\nfunction InitServiceRequestViewAssignedToGuardsTypeahead(guards) {\r\n\r\n var guardsRaw = [];\r\n\r\n var count = guards.length;\r\n for (var i = 0; i < count; i++) {\r\n var name = guards[i].guardName;\r\n if (name !== \"\") {\r\n guardsRaw.push(name);\r\n }\r\n }\r\n\r\n console.log(guardsRaw);\r\n\r\n $(document).ready(function () {\r\n buildTypeahead('#guardAssignedToServiceRequestViewSelect .typeahead', \"guards\", guardsRaw);\r\n });\r\n\r\n\r\n\r\n return true;\r\n}\r\n\r\nfunction InitServiceRequestViewResidentsTypeahead(people) {\r\n\r\n var peopleRaw = [];\r\n\r\n var count = people.length;\r\n for (var i = 0; i < count; i++) {\r\n var name = people[i].receiverName;\r\n var unit = people[i].receiverUnit;\r\n var phone = people[i].receiverPhonenumber;\r\n var email = people[i].receiverEmail;\r\n if (name !== \"\") {\r\n peopleRaw.push(unit + \", \" + name);\r\n }\r\n }\r\n\r\n buildTypeahead('#residentServiceRequestViewSelect .typeahead', \"people\", peopleRaw);\r\n\r\n return true;\r\n}\r\n\r\nfunction InitServiceRequestViewVendorsTypeahead(vendors) {\r\n\r\n var vendorsRaw = [];\r\n\r\n var count = vendors.length;\r\n for (var i = 0; i < count; i++) {\r\n var name = vendors[i].vendorName;\r\n if (name !== \"\") {\r\n vendorsRaw.push(name);\r\n }\r\n }\r\n\r\n console.log(\"vendors raw\");\r\n console.log(vendorsRaw);\r\n\r\n $(document).ready(function () {\r\n buildTypeahead('#vendorsServiceRequestViewSelect .typeahead', \"vendors\", vendorsRaw);\r\n });\r\n\r\n\r\n\r\n return true;\r\n}\r\n\r\nfunction InitServiceRequestViewVendorsAssignedtoTypeahead(vendors) {\r\n\r\n var vendorsRaw = [];\r\n\r\n var count = vendors.length;\r\n for (var i = 0; i < count; i++) {\r\n var name = vendors[i].vendorName;\r\n if (name !== \"\") {\r\n vendorsRaw.push(name);\r\n }\r\n }\r\n\r\n console.log(\"vendors raw\");\r\n console.log(vendorsRaw);\r\n\r\n $(document).ready(function () {\r\n buildTypeahead('#vendorsAssignedToServiceRequestViewSelect .typeahead', \"vendors\", vendorsRaw);\r\n });\r\n\r\n\r\n\r\n return true;\r\n}\r\n\r\n\r\n//////\r\n\r\nvar serviceRequestDueDateRangePickerElementId = 'serviceRequestDueDateRangePickerViewer';\r\nvar serviceRequestDueDateRangePickerStartSelected = '';\r\n\r\nvar lastServiceRequestViewDateRangeValueShown = null;\r\n\r\nfunction buildServiceRequestDueDateRangePickers(dateFormat, startDate) {\r\n\r\n $(document).ready(function () {\r\n\r\n $('#' + serviceRequestDueDateRangePickerElementId).on('apply.daterangepicker', function (ev, picker) {\r\n console.log(\"clicked apply setting date\");\r\n // alert(\"New date range selected: '\" + picker.startDate.format('YYYY-MM-DD') + \"' to '\" + picker.endDate.format('YYYY-MM-DD') + \"'\");\r\n\r\n //console.log(start);\r\n //console.log(start.date());\r\n //console.log(start.month());\r\n //console.log(start.year());\r\n // serviceRequestDueDateRangePickerStartSelected = start.toISOString();\r\n var start = picker.startDate;\r\n serviceRequestDueDateRangePickerStartSelected = start.toISOString();\r\n\r\n console.log(dateFormat);\r\n //dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY'\r\n var resultDate = '';\r\n\r\n if (dateFormat == 0) {\r\n resultDate = n2(start.date()) + \"/\" + n2(start.month() + 1) + \"/\" + start.year();\r\n } else {\r\n resultDate = n2(start.month() + 1) + \"/\" + n2(start.date()) + \"/\" + start.year();\r\n }\r\n\r\n document.getElementById('serviceRequestDueDateRangePickerViewer').value = resultDate;\r\n\r\n console.log(serviceRequestDueDateRangePickerStartSelected);\r\n\r\n });\r\n\r\n $('#' + serviceRequestDueDateRangePickerElementId).on('cancel.daterangepicker', function (ev, picker) {\r\n console.log(\"clicked cancel setting date\");\r\n // alert(\"New date range selected: '\" + picker.startDate.format('YYYY-MM-DD') + \"' to '\" + picker.endDate.format('YYYY-MM-DD') + \"'\");\r\n document.getElementById('serviceRequestDueDateRangePickerViewer').value = '';\r\n \r\n\r\n });\r\n\r\n \r\n\r\n $('#' + serviceRequestDueDateRangePickerElementId).on('show.daterangepicker', function (ev, picker) {\r\n\r\n console.log(picker.container[0]);\r\n\r\n $(picker.container[0]).find('.drp-buttons .cancelBtn').text(\"Reset\");\r\n //console.log(elx);\r\n\r\n //$($(picker.container[0]).find('.drp-buttons .cancelBtn')).each(function (i, obj) {\r\n // console.log(obj);\r\n \r\n //});\r\n\r\n var currentValue = document.getElementById('serviceRequestDueDateRangePickerViewer').value;\r\n lastServiceRequestViewDateRangeValueShown = currentValue;\r\n });\r\n\r\n $('#' + serviceRequestDueDateRangePickerElementId).on('hide.daterangepicker', function (ev, picker) {\r\n //$('#book_date').val('');\r\n //console.log(\"clicked outside setting date to empty\");\r\n //document.getElementById('serviceRequestDueDateRangePickerViewer').value = '';\r\n\r\n if (lastServiceRequestViewDateRangeValueShown != null) {\r\n document.getElementById('serviceRequestDueDateRangePickerViewer').value = lastServiceRequestViewDateRangeValueShown;\r\n lastServiceRequestViewDateRangeValueShown = null;\r\n }\r\n\r\n });\r\n\r\n\r\n });\r\n\r\n $(document).ready(function () {\r\n $('#' + serviceRequestDueDateRangePickerElementId).daterangepicker({\r\n singleDatePicker: true,\r\n timePicker: false,\r\n startDate: moment().add(0, 'day')\r\n }, function (start, end, label) {\r\n\r\n //console.log(start);\r\n //console.log(start.date());\r\n //console.log(start.month());\r\n //console.log(start.year());\r\n //serviceRequestDueDateRangePickerStartSelected = start.toISOString();\r\n\r\n //console.log(dateFormat);\r\n ////dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY'\r\n //var resultDate = '';\r\n\r\n //if (dateFormat == 0) {\r\n // resultDate = n2(start.date()) + \"/\" + n2(start.month() + 1) + \"/\" + start.year();\r\n //} else {\r\n // resultDate = n2(start.month() + 1) + \"/\" + n2(start.date()) + \"/\" + start.year();\r\n //}\r\n\r\n //document.getElementById('serviceRequestDueDateRangePickerViewer').value = resultDate;\r\n \r\n //console.log(serviceRequestDueDateRangePickerStartSelected);\r\n\r\n });\r\n\r\n });\r\n}\r\n\r\nfunction setServiceRequestDueDateRangerPickerDate(date) {\r\n try {\r\n var dateToSet = new Date(date);\r\n $('#' + serviceRequestDueDateRangePickerElementId).data('daterangepicker').setStartDate(dateToSet);\r\n $('#' + serviceRequestDueDateRangePickerElementId).data('daterangepicker').setEndDate(dateToSet);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\n\r\nfunction getServiceRequestDueDateRangePickerStartSelected() {\r\n return serviceRequestDueDateRangePickerStartSelected;\r\n}\r\n\r\n//////\r\n\r\n\r\n\r\n//////\r\n\r\nvar serviceRequestBoardApprovalDateRangePickerElementId = 'serviceRequestBoardApprovalDateRangePickerViewer';\r\nvar serviceRequestBoardApprovalDateRangePickerStartSelected = '';\r\n\r\nvar lastServiceRequestViewBoardApprovalDateRangeValueShown = null;\r\n\r\nfunction buildServiceRequestBoardApprovalDateRangePickers(dateFormat, startDate) {\r\n\r\n $(document).ready(function () {\r\n $('#' + serviceRequestBoardApprovalDateRangePickerElementId).on('apply.daterangepicker', function (ev, picker) {\r\n console.log(\"clicked apply setting date\");\r\n\r\n var start = picker.startDate;\r\n serviceRequestBoardApprovalDateRangePickerStartSelected = start.toISOString();\r\n\r\n console.log(dateFormat);\r\n //dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY'\r\n var resultDate = '';\r\n\r\n if (dateFormat == 0) {\r\n resultDate = n2(start.date()) + \"/\" + n2(start.month() + 1) + \"/\" + start.year();\r\n } else {\r\n resultDate = n2(start.month() + 1) + \"/\" + n2(start.date()) + \"/\" + start.year();\r\n }\r\n\r\n document.getElementById('serviceRequestBoardApprovalDateRangePickerViewer').value = resultDate;\r\n\r\n console.log(serviceRequestBoardApprovalDateRangePickerStartSelected);\r\n\r\n });\r\n\r\n $('#' + serviceRequestBoardApprovalDateRangePickerElementId).on('cancel.daterangepicker', function (ev, picker) {\r\n console.log(\"clicked cancel setting date\");\r\n document.getElementById('serviceRequestBoardApprovalDateRangePickerViewer').value = '';\r\n });\r\n\r\n $('#' + serviceRequestBoardApprovalDateRangePickerElementId).on('show.daterangepicker', function (ev, picker) {\r\n\r\n console.log(picker.container[0]);\r\n\r\n $(picker.container[0]).find('.drp-buttons .cancelBtn').text(\"Reset\");\r\n\r\n var currentValue = document.getElementById('serviceRequestBoardApprovalDateRangePickerViewer').value;\r\n lastServiceRequestViewBoardApprovalDateRangeValueShown = currentValue;\r\n });\r\n\r\n $('#' + serviceRequestBoardApprovalDateRangePickerElementId).on('hide.daterangepicker', function (ev, picker) {\r\n\r\n if (lastServiceRequestViewBoardApprovalDateRangeValueShown != null) {\r\n document.getElementById('serviceRequestBoardApprovalDateRangePickerViewer').value = lastServiceRequestViewBoardApprovalDateRangeValueShown;\r\n lastServiceRequestViewBoardApprovalDateRangeValueShown = null;\r\n }\r\n\r\n });\r\n\r\n\r\n });\r\n\r\n $(document).ready(function () {\r\n\r\n try {\r\n $('#' + serviceRequestBoardApprovalDateRangePickerElementId).daterangepicker({\r\n singleDatePicker: true,\r\n timePicker: false,\r\n startDate: moment().add(0, 'day')\r\n }, function (start, end, label) {\r\n\r\n });\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n });\r\n}\r\n\r\nfunction setServiceRequestBoardApprovalDateRangerPickerDate(date) {\r\n try {\r\n var dateToSet = new Date(date);\r\n $('#' + serviceRequestBoardApprovalDateRangePickerElementId).data('daterangepicker').setStartDate(dateToSet);\r\n $('#' + serviceRequestBoardApprovalDateRangePickerElementId).data('daterangepicker').setEndDate(dateToSet);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\n\r\nfunction getServiceRequestBoardApprovalDateRangePickerStartSelected() {\r\n return serviceRequestBoardApprovalDateRangePickerStartSelected;\r\n}\r\n\r\n//////\r\n\r\n//////\r\n\r\nvar serviceRequestCompletedOnDateRangePickerElementId = 'serviceRequestCompletedOnDateRangePickerViewer';\r\nvar serviceRequestCompletedOnDateRangePickerStartSelected = '';\r\n\r\nvar lastServiceRequestViewCompletedOnDateRangeValueShown = null;\r\n\r\nfunction buildServiceRequestCompletedOnDateRangePickers(dateFormat, startDate) {\r\n\r\n $(document).ready(function () {\r\n $('#' + serviceRequestCompletedOnDateRangePickerElementId).on('apply.daterangepicker', function (ev, picker) {\r\n console.log(\"clicked apply setting date\");\r\n\r\n var start = picker.startDate;\r\n serviceRequestCompletedOnDateRangePickerStartSelected = start.toISOString();\r\n\r\n console.log(dateFormat);\r\n //dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY'\r\n var resultDate = '';\r\n\r\n if (dateFormat == 0) {\r\n resultDate = n2(start.date()) + \"/\" + n2(start.month() + 1) + \"/\" + start.year();\r\n } else {\r\n resultDate = n2(start.month() + 1) + \"/\" + n2(start.date()) + \"/\" + start.year();\r\n }\r\n\r\n document.getElementById('serviceRequestCompletedOnDateRangePickerViewer').value = resultDate;\r\n\r\n console.log(serviceRequestCompletedOnDateRangePickerStartSelected);\r\n\r\n });\r\n\r\n $('#' + serviceRequestCompletedOnDateRangePickerElementId).on('cancel.daterangepicker', function (ev, picker) {\r\n console.log(\"clicked cancel setting date\");\r\n document.getElementById('serviceRequestCompletedOnDateRangePickerViewer').value = '';\r\n });\r\n\r\n $('#' + serviceRequestCompletedOnDateRangePickerElementId).on('show.daterangepicker', function (ev, picker) {\r\n\r\n console.log(picker.container[0]);\r\n\r\n $(picker.container[0]).find('.drp-buttons .cancelBtn').text(\"Reset\");\r\n\r\n var currentValue = document.getElementById('serviceRequestCompletedOnDateRangePickerViewer').value;\r\n lastServiceRequestViewCompletedOnDateRangeValueShown = currentValue;\r\n });\r\n\r\n $('#' + serviceRequestCompletedOnDateRangePickerElementId).on('hide.daterangepicker', function (ev, picker) {\r\n\r\n if (lastServiceRequestViewCompletedOnDateRangeValueShown != null) {\r\n document.getElementById('serviceRequestCompletedOnDateRangePickerViewer').value = lastServiceRequestViewCompletedOnDateRangeValueShown;\r\n lastServiceRequestViewCompletedOnDateRangeValueShown = null;\r\n }\r\n\r\n });\r\n\r\n\r\n });\r\n\r\n $(document).ready(function () {\r\n\r\n try {\r\n $('#' + serviceRequestCompletedOnDateRangePickerElementId).daterangepicker({\r\n singleDatePicker: true,\r\n timePicker: false,\r\n startDate: moment().add(0, 'day')\r\n }, function (start, end, label) {\r\n\r\n });\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n });\r\n}\r\n\r\nfunction setServiceRequestCompletedOnDateRangerPickerDate(date) {\r\n try {\r\n var dateToSet = new Date(date);\r\n $('#' + serviceRequestCompletedOnDateRangePickerElementId).data('daterangepicker').setStartDate(dateToSet);\r\n $('#' + serviceRequestCompletedOnDateRangePickerElementId).data('daterangepicker').setEndDate(dateToSet);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\n\r\nfunction getServiceRequestCompletedOnDateRangePickerStartSelected() {\r\n return serviceRequestCompletedOnDateRangePickerStartSelected;\r\n}\r\n\r\n//////\r\n\r\nfunction maintenanceServiceRequestDone(maintenanceServiceRequestId, el) {\r\n\r\n //var buttonElementId = \"maintenanceServiceRequestDoneButton-\" + maintenanceServiceRequestId;\r\n\r\n //console.log(\"buttonElementId: \" + buttonElementId);\r\n\r\n var buttonElement = el;\r\n\r\n console.log(\"buttonElement to set animation\");\r\n console.log(buttonElement);\r\n\r\n\r\n $(buttonElement).addClass(\"slide_right_done\");\r\n //buttonElement.classList.add('slide_right_done');\r\n\r\n // buttonElement.innerHTML = \"DONE\";\r\n\r\n\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnMaintenanceServiceRequestClickedDoneFromGrid', maintenanceServiceRequestId);\r\n\r\n setTimeout(function () {\r\n\r\n \r\n \r\n\r\n console.log(\"click event btn\");\r\n console.log(buttonElement);\r\n\r\n // $(\".button_slide\").removeClass(\"slide_right_done\");\r\n\r\n\r\n }, 1000);\r\n\r\n\r\n \r\n}\r\n\r\nfunction removeAllDoneButtonAnimations(arg) {\r\n $(\".button_slide\").removeClass(\"slide_right_done\");\r\n}\r\n\r\n//function (el, overdue, ooingng) {\r\n\r\n// setTimeout(function () {\r\n// tippy('#' + el, {\r\n// arrow: false,\r\n// content: '' + 'A VisitForm Ultimate license is required to send texts.' + '',\r\n// allowHTML: true\r\n// });\r\n// }, 3500);\r\n\r\n//}\r\n\r\nfunction createMaintenanceServiceRequestStatusTooltip(el, overdue, ongoing, endsSoon) {\r\n\r\n var text = \"Done and on schedule\";\r\n\r\n if (overdue) {\r\n text = \"Overdue and to be done as soon as possible\";\r\n }\r\n else if (ongoing) {\r\n if (endsSoon) {\r\n text = \"Due in less than one hour\";\r\n }\r\n else {\r\n text = \"Planned time passed and should be done before due date\";\r\n }\r\n \r\n }\r\n\r\n setTimeout(function () {\r\n tippy('#' + el, {\r\n content: '' + text + '',\r\n allowHTML: true\r\n });\r\n }, 1500);\r\n\r\n}\r\n\r\n\r\nfunction createMaintenanceServiceRequestTooltip(el, text) {\r\n\r\n\r\n setTimeout(function () {\r\n tippy(el, {\r\n content: '' + text + '',\r\n allowHTML: true\r\n });\r\n }, 1500);\r\n\r\n}\r\n\r\nfunction showMaintenanceServiceRequestModalInfo(maintenanceServiceRequest) {\r\n\r\n console.log(\"maintenanceServiceRequest\");\r\n console.log(maintenanceServiceRequest);\r\n\r\n document.getElementById('showMaintenanceServiceRequestModalTitle').innerHTML = maintenanceServiceRequest.maintenanceServiceRequestTitle;\r\n\r\n //\r\n\r\n if (maintenanceServiceRequest.maintenanceServiceRequestIntervalDescription) {\r\n document.getElementById('showMaintenanceServiceRequestModalIntervalDescription').innerHTML = maintenanceServiceRequest.maintenanceServiceRequestIntervalDescription;\r\n $('#showMaintenanceServiceRequestModalIntervalDescriptionLabel').show();\r\n }\r\n else {\r\n document.getElementById('showMaintenanceServiceRequestModalIntervalDescription').innerHTML = \"\";\r\n $('#showMaintenanceServiceRequestModalIntervalDescriptionLabel').hide();\r\n }\r\n\r\n //\r\n\r\n if (maintenanceServiceRequest.maintenanceServiceRequestDescriptionHelpInfo) {\r\n\r\n var helpInfoMessageText = maintenanceServiceRequest.maintenanceServiceRequestDescriptionHelpInfo;\r\n\r\n try {\r\n helpInfoMessageText = helpInfoMessageText.replace(/\\n/g, '
');\r\n }\r\n catch {\r\n\r\n }\r\n\r\n\r\n document.getElementById('showMaintenanceServiceRequestModalDescriptionHelpInfo').innerHTML = helpInfoMessageText;\r\n $('#showMaintenanceServiceRequestModalDescriptionHelpInfoLabel').show();\r\n }\r\n else {\r\n document.getElementById('showMaintenanceServiceRequestModalDescriptionHelpInfo').innerHTML = \"\";\r\n $('#showMaintenanceServiceRequestModalDescriptionHelpInfoLabel').hide();\r\n }\r\n\r\n\r\n //\r\n\r\n if (maintenanceServiceRequest.maintenanceServiceRequestDescription) {\r\n document.getElementById('showMaintenanceServiceRequestModalDescription').innerHTML = maintenanceServiceRequest.maintenanceServiceRequestDescription;\r\n $('#showMaintenanceServiceRequestModalDescriptionLabel').show();\r\n }\r\n else {\r\n document.getElementById('showMaintenanceServiceRequestModalDescription').innerHTML = \"\";\r\n $('#showMaintenanceServiceRequestModalDescriptionLabel').hide();\r\n }\r\n\r\n //\r\n \r\n $('#showMaintenanceServiceRequestInfoModal').modal();\r\n\r\n}\r\n\r\n\r\n\r\n\r\nfunction uploadServiceRequestImage(arg, inputid, screenid, blobidentifier) {\r\n\r\n \r\n var url = 'https://visitform.com/app/api/Image/serviceRequestimageupload/';\r\n if (release == false) {\r\n url = 'https://localhost:5001/api/Image/serviceRequestimageupload/';\r\n }\r\n\r\n var file_data = $('#' + inputid).prop('files')[0];\r\n console.log(file_data);\r\n var form_data = new FormData();\r\n form_data.append('file', file_data);\r\n $.ajax({\r\n url: url + screenid + \"/\" + blobidentifier,\r\n dataType: 'text',\r\n cache: false,\r\n contentType: false,\r\n processData: false,\r\n data: form_data,\r\n type: 'post',\r\n beforeSend: function (xhr) { //Include the bearer token in header\r\n xhr.setRequestHeader(\"Authorization\", 'Bearer ' + arg);\r\n },\r\n success: function (response) {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnServiceRequestImageUploadDoneFromAjax', blobidentifier, 201);\r\n },\r\n error: function (response) {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnServiceRequestImageUploadDoneFromAjax', blobidentifier, 500);\r\n }\r\n });\r\n // });\r\n}\r\n\r\nfunction StartServiceRequestImageUpload() {\r\n\r\n $(\"#serviceRequestReadFileInput\").click();\r\n}\r\n\r\nfunction FileChosenServiceRequest(e) {\r\n\r\n try {\r\n var fileName = $('#inputGroupFile01').prop('files')[0].name;\r\n // document.getElementById('chosenFileLabel').innerHTML = fileName;\r\n } catch (e) {\r\n\r\n }\r\n\r\n\r\n}\r\n\r\nfunction serviceRequestDisplayImage(checkinId, blobIdentifier) {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnDashboardShowPhotoOpenedByUser', checkinId, blobIdentifier);\r\n}\r\n\r\n\r\nfunction openServiceRequestDisplayImageModal(arg) {\r\n $('#serviceRequestShowPhotoModal').modal();\r\n}\r\n\r\n","var excelTableGuardShiftLog;\r\nvar excelTableGuardShiftLogElement = 'guardshiftsearchgrid';\r\n\r\nfunction CreateGuardShiftListGrid() {\r\n\r\n var widthForGrid = CalculateGridWidthSpace();\r\n\r\n var columns = [];\r\n var columnWidth = widthForGrid / 6;\r\n\r\n\r\n columns.push({ type: 'text', width: columnWidth, title: 'Start', name: 'Start' });\r\n columns.push({ type: 'text', width: columnWidth, title: 'End', name: 'End' });\r\n columns.push({ type: 'text', width: columnWidth, title: 'Duration (hours)', name: 'Duration' });\r\n columns.push({ type: 'text', width: columnWidth, title: 'Name', name: 'Name' });\r\n columns.push({ type: 'text', width: columnWidth, title: 'Number', name: 'Number' });\r\n columns.push({ type: 'text', width: columnWidth, title: 'Code', name: 'Code' });\r\n\r\n \r\n\r\n excelTableGuardShiftLog = jexcel(document.getElementById(excelTableGuardShiftLogElement), {\r\n data: null,\r\n columns: columns\r\n });\r\n}\r\n\r\nfunction RefreshGuardShiftListGrid(guardShiftData) {\r\n if (excelTableGuardShiftLog != null) {\r\n excelTableGuardShiftLog.setData(guardShiftData, false);\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nvar shiftsDateRangePickerElementId = 'shiftsDateRangePicker';\r\nvar shiftsDateRangePickerStartSelected = '';\r\nvar shiftsDateRangePickerEndSelected = '';\r\n\r\nfunction buildShiftsDateRangePickers() {\r\n $(document).ready(function () {\r\n $('#' + shiftsDateRangePickerElementId).daterangepicker(null, function (start, end, label) {\r\n shiftsDateRangePickerStartSelected = start.toISOString();\r\n shiftsDateRangePickerEndSelected = end.toISOString();\r\n\r\n console.log(shiftsDateRangePickerStartSelected);\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnChangeShiftsTimePeriodFromDateRange');\r\n });\r\n\r\n });\r\n}\r\n\r\nfunction getShiftsDateRangePickerStartSelected() {\r\n return shiftsDateRangePickerStartSelected;\r\n}\r\nfunction getShiftsDateRangePickerEndSelected() {\r\n return shiftsDateRangePickerEndSelected;\r\n}\r\n\r\n\r\nfunction CalculateWidthForTimeline() {\r\n\r\n \r\n var shiftTimelineBaseHolderWidth = $(\"#shiftTimelineBaseHolder\").width();\r\n console.log(\"shiftTimelineBaseHolderWidth\");\r\n console.log(shiftTimelineBaseHolderWidth);\r\n\r\n return shiftTimelineBaseHolderWidth;\r\n\r\n \r\n\r\n \r\n \r\n \r\n}\r\n\r\nfunction createShiftTimelineTooltip(el, text) {\r\n console.log(\"creating tooltip for\");\r\n console.log(\"creating tooltip for eL : \" + el);\r\n console.log($('#' + el));\r\n\r\n setTimeout(function () {\r\n tippy('#' + el, {\r\n content: '' + text + '',\r\n allowHTML: true\r\n });\r\n }, 1500);\r\n \r\n}","function GetLocalTimestamp(arg) {\r\n var date = new Date();\r\n var day = date.getDate(); // yields date\r\n var month = date.getMonth() + 1; // yields month (add one as '.getMonth()' is zero indexed)\r\n var year = date.getFullYear(); // yields year\r\n var hour = date.getHours(); // yields hours \r\n var minute = date.getMinutes(); // yields minutes\r\n var second = date.getSeconds(); // yields seconds\r\n\r\n // After this construct a string with the above results as below\r\n var time = day + \"/\" + month + \"/\" + year + \" \" + hour + ':' + minute + ':' + second; \r\n return time;\r\n}\r\n\r\nfunction TGetYear(arg) {\r\n return new Date().getFullYear();\r\n}\r\n\r\nfunction TGetMonth(arg) {\r\n return new Date().getMonth() + 1;\r\n}\r\n\r\nfunction TGetDate(arg) {\r\n return new Date().getDate();\r\n}\r\n\r\nfunction TGetHour(arg) {\r\n return new Date().getHours();\r\n}\r\n\r\nfunction TGetMinute(arg) {\r\n return new Date().getMinutes();\r\n}\r\n\r\nfunction TGetSeconds(arg) {\r\n return new Date().getSeconds();\r\n}\r\n\r\nfunction TWriteLine(arg) {\r\n console.log(arg);\r\n}","var guardsTable;\r\n\r\n\r\nfunction CreateGuardsTable(guardTerm) {\r\n\r\n guardsTable = jexcel(document.getElementById('guards'), {\r\n data: null,\r\n minDimensions: [2, 500],\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'Name',\r\n type: 'string',\r\n width: '250px',\r\n },\r\n {\r\n title: 'Email',\r\n type: 'text',\r\n width: '300px',\r\n },\r\n {\r\n title: 'Phone number',\r\n type: 'text',\r\n width: '150px',\r\n },\r\n {\r\n title: guardTerm + ' number',\r\n type: 'text',\r\n width: '150px',\r\n },\r\n {\r\n title: 'Shift color',\r\n type: 'color',\r\n render: 'square',\r\n width: '150px',\r\n },\r\n {\r\n title: 'Plate number',\r\n type: 'text',\r\n width: '250px',\r\n },\r\n ],\r\n rowResize: true,\r\n columnDrag: true,\r\n });\r\n\r\n return 1;\r\n}\r\n\r\n\r\nfunction PopulateGuardsTable(guardsInDatabase) {\r\n var guards = [];\r\n\r\n try {\r\n guardsInDatabase.forEach(guard => guards.push([guard.guardName, guard.guardEmail, guard.guardPhonenumber, guard.guardNumber, guard.guardColorShift, guard.guardLicensePlate]))\r\n\r\n\r\n if (guardsTable != null) {\r\n guardsTable.setData(guards, false);\r\n } else {\r\n }\r\n } catch (e) {\r\n console.log(\"PopulateGuardsTable Error\");\r\n console.log(e);\r\n }\r\n\r\n return 1;\r\n}\r\n\r\n\r\nfunction showGuardDuplicateError(guardTerm) {\r\n swal({\r\n title: guardTerm + \" name must be unique\",\r\n text: \"\\n\" + \"The \" + guardTerm + \" name must be unique. Verify there are no duplicates in the column 'Name'\\n\\nChanges have not been saved\",\r\n type: \"info\"\r\n });\r\n}\r\n\r\nfunction initStaffColorPicker() {\r\n\r\n document.documentElement.style.setProperty('--toolbelt-loadingbar-color', 'transparent')\r\n\r\n $('#staffColorPicker').colorPicker({\r\n // default: true\r\n preview: true\r\n });\r\n\r\n return 1;\r\n}\r\n\r\nfunction setStaffColorPicker(col) {\r\n $('#staffColorPicker').css({\r\n backgroundColor: col\r\n });\r\n\r\n $('#staffColorPicker').val(\"\");\r\n}\r\n\r\nfunction getStaffColorPickerValue() {\r\n var color = $('#staffColorPicker').css(\"background-color\");\r\n return color;\r\n}\r\n\r\n\r\nfunction toggleNewStaffDialog(staffId) {\r\n $('#newStaffModal').modal('toggle');\r\n return 1;\r\n}\r\n\r\nfunction closeNewStaffDialog() {\r\n $('#newStaffModal').modal('hide');\r\n return 1;\r\n}\r\n\r\nfunction FileChosenStaffProfileImage(e, siteId, staffId, auth) {\r\n\r\n try {\r\n //var fileName = $('#staffImageUpload').prop('files')[0].name;\r\n\r\n var url = 'https://visitform.com/app/api/Image/staffprofile/';\r\n if (release == false) {\r\n url = 'https://localhost:5001/api/Image/staffprofile/';\r\n }\r\n // $('#upload').on('click', function () {\r\n var file_data = $('#staffImageUpload').prop('files')[0];\r\n console.log(file_data);\r\n var form_data = new FormData();\r\n form_data.append('file', file_data);\r\n $.ajax({\r\n url: url + siteId + '/' + staffId,\r\n dataType: 'text',\r\n cache: false,\r\n contentType: false,\r\n processData: false,\r\n data: form_data,\r\n type: 'post',\r\n beforeSend: function (xhr) {\r\n xhr.setRequestHeader(\"Authorization\", 'Bearer ' + auth);\r\n\r\n $('#staffProfileImageSpinner').show();\r\n },\r\n success: function (response) {\r\n // $('#msg').html(response); \r\n setTimeout(function () {\r\n $('#staffProfileImageSpinner').hide();\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnStaffProfileImageUploadDone', staffId);\r\n clearStaffProfilePictureInput();;\r\n }, 8000);\r\n },\r\n error: function (response) {\r\n // $('#msg').html(response); \r\n alert(response);\r\n $('#staffProfileImageSpinner').hide();\r\n clearStaffProfilePictureInput();\r\n }\r\n });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nfunction StartProfileUpload() {\r\n $(\"#staffImageUpload\").click();\r\n}\r\n\r\nfunction clearStaffProfilePictureInput() {\r\n clearInputFile(document.getElementById('staffImageUpload'));\r\n}\r\n\r\nfunction StartRemoveProfilePicture(staffId) {\r\n swal({\r\n title: \"Are you sure? This can not be undone.\",\r\n text: \" \",\r\n showCancelButton: true,\r\n confirmButtonText: \"Yes, remove.\",\r\n confirmButtonClass: \"btn-warning\",\r\n cancelButtonText: \"No\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnRemoveStaffProfileImage', staffId);\r\n });\r\n}\r\n\r\nfunction StartDeleteStaff(staffId) {\r\n swal({\r\n title: \"Are you sure? This cannot be undone.\",\r\n text: \" \",\r\n showCancelButton: true,\r\n confirmButtonText: \"Yes, remove.\",\r\n confirmButtonClass: \"btn-warning\",\r\n animation: \"slide-from-top\",\r\n customClass: \"swal-overylay-modal-force\",\r\n cancelButtonText: \"No\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnRemoveStaff', staffId);\r\n });\r\n}\r\n\r\nfunction showStaffDuplicateError() {\r\n swal({\r\n title: \"Name must be unique\",\r\n text: \"\\nThe staff name must be unique. Verify there are no duplicates.\\n\\nChanges have not been saved\",\r\n type: \"info\"\r\n });\r\n}","function openSiteItem(siteId) {\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnGoToSiteFromShortcut', parseInt(siteId));\r\n // RedirectTo(\"operation/\" + siteId);\r\n}","\r\n//var excelTableStats;\r\n\r\n//function InitStats(arg) {\r\n\r\n \r\n\r\n// excelTableDashboard = jexcel(document.getElementById('spreadsheetstats'), {\r\n// data: null,\r\n// minDimensions: [2, 1],\r\n// tableOverflow: true,\r\n// columns: [\r\n// {\r\n// title: 'Total visitors',\r\n// type: 'string',\r\n// width: '200px',\r\n// },\r\n// {\r\n// title: 'Visitors this month',\r\n// type: 'string',\r\n// width: '200px',\r\n// },\r\n// {\r\n// title: 'Visitors this week',\r\n// type: 'number',\r\n// width: '150px',\r\n// },\r\n// {\r\n// title: 'Visitors today',\r\n// type: 'number',\r\n// width: '150px',\r\n// },\r\n// //{\r\n// // title: 'Most visitors from company',\r\n// // type: 'string',\r\n// // width: '200px',\r\n// //},\r\n// {\r\n// title: 'Average visit time [min]',\r\n// type: 'string',\r\n// width: '220px',\r\n// },\r\n\r\n// ],\r\n// rowResize: true,\r\n// columnDrag: true,\r\n// });\r\n//}\r\n\r\n//function setStatsData(arg) {\r\n// var data1 = [];\r\n\r\n// console.log(arg);\r\n\r\n// var averageVisitTime = '-';\r\n\r\n// try {\r\n// if (arg.averageVisitTime > 0) {\r\n// averageVisitTime = arg.averageVisitTime;\r\n// }\r\n\r\n// } catch (e) {\r\n\r\n// }\r\n\r\n// var row = [arg.totalVisitors, arg.visitorsThisMonth, arg.visitorsThisWeek, arg.visitorsToday, averageVisitTime];\r\n// data1.push(row);\r\n\r\n// if (excelTableDashboard != null) {\r\n// excelTableDashboard.setData(data1, false);\r\n// }\r\n \r\n//}\r\n\r\n\r\n// Busy hours graph\r\n\r\n\r\n\r\nvar chartColors = {\r\n red: 'rgb(255, 99, 132)',\r\n orange: 'rgb(255, 159, 64)',\r\n yellow: 'rgb(255, 205, 86)',\r\n green: 'rgb(75, 192, 192)',\r\n // blue: '#1b6ec2', // 'rgb(54, 162, 235)',\r\n blue: 'rgb(75, 192, 192)', // 'rgb(54, 162, 235)',\r\n purple: 'rgb(153, 102, 255)',\r\n grey: 'rgb(201, 203, 207)'\r\n};\r\n\r\n\r\nfunction buildBusyHoursGraph(busyHoursData) {\r\n\r\n console.log(busyHoursData);\r\n\r\n var dataArray = []\r\n var labelArray = [];\r\n for (var i = 0; i < 24; i++) {\r\n dataArray.push(busyHoursData[i].busyHoursCountDistribution);\r\n\r\n labelArray.push(i.toString());\r\n }\r\n\r\n console.log(\"Building graph\");\r\n\r\n console.log(dataArray);\r\n\r\n\r\n\tvar barChartData = {\r\n\t\tlabels: labelArray,\r\n\t\tdatasets: [{\r\n\t\t\tlabel: 'Visitors in hour (%)',\r\n backgroundColor: '#1b6ec2',\r\n borderColor: chartColors.blue,\r\n\t\t\tborderWidth: 1,\r\n data: dataArray\r\n\t\t}]\r\n\t};\r\n\t\tvar ctx = document.getElementById('busyHoursCanvas').getContext('2d');\r\n\t\twindow.myBar = new Chart(ctx, {\r\n\t\t\ttype: 'bar',\r\n\t\t\tdata: barChartData,\r\n\t\t\toptions: {\r\n\t\t\t\tresponsive: true,\r\n\t\t\t\tlegend: {\r\n\t\t\t\t\tposition: 'top',\r\n\t\t\t\t},\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\ttext: 'Busy hours'\r\n },\r\n scales: {\r\n xAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n scaleLabel: {\r\n display: true,\r\n labelString: 'Hour of day'\r\n }\r\n }],\r\n yAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n scaleLabel: {\r\n display: false,\r\n labelString: 'Percent'\r\n },\r\n ticks: {\r\n display: false\r\n }\r\n }]\r\n }\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\r\n\r\n}","var taskTable;\r\n\r\nfunction InitTaskDataTable(dateFormat) {\r\n\r\n /* $(document).ready(function () {*/\r\n console.log(\"creating new table1\");\r\n\r\n if (taskTable != null) {\r\n try {\r\n taskTable.destroy();\r\n taskTable = null;\r\n } catch (e) {\r\n\r\n }\r\n }\r\n\r\n taskTable = $('#taskViewList').DataTable({\r\n \"order\": [[2, \"desc\"]],\r\n pageLength: 25,\r\n autoWidth: false,\r\n \"columnDefs\": [\r\n { \"width\": \"48px\", \"targets\": 0 }, //Task #\r\n { \"width\": \"64px\", \"targets\": 1 }, //State\r\n { \"width\": \"160px\", \"targets\": 2 }, //Created\r\n { \"width\": \"96px\", \"targets\": 3 }, //Due date\r\n { \"width\": \"48px\", \"targets\": 4 }, //Priority\r\n { \"width\": \"196px\", \"targets\": 5 }, //Title\r\n { \"width\": \"148px\", \"targets\": 6 }, //Assigned to\r\n { \"width\": \"128px\", \"targets\": 7 }, //Unit\r\n ],\r\n \"language\": {\r\n \"emptyTable\": \"There are currently no tasks. Create a new task with the button in the top right\",\r\n \"info\": \"Showing _START_ to _END_ of _TOTAL_ tasks\",\r\n \"infoEmpty\": \"Showing 0 to 0 of 0 tasks\",\r\n \"infoFiltered\": \"(filtered from _MAX_ total tasks)\",\r\n \"lengthMenu\": \"Show _MENU_ tasks\"\r\n },\r\n columns: [\r\n {\r\n data: 'taskNumber',\r\n\r\n },\r\n {\r\n data: 'state',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n var circleColor = '';\r\n var stateText = '';\r\n switch (data) {\r\n case 3:\r\n circleColor = '#B2B2B2';\r\n stateText = \"To Do\";\r\n break;\r\n case 4:\r\n circleColor = '#007ACC';\r\n stateText = \"Doing\";\r\n break;\r\n case 5:\r\n circleColor = '#339933';\r\n stateText = \"Done\";\r\n break;\r\n }\r\n return ' ' + stateText +''\r\n //return ' ' + data;\r\n }\r\n\r\n return data;\r\n }\r\n },\r\n {\r\n data: 'created',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n if (dateFormat == 0) {\r\n return timestampToJexcelDate(data);}\r\n else {\r\n return timestampToUsDate(data);\r\n }\r\n \r\n \r\n }\r\n\r\n return data;\r\n }\r\n },\r\n {\r\n data: 'duedate',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n\r\n try {\r\n var resultDate = '';\r\n var dd = data.getDate();\r\n var yy = data.getFullYear();\r\n var parsedDate = moment(data);\r\n if (data != null) {\r\n if (dateFormat == 0) {\r\n\r\n resultDate = dd + \" \" + parsedDate.format('MMMM') + \", \" + yy\r\n } else {\r\n resultDate = parsedDate.format('MMMM') + \" \" + dd + \", \" + yy;\r\n }\r\n }\r\n } catch (e) {\r\n resultDate = '';\r\n }\r\n return resultDate;\r\n \r\n }\r\n\r\n return data;\r\n }\r\n //render: function (data, type, row, meta) {\r\n // return type === 'display' ?\r\n // '' :\r\n // data;\r\n //}\r\n },\r\n {\r\n data: 'priority',\r\n render: function (data, type) {\r\n if (type === 'display') {\r\n\r\n if (data == 3) {\r\n return 'Critical';\r\n } else if (data == 2){\r\n return 'High';\r\n }\r\n else if (data == 1) {\r\n return 'Medium';\r\n }\r\n else if (data == 0) {\r\n return 'Low';\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n return data;\r\n }\r\n },\r\n {\r\n data: \"title\"\r\n },\r\n {\r\n data: \"assignedTo\"\r\n },\r\n {\r\n data: \"unit\"\r\n },\r\n {\r\n data: \"text\"\r\n },\r\n\r\n ]\r\n });\r\n\r\n $('#taskViewList tbody').on('click', 'tr', function () {\r\n var data = taskTable.row(this).data();\r\n console.log(data);\r\n\r\n var taskNumberParsed = -1;\r\n\r\n try {\r\n taskNumberParsed = parseInt(data.taskNumber);\r\n } catch (e) {\r\n\r\n }\r\n\r\n if (taskNumberParsed > 0) {\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnTaskClickedFromGrid', taskNumberParsed);\r\n }\r\n\r\n \r\n \r\n });\r\n\r\n $(\"#taskViewList tr\").css('cursor', 'pointer');\r\n\r\n //});\r\n\r\n return 1;\r\n}\r\n\r\nfunction FilterTaskDataTableOnAssignedTo(assignedToName) {\r\n if (taskTable != null) {\r\n taskTable.columns(6).search(assignedToName).draw();\r\n }\r\n \r\n}\r\n\r\nfunction RemoveAssignedToFilterTaskDataTable(arg) {\r\n if (taskTable != null) {\r\n taskTable.columns(6).search('').draw();\r\n }\r\n \r\n}\r\n\r\nfunction PopulateToTaskDataTable(rows) {\r\n\r\n console.log(\"rows\");\r\n console.log(rows);\r\n\r\n var tasks = [];\r\n\r\n rows.forEach(row => tasks.push({\r\n taskNumber: row.taskId,\r\n state: row.taskState,\r\n created: new Date(row.taskCreated),\r\n duedate: row.taskDueDate == null ? null : new Date(row.taskDueDate),\r\n priority: row.taskPriority,\r\n title: row.taskTitle,\r\n assignedTo: row.taskAssignedTo,\r\n unit: row.taskReceiverUnit,\r\n text: row.taskText\r\n }));\r\n\r\n // tasks = tasks.reverse();\r\n\r\n console.log(\"tasks\");\r\n console.log(tasks);\r\n\r\n try {\r\n taskTable.rows().remove()\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n\r\n try {\r\n taskTable.rows.add(tasks);\r\n taskTable.draw();\r\n\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n \r\n\r\n console.log(\"updated\");\r\n}\r\n\r\nfunction ReloadTaskDataTable(row) {\r\n\r\n console.log(\"reloading table..\");\r\n if (taskTable != null) {\r\n console.log(\"destroying table..\");\r\n taskTable.destroy();\r\n setTimeout(function () {\r\n console.log(\"buuilding table..\");\r\n InitTaskDataTable();\r\n }, 2000);\r\n }\r\n\r\n // taskTable.row.add([row.taskEventTaskId, row.taskEventState, 'Edinburgh']);\r\n\r\n //$(document).ready(function () {\r\n // //$('#example').DataTable().destroy();\r\n // console.log(\"creating new table2\");\r\n // // $('#example').DataTable();\r\n\r\n // //taskTable.clear();\r\n // var data = taskTable.data();\r\n // taskTable.draw();\r\n //});\r\n}\r\n\r\n\r\nfunction ForceStateSelectIndex(valueToSelect) {\r\n var element = document.getElementById(\"taskDetailViewStateSelect\");\r\n element.value = valueToSelect;\r\n}\r\n\r\nfunction ForcePrioritySelectIndex(valueToSelect) {\r\n var element = document.getElementById(\"taskDetailViewPrioritySelect\");\r\n element.value = valueToSelect;\r\n}\r\n\r\n\r\nfunction InitTaskViewGuardsTypeahead(guards) {\r\n\r\n var guardsRaw = [];\r\n\r\n var count = guards.length;\r\n for (var i = 0; i < count; i++) {\r\n var name = guards[i].guardName;\r\n if (name !== \"\") {\r\n guardsRaw.push(name);\r\n }\r\n }\r\n\r\n console.log(guardsRaw);\r\n\r\n $(document).ready(function () {\r\n buildTypeahead('#guardTaskViewSelect .typeahead', \"guards\", guardsRaw);\r\n });\r\n\r\n \r\n\r\n return true;\r\n}\r\n\r\nfunction InitTaskViewResidentsTypeahead(peopleString) {\r\n\r\n const peopleConst = BINDING.conv_string(peopleString);\r\n var people = JSON.parse(peopleConst);\r\n\r\n var peopleRaw = [];\r\n\r\n var count = people.length;\r\n for (var i = 0; i < count; i++) {\r\n var name = people[i].receiverName;\r\n var unit = people[i].receiverUnit;\r\n var phone = people[i].receiverPhonenumber;\r\n var email = people[i].receiverEmail;\r\n if (name !== \"\") {\r\n peopleRaw.push(unit + \", \" + name);\r\n }\r\n }\r\n\r\n buildTypeahead('#residentTaskViewSelect .typeahead', \"people\", peopleRaw);\r\n\r\n return true;\r\n}\r\n\r\n\r\n//////\r\n\r\nvar taskDueDateRangePickerElementId = 'taskDueDateRangePickerViewer';\r\nvar taskDueDateRangePickerStartSelected = '';\r\n\r\nvar lastTaskViewDateRangeValueShown = null;\r\n\r\nfunction buildTaskDueDateRangePickers(dateFormat, startDate) {\r\n\r\n $(document).ready(function () {\r\n\r\n $('#' + taskDueDateRangePickerElementId).on('apply.daterangepicker', function (ev, picker) {\r\n console.log(\"clicked apply setting date\");\r\n // alert(\"New date range selected: '\" + picker.startDate.format('YYYY-MM-DD') + \"' to '\" + picker.endDate.format('YYYY-MM-DD') + \"'\");\r\n\r\n //console.log(start);\r\n //console.log(start.date());\r\n //console.log(start.month());\r\n //console.log(start.year());\r\n // taskDueDateRangePickerStartSelected = start.toISOString();\r\n var start = picker.startDate;\r\n taskDueDateRangePickerStartSelected = start.toISOString();\r\n\r\n console.log(dateFormat);\r\n //dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY'\r\n var resultDate = '';\r\n\r\n if (dateFormat == 0) {\r\n resultDate = n2(start.date()) + \"/\" + n2(start.month() + 1) + \"/\" + start.year();\r\n } else {\r\n resultDate = n2(start.month() + 1) + \"/\" + n2(start.date()) + \"/\" + start.year();\r\n }\r\n\r\n document.getElementById('taskDueDateRangePickerViewer').value = resultDate;\r\n\r\n console.log(taskDueDateRangePickerStartSelected);\r\n\r\n });\r\n\r\n $('#' + taskDueDateRangePickerElementId).on('cancel.daterangepicker', function (ev, picker) {\r\n console.log(\"clicked cancel setting date\");\r\n // alert(\"New date range selected: '\" + picker.startDate.format('YYYY-MM-DD') + \"' to '\" + picker.endDate.format('YYYY-MM-DD') + \"'\");\r\n document.getElementById('taskDueDateRangePickerViewer').value = '';\r\n \r\n\r\n });\r\n\r\n \r\n\r\n $('#' + taskDueDateRangePickerElementId).on('show.daterangepicker', function (ev, picker) {\r\n\r\n console.log(picker.container[0]);\r\n\r\n $(picker.container[0]).find('.drp-buttons .cancelBtn').text(\"No due date\");\r\n //console.log(elx);\r\n\r\n //$($(picker.container[0]).find('.drp-buttons .cancelBtn')).each(function (i, obj) {\r\n // console.log(obj);\r\n \r\n //});\r\n\r\n var currentValue = document.getElementById('taskDueDateRangePickerViewer').value;\r\n lastTaskViewDateRangeValueShown = currentValue;\r\n });\r\n\r\n $('#' + taskDueDateRangePickerElementId).on('hide.daterangepicker', function (ev, picker) {\r\n //$('#book_date').val('');\r\n //console.log(\"clicked outside setting date to empty\");\r\n //document.getElementById('taskDueDateRangePickerViewer').value = '';\r\n\r\n if (lastTaskViewDateRangeValueShown != null) {\r\n document.getElementById('taskDueDateRangePickerViewer').value = lastTaskViewDateRangeValueShown;\r\n lastTaskViewDateRangeValueShown = null;\r\n }\r\n\r\n });\r\n\r\n\r\n });\r\n\r\n $(document).ready(function () {\r\n $('#' + taskDueDateRangePickerElementId).daterangepicker({\r\n singleDatePicker: true,\r\n timePicker: false,\r\n startDate: moment().add(0, 'day')\r\n }, function (start, end, label) {\r\n\r\n //console.log(start);\r\n //console.log(start.date());\r\n //console.log(start.month());\r\n //console.log(start.year());\r\n //taskDueDateRangePickerStartSelected = start.toISOString();\r\n\r\n //console.log(dateFormat);\r\n ////dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY'\r\n //var resultDate = '';\r\n\r\n //if (dateFormat == 0) {\r\n // resultDate = n2(start.date()) + \"/\" + n2(start.month() + 1) + \"/\" + start.year();\r\n //} else {\r\n // resultDate = n2(start.month() + 1) + \"/\" + n2(start.date()) + \"/\" + start.year();\r\n //}\r\n\r\n //document.getElementById('taskDueDateRangePickerViewer').value = resultDate;\r\n \r\n //console.log(taskDueDateRangePickerStartSelected);\r\n\r\n });\r\n\r\n });\r\n}\r\n\r\nfunction setTaskDueDateRangerPickerDate(date) {\r\n try {\r\n var dateToSet = new Date(date);\r\n $('#' + taskDueDateRangePickerElementId).data('daterangepicker').setStartDate(dateToSet);\r\n $('#' + taskDueDateRangePickerElementId).data('daterangepicker').setEndDate(dateToSet);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\n\r\nfunction getTaskDueDateRangePickerStartSelected() {\r\n return taskDueDateRangePickerStartSelected;\r\n}\r\n\r\n//////\r\n\r\nfunction maintenanceTaskDone(maintenanceTaskId, el) {\r\n\r\n //var buttonElementId = \"maintenanceTaskDoneButton-\" + maintenanceTaskId;\r\n\r\n //console.log(\"buttonElementId: \" + buttonElementId);\r\n\r\n var buttonElement = el;\r\n\r\n console.log(\"buttonElement to set animation\");\r\n console.log(buttonElement);\r\n\r\n\r\n $(buttonElement).addClass(\"slide_right_done\");\r\n //buttonElement.classList.add('slide_right_done');\r\n\r\n // buttonElement.innerHTML = \"DONE\";\r\n\r\n\r\n\r\n DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnMaintenanceTaskClickedDoneFromGrid', maintenanceTaskId);\r\n\r\n setTimeout(function () {\r\n\r\n \r\n \r\n\r\n console.log(\"click event btn\");\r\n console.log(buttonElement);\r\n\r\n // $(\".button_slide\").removeClass(\"slide_right_done\");\r\n\r\n\r\n }, 1000);\r\n\r\n\r\n \r\n}\r\n\r\nfunction removeAllDoneButtonAnimations(arg) {\r\n $(\".button_slide\").removeClass(\"slide_right_done\");\r\n}\r\n\r\n//function (el, overdue, ooingng) {\r\n\r\n// setTimeout(function () {\r\n// tippy('#' + el, {\r\n// arrow: false,\r\n// content: '' + 'A VisitForm Ultimate license is required to send texts.' + '',\r\n// allowHTML: true\r\n// });\r\n// }, 3500);\r\n\r\n//}\r\n\r\nfunction createMaintenanceTaskStatusTooltip(el, overdue, ongoing, endsSoon) {\r\n\r\n var text = \"Done and on schedule\";\r\n\r\n if (overdue) {\r\n text = \"Overdue and to be done as soon as possible\";\r\n }\r\n else if (ongoing) {\r\n if (endsSoon) {\r\n text = \"Due in less than one hour\";\r\n }\r\n else {\r\n text = \"Planned time passed and should be done before due date\";\r\n }\r\n \r\n }\r\n\r\n setTimeout(function () {\r\n tippy('#' + el, {\r\n content: '' + text + '',\r\n allowHTML: true\r\n });\r\n }, 1500);\r\n\r\n}\r\n\r\n\r\nfunction createMaintenanceTaskTooltip(el, text) {\r\n\r\n\r\n setTimeout(function () {\r\n tippy(el, {\r\n content: '' + text + '',\r\n allowHTML: true\r\n });\r\n }, 1500);\r\n\r\n}\r\n\r\nfunction showMaintenanceTaskModalInfo(maintenanceTask) {\r\n\r\n console.log(\"maintenanceTask\");\r\n console.log(maintenanceTask);\r\n\r\n document.getElementById('showMaintenanceTaskModalTitle').innerHTML = maintenanceTask.maintenanceTaskTitle;\r\n\r\n //\r\n\r\n if (maintenanceTask.maintenanceTaskIntervalDescription) {\r\n document.getElementById('showMaintenanceTaskModalIntervalDescription').innerHTML = maintenanceTask.maintenanceTaskIntervalDescription;\r\n $('#showMaintenanceTaskModalIntervalDescriptionLabel').show();\r\n }\r\n else {\r\n document.getElementById('showMaintenanceTaskModalIntervalDescription').innerHTML = \"\";\r\n $('#showMaintenanceTaskModalIntervalDescriptionLabel').hide();\r\n }\r\n\r\n //\r\n\r\n if (maintenanceTask.maintenanceTaskDescriptionHelpInfo) {\r\n\r\n var helpInfoMessageText = maintenanceTask.maintenanceTaskDescriptionHelpInfo;\r\n\r\n try {\r\n helpInfoMessageText = helpInfoMessageText.replace(/\\n/g, '
');\r\n }\r\n catch {\r\n\r\n }\r\n\r\n\r\n document.getElementById('showMaintenanceTaskModalDescriptionHelpInfo').innerHTML = helpInfoMessageText;\r\n $('#showMaintenanceTaskModalDescriptionHelpInfoLabel').show();\r\n }\r\n else {\r\n document.getElementById('showMaintenanceTaskModalDescriptionHelpInfo').innerHTML = \"\";\r\n $('#showMaintenanceTaskModalDescriptionHelpInfoLabel').hide();\r\n }\r\n\r\n\r\n //\r\n\r\n if (maintenanceTask.maintenanceTaskDescription) {\r\n document.getElementById('showMaintenanceTaskModalDescription').innerHTML = maintenanceTask.maintenanceTaskDescription;\r\n $('#showMaintenanceTaskModalDescriptionLabel').show();\r\n }\r\n else {\r\n document.getElementById('showMaintenanceTaskModalDescription').innerHTML = \"\";\r\n $('#showMaintenanceTaskModalDescriptionLabel').hide();\r\n }\r\n\r\n //\r\n \r\n $('#showMaintenanceTaskInfoModal').modal();\r\n\r\n}","function includePayPalLibrary() {\r\n\r\n var paypalsrc = 'https://www.paypal.com/sdk/js?client-id=ASLZltuif0YCXsnyUlMgM-n1yr8W-CNysx4xf-JmKYgsqu0PIvgiMTRmcHmA9PJWiOdOmCthr1tXTaLU&vault=true&intent=subscription';\r\n\r\n\r\n var customScript = document.createElement('script');\r\n customScript.setAttribute('src', paypalsrc);\r\n customScript.setAttribute('data-sdk-integration-source', 'button-factory');\r\n document.head.appendChild(customScript);\r\n\r\n}\r\n\r\n\r\nfunction buildPayPalButtons(subscriptionId) {\r\n\r\n if (subscriptionId == 1) {\r\n paypal.Buttons({\r\n style: {\r\n shape: 'pill',\r\n color: 'blue',\r\n layout: 'horizontal',\r\n label: 'subscribe'\r\n },\r\n createSubscription: function (data, actions) {\r\n return actions.subscription.create({\r\n /* Creates the subscription */\r\n plan_id: 'P-3766896202940690CMCHMNXY',\r\n quantity: 1 // The quantity of the product for a subscription\r\n });\r\n },\r\n onApprove: function (data, actions) {\r\n alert(data.subscriptionID); // You can add optional success message for the subscriber here\r\n }\r\n }).render('#paypal-button-container-P-3766896202940690CMCHMNXY'); // Renders the PayPal button\r\n }\r\n\r\n}\r\n\r\n","var vendorsTable;\r\n\r\nvar vendorsTable;\r\nvar vendorsTableOnChangeDisabled = false;\r\n\r\nvar vendorsTypesTable;\r\n \r\nvar vendorsTypesTable;\r\nvar vendorsTypesTableOnChangeDisabled = false;\r\n\r\nvar vendorsAutoAdmitTable;\r\nvar vendorsAutoAdmitTableOnChangeDisabled = false;\r\n\r\nfunction CreateVendorTables(dateFormat, vendorTypes) {\r\n\r\n console.log(\"vendor types 0 is\");\r\n console.log(vendorTypes);\r\n\r\n \r\n\r\n var vendorTypesToDisplay = defaultVendors;\r\n if (vendorTypes != null) {\r\n vendorTypesToDisplay = [];\r\n\r\n var vendorTypesCount = vendorTypes.length;\r\n for (var vx = 0; vx < vendorTypesCount; vx++) {\r\n vendorTypesToDisplay.push(vendorTypes[vx].vendorTypeName);\r\n }\r\n }\r\n\r\n var tableHeight = window.innerHeight - 64 - 256;\r\n\r\n if (tableHeight < 256) {\r\n tableHeight = 256;\r\n }\r\n\r\n\r\n\r\n var menuWidth = 250;\r\n var pageMarginAndPaddingTotal = 100;\r\n\r\n var tableWidth = window.innerWidth - menuWidth - pageMarginAndPaddingTotal;\r\n\r\n window.addEventListener('resize', function (event) {\r\n var newWidth = window.innerWidth - menuWidth - pageMarginAndPaddingTotal;\r\n $('#vendors .jexcel_content').width(newWidth);\r\n $('#vendorautoadmitgrid .jexcel_content').width(newWidth);\r\n $('#vendortypesgrid .jexcel_content').width(newWidth);\r\n \r\n }, true);\r\n\r\n vendorsTable = jexcel(document.getElementById('vendors'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n search: true,\r\n tableWidth: tableWidth + 'px',\r\n tableHeight: tableHeight + 'px',\r\n minDimensions: [2, 100],\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'Name',\r\n type: 'string',\r\n width: '300px',\r\n },\r\n {\r\n title: 'Type',\r\n type: 'dropdown',\r\n source: vendorTypesToDisplay,\r\n width: '250px',\r\n },\r\n {\r\n title: 'Representative',\r\n type: 'text',\r\n width: '150px',\r\n },\r\n {\r\n title: 'Plate number',\r\n type: 'text',\r\n width: '150px',\r\n },\r\n {\r\n title: 'Insurance required',\r\n type: 'checkbox',\r\n width: '150px',\r\n },\r\n {\r\n title: 'Insurance on file',\r\n type: 'checkbox',\r\n width: '150px',\r\n },\r\n {\r\n title: 'Insurance expiration date',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '220px',\r\n },\r\n {\r\n title: 'Comment',\r\n type: 'text',\r\n width: '150px',\r\n wordWrap: true\r\n }\r\n ],\r\n onload: function (instance) {\r\n\r\n $($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n $(obj).prepend($(\"#vendors-header-title\"));\r\n });\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n $(\".jexcel_search\").css({ \"margin-top\": \"20px\" });\r\n\r\n\r\n },\r\n rowResize: true\r\n });\r\n\r\n\r\n\r\n\r\n vendorsTypesTable = jexcel(document.getElementById('vendortypesgrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n search: false,\r\n tableHeight: tableHeight + 'px',\r\n minDimensions: [2, 100],\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'Type name',\r\n type: 'string',\r\n width: '300px',\r\n },\r\n {\r\n title: 'Description',\r\n type: 'text',\r\n width: '500px',\r\n },\r\n ],\r\n onload: function (instance) {\r\n\r\n },\r\n rowResize: true\r\n });\r\n\r\n\r\n return 1;\r\n}\r\n\r\nfunction BuildVendorsAutoAdmitTable(dateFormat, vendorsInDatabase) {\r\n\r\n\r\n console.log(\"vendorsInDatabase\");\r\n console.log(vendorsInDatabase);\r\n\r\n var vendorNames = [];\r\n\r\n vendorsInDatabase.forEach(vendor => vendorNames.push(\r\n vendor.vendorName));\r\n\r\n \r\n\r\n var residentTerm = \"Resident\";\r\n\r\n var tableHeight = window.innerHeight - 64 - 256;\r\n\r\n if (tableHeight < 256) {\r\n tableHeight = 256;\r\n }\r\n\r\n console.log(vendorNames);\r\n\r\n var receiverUnits = [];\r\n var receiverNames = [];\r\n\r\n var receiversInCacheCount = receiversCache.length;\r\n for (var i = 0; i < receiversInCacheCount; i++) {\r\n\r\n var rowValue = receiversCache[i]['receiverUnit'];\r\n if (isEmptyOrSpaces(rowValue) == false) {\r\n receiverUnits.push(rowValue);\r\n }\r\n\r\n rowValue = receiversCache[i]['receiverName'];\r\n if (isEmptyOrSpaces(rowValue) == false) {\r\n receiverNames.push(rowValue);\r\n }\r\n }\r\n\r\n vendorsAutoAdmitTable = jexcel(document.getElementById('vendorautoadmitgrid'), {\r\n allowManualInsertColumn: false,\r\n allowInsertColumn: false,\r\n allowDeleteColumn: false,\r\n allowRenameColumn: false,\r\n columnDrag: false,\r\n data: null,\r\n tableWidth: '100%',\r\n tableHeight: tableHeight + 'px',\r\n minDimensions: [2, 100],\r\n wordWrap: true,\r\n search: true,\r\n tableOverflow: true,\r\n columns: [\r\n {\r\n title: 'Vendor',\r\n type: 'dropdown',\r\n source: vendorNames,\r\n width: '250px',\r\n },\r\n {\r\n title: '',\r\n type: 'text',\r\n width: '2px',\r\n },\r\n {\r\n title: 'Unit',\r\n type: 'dropdown',\r\n source: receiverUnits,\r\n width: '150px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Name',\r\n type: 'text',\r\n width: '200px',\r\n },\r\n {\r\n title: 'Errand',\r\n type: 'text',\r\n width: '200px',\r\n },\r\n {\r\n title: 'Duration',\r\n type: 'dropdown',\r\n source: ['Temporary', 'Permanent'],\r\n width: '150px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Entry from',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '150px',\r\n },\r\n {\r\n title: 'Entry to',\r\n type: 'calendar', options: { format: dateFormat == 0 ? 'DD/MM/YYYY' : 'MM/DD/YYYY' },\r\n width: '150px',\r\n },\r\n {\r\n title: 'Banned',\r\n type: 'dropdown',\r\n source: ['Allow', 'Banned'],\r\n width: '100px',\r\n multiple: false\r\n },\r\n {\r\n title: 'Comment',\r\n type: 'text',\r\n width: '100px',\r\n wordWrap: true\r\n },\r\n {\r\n title: 'Pass',\r\n type: 'text',\r\n width: '60px'\r\n },\r\n ],\r\n rowResize: true,\r\n onload: function (instance) {\r\n //Seperator colors\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n $(obj).css(\"background-color\", \"#ccc\");\r\n });\r\n\r\n $($(instance).find('td[data-x=\"0\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n $($(instance).find('td[data-x=\"1\"]')).each(function (i, obj) {\r\n if (i == 0) {\r\n $(obj).css(\"font-weight\", \"bold\");\r\n }\r\n });\r\n\r\n //$($(instance).find('.jexcel_filter')).each(function (i, obj) {\r\n // $(obj).prepend($(\"#people-autoadmit-header-checkin-title\"));\r\n //});\r\n\r\n $(\".jexcel_search\").css({ \"border\": \"1px solid #ccc\" });\r\n\r\n \r\n\r\n\r\n\r\n },\r\n onchange: function (obj, cel, val) {\r\n //// Used to avoid onchange event to propagate\r\n //if (autoAdmitTableOnChangeDisabled) {\r\n // return;\r\n //}\r\n\r\n //var checkinId = 0;\r\n //var newValue = \"\";\r\n //var columnToUpdate = \"\";\r\n\r\n\r\n\r\n ////Grid coordinates of data just updated\r\n //var x = parseInt($(cel).attr(\"data-x\"));\r\n //var y = parseInt($(cel).attr(\"data-y\"));\r\n\r\n ////We changed something in the first row / check in row\r\n\r\n ////Check if the column we changed belongs to the Receiver data information\r\n //if (x == 0) {\r\n // //Get the ID of Receiver data changed\r\n\r\n // var receiverLookedUp = null;\r\n // //Get the string value of the data we just changed\r\n // var dataChangedValue = vendorsAutoAdmitTable.getRowData(y)[0];\r\n\r\n // //Search through receivers that has a property with that data value\r\n // for (var i = 0; i < receiversCache.length; i++) {\r\n // if (receiversCache[i]['receiverUnit'] == dataChangedValue) {\r\n // receiverLookedUp = receiversCache[i];\r\n // }\r\n // }\r\n\r\n // //If we didnt find any receiver with corresponding data, return\r\n // if (receiverLookedUp == null) {\r\n // return;\r\n // }\r\n\r\n // lastReceiverLookedUpCache = receiverLookedUp;\r\n\r\n // var columnX = 1;\r\n\r\n // // Dont propagate onchange events\r\n // vendorsAutoAdmitTableOnChangeDisabled = true;\r\n\r\n // // Fetch data from looked up receiver\r\n // var columnValue = receiverLookedUp['receiverName'];\r\n\r\n // // Set internal value\r\n // vendorsAutoAdmitTable.setValueFromCoords(columnX, y, columnValue, true);\r\n\r\n // $($('#autoadmitgrid').find('td[data-x=\"1\"][data-y=\"' + y + '\"]')).each(function (i, obj) {\r\n // //Set visual value, since we are using a custom dropdow. Setting the internal data wont update the visual data for some reason\r\n // if (i == y) {\r\n // $(obj).html(columnValue);\r\n // }\r\n // });\r\n\r\n // autoAdmitTableOnChangeDisabled = false;\r\n\r\n\r\n //}\r\n\r\n\r\n\r\n },\r\n onselection: function (instance, x1, y1, x2, y2, origin) {\r\n\r\n //Used to jump to next column while marking the columnSeperator\r\n if (x1 == 1) {\r\n vendorsAutoAdmitTable.updateSelectionFromCoords(x1 + 1, y1, x2 + 1, y2);\r\n console.log(\"selected\" + x1 + y1 + x2 + y2);\r\n }\r\n },\r\n onbeforechange: function (instance, cell, x, y, value) {\r\n\r\n },\r\n });\r\n\r\n return 1;\r\n\r\n}\r\n\r\nfunction PopulateVendorAutoAdmitTable(vendorsInDatabase) {\r\n\r\n try {\r\n var vendorAutoAdmitsStrings = [];\r\n var vendorAutoAdmits = [];\r\n\r\n vendorsInDatabase.forEach(vendor => vendorAutoAdmitsStrings.push(vendor.vendorReceiverAutoAllowList));\r\n\r\n var vendorCount = vendorsInDatabase.length;\r\n\r\n console.log(\"PopulateVendorAutoAdmitTable\");\r\n console.log(vendorAutoAdmitsStrings);\r\n\r\n for (var k = 0; k < vendorCount; k++) {\r\n if (vendorAutoAdmitsStrings[k] != null && vendorAutoAdmitsStrings[k] != \"\") {\r\n var vendorAutoAdmitForVendor = JSON.parse(vendorAutoAdmitsStrings[k]);\r\n for (var kx = 0; kx < vendorAutoAdmitForVendor.length; kx++) {\r\n\r\n var line = vendorAutoAdmitForVendor[kx];\r\n\r\n vendorAutoAdmits.push([line.VendorName, '', line.ReceiverUnit, line.VendorAutoAdmitName, line.VendorAutoAdmitReceiverRelation,\r\n line.VendorAutoAdmitDue, timestampToJexcelDate(line.VendorAutoAdmitDueFrom), timestampToJexcelDate(line.VendorAutoAdmitDueTo), line.VendorAutoAdmitBanned, line.VendorAutoAdmitComment, '
Create
']);\r\n }\r\n }\r\n\r\n }\r\n\r\n if (vendorsAutoAdmitTable != null) {\r\n vendorsAutoAdmitTable.setData(vendorAutoAdmits, false);\r\n } else {\r\n }\r\n\r\n } catch (e) {\r\n console.log(\"PopulateAutoAdmitTable Error\");\r\n console.log(e);\r\n }\r\n\r\n return 1;\r\n}\r\n\r\nfunction ReadVendorAutoAdmitGrid() {\r\n var resultr = []\r\n var datar = vendorsAutoAdmitTable.getJson(false);\r\n\r\n var rowCount = 100;\r\n if (datar != null) {\r\n rowCount = datar.length;\r\n }\r\n\r\n for (var i = 0; i < rowCount; i++) {\r\n var line = datar[i];\r\n if (line[0] && line[0] != \"\") {\r\n\r\n var vendorAutoAdmitName = line[3];\r\n try {\r\n vendorAutoAdmitName = vendorAutoAdmitName.trim();\r\n } catch (e) {\r\n\r\n }\r\n\r\n\r\n var row = {\r\n VendorName: line[0],\r\n ReceiverUnit: line[2],\r\n VendorAutoAdmitName: vendorAutoAdmitName,\r\n VendorAutoAdmitReceiverRelation: line[4],\r\n VendorAutoAdmitDue: line[5],\r\n VendorAutoAdmitDueFrom: jexcelDateTimeParse(line[6]),\r\n VendorAutoAdmitDueTo: jexcelDateTimeParse(line[7]),\r\n VendorAutoAdmitBanned: line[8],\r\n VendorAutoAdmitComment: line[9],\r\n };\r\n\r\n resultr.push(row);\r\n }\r\n }\r\n return resultr;\r\n}\r\n\r\n\r\nfunction PopulateVendorsTable(vendorsInDatabase) {\r\n var vendors = [];\r\n\r\n vendorsInDatabase.forEach(vendor => vendors.push([\r\n vendor.vendorName,\r\n vendor.vendorType,\r\n vendor.vendorRepresentative,\r\n vendor.vendorVehicleRegistrationPlate,\r\n vendor.vendorInsuranceRequired,\r\n vendor.vendorInsuranceOnFile,\r\n timestampToJexcelDate(vendor.vendorInsuranceExpirationDate),\r\n vendor.vendorComment]))\r\n\r\n try {\r\n if (vendorsTable != null) {\r\n vendorsTable.setData(vendors, false);\r\n } else {\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n return 1;\r\n}\r\n\r\n\r\nfunction SaveVendorsTable(args) {\r\n try {\r\n var result = []\r\n var data = vendorsTable.getJson(false);\r\n console.log(data);\r\n\r\n var vendorAutoAdmitList = ReadVendorAutoAdmitGrid();\r\n\r\n console.log(\"vendorAutoAdmitList\");\r\n console.log(vendorAutoAdmitList);\r\n\r\n var vendorAutoAdmitCount = 0;\r\n if (vendorAutoAdmitList != null) {\r\n vendorAutoAdmitCount = vendorAutoAdmitList.length;\r\n }\r\n\r\n var rowCount = 100;\r\n if (data != null) {\r\n rowCount = data.length;\r\n }\r\n\r\n for (var i = 0; i < rowCount; i++) {\r\n var line = data[i];\r\n if (line[0] && line[0] != \"\") {\r\n var row = {\r\n VendorName: line[0],\r\n vendorType: line[1],\r\n vendorRepresentative: line[2],\r\n vendorVehicleRegistrationPlate: line[3],\r\n vendorInsuranceRequired: line[4],\r\n vendorInsuranceOnFile: line[5],\r\n vendorInsuranceExpirationDate: jexcelDateTimeParse(line[6]),\r\n vendorComment: line[7]\r\n };\r\n\r\n\r\n console.log(\"vendorAutoAdmitCount \" + vendorAutoAdmitCount);\r\n\r\n if (vendorAutoAdmitCount > 0) {\r\n var allowList = [];\r\n\r\n var rowVendorName = row.VendorName.toLowerCase();\r\n\r\n \r\n console.log(rowVendorName);\r\n\r\n for (var j = 0; j < vendorAutoAdmitCount; j++) {\r\n try {\r\n if (rowVendorName.trimEnd() == vendorAutoAdmitList[j].VendorName.toLowerCase().trimEnd()) {\r\n allowList.push(vendorAutoAdmitList[j]);\r\n }\r\n } catch (e) {\r\n\r\n }\r\n }\r\n\r\n\r\n try {\r\n row.VendorReceiverAutoAllowList = JSON.stringify(allowList);\r\n } catch (e) {\r\n\r\n }\r\n\r\n }\r\n else {\r\n row.VendorReceiverAutoAllowList = '';\r\n }\r\n\r\n result.push(row);\r\n }\r\n }\r\n } catch (e) {\r\n console.log(\"Error\");\r\n console.log(e);\r\n }\r\n\r\n //if (result == null || result.length == 0) {\r\n // alert(\"Empty alert\");\r\n //}\r\n return result;\r\n}\r\n\r\n\r\n\r\n//\r\n//vendor types grid\r\n\r\nvar defaultVendors = [[\"Private Landscaper\", \"\"], [\"Private Contractor\", \"\"], [\"Realtor\", \"\"], [\"Food/Water Delivery\", \"\"], [\"Transportation\", \"\"], [\"\\\"123\\\"\", \"\"], [\"In-house vendor\", \"\"], [\"Dry Cleaners\", \"\"], [\"Floral Delivery\", \"\"], [\"Dog Groomer\", \"\"], [\"Pet Care\", \"\"], [\"Pest Control\", \"\"], [\"Other\", \"\"] ];\r\n\r\nfunction setDefaultVendors() {\r\n\r\n if (vendorsTypesTable != null) {\r\n vendorsTypesTable.setData(defaultVendors, false);\r\n } else {\r\n }\r\n\r\n}\r\n\r\n\r\nfunction PopulateVendorsTypesTable(vendorsTypeInDatabase) {\r\n var vendorsTypes = [];\r\n\r\n try {\r\n vendorsTypeInDatabase.forEach(vendor => vendorsTypes.push([\r\n vendor.vendorTypeName,\r\n vendor.vendorTypeDescription,]))\r\n\r\n if (vendorsTypesTable != null) {\r\n console.log(\"vendortypes\");\r\n console.log(vendorsTypes);\r\n vendorsTypesTable.setData(vendorsTypes, false);\r\n } else {\r\n }\r\n } catch (e) {\r\n console.log(\"PopulateVendorsTypesTable Error\");\r\n console.log(e);\r\n }\r\n\r\n return 1;\r\n}\r\n\r\n\r\nfunction SaveVendorsTypesTable(args) {\r\n try {\r\n var result = []\r\n var data = vendorsTypesTable.getJson(false);\r\n \r\n\r\n var rowCount = 100;\r\n if (data != null) {\r\n rowCount = data.length;\r\n }\r\n\r\n for (var i = 0; i < rowCount; i++) {\r\n var line = data[i];\r\n if (line[0] && line[0] != \"\") {\r\n var row = {\r\n VendorTypeName: line[0],\r\n vendorTypeDescription: line[1]\r\n };\r\n\r\n result.push(row);\r\n }\r\n }\r\n } catch (e) {\r\n console.log(\"Error\");\r\n console.log(e);\r\n }\r\n\r\n //if (result == null || result.length == 0) {\r\n // alert(\"Empty alert\");\r\n //}\r\n return result;\r\n}\r\n\r\n\r\n\r\n//\r\n\r\n\r\n\r\n\r\n\r\nfunction SaveVendorsLogTable(args) {\r\n try {\r\n var result = []\r\n var data = awayLogTable.getJson(false);\r\n console.log(data);\r\n\r\n for (var i = 0; i < 100; i++) {\r\n var line = data[i];\r\n if (line[0] && line[0] != \"\") {\r\n //3,4,7,8\r\n\r\n //Datetime columns\r\n\r\n //////////////////////////\r\n\r\n line[3] = jexcelDateTimeParse(line[3]);\r\n line[4] = jexcelDateTimeParse(line[4]);\r\n line[7] = jexcelDateTimeParse(line[7]);\r\n line[8] = jexcelDateTimeParse(line[8]);\r\n\r\n //////////////////////////\r\n\r\n var row = {\r\n VendorUnit: line[0],\r\n VendorName: line[1],\r\n VendorAwayEnabled: line[2],\r\n VendorAwayFrom: line[3],\r\n VendorAwayTo: line[4],\r\n VendorHoldsEnabled: line[5],\r\n VendorHoldsWhat: line[6],\r\n VendorHoldsFrom: line[7],\r\n VendorHoldsTo: line[8],\r\n VendorHoldsOther: line[9],\r\n VendorHoldsComment: line[10]\r\n };\r\n\r\n\r\n result.push(row);\r\n }\r\n }\r\n\r\n console.log(\"result\");\r\n console.log(result);\r\n\r\n } catch (e) {\r\n console.log(\"Error\");\r\n console.log(e);\r\n }\r\n return result;\r\n}\r\n\r\n\r\nfunction showVendorsNotificationToast(message) {\r\n var x = document.getElementById(\"snackbarVendors\");\r\n x.className = \"show\";\r\n x.innerHTML = message;\r\n setTimeout(function () { x.className = x.className.replace(\"show\", \"\"); x.innerHTML = \"\"; }, 3000);\r\n}\r\n\r\nfunction GenerateVendorAutoAdmitPass() {\r\n try {\r\n var rowNumber = vendorsAutoAdmitTable.getSelectedRows();\r\n\r\n console.log(\"selected rows:\");\r\n console.log(rowNumber);\r\n\r\n var rowData = \"\";\r\n\r\n for (var i = 1; i < 10; i++) {\r\n rowData += rowNumber[0].cells[i].innerHTML + \";\";\r\n }\r\n\r\n\r\n // DotNet.invokeMethodAsync('VisitForm.Client.UI.Common', 'OnGenerateVendorAutoAdmitPass', rowData);\r\n\r\n vendorsAutoAdmitTable.resetSelection();\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}"]}