{"version":3,"mappings":"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oEACAA,mEACWA,sEAcAA,uIAzF3BA,sCACEA,wCACAA,uCACEA,qCACEA,kDACAA,8BACAA,sCAAOA,sBAAyBA,2BAClCA,2BACAA,0CAAoCA,0GAASogH,oBAC3CpgH,wCAAyBA,8BAAOA,2BAClCA,2BACFA,2BACAA,uCACEA,uCACEA,wCACEA,yCAAyDA,iHAAgBqgH,eACvErgH,uCACEA,wCACEA,uCACEA,wCACEA,qCAEFA,2BACAA,wCACEA,qCAEFA,2BACAA,wCACEA,qCAEFA,2BACAA,yCACEA,0CACEA,sCACAA,8CACFA,2BACFA,2BACFA,2BACFA,2BACAA,yCACEA,4CACEA,0GAASu8E,eACTv8E,+BACFA,2BACFA,2BACFA,2BACAA,4CAMFA,2BACFA,2BACAA,mCACAA,2CACEA,uCACEA,oCACEA,oCAAIA,gCAAMA,2BACVA,oCAAIA,8BAAIA,2BACRA,oCAAIA,gCAAMA,2BACVA,oCAAIA,4CAAkBA,2BACtBA,+BACFA,2BACFA,2BACAA,uCACEA,0CAKAA,2CA+BFA,2BACFA,2BACFA,2BACFA,2BACFA,uEAzGcA,4EAKDA,gFASqBA,gFAyBZA,uFAMMA,kEAoBbA,2EAKgBA,oIAsC/BA,sCACEA,uCACEA,6CACFA,2BACAA,sCACEA,wCACEA,sCACEA,wCACEA,sCAAOA,qCAAYA,2BACnBA,qCACFA,2BACAA,yCACEA,uCAAOA,qCAAWA,2BAClBA,sCACFA,2BACAA,yCACEA,uCAAOA,yCAAeA,2BACtBA,sCACFA,2BACAA,yCACEA,4CAAiDA,0GAASsgH,wBACzBtgH,8BAAIA,2BACvCA,2BACFA,2BACFA,2BACFA,2BACFA,uEArBUA,oFAeQA,sHAyBRA,mCACEA,mCAAIA,sBAAsBA,2BAC1BA,mCAAIA,sBAA6BA,2BACnCA,oFAFMA,0EACAA,0GAjBhBA,sCACEA,uCACEA,6CACFA,2BACAA,sCACEA,wCACAA,wCACEA,0CACEA,sCACEA,mCACEA,mCAAIA,+BAAKA,2BACTA,oCAAIA,oDAA0BA,2BAChCA,2BACFA,2BACAA,uCACEA,0CAIFA,2BACFA,2BACFA,2BACFA,2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,gECiBY32H,wCACoCA,sBAA4BA,+EADrCA,gEACSA,sJAalCA,0CAEQA,wLAAS2W,gDAA6D,GAAM,KAClF3W,uCACFA,4FArBNA,mCACEA,mCACEA,sBACAA,2CAEFA,2BACAA,mCACEA,qDACFA,2BACAA,mCACEA,uDACFA,2BACAA,oCACEA,sCACEA,2CAAsCA,4JAAS6W,mBAC7C7W,qCACFA,2BACAA,8CAKFA,2BACFA,2BACFA,qFAtBIA,4FAEOA,2EAGPA,uGAGAA,4GAQWA,4KAOfA,mCACEA,sCACEA,uCACEA,0DACFA,2BACFA,2BACFA,mDACAA,mCACEA,sCACEA,uCACEA,iDACFA,2BACFA,2BACFA,oJAkDAA,uCACEA,uCACEA,uCACEA,uCAAQA,sBAAoCA,2BAC9CA,2BACAA,uCACEA,sCACEA,uCACEA,iDAMFA,2BACFA,2BACFA,2BACAA,kCAGFA,2BACFA,sEAlBcA,2FAKgBA,qQAsB5BA,uCACEA,sBACFA,sEADEA,+PA1EVA,uCACEA,uCACEA,qCAAMA,kCAASA,2BACfA,0CAAoCA,0GAASolB,oBAC3CplB,wCAAyBA,6BAAOA,2BAClCA,2BACFA,2BACAA,uCACEA,sCACEA,sCACEA,uCACEA,0CACEA,0CACAA,oCACEA,oCAAIA,mCAASA,2BACbA,oCAAIA,gCAAMA,2BACVA,oCAAIA,uCAAaA,2BACnBA,2BACAA,2BACAA,uCACAA,oCACEA,oCAAIA,uBAA4DA,2BAChEA,oCAAIA,uDAAoCA,2BACxCA,oCACEA,yDACFA,2BACFA,2BACAA,2BACFA,2BACFA,2BACFA,2BACAA,kCACAA,uCACEA,kDAQFA,2BAEAA,4CAuBAA,wCACEA,sCACEA,2CAAyDA,0GAAS+/F,eAAc//F,oCAChFA,2BACFA,2BACFA,2BACAA,uCACEA,2CAGFA,2BACFA,2BACFA,2BACFA,uEA1DkBA,6HACAA,gHAEFA,+HAUNA,2MASyBA,qFAyBMA,2EAK3BA,iKAUdA,uDAAsEA,4GAAUqe,gBAChFre,uEADqBA,uICxHhB,IAAMi3H,GAAb,MAAM,QAyFJl4H,YACUuoF,EACA38E,EACDzB,EACCgu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AMA,2BAC5BA,2CAAsBA,iCAAOA,2BAC7BA,2CAAsBA,sCAAYA,2BACpCA,2BACFA,2BACAA,wCACEA,uCAAOA,6CAAmBA,2BAC1BA,qCAEFA,2BACAA,wCACEA,uCAAOA,yCAAeA,2BACtBA,qCAEFA,2BACAA,wCACEA,uCAAOA,2CAAiBA,2BACxBA,2CACEA,2CAAyBA,iCAAOA,2BAChCA,mFAGFA,2BACFA,2BAEAA,wCAUEA,uCACEA,wCACEA,0CACEA,qCACAA,4CAAiBA,2BACrBA,2BACAA,wCACEA,0CACEA,qCACAA,uCAAYA,2BAChBA,2BACAA,wCACEA,0CACEA,qCACAA,gDAAqBA,2BACzBA,2BACAA,wCACEA,0CACEA,qCACAA,0CAAeA,2BACnBA,2BACAA,wCACEA,0CACEA,qCACAA,qCAAUA,2BACdA,2BACAA,wCACEA,0CACEA,qCACAA,iCAAMA,2BACVA,2BACAA,wCACEA,0CACEA,qCACAA,kDAAuBA,2BAC3BA,2BACAA,wCACEA,0CACEA,qCACAA,0CAAeA,2BACnBA,2BACAA,yCACEA,2CACEA,sCACAA,yCAAaA,2BACjBA,2BACAA,yCACEA,2CACEA,sCACAA,sCAAUA,2BACdA,2BACAA,yCACEA,2CACEA,sCACAA,yCAAaA,2BACjBA,2BACAA,yCACEA,2CACEA,sCACAA,sCAAUA,2BACdA,2BACAA,yCACEA,2CACEA,sCACAA,uCAAWA,2BACfA,2BACAA,yCACEA,2CACEA,sCACAA,2CAAeA,2BACnBA,2BACAA,yCACEA,2CACEA,sCACAA,wCAAYA,2BAChBA,2BACAA,yCACEA,2CACEA,sCACAA,qCAASA,2BACbA,2BACAA,yCACEA,2CACEA,sCACAA,gCAAIA,2BACRA,2BACAA,yCACEA,2CACEA,sCACAA,0CAAcA,2BAClBA,2BACAA,yCACEA,2CACEA,sCACAA,yCAAaA,2BACjBA,2BACAA,yCACEA,2CACEA,sCACAA,oDAAwBA,2BAC5BA,2BAEFA,2BACFA,2BACAA,uCACEA,4CAAqFA,2GAASutC,WAC5FvtC,yCACFA,2BACFA,2BACFA,2BACFA,2BACFA,wEA9LcA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FA,2BACFA,2BACAA,uCACEA,oCACEA,qCACEA,yCAEEA,wCACMA,yCAAqBA,uBAAkCA,2BAC/DA,2BACFA,2BACAA,qCACEA,yCAEEA,wCACQA,yCACNA,uBAAmBA,4CACrBA,2BACFA,2BACFA,2BACAA,qCACEA,yCAEEA,sCACMA,yCAAqBA,uBAAgEA,2BAC7FA,2BACFA,2BACAA,qCACEA,yCAEEA,0DAC0BA,yCAAqBA,yDACnCA,2BACdA,2BACFA,2BACAA,qCACEA,yCAEEA,oDACqBA,yCACJA,uBAAkDA,2BACrEA,2BACFA,2BACAA,2CAWAA,qCACEA,yCAEEA,4CACaA,yCAAqBA,uBAA0BA,2BAC9DA,2BACFA,2BACAA,qCACEA,yCAEEA,8DAAmCA,4CAGnCA,4CAEFA,2BACFA,2BACAA,qCACEA,yCAEEA,8CACYA,yCAAqBA,uBAA0CA,2BAC7EA,2BACFA,2BACAA,qCACEA,yCAEEA,mEAAwCA,yCAAqBA,oEACtCA,2BACzBA,2BACFA,2BACAA,qCACEA,yCAEEA,8CACSA,yCACPA,qEACFA,2BACFA,2BACFA,2BACAA,qCACEA,yCAEEA,+CACUA,yCACRA,uBACFA,2BACFA,2BACFA,2BACFA,2BACAA,oCACEA,qCACEA,yCAEEA,0DACqBA,0CACnBA,wBACFA,2BACFA,2BACFA,2BACAA,sCACEA,0CAEEA,wBAAyDA,0CACvDA,oEACFA,2BACFA,2BACFA,2BACAA,4CASAA,sCACEA,0CAEEA,uDACcA,0CACZA,kEACFA,2BACFA,2BACFA,2BACAA,sCACEA,0CAEEA,8CACSA,0CACPA,wBACFA,2BACFA,2BACFA,2BACAA,sCACEA,0CAEEA,+DAAmCA,0CACjCA,wDACFA,2BACFA,2BACFA,2BACAA,sCACEA,0CAEEA,gEAAoCA,0CAClCA,wDACFA,2BACFA,2BACFA,2BACAA,sCACEA,0CAEEA,0EAA8CA,0CAC5CA,2DACFA,2BACFA,2BACFA,2BACAA,sCACEA,0CAEEA,2EAA+CA,0CAC7CA,2DACFA,2BACFA,2BACFA,2BACAA,sCACEA,0CAEEA,6EAAiDA,0CAC/CA,2DACFA,2B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AAK63J,iDAjCnBP,sDAA6BjhK,6pCDV1CxK,sCACEA,sCACEA,sBACAA,sCACEA,oCAAGA,iDAASyK,gBAA0EzK,2BACxFA,2BACFA,2BACAA,sCACEA,sCACEA,sCACEA,wCACEA,sCACEA,oCACEA,oCACEA,wCACFA,2BACAA,oCAAKA,wCAAyBA,6BAAGA,2BAAQA,2BAC3CA,2BACAA,oCACEA,sCACEA,0CACEA,2EADFA,2BAEFA,2BACFA,2BACFA,2BACFA,2BACFA,2BACFA,2BACAA,wCACEA,wCACEA,0CACEA,uCACEA,0CAKAA,2EAsBFA,2BACFA,2BACFA,2BACFA,2BACFA,2BACFA,kCA9DIA,yEAmBcA,yEAWDA,sHAKwBA,4OC3B5ByrK,GAAb,yBCTEzrK,4DADFA,sCACEA,mDACFA,gGADiBA,6FAGfA,4DADFA,oCACEA,mDACFA,gGADiBA,8FAOTA,uCACEA,gCACAA,qCACEA,sCACEA,mIAEFA,2BACFA,2BACFA,4FAMIA,wCAEEA,0CAAQA,2GAASslB,qBACftlB,gCACAA,0CACFA,2BACFA,4FAOAA,wCACEA,0CAAQA,iJAASkZ,+BACflZ,gCACAA,0CACFA,2BACFA,4FAvBJA,uCACEA,wCACEA,wCAAwBA,gCAAOA,2BACjCA,2BACAA,uCACEA,2CAOAA,wCACEA,0CAAQA,iJAASylB,+BACfzlB,gCACAA,0CACFA,2BACFA,2BACAA,4CAMAA,yCACEA,2CAAQA,iJAASq1F,mCACfr1F,iCACAA,+CACFA,2BACFA,2BACFA,2BACFA,wEAzBOA,qJAYaA,wGAiBdA,sCACEA,qCACEA,8CACFA,2BACFA,sDALFA,mCACEA,yCAKFA,sEALOA,0KAQHA,mEACyDA,mHAAiB+rD,kBAAjB/rD,CAAkC,gEACxEypC,EADwE,2BACxEA,cACnBzpC,qGAFEA,oDAA2B,yCAxD3CA,wCACEA,uCACEA,uCACEA,0CASAA,2CAgCAA,yCACEA,sCACEA,wCAOAA,mCACEA,sCACEA,uEAIFA,2BACFA,2BAQFA,2BACFA,2BACFA,2BACFA,2BACFA,qEAxEgBA,gDAGoDA,uEASZA,uEAkCzCA,uEAS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A,8GAPEA,yJAEKA,mWAfTA,mCACEA,mCAAIA,sBAAmCA,2BACvCA,mCAAIA,sBAA6CA,2BACjDA,0CACAA,0CACAA,0CACAA,0CACAA,0CACAA,2CACAA,2CACAA,2CACAA,2CACAA,2CASAA,oCACEA,4CAA6CA,4FAASwjM,EAAT,2BAASA,+BACpDxjM,kCACFA,2BACFA,2BACFA,sFAzBMA,qFACAA,+FACCA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,6GA/BXA,0CACEA,sCACEA,mCACEA,mCAAIA,qCAAYA,2BAChBA,mCAAIA,sBAA6DA,2BACjEA,0CACAA,0CACAA,0CACAA,2CACAA,2CACAA,2CACAA,2CACAA,2CACAA,2CACAA,2CACAA,+BACFA,2BACFA,2BACAA,uCACEA,8CA2BFA,2BACFA,sEA3CUA,2HACCA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,iFACAA,iFAKcA,2JA+BzBA,wCAEEA,wCACEA,wCACEA,wCACEA,wCACEA,wCACEA,sCAAOA,qCAAYA,2BACnBA,oCACEA,qCACFA,2BACFA,2BACAA,yCACEA,uCAAOA,iDAAuBA,2BAC9BA,qCACEA,sCACFA,2BACFA,2BACAA,yCACEA,uCAAOA,+CAAqBA,2BAC5BA,qCACEA,sCACFA,2BACFA,2BACFA,2BACAA,yCACEA,yCACEA,uCAAOA,0DAAgCA,2BACvCA,qCACEA,sCACFA,2BACFA,2BACAA,yCACEA,uCAAOA,+CAAqBA,2BAC5BA,qCACEA,sCACFA,2BACFA,2BACAA,yCACEA,uCAAOA,qDAA2BA,2BAClCA,yCACEA,sCAEAA,0CAAmBA,iCAAOA,2BAC5BA,2BACFA,2BACFA,2BACAA,yCACEA,yCACEA,uCAAOA,yDAA+BA,2BACtCA,qCACEA,sCACFA,2BACFA,2BACAA,yCACEA,uCAAOA,8CAAoBA,2BAC3BA,qCACEA,sCACFA,2BACFA,2BACAA,yCACEA,uCAAOA,oDAA0BA,2BACjCA,yCACEA,sCAEAA,0CAAmBA,iCAAOA,2BAC5BA,2BACF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,GA9EA2vI,GA4OAG,IAAwB,CA5LxBprJ,GA1OAzgE,oCAoWA80G,GAA6B,MAD7BmmH,KAA+B,oCAqC/B7S,GAAyB,CA/bzB1pI,GA6YAjpB,GAAyBgpK,UAoDzB1C,IAJApW,IAAuB,oCAwDvBvoI,GAAuB,CAFvByyI,IAAuB,KC3/BzB+O,sBAGFC,QAAyBC,gBAAgBrC,KACtCrrD,MAAMxvK,GAAO7O,QAAQ8Q,MAAMjC,sBCX9B,QACA,YACA,eACA,YACA,eACA,kBACA,cACA,iBACA,eACA,kBACA,eACA,kBACA,cACA,iBACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,WACA,cACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,cACA,iBACA,eACA,kBACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,aACA,gBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,qBACA,kBACA,qBACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,YACA,eACA,UACA,aACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,gBACA,mBACA,eACA,kBACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,iBACA,oBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,aACA,gBACA,YACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,eACA,kBACA,YACA,eACA,YACA,eACA,YACA,iBACA,oBACA,eACA,YACA,eACA,kBACA,qBACA,YACA,eACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,mBAIA,cACA,aACA,aAEA,eACA,eACA,+CACA,iCACAm9N,GAEA,aAEA/9N,kBACA,wBAEAA,aACAg+N,aACAh+N","names":["Date","prototype","addDays","days","date","this","valueOf","setDate","getDate","addYears","years","setFullYear","getFullYear","UTCDate","isoString","console","log","c","split","b","map","UTC","UTCDate2","now_utc","getMonth","getHours","getMinutes","getSeconds","CompanyStatus","UserPermission","CombinedUserPermissionList","None","ManageAutomations","SendEmergencyAlarm","ManualCheckIn","ManualCheckOut","ModifySite","ManageSiteQuestion","ManageSiteAnnouncement","CompanyHost","ViewReports","ManageViewTaggedUser","ViewAttendanceAnswers","AdjustSiteLocation","AddSiteByTemplate","SiteHost","ViewKioskMode","SendPushNotification","ApproveRejectSiteInduction","AssetTrackerAdmin","SupplierManagement","UserPermissionList","ViewSensitiveAnswers","EditUserDirectory","GodUserPermission","ExternalSitePermission","AggregatedExternalSitePermission","PortalDisplayMode","Constants","SELF_ATTENDANCE_TITLE","AUTO_ATTENDANCE_TITLE","HOST_ATTENDANCE_TITLE","ANONYMOUS_ATTENDANCE_TITLE","KIOSK_ATTENDANCE_TITLE","TEXT_IS_ANYTHING_CONDITION_VALUE","WORKER_PROFILE_REPORT_PREFIX","DefaultWorkflowDisplayMode","StorageService","constructor","platformId","set","name","value","saveInSessionStorage","isPlatformBrowser","sessionStorage","setItem","localStorage","get","loadFromSessionStorage","getItem","remove","removeItem","clearAll","clear","i0","PLATFORM_ID","factory","CompanyAuthService","currentCompanyId","companyId","activeCompanyId","t","_a","hashLink","UserService","http","router","route","storageService","companyAuthService","BehaviorSubject","model","post","apiUrl","id","setXsrfToken","xsrfToken","currentXsrfToken","getXsrfToken","length","i","_b","backUrl","snapshot","queryParams","returnPath","initUserInfo","currentCompany$","subscribe","res","_currentCompany","reloadPage","window","location","reload","info","next","companyStatuses","userPermissions","companyFeatures","editorMaxLength","defaultServerTimeZone","defaultCompanyType","setCurrentCompanyId","companies","cc","find","setTimeout","redirectUrl","navigateByUrl","firstName","lastName","url","isTemplateCompany","currentCompany","companyName","title","isTemplate","hasCompanyFeature","feature","hasAdminPermissionOnSite","siteId","isCompanyAdminUser","o","siteIdsWithAdminPrivilage","includes","hasAdminPermissionOnAnySite","hasAccessToUserDirectory","hasUserAnyOfPermissions","hasAccessToEditUserDirectory","hasUserPermissionForCompany","hasPermissionOnSite","userPermission","siteLevelPermissions","hasPermissionOnCompany","permission","isCompanyAdmin","isGodUser","companyLevelPermissions","sites","Object","keys","filter","site","sitePermissions","permissions","ups","combined","index","hasGodUserPermissionForCompany","godUserPermissions","isCompanyOwner","isCompanyOwnerUser","resendOtp","checkCompanyStatusValue","key","entry","x","isAiEnabled","getCompanyWorkflowDisplayMode","mode","getCompanyStatusValue","canAddSite","isEnableSeatLocation","canAddNewLocation","endUserCanAddNewLocation","hasAccessToManageSite","isActive","isExternalSite","externalSitePermissions","hasAnyAccess","hasAnySiteLevelPermission","some","toString","dateFormat","dateTimeFormat","format","moment","str","ignoreFormat","parse","toDate","m","local","r","LocaleService","defaultLocale","Intl","DateTimeFormat","resolvedOptions","locale","navigator","language","DatetimePipe","localeService","datePipe","DatePipe","transform","pure","MobilePipe","userService","currentRegion","prefix","mobile","startsWith","number","parsePhoneNumber","isValid","getRegionCode","e","getNumber","UserInfoModalComponent","bsModalRef","ngOnInit","onClose","Subject","cancelModal","hide","editMobileNumber","editUserMobile","mobileModel","err","selectors","ctx","ModalService","modalService","_confirmMessage","asObservable","_confirmResult","show","template","cssClass","param","modalRef","class","initialState","paramFromParent","modalRefList","push","Observable","getConfirmSubscriber","confirm","message","header","trueButtonLabel","falseButtonLabel","trueButtonClass","falseButtonClass","isDangerState","state","State","getConfirmResult","success","warn","error","result","currentModalRef","pop","content","closeConfirm","isYes","observer","subscription","onHidden","complete","unsubscribe","confirmResult","Icon","LoaderComponent","UserEditPhoneComponent","bsModalService","mobilePattern","mobileFormGroup","FormGroup","currentMobile","FormControl","Validators","newMobile","validateEditMobile","currentMobileNumber","newMobileNumber","mobileInProccess","validateEditUserMobile","selectedUser","setValue","NoAccessComponent","LocalStorageKey","LayoutService","header$","leftMenuIsOpen","isInDarkMode","isDark","_val","toggleSideBar","document","documentElement","classList","toggle","closeSideBar","add","toggleSideBarInMobileMode","closeSideBarInMobileMode","toggleSubMenu","event","ul","preventDefault","stopPropagation","toggleDarkMode","updateStorages","getLogoPath","getLogoClass","getBackgroundColor","getColor","ErrorService","handleError","ErrorMessage","status","statusText","ErrorEvent","server_error","Array","throwError","CompanyService","_http","_errorService","query","pipe","catchError","templateCompanyId","user","userId","adminState","put","activePlanId","SignalRService","connect","connection","signalR","withUrl","withAutomaticReconnect","build","start","on","data","serverMessage","then","closeConnection","_c","stop","ProductPlanFeature","EventType","SignInService","signalRService","getInitXsrfToken","observableThrowError","webPreLogin","countryCode","JSON","stringify","requestSendToken","mobileNumber","signIn","body","headers","HttpHeaders","ReturnPath","undefined","observe","signOut","resp","handleRedirection","response","href","navigate","SwitchComponent","EventEmitter","valueChanged","emit","objectChanged","tagged","isDisabled","disabled","internalDisabled","_ID","externalId","_value","val","onChange","onTouched","registerOnChange","fn","writeValue","registerOnTouched","emitValue","trueValue","falseValue","switchChanged","setDisabledState","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","decls","CssSpinnerComponent","layoutService","NotificationService","getUserNotificationSettings","updateSettings","getUserNotificationList","request","deleteNotification","readNotification","unreadNotification","readAllNotification","ctx_r8","ctx_r10","ctx_r11","ctx_r13","ctx_r14","ctx_r15","NotificationCenterComponent","notificationService","pageSize","pageNumber","loadNotifications","eventType","ignoreSignalRLoadNotificationInvoke","emitNotificationCount","pageInfo","hidePanel","inProgress","pagingInfo","finalize","forEach","item","notifications","notificationsCount","totalCount","unreadNotificationCount","unreadCount","formattedUnreadNotificationCount","formattedUnreadCount","onUpdateNotificationCount","onScroll","srcElement","scrollHeight","clientHeight","scrollTop","SwitchReadState","notificationModel","notificationId","isRead","reloadNotificationsManually","RemoveNotification","MarkAllAsRead","ctx_r26","ctx_r31","ctx_r41","ctx_r42","ctx_r44","TopBarComponent","signInService","toastr","renderer","addEventListener","closeUserBoxOnClickOutside","bind","listen","target","u","notificationButton","nativeElement","f","notificationPanel","v","contains","isNotificationMenuOpen","toggleNotificationMenu","signalRScheduledReportsRequest","isSuccess","loadingNotification","displayInfo","getScheduledReports","hasExportFeatureOnCompany","csvExportTitle","isAnonymous","loadingScheduledReports","userScheduledReportLogs","csvExportTitleFunc","_","s","isInProgressState","onCsvPopoverClick","$event","userbox","showUserBox","openModal","closeModal","notificationCount","displayRecipients","recipients","outputArray","output","join","splice","icon","condition","allChilds","isExpanded","ch","parent","_route","childs","toLowerCase","element","getElementById","routerLinkActive","_routeLinkActive","hasChild","OrderByPipe","array","field","asc","nullIsFirst","isArray","sort","a","v1","v2","OrderByFuctionPipe","FilterPipe","mobilePipe","list","filterTerm","filterProperties","term","indexOf","ctx_r16","ctx_r21","ctx_r36","SideBarComponent","events","NavigationEnd","NavigationError","isActiveAdvancedMenu","isGod","hasCompany","isAdminMode","isSupplierCompany","supplierManageFormsHashLink","l","setMenuItems","canViewActivityReport","maxSites","sidebarItems","SidebarItem","userPermissionList","handleSidebarItemClick","sidebarItem","el","onAdvancedMenuChanged","onChangeCompany","changeCompany","replace","preventEventPropagation","SecureComponent","companyService","ngxPendoService","pendoData","visitor","visitorId","visitorData","entries","account","accountId","accountData","initialize","ChartType","Math","floor","random","type","chartType","init","labels","label","values","colors","rgbStringFormat","createBgColor","lineFormat","options","pieFormat","static","widget","chart","ChartModel","legendPosition","titlePosition","widgetModel","datasets","p","lineTension","fill","backgroundColor","borderColor","legend","display","position","text","tooltips","enabled","intersect","callbacks","dataPoint","datasetIndex","yLabel","responsive","maintainAspectRatio","DashboardReportPeriod","control","valid","test","validURL","urlValidator","DashboardWidgetType","uuid4","DashboardService","timeZone","period","getTimezoneOffset","WeekdayPipe","SummaryWidgetComponent","ChartComponent","chartModel","_chart","_chartModel","SafePipe","sanitizer","bypassSecurityTrustHtml","bypassSecurityTrustStyle","bypassSecurityTrustScript","_d","bypassSecurityTrustUrl","d","_e","bypassSecurityTrustResourceUrl","Error","ctx_r4","ctx_r18","ctx_r23","ctx_r24","ctx_r25","ctx_r27","ctx_r28","DashboardComponent","dashboardService","orderByPipe","weekdayPipe","DashboardWidgetTypes","ExternalLink","width","height","unit","DashboardTotalsInfo","getChartsInfo","lineChart","getCheckInByDateInDateRange","pieChart_ChekInBySite","getChackInBySiteInDateRange","getDashboardTotalInfos","dashboardTotalInfos","getDashboardWidgets","dashboardWidgets","setExternalWidgetHeight","widgets","widgetModels","baseWidgetModels","companyWidgets","w","order","getChart","manageWidgets","ignoreBackdropClick","copyCompanyWidgets","copyBaseWidgetModels","orderedCompanyWidgets","unusedWidgets","changeOrder","companyWidgetModel","moveUp","reorderWidgets","removeWidget","addWidget","addExternalWidget","externalWidgetFormGroup","controls","reset","onSaveChanges","updateCompanyWidgetConfig","heigth","offsetWidth","h","style","SiteViewModel","MAX_ALLOWED_SITE_RADIUS_DEFAULT","SiteActiveStatus","SiteTemplateStatus","QuestionType","OptionalMandatoryState","validatorOrOpts","super","FileType","getPaginationKeyByUrl","pathname","getPageSizeByUrl","paginationKey","parseInt","toBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","onerror","removeContentTypeFromBase64","parts","email","regexp","RegExp","screen","left","top","open","filename","exec","match","formGroup","n","ret","input","max","obj","count","useExactLabel","y","hasOwnProperty","isEqual","hash","WeakMap","Function","getTime","has","create","getPrototypeOf","Map","from","deepCloneCircular","Set","assign","call","slice","deepClone","source","deepClone_getRegExpFlags","regExp","flags","global","ignoreCase","multiline","sticky","unicode","question","questions","answers","conditions","masterQuestion","q","questionId","masterQuestionId","cndAns","masterQuestionAnswer","questionType","answer","every","ca","ua","_isQuestionIsVisibleByCheckingConditions","documentType","displayOrder","isRequired","CustomFormControl","documents","questionDocumentsFormControls","requiredDocumentFormControls","convertSingleDocumentToFormControl","formArrayControls","formArray","FormArray","documentsFormArray","formControl","form","doc","inductionId","requiredDocument","documentTypes","oldValue","documentFormControl","_f","supplierCheckinViewModel","siteQuestions","inductions","announcements","fileTypes","mimeTypes","html","htm","shtml","css","xml","gif","jpeg","jpg","js","atom","rss","mml","txt","jad","wml","htc","png","tif","tiff","wbmp","ico","jng","bmp","svg","webp","jar","war","ear","hqx","pdf","ps","eps","ai","rtf","xls","ppt","wmlc","kml","kmz","cco","jardiff","jnlp","run","pl","pm","prc","pdb","rar","rpm","sea","swf","sit","tcl","tk","der","pem","crt","xpi","xhtml","zip","bin","exe","dll","deb","dmg","eot","iso","img","msi","msp","msm","mid","midi","kar","mp3","ogg","ra","mpeg","mpg","mov","flv","mng","asx","asf","wmv","avi","m4v","mp4","trim","extension","detectExtension","mimeType","isNaN","parseFloat","isFinite","bytes","si","dp","thresh","abs","units","round","toFixed","base64String","ceil","SiteService","getSiteBySession","session","getById","getFullDataById","getAllSites","getAllCompanySites","getAllPermissionedSites","activeStatus","templateStatus","includeExternalSites","getAllSitesForExternalCompany","getAllActiveSites","getAllPermissionedActiveSites","update","delete","getVisitorTypesWithSiteVisitorTypeIdsViewModel","SiteId","updateLocation","ValidateImportSites","formData","isImportRequest","reportProgress","addEditSiteVisitorTypeAccompaniers","removeSiteVisitorTypeAccompanier","quickSetup","cloneSite","refSiteId","cloneAsSite","getSiteAccessControlUnits","ctx_r2","PaginationComponent","_pageSize","itemsPerPageArray","_pageNumber","hidePagination","localPageChanged","page","pageChanged","itemsPerPage","storeInLocalStorage","onItemPerPageChange","AddressLookupService","suggestionId","sessionToken","address","ctx_r3","MapComponent","lat","lng","draggable","zoomControl","scrollwheel","disableDoubleClickZoom","minZoom","center","_center","siteRadius","radius","_siteRadius","setCircle","cordinate","setPosition","readonly","_readOnly","markerOptions","setCurrentLocation","setMarker","locationChange","geolocation","getCurrentPosition","coords","longitude","latitude","google","maps","LatLng","markerTitle","color","fontWeight","animation","Animation","DROP","scaledSize","Size","marker","Marker","circleOption","editable","fillColor","fillOpacity","strokeColor","strokeOpacity","strokeWeight","visible","circle","Circle","click","latLng","markerDragEnd","zoomIn","zoom","maxZoom","zoomOut","SiteLocationVerifyComponent","siteService","addressLookupService","direction","locationVerifyInput","_site","uuid","getAddressList","suggestions$","switchMap","loader","getAddressSuggestionList","tap","noop","of","errorMessage","cancel","isFinished","isSucceeded","onSelectAddress","selectedAddress","primaryTitle","secondaryTitle","getDetailsOfSelectedPlace","setSiteLocationByChangeMarker","typeaheadNoResults","addressNotFound","AddressFormControlComponent","isGeolocationRequierd","_isGeolocationRequierd","initFormControl","addressControl","_address","valueChanges","startWith","debounceTime","addressLoader","suggestions","geolocValidator","ctx_r48","ctx_r59","ctx_r61","ctx_r63","ctx_r74","ctx_r76","ctx_r78","CompanyComponent","rawAddress","cloneSiteFormGroup","getSiteList","setValidators","clearValidators","updateValueAndValidity","filterFormcontrol","searchTerm","filterListTerm","onActiveChanged","isActiveMode","onlyActiveSites","onlyRealSites","createQuery","getSiteManageRouterLink","externalSiteSupplierId","siteListInProgress","siteList","deleteSite","iamsure","changeActiveState","getShowQrCodeWithInstruction","secretCode","openLocationVerifyModal","locationVerifyModel","closeLocationVerifyModal","onCloneSiteFromTemplate","iscloneSiteFromTemplateList","templateSiteListForClone","bsModalHandle","setClass","onCloneSite","clone","inCloningProgress","onPageChange","paginationInfo","hasAccessToSiteAsset","UserComponent","PublicComponent","invalidE168","mobileIsValid","Number","Infinity","String","isNormalInteger","DatetimePickerMode","SiteAttendancePermissionService","addSinglePerson","attendee","addMultiplePeople","phones","importSiteData","updateSiteAttendee","removeSiteAttendee","removeCompanyAttendee","getSiteAttendees","isTemporary","getCompanyAttendees","ctx_r1","DescriptorComponent","EmbedIn","Card","isClosed","closePanelName","closePanel","SiteSelectorComponent","required","_required","_permission","_activeStatus","_templateStatus","includeExternalCompanySites","_includeExternalCompanySites","_siteId","siteSelect","siteIdSelect","selectedSite","saveDefaultSite","loadSiteList","loadForExternalCompany","loading","setReponse","that","excludeList","selected_el","loadDefaultSite","sites$","getNthItems","maxItems","term$","filteredSites","searchSites","reachToEndTerm","reachToEnd","min","arr","selectedSiteId","getSiteLabel","siteReference","isMatched","clearInput","onScrollToEnd","getPlaceholder","notSelectedSiteLabel","parsed","parseDateTime","formated","formatDateTime","datetimeValidator","DateTimePickerComponent","controlDirective","valueAccessor","ngAfterViewInit","self","timePickerFormControl","isDatePickerDisabled","disable","enable","validate","onDateChange","invalid","EmitChanges","valueChange","ctx_r6","ctx_r9","ctx_r12","InputDateTimePickerComponent","inputFormControl","addRequiredToFormControl","_mode","_date","getDateTime","inputValue","datetimePickerformControl","date1","toDateString","parseDateTime2","minDate","closePopoverOnClickOutside","inputValueChange","hasValidator","addValidators","_g","_h","removeValidators","datetimePickerValueChange","bool","popDivTemplate","datepickerComponent","selfRef","containsElement","datepickerRef","onSelectDateTime","_r1","ctx_r7","ctx_r17","ctx_r34","ctx_r37","ctx_r40","ManageSiteAttendancePermissionComponent","fb","siteAttendancePermissionService","_sites","onSiteChange","isTemporayInvite","pageTitle","attendeeTable","group","tableRows","newAttendeeFormGroup","e168Validator","firstname","lastname","allowCheckInFrom","allowCheckInTo","isCompanyMode","toggled","commaSeperatedDataError","commaSeperatedData","deleteRow","getAttendee","editRow","doneRow","getFormControls","ctrl","sealed","isEditable","addAttendee","getSiteName","nothingFound","onGetAttendees","onGetAttendeesError","atts","getAllowCheckInFrom","setSites","SiteAttendancePermissionComponent","OtpRequestMode","UserAuthenticationResult","TwoFactorVerificationMode","LoginStateEnum","CountryService","updateSmsProvider","countryId","smsProvider","testSmsProvider","selectedSmsProvider","testMobileNumber","CaptchaMode","CaptchaService","recaptchaV3Service","_captchaMode","urlsNeedToken","urlNeedToken","execute","token","captchaMode","AccordionHeaderComponent","ctx_r19","ctx_r22","ctx_r35","ctx_r39","ctx_r43","LoginComponent","countryService","_captchaService","DEFAULT_TIMEOUT","isDarkMode","loginForm","country","smsCode","password","repeatpassword","isPersisted","showMobileNumber","mobileNumberIsCorrect","year","getCoutries","coutries","countries","selectedCountry","params","loadMobileNumber","inputMobile","getOtherServerList","servers","serverList","substring","phone","PhoneNumber","regionCode","alpha2","sendUserNumber","done","prefixCode","handleAuthenticationResult","userCredentialsViewModel","UserCredentialsViewModel","securityToken","twoFactorAuthentication","sendMode","verificationMode","tokenFormIsValid","handleErroredSignIn","timeLeft","verificationTime","startTimer","resendToken","twoFactorToken","onlyCheckUserName","resendResponse","disableResendLink","interval","setInterval","pauseTimer","clearInterval","otherWaysList","resetPassword","userStatus","editPhoneNumber","responseError","lockoutMessage","wrongPasswordAttemptCountLockout","lockoutInSeconds","twoFactorFormIsValid","isRepeatPasswordValid","showProgress","sendOtherType","itemTitle","itemValue","loadAllProperties","questionParametersAsString","questionParameters","documentTypeId","isAnswerRequired","minimumSelectCount","getOptionTitleList","ignoreRequird","getOptions","QuestionViewModel","getQuestionOptions","hasOptions","items","itemList","ItemTitleValue","QuestionService","getQuestions","getActiveQuestions","getInactiveQuestions","addNewQuestion","addWithResultNewQuestion","updateQuestion","deleteQuestion","addRemoveQuestionToAllSites","addQuestionToAllSites","checkInMode","addQuestionCondition","removeQuestionCondition","getQuestionProfileSubTypes","QuestionTypePipe","listFormat","regexLists","RegexPipe","founded","QuestionProfileSubTypeEnum","QuestionProfileSubTypePipe","MultiSelectRenderMode","SingleSelectRenderMode","QuestinRenderModePipe","args","QuestionAnswerFileFormat","QuestionAnswerFileFormatPipe","QuestionExtendedTitleComponent","showItems","conditionValue","AnswerSelectorComponent","_question","formOptions","selected","changeFn","touchFn","ConditionalQuestionComponent","questionService","loadAllQuestions","allQuestions","setDropDownQuestion","getQuestionTitle","questionText","onAddCondition","inprocess","onRemoveCondition","AskQuestionPeriodMode","QuestionDefaultMode","AskMode","GlobalItemType","ToolDynamicFieldUsage","encodeKey","encode","encodeValue","decodeKey","decodeURIComponent","decodeValue","encodeURIComponent","searchModel","HttpParams","fromString","encoder","CustomeQueryEncoder","append","k","path","iter","toISOString","InventoryService","inventoryCategories","_inventoryCategories","getToolCategories","inventoryToolStatuses","_inventoryToolStatuses","getToolStatuses","inventorySiteLocations","_inventorySiteLocations","getInventorySiteLocations","getToolReport","baseApiUrl","getToolsForCategory","categoryId","exportToolReportAsCsv","convertObjectToUrlParameters","getInventoryLocationsBySiteId","getInventoryLocationsBySiteSupplierId","getToolAssignHistory","updateWebTool","toolId","addWebTool","removeAsset","fetchAssets","getGlobalToolDynamicFields","baseApiUrlWithoutCompanyId","ItemSelectorComponent","inventoryService","itemId","_itemId","onItemSelect","selectedItem","getValue","getItemList","items$","getItemLabelKey","itemType","getItemValueKey","getItemLabel","usage","filterExcludes","valueListToHide","searchAssets","QuestionAssetFieldComponent","questionParamInput","_questionParamInput","questionParam","selectedGlobalToolDynamicFieldId","globalToolDynamicFieldIdKeynewLocal","onSelectGlobalField","onItemsUpdatedOutput","DateQuestionLimitValueMode","DateComparisonMode","SupplierDocumentEditorType","EvacuationContentEditorType","FileStorageService","errorService","getSignedUploadInfo","uploadInlineFile","uploadFile","uploadInfo","httpMethod","toUpperCase","MarkdownEditorComponent","fileStorageService","instance","Editor","querySelector","editorRef","previewStyle","initialEditType","initialValue","change","getMarkdown","hooks","addImageBlobHook","blob","callback","onAddImageBlob","usageStatistics","toolbarItems","placeHolders","editorType","GetAllPlaceHolders","toolbar","getUI","getToolbar","addItem","className","tooltip","placeholderButtonIndex","indexOfItem","button","eventManager","popup","addEventType","isShow","offsetTop","offsetLeft","offsetHeight","placeholderContainer","createElement","placeholder","btn","createButton","appendChild","br","createPopup","setAttribute","marginLeft","innerHTML","insertText","isString","forEachOwnProperties","iteratee","context","forEachArray","len","uploadImage","size","InlineRichTextMaxFileSizeInMegaByte","inlineFile","fileAsBase64","fileExtension","getFileExtenstion","uploadedLink","ToolTipPlace","ToolTipTriggers","ToolTipMode","TooltipComponent","TextRenderType","EnumToArrayPipe","TextRenderTypePipe","regex","QuestionTextComponent","onTextModeChanged","regexItems","onTextRenderModeChanged","regexType","regexId","showRegexInput","textRenderMode","newItemId","ControlContainer","NgForm","DisplayStyle","ctx_r33","ctx_r52","ctx_r54","ctx_r55","ctx_r56","ctx_r57","ItemRendererDisplayMode","TooltipTypeEnum","QuestionItemsRendererComponent","_clientRandomId","_items","multipleItemRenderMode","itemRenderMode","Button","CheckBox","singleItemRenderMode","Dropdown","RadioButton","resetNewItem","addNewItemRow","sortableUniqueId","Sortable","ghostClass","fallbackClass","handle","dragoverBubble","forceFallback","onEnd","orderedItems","child","children","matchedItem","dataset","_updateOutputItems","detectPressedKey","keyEvent","which","onItemsUpdated","isValidList","disabledAddNewRow","buttonStyles","background","border","chooseQuestionStyle","displayStyle","newItem","isInvalid","search","hint","selectedDisplayStyle","removeItemRow","itemToRemove","confirmed","listItem","duplicateOrEmptyTitle","invalidRows","isInvalidResult","Empty","reservedItemList","reverse","innerItem","Duplicate","updateTitle","purifyText","updateTextareaSize","updateHint","updatePreventSubmission","getDefaultStyleControlColor","isInvalidRow","getTooltipText","ItemsListKey","QuestionMultiSelectComponent","_questionParam","renderMode","checkIfDrpIsValid","fillItemsArrsyByQuestionParametersAsString","itemsModel","_inputItems","drpIsValid","multiSelectRenderMode","validateMinimumSelectCount","minCount","isNumber","selectValue","select","QuestionSingleSelectComponent","singleSelectRenderMode","QuestionBooleanComponent","UserDocumentTypeService","ReplaySubject","getAll","sessionId","companyGetAll","getSelectable","GetAllCompaniesUserDocumentTypes","getUserDocumentTypeChildren","edit","reorder","orderedList","getDocumentTypeChildren","allUserDocuments","parentId","CompanyDocumentTypeService","onlySelectableList","DocumentTypeNestedSelectorComponent","userDocumentTypeService","companyDocumentTypeService","ignoreUserDocumentIds","_ignoreUserDocumentIds","filterDocuments","selectedDocumentTypes","valueToSet","isMultiple","allCompaniesDocumentTypes","mainRequestResult","getAllCompaniesDocumentTypes","process","fetchCompanyDocumentTypes","onlySelectables","allRequiredUserDocuments","includeNullValue","completelyProcess","firstLoadedSelectedDocumentTypeIds","attachGlobalScopeSelectedItems","$ngOptionValue","$ngOptionLabel","nullValueCaption","needToAttachIds","globalScopeSelectedDocumentTypesIds","companyCustomizedDocumentsIds","oldId","matchedObj","globalScopeSelectedItems","findUserDocumentChildren","latestSelectedItem","uniqueIds","companyItem","onAdd","selectedItemId","selectedItemObj","getDocumentTypeFromId","onRemove","excludeItems","fileType","QuestionFileComponent","documentTypeIdList","_documentTypeIdList","genericFileDocumentTypeSelector","isGenericDocumentType","onSelectedDocumentTypes","documentTypesListEmitter","onSelectGenericFileDocumentTypeSelector","DateQuestionLimitComponent","dateFormControl","limit","compareValue","ctx_r5","QuestionDateComponent","dateComparisonMode","dayCount","valueMode","minLimit","_minLimit","limitForMinimumValue","maxLimit","_maxLimit","limitForMaximumValue","hasMinimumLimit","hasMaximumLimit","emitChanges","onChanged","hasMinLimit","hasMaxLimit","onToggleLimit","isMinToggle","defaultMin","defaultMax","includeTime","QuestionSignaturePadComponent","QuestionProfileComponent","questionProfileSubTypes","subTypes","_questionProfileSubTypes","setInitialQuestionProfileSubType","questionProfileSubType","AskQuestionPeriodModePipe","AskModePipe","QuestionDefaultModePipe","ctx_r32","ctx_r46","QuestionAddComponent","getDefaultQuestion","questionViewModel","useRichTextTitle","questionRichText","_questionSingle","_questionMulti","_questionText","_questionBoolean","_questionFile","_questionRichText","_questionDate","_questionSignaturePad","_questionAssetField","_questionProfileInfo","selectedDocumentTypeIdList","onSingleMultiQuestionTypeItemsUpdate","isFormValid","MultiSelect","SingleSelect","_formIsvalid","onAssetFieldItemsUpdatee","AssetField","formIsvalid","displayAskQuestionField","displayQuestionIsSensitive","askPeriodMode","askMode","defaultMode","selectChangedParameterObj","trimmedItems","withResult","clearError","questionTypeChanged","selectedValue","RichText","oldQuestionType","_documentTypeModeStateIsValid","File","Text","Boolean","SignaturePad","ProfileInfo","onDocumentTypeModeChange","limitDateMaxValue","limitDateMinValue","_datesAreValid","_j","_k","S","C","_l","_m","TriggerType","CompanyTagService","ChipContainerComponent","onKeyPress","keyCode","pushNewChip","onSelectChip","onRemoveChip","chip","chips","onChipsChanged","isNewChipChipAdd","newChip","removable","TriggerAction","CompanySiteSelectedType","SiteAttendanceApprovalStatus","FormType","CompanyTriggerActionService","getForSite","getForCompany","getForAllLocation","FormService","enumToArrayPipe","getActiveFormTypes","isSbActive","getAllForms","changeItemsOrder","previewForm","addForm","editForm","formId","removeForm","getForms","getExternalCompanyForms","getFormGroups","groupName","formReport","saveForm","exportFormReportAsCsv","getFilledForm","formDataId","getFillFormViewModel","getFilledFormViewModel","filledFormRequestModel","getFormDataDetails","ExportFormDataAsPdf","cloneForm","getFormHistory","CompanySiteSelectorComponent","companySiteSelectedType","AllCompanyAndSites","selectedCompanyType","selectedLocationFormControl","currentSiteId","_currentSiteId","Site","onSelect","selectedType","onSelectChanged","siteName","TriggerSelectorComponent","triggersFC","trigger","triggerType","selectedTrigger","getTriggerTypeFriendlyName","ngOnDestroy","emails","validateEmail","emailArray","invalidemailList","splits","splitEmailList","emailList","emailTemplateValidator","subject","sendEmailToCompanySupervisor","sendEmailToSiteSupervisor","emailIsRequired","recipientsNotValid","subjectIsNotValid","ArrayFormControlComponent","splitter","EmailTemplateComponent","emailArrayValidator","validators","FormTypePipe","SiteAttendanceApprovalStatusPipe","ctx_r45","CompanyTriggerActionComponent","companyTriggerActionService","companyTagService","formService","isCompanyWide","updateCompanyTags","inProgress$","forkJoin","forms","isEnable","updateTriggerActionList","getCompanyTags","companyTags","method","companyTriggerActions","onSelectedTrigger","filterType","onRefresh","onSiteIdChange","onStatusChanged","toggleStatus","onShowEditModal","companyTriggerAction","selectedCompanyTriggerAction","createFormGroup","onTriggerChange","onSave","editFormGroup","action","approvalStatusList","companyTagId","Reject","SubmitForm","formType","parameters","inAddEditProgress","tagId","triggerDefaultValue","getTriggerActionFriendlyName","getCompanyTagLabel","getTriggerActionSummery","triggerAction","Email","getSelectedSiteName","onTagChange","approvalStatusItemChanged","selectedItems","states","addControl","removeControl","filteredItems","ta","ItemValuePipe","ctx_r53","QuestionTriggersComponent","newTrigger","valueLabel","pagTitle","triggers","showLeaveEmptyInTextModeCheckBox","flagUser","rejectMessage","rejectUser","tags","operators","cts","addAction","addTriggers","checked","conditionValueCanBeNull","_questionType","textQuestionValueMode","valuesEqual","deleteTrigger","arr1","concat","arr2","onTagChanges","AddRemoveQuestionAllSitesComponent","addQuestionToAllSite","closeAddQuestionToAllSiteModel","_r11","ctx_r29","QuestionManagerComponent","getQuestionList","isCompanyTemplate","showActiveQuestions","questionList","selectedQuestion","modalRes","openAddQuestionToAllSitesModal","addQuestion","UserAutoCompleteFilterByFields","SiteActivityReportType","FilterType","finalFormat","Table","config","tableType","displayGeneralSearch","generalSearchPlaceholder","generalSearchApiKeyName","generalSearchMinimumCharsToSearch","displayQuestionsFilter","displayAnnouncementsFilter","displayDynamicFieldsFilter","displayDynamicAssignFieldsFilter","displaySettingsButton","displayExportsButton","forceHideAllControlButtons","displayEnableMagicLink","scheduleReport","csvReportUrl","initialFilters","loadDataOnInitialFilterChange","refreshButtonValidity","displayRefreshButton","apiResultCallback","requestPayloadMode","csvExportSubject","cacheKeyPrefix","hideEmptyColumns","exportAsJob","InitialFilterUsage","RequestPayloadModeEnum","isComponentTemplateName","_isComponentTemplateName","templateName","_templateName","_data","csvFields","_csvFields","ComponentTemplateName","FullNameMobile","_initializeGridScopeTemplate","SiteNameReference","FullNameAccompanierCount","Inductions","SupplierDocuments","CsvFields","relationship","ScheduleReportMode","ScheduleReportType","parameter","ReportDeliveryType","ReportPeriodType","MyobPeriodType","SortOrder","GridTemplateNameDirective","SiteAttendanceService","getSiteAttendanceAttachments","siteAttendanceId","AnonyousCheckOut","AnonymousCheckIn","SiteActiveAttendees","getAttendanceContactTracing","sendEmergencyAlarm","alarmMessage","getTotalCountCheckInSite","getContactInformationByAttendanceId","saveScheduledReport","saveAndGetMagicLinkForPowerBI","getMyScheduledReport","deleteMyScheduledReport","reportId","sendHostPushNotification","exportContactsReportAsCsv","getHostCheckInData","getAnonymousCheckInData","approveSiteAttentendanceByHost","rejectSiteAttentendanceByHost","getPreCheckInsList","approvePreCheckInModel","cancelPreCheckInModel","preCheckinId","TableSettingService","tableSettings","setting","setToLocalStorage","getTableStorageKey","getTableSettingsFromCache","tableKey","defaultConfig","table","TextOperator","ToolDynamicFieldType","QuestionSelectorComponent","companyAvailableQuestions","companyQuestions","showAll","addedQuestions","onAddQuestion","isMultiSelect","onAddNewQuestionClick","onResultQuestionAdd","newQuestion","FilterByConditionPipe","parameter1","parameter2","parameter3","TextOperatorPipe","ctx_r38","QuestionAnswerFilterComponent","datetimePipe","thisComponentInstance","filters","filterQuestions","questionFilters","getGlobalAssetFields","onChangeMode","isAllQuestionFilter","getAssetQuestionType","globalAssetFields","globalToolDynamicFieldId","isTextQuestion","isDateQuestion","isTextOrDateQuestion","openAnswersFilterModal","onHide","onCloseMethod","ignoreInvalidForm","canCloseModal","displayFilters","getFilterModelItem","isAllFilter","operatorFormControl","assetFields","QuestionTypesToShow","qt","getQuestionItems","onAddQuestionToFilter","initFilterQuestion","mandatoryValueValidators","onRemoveQuestionFromFilter","filterOperators","operator","onMultiSelectValueChange","notitle","titles","onShowAddQuestionsModal","questionModalRef","onCloseAddQuestionsModal","getAddedQuestions","AnnouncementService","updateSiteAnnouncement","removeSiteAnnouncement","addSiteAnnouncement","RemoveAnnouncementFromAllSitesOfCompany","AddAnnouncementToAllSitesOfCompany","getAnnouncementGroups","NotifyAnnouncementVisit","getSitesOfAnnouncement","FilteredAnnouncementComponent","_announcement","onChangeState","stateChange","AnnouncementFilterComponent","announcementService","filterAnnouncements","filteredAnnouncementList","setOriginalToCloneAnnouncementAndDoSearch","clonedFilterAnnouncements","onAddAnnouncementToFilter","clonedSelectedAnnouncement","deepCloneJson","viewed","onRemoveAnnouncementFromFilter","announcement","isModal","oan","setCloneToOriginalAnnouncementAndDoSearch","ctx_r65","ctx_r68","ctx_r70","ctx_r71","DynamicFieldsFilterComponent","isAssignMode","filterDynamicFields","filterAssignDynamicFields","toolCategories","selectedCategory","openCategoriesFilterModal","selectFirstFieldsOfSelectedCategory","selectedDynamicField","toolDynamicFields","selectedAssignDynamicField","toolAssignDynamicFields","getFilterModel","filterModel","assetDynamicFieldFilters","_innerGetFilterModel","assignDynamicFieldFilters","isAssign","pushInFiltermodel","filterFields","_dynamicField","dynamicFieldId","dynamicField","onCategoryChange","filterFunction","toolDynamicFieldViewModel","df","onAddDynamicFieldToFilters","onAddAssignDynamicFieldToFilters","onRemoveDynamicFieldFromFilter","hasOperand","onCloseProcess","outputFilters","showImages","showText","isImage","showDate","refreshGrid","refreshGridEmitter","isInvalidFormControlValue","assignDynamicField","DynamicFieldsFilterRendererComponent","removeDynamicField","QuestionAnswerFilterRendererComponent","textOperatorPipe","onRemoveQuestionFromFilterByUUID","onRefreshFilterQuestions","getFilterAnswers","ApproveEntityType","ApproveEntityTypePipe","PendingToApproveStatus","ApproveStatusPipe","DocumentExpiryStatus","DocumentExpiryStatusPipe","AssetCategoryType","AssetCategoryTypePipe","SiteAssetQueryMode","SiteAssetQueryModePipe","SiteSupplierDocumentStatus","SiteSupplierDocumentVersionStatus","SiteSupplierDocumentVersionStatusPipe","SiteBriefingStatus","SiteBriefingStatusPipe","ObcEventLogTypeEnum","UserProfileField","UserActivityEventType","WorkerProfileLogTypePipe","SiteSupplierService","getWorkflowListByHashlink","workflowType","getSupplierDocumentTypeInfoByHashLink","getSiteSupplierDocumentTypesByHashlinkModel","getSiteSupplierDocumentTypesByModel","GetSupplierDocumentHistory","siteSupplierDocumentTypeId","GetSupplierDocumentVersionComment","siteSupplierDocumentVersionId","addSiteSupplierDocumentTypeVersion","siteSupplierHashlink","siteSupplierId","addSiteSupplierDocumentTypeVersionList","getSiteSupplierDocumentVersionList","validateSiteSupplierWithHashLink","deleteSiteSupplierDocumentVersion","archiveSiteSupplierDocumentTypes","unarchiveSiteSupplierDocumentTypes","changeSiteSupplierDocumentKind","WorkflowService","siteSupplierService","workflowInstanceId","getCompanyId","getHashLink","getCacheKey","WorkflowDefinitionList","workflowListService","internalGetWorkflowList","subscriber","documentKindId","getWorkflowListFull","workflowSubtype","clearWorkflowCache","DocumentKindService","workflowService","companyIdToLoadKindList","_list","_companyId","_hashLink","listObservable","kindList","prepareDocumentKindCheckList","kindIdList","kind","addUpdateDocumentKind","documentKindToManage","DocumentKindNamePipe","documentKindService","FilterListRendererComponent","siteSupplierDocumentVersionStatusPipe","siteBriefingStatusPipe","documentKindNamePipe","workerProfileLogTypePipe","getFilterData","getFilterText","to","nowDateLabel","getHourMinutesString","onRemoveFromFilter","totalMinutes","hour","minute","PdfViewerComponent","src","displayIframe","hideLoader","getSrc","FileViewerComponent","btnStyle","urls","files","fileUrl","originalFileUrl","detectFileType","fileHasContent","getUrl","getFilename","checkYouTubeOrDefault","onOpenFileViewer","firstFileViewedAutomatically","onFileViewed","onFileOpened","googleDriveUrl","useOriginalFile","DocumentExpiryStatusDirective","documentExpiryStatusPipe","expiryStatus","SortableTitleHeaderComponent","onSort","headerKey","DefaultDateRange","Gender","SiteInductionStatus","InductionReviewMode","_enum","PermitStatus","WorkflowType","VisitorTypeService","_cachedVisitorTypes","cacheGetAllVisitorTypes","getAllVisitorTypes","getSiteVisitorTypeAccompaniers","IndustryTypeService","CacheService","visitorTypeService","industryTypeService","visitorTypes","_visitorTypes","industryTypes","_industryTypes","getActiveIndustryTypes","saveInMemoryCache","_cache","getFromMemoryCache","clearMemoryCacheObject","PermitStatusPipe","SiteInductionStatusPipe","ReplaySubjectsService","CompanySupplierService","getCachedSuppliers","getSuppliers","getSuppliersBySession","addSupplier","updateSupplier","deleteSupplier","activateSupplier","getBusinesses","supplierId","addBusiness","removeBusiness","bid","getDocuments","addDocument","removeDocument","did","linkSupplierToCompany","unlinkSupplierFromCompany","joinSupplier","getjoinInfo","validateJoinLink","smsToken","resendSupplierLinkingInvitation","cancelSupplierLinking","validateSiteSupplier","sendSMSSupplierActivationToken","CompanySupplierSelectorComponent","companySupplierService","selectSupplier","suppliers","clearSelector","selector","handleClearClick","toLocaleLowerCase","$suppliers","FilterAssetCategoryComponent","selectAssetCategory","assetCategories","$assetCategories","DocumentTypeSelectorComponent","selectDocument","documnets","$documents","FormLoadMode","SupplierPermitsService","getPermitList","getPermitForms","getFormInformation","submitFormData","endDate","FormSelectorComponent","supplierPermitService","_formId","selectedFormId","selectedForm","workflowForms","setFormControls","formScope","queryScope","formApplyFor","applyForList","documentKindIdList","includeInactiveForms","formList","filterForms","buttonTitle","forms$","selectFirstItemOfOneItemArray","excludeFormIds","localeCompare","isIncompleteRegister","SiteAssetService","getSiteAssetsConfiguration","getCompanyAssetsConfiguration","checkSiteTempAssetExistence","anonymousApiUrl","registerSiteAsset","registerAssetOperator","submitAssetOperation","siteAssetId","checkInAsset","checkOutAsset","getAssetCheckinHistory","getAssetRegistrationForms","getFormViewmodel","getAnonymousFilledForm","searchToolsToRegister","setNickname","searchUser","UserAutocompleteComponent","siteAssetService","currentUser","_currentUser","_selectedUserForValidator","resetSearchTerm","noResult","getUserList","isEnabled","searchterm","targetField","filterBy","filterByCurrentUserRegion","isSupplierMode","onSelectUser","getSearchTerm","inputChange","UserBasicInfoViewModel","noUserData","DurationFormControlComponent","hours","minutes","statusChanges","toInteger","InventoryLocationSelectorComponent","selectedLocation","emitSelectedLocation","parentSelectedSite","siteLocations","siteChanged","selectFirstLocation","locations","selectedLocationModel","onSelectLocation","onRequestToAddNewLocation","isNewLocationRequested","onAddNewLocation","onAddLocation","newLocation","newLocationTitle","onRequestToSelectLocation","InductionMode","InductionService","scope","inductionApiRoot","getCachedInductions","cachedInductions","getInductions","editInduction","induction","removeInduction","getSiteInductionsReport","getSiteInductionFilledInfo","siteInductionId","exportSiteInductionsReportAsCsv","inductionHistoryLog","CompanyInductionSelectorComponent","inductionService","replaySubjectsService","allSelectedItems","onSelectInduction","filteredInductions","inductionFilterItemsObs","includeInactiveInductions","inductionKey","selectedInductions","ctx_r47","ctx_r51","ctx_r67","ctx_r75","ctx_r79","ctx_r83","ctx_r87","ctx_r91","ctx_r95","ctx_r99","ctx_r104","ctx_r111","ctx_r115","ctx_r117","ctx_r119","ctx_r121","ctx_r123","ctx_r125","ctx_r127","ctx_r129","ctx_r131","ctx_r135","ctx_r138","ctx_r142","ctx_r145","ctx_r147","ctx_r150","ctx_r152","ctx_r154","ctx_r156","ctx_r159","ctx_r163","ctx_r165","PopoverFilterSimpleComponent","cacheService","formTypePipe","statusPipe","siteInductionStatus","startOf","fromDate","dateFormGroup","defaultDateRanges","defaultFormType","permitStatusTypes","EnumToArray","defaultInductionStatuses","getDocumentKindList","handleAddOrRemove","byKey","contain","onRemoveByKey","handleAddOrRemoveDateTime","showDateTime","handleAddOrRemoveDocType","invalidDate","refUserAutocomplete","formSelector","siteSelector","userSelector","checkEmptiness","oitem","getFilterDurationRange","getFilterDateRange","InductionId","isRenderableAsSelectedItem","saveSelectedLocation","selectedLocationToAdd","enabledWorkflows","documentKindList","showRemovableItems","NotShowRemovableItemsTypes","FilterHeaderComponent","onUpdate","findAncestor","cls","parentElement","popoverFilter","datePickerElements","ExportCsvPopupComponent","userInfo","csvFormGroup","_csvFileName","isEmailVerified","updateCsvReportTitle","csvExportOnlyVisible","formattedDate","formatDate","exportCsv","onExport","exportOnlyVisible","TableSettingComponent","formBuilder","tableSettingService","localScopeTableSettings","tableSetting","allColumns","displayInCheckBoxSettings","col","matchedVisibleColumn","visibleColumns","gridTemplate","matchedColumnFromCache","columnSettings","csvFieldString","matchedCsvFieldFromCache","csvCacheField","T","E","toTitleCase","cacheKey","saveChanges","onReorderClicked","isReorderingMode","charAt","SupplierDocumentService","addSiteSupplierDocumentTypes","editSiteSupplierDocumentTypes","removeSiteSupplierDocumentTypes","getSiteSupplierDocumentTypes","getSiteSupplierDocumentTypesBySiteWithStatistics","editSiteSupplierDocumentTypeEnableStatus","sendEmail","approveDeclineSiteSupplierVersion","renameSiteSupplierDocumentType","siteSupplierVersionFormReview","updateExternalSitePermissions","requestNewSiteSupplierDocumentType","addSiteSupplierDocumentVersionComment","deleteAllSupplierDocuments","supplierDocumentTypeId","exportDataAsPdf","getSiteSupplierDocumentVersionByWorkflowInstanceId","getSiteSuppliersBySiteId","SupplierDocumentSignOffViewerComponent","supplierDocumentService","onAcceptSupplier","acceptAnonymousSupplierDocument","supplierDocumentVersionId","AnonymousCheckInKey","onAccept","ApproveService","approveRejectEntity","baseUrl","resetEntityStatus","askAi","ApproveRejectComponent","approveService","inputEndDate","description","approveReject","isApprove","approveEntityType","entityType","entityId","newEndDate","showEndDate","isRequestRevision","onReviewCommentChange","InductionStatusComponent","hasApprovePermiossion","siteInduction","showApproveRejectButtons","readOnly","onOpenApproveRejectTemplate","fetchinduction","onApproveOrReject","UserDetailCardComponent","GenderPipe","FormRegisterFor","FormRegisterForPipe","supplierName","userName","ctx_r49","ctx_r50","ctx_r73","ctx_r126","ctx_r160","ctx_r164","ctx_r168","ctx_r177","ctx_r181","ctx_r183","ctx_r202","ctx_r204","ctx_r206","ctx_r229","ctx_r237","ctx_r248","BaseGridComponent","siteAttendanceService","QuestionAnswerInputModel","column","_gridColumns","matchedColumn","j","O","reOrderColumns","indexInCache","reportTableSettings","findIndex","V","saveTableInCache","reSetGridColumnsDataFromCache","prepareVisibleColumns","sortBy","sortOrder","gridColumns","columns","fillDefaultValuesOfColumns","gridConfig","_gridConfig","initFilter","loadData","_visibilityCheckedColumns","prepareViewColumns","visibilityCheckedColumns","_tableColumns","showAsColumn","hideEmptyColumnsEmptinessConditionCallback","records","getColumnSortByKeyName","allFilters","tableColumns","isShowTemplateColumns","mainColumn","detailColumn","isDetailsMode","gridIncludeColumns","hasIncludeFilter","daysOfMonth","_daysOfMonth","getRelatedColumnForReport","reportColumn","reportColumnKey","propertyNameInQuery","getRelatedCaption","labelCaption","getReportSelectItemsCaption","relatedColumn","searchQuery","initControls","getColumns","generalSearchControl","generalSearchTerm","enableSort","enableFilter","filterHasAnyData","oldF","oldFilterData","oldFIndex","fil","getRecordData","record","displayFunction","onUpdateFilter","newItems","filterCurrentItems","reloadData","payloadObject","callbackRes","totalRecords","totalDuration","initialFilter","displayInFilterRenderer","foundMatchedValue","matchedRenderFilters","_getSearchTermKey","isReportQuery","matchedColumnToSortBy","mixedFilterQuestions","qFilters","getQuestionFilters","announcementFilters","getAnnouncementFilters","assetDynamicFieldsFilters","getDynamicFieldsFilters","assignDynamicFieldsFilters","_setQueryValue","payloadCustomKeyValue","mapProperty","getMapPropertyForFilter","filterValue","fv","onFillSearchFilterBeforeSearch","onUpdateFilterAnnouncements","onUpdateFilterQuestions","filterMode","onUpdateFilterQuestionsFromRenderer","filteredQuestions","filteredQuestionsUuids","onUpdateFilterDynamicFields","fields","newDynamicFieldsCompareHash","oldDynamicFieldsCompareHash","onUpdateFilterAssignDynamicFields","newAssignDynamicFieldsCompareHash","oldAssignDynamicFieldsCompareHash","updateDynamicFieldsFilters","oldDynamicFilters","dynamicFieldsFilters","oldAssignDynamicFilters","openCreateScheduleReportModal","saveReportMode","reportScheduledReport","timeSpan","daysOfWeek","createScheduleReportModalRef","onOpenTableSettingModal","tableSettingModalRef","onTableSettingSaveChanges","oldTableSettings","needToReloadData","relatedOldItem","relatedNewItem","itemInCache","periodType","isReportScheduledReportValid","ReportTypes","Weekly","Monthly","SaveScheduledReport","saveReportType","formGroupToModel","queryString","scheduleReportMode","scheduleReportType","origin","getAssignFields","noTitle","announcementFilter","announcementId","viewState","GetReportTypes","OneTime","HalfYearly","Yearly","exportAll","exportCurrentView","getCsvTitle","exportInfo","csvColumns","csvCol","csvFieldsToSendToServer","relatedCachedCol","exportCSVReport","isExportingAsJobTask","csvEmail","csvTitle","requestParams","setAccompaniersTooltipData","view","accompaniersViewData","reorderingClass","isReordering","enableReorder","sortable","sortableOptions","saveOrder","destroy","onImageRenderError","getUserId","userIdColName","populateData","modalSize","selectedUserId","AnswerMode","DocumentProvider","SiteAttendanceDisputeType","userInformationFields","SiteAttendanceApprovalStatusComponent","onStatusChange","statusChange","EmergencyContactViewerComponent","dataObject","EmergencyContactViewModel","isNullOrEmptyEmergencyContact","isNameValid","isMobileValid","isRelationshipValid","UserInformationComponent","InductionFilledInfoComponent","callFatherOnApproveOrReject","answerResultOfInduction","siteInductionFilledInfo","siteInductionQuestionAnswers","documentResultOfInduction","siteInductionDocuments","isExpiredDocument","expireDate","openCheckInetailsPopup","questionAnswerInputModel","isCheckInAnswer","DocumentAnswerRendererComponent","questionAnswer","fileUrls","additionalFileUrls","documentTitle","userDocumentId","documentExpireDate","documentTypeTitle","TextRenderMode","QuestionTitleRendererComponent","isRichTextQuestion","Viewer","RichTextRendererComponent","QuestionParameter","QuestionListAnswerRendererComponent","isQuestionTimeIncluded","emergencyContactAnswerIsNotEmpty","getHighlightItem","highlightQuestionData","SiteAnnouncementForceViewMode","ctx_r30","CheckinAnnouncementRendererComponent","announcementSertvice","ann","isVisited","onAnnouncementVisit","onClickAnnouncement","onCheckSignOff","isCheckedMandatorySignOff","onCheckedMandatorySignOff","DisputeSiteAttendanceService","dispute","getDisputeHistory","DisputeAttendanceComponent","disputeSiteAttendanceService","userInformation","_userInformation","_siteAttendanceId","returnModel","hasCheckOutDate","checkOutDate","onDispute","updateAttachment","datePickerValueChage","isCheckInDate","newCheckInDateValue","newCheckOutDateValue","isInvalidOrEqualDate","checkInDate","isCheckIn","date2","setSeconds","DisputeHistoryComponent","history","FormDataStatus","SiteAssetRequestApproveStatus","FillFormMode","FormApplyFor","VisitStatus","VariableDefinitionType","VariableDefinitionMode","SupplierFormService","getFormList","getAnonymousForms","getSupplierForms","getFormsDetailsToFill","getAnonymousFormHistory","_item","questionTypeValue","resetAnswers","selectedControls","qValue","isNotModified","getSelectedInvalidItem","QuestionRendererComponent","fg","anwsers","formControlDirtySubject","BooleanQuestionRendererComponent","initialAnswers","SiteQuestionItemFormControl","DisplayStyleCssClassPipe","customCss","getCssClass","SingleSelectQuestionRendererComponent","updateHintAndStyle","onItemChange","questionItem","selectedItemHint","onCheckChange","MultiSelectQuestionRendererComponent","formControls","onClick","itemIndex","TextQuestionRendererComponent","EmergencyContactComponent","e168ValidatorNullable","jsonObject","jsonData","emitData","emitEvent","EmergencyContactQuestionRendererComponent","defaultAnswerStringify","onUpdateEmergencyContact","ecValue","DateQuestionRendererComponent","dateValue","getLimitDate","maxDate","numberOfDaysToAdd","DropzoneSourceType","DropzoneFileComponent","safePipe","displayFile","Base64","URL","createObjectURL","getFileTypeAny","getFileTypeFromExtension","getFileInputTypeByMimeType","getNameFromUrl","getFileNameFromUrl","getReadableSize","fileSize","fileStorageKeyList","FileQuestionRendererComponent","initialAnswerValue","initialAnswerFileType","initialAnswer","parsedInitialBase64AnswersJson","lastStateInitialFileAnswers","isBase64Answer","parsedAnswer","initialAnswerValues","initialAnswerFileTypes","isEditMode","_o","storageKeyIndex","newAnswers","iS","atob","bFile","_p","filteredOldValue","P","_q","_r","_s","_t","_u","onSelectFile","displayMimeTypeError","sizeLimitInMB","isValidImageFile","isValidPDFFile","clearForm","fileBase64s","extensions","base64","ext","uniqueBase64s","getAccept","validImageExtentions","pdfMimeTypes","getTotalSize","totalSize","getTotalBase64FileSize","base64TotalSize","SignaturePadComponent","canvas","signaturePad","minWidth","maxWidth","clearPad","savePad","signatureAsPng","toDataURL","signatureAsSvg","SignaturePadQuestionRendererComponent","base64FileExtension","signaturePadController","sign","signTemplate","removeSign","saveSign","signature","setErrors","displayBase64","SingleQuestionRendererComponent","onValueChanges","ctx_r20","AnnouncementItemRendererComponent","isAnnouncementMandatory","DocumentMultiImageMode","RequiredDocumentRendererComponent","isRequiredDocument","rdc","minExpiryDate","filaAsBase64","additionalFiles","B","_v","_w","_x","ee","_y","X","ne","_z","_0","documentTypesSelector","documentTypeSelectorOldId","onSelectRequiredDocumentFile","isAdditionalFile","confirmChanges","__awaiter","validateAnswer","fileInfo","getFileInfo","isFormDirty","isDirty","triggerDirtyListener","updateAnswerTitle","updateAnswerExpireDate","isDocumentComponentValid","isAdditionalFilesAreValid","MaxFileSize","clearWithConfirm","additionalFile","removeAdditionalFile","onRemoveDocumentType","removeDocumentType","cancelFn","emptyAnswer","onSelectedDocumentType","displayInitialAnswerSrc","displayAdditionalFile","ItemsRendererComponent","SiteQuestionsViewModel","cacheServiceDirtyItemsListener","isInDirtyRendererItems","rendererDirtyItems","availableDocumentTypes","selectedDocumentTypeId","tmpArrayItems","checkinAnnouncements","additionalDocumentConfig","a_order","b_order","allowUsersToAttachAdditionalDocuments","groupList","isAnnouncementGroup","questionsData","draftFilledForm","qs","qm","SiteQuestionRendererViewModel","SiteQuestionViewModel","questionAnswers","be","It","Ln","lastStateAnswer","validator$","ie","finalAnswer","re","Ie","Ce","pipeSplitAnswer","Be","Z","pipeSplitExtensions","We","base64Answers","getMimeTypeFromExtension","approximateFileSizeFromBase64String","ke","updateQuestionShowFlags","_validation$","docController","sourceDocuments","questionDocument","controlDoc","cloneFileUrls","shift","notifyVisits","anonymousAttendanceKey","allUserDocumentTypes","_clearDocumentQuestionsByFlag","showFlagLastState","dirtyItem","isRefresh","storageKeyList","notModifiedStorageKeyList","finalAnswers","isUpdatingByUser","exit","getQuestionShowFlag","ans","isQuestionIsVisibleByCheckingConditions","callOnAnnouncementVisitEvent","callOnAnnouncementCheckedMandatorySignOffEvent","onClickAdditionalDocumentButton","onAddAdditionalDocumentToDocuments","selectedDocument","addAdditionalDocumentToDocumentTypesOutput","onRemoveAdditionalDocumentType","WorkflowFormRendererComponent","workflowModel","currentActivity","variableList","workflowVariables","variable","variableFormGroup","registerControl","selectedDate","isPastDate","currentDate","checkVariableDateValueIsPast","PermitScheduleType","DayOfWeek","NumberToWeekdayPipe","WeekDay","PermitScheduleItemComponent","permitSchedule","DaysOfWeekPipe","PermitScheduleSelectorComponent","weekDay","dateTime","fromHour","toHour","permitSchedules","_permitSchedules","updateFromTime","updateToTime","addSchedule","bsAddScheduleModalRef","changeScheduleMode","permitScheduleType","clearTimes","saveSchedule","validateSchedule","prependZero","permitSchedulesOutput","removeSchedule","schedule","resArray","_validateBooleanArray","AssetOperatorMode","ManageSiteAssetMode","AssetOperatorModeSelectorComponent","operatorRegistrationMode","operatorRegistrationModeNumberToEnum","assetOperatorMode","onlyTempAsset","manageSiteAssetMode","emitOperatorMode","isModeSelected","assetOperatorModeToShow","supplierHashLink","isDisableOperatorMode","getOperatorModeTitle","siteCompanyTitle","onChangeOperatorMode","operatorMode","operatorModeOutput","FormDataRendererComponent","supplierFormService","innerSubmitButtonMethod","validateAnswers","innerSubmitButtonCallback","getFormResponse","getFormsTimeoutHandler","clearTimeout","getForm","filledFormDataId","_filledFormDataId","validFormRegisterForValues","applyFor","setFormRegisterFor","registerFor","allParameters","_supplierId","_siteSupplierId","formName","_formName","_formType","onCloseButton","onCloseButtonClicked","_notifyVisits","_anonymousAttendanceKey","previewFormData","_previewFormData","previewRenderer","formQueryToFillFormMode","fillFormMap","resetDates","resetFormResponse","questionContainerValidationSubscription","questionContainerValidation$","questionContainerValid","formResponse","today","setHours","minStartDate","permitFormInfo","startDate","isEnableSupplierFormExpiryDate","setStartAndEndTimes","versionDate","setMinAndMaxAvailableDates","documentAnswers","resetDatesInResetAll","refreshDocuments","initializeFormSpecificControls","setDocumentFormControlForQuestions","service","qA","fe","formQ","removedDocumentAnswers","dA","formD","matchedDocumentType","userDocumentType","xe","additionalDocument","initialQuestionAnswers","defaultQuestionAnswers","me","uniqueKey","ResetAll","parseUTCDateTimeToLocalDateTime","endTime","getTimeOutOfDate","startTime","setDocumentAnswers","schedules","zoneControl","_1","zoneId","convertDocumentToFormControl","requiredDocumentFormArray","pairwise","prev","removeFromDocumentAnswers","isDateValid","endMinAvailableDate","startMaxAvailableDate","isUnvisitedMandatoryAnnouncements","forceViewMode","isRecall","permitSchedulesValidationResult","isDocumentVisible","docFormControl","initialDocumentAnswers","docType","ida","getDocumentAnswers","userInputList","finalDocumentAnswerList","userInputAnswer","permitZoneId","editFormInformationModel","fillFormMode","draft","updatePermitSchedulesValidationResult","updatePermitSchedules","isSupplierAnnouncement","isSupplierForm","visitStatus","isPreCheckIn","addSelectedDocumentToRequiredDocuments","baseOrder","removeDocumentFromRequiredDocuments","selectedDocumentsIds","isVisibleExpiryDate","FormTypeEnum","SupplierForm","AssetRegistration","AssetOperator","AssetOperation","isVisibleVersion","setOperatorMode","operatorFullName","operatorFirstName","operatorLastName","second","FilledFormEditComponent","displayModal","bsEditModalRef","updateFormInformationModel","formInformationModel","validateForm","formIsValid","updateFilledForm","operatorMobile","formDatamodel","assetId","temporarilyTool","onUpdateFormEmitter","GroupByPipe","collection","property","groupedCollection","reduce","previous","current","AnnouncementRendererComponent","_announcements","FormHistoryComponent","_formDataId","getHistory","logs","isDateLogValue","showLink","getLogDescription","newValue","AssetOperatorModePipe","ListOfOperatorRegistrationModePipe","assetOperatorModePipe","TimePipe","PermitStatusIconPipe","PermitStatusColorPipe","PermitStatusTitlePipe","FilledFormEntityStatusIconPipe","FilledFormEntityStatusColorPipe","SiteAssetRequestApproveStatusPipe","FormDataDetailsComponent","toastrService","_siteSupplierHashlink","updatePendingDisplayMode","showPendingControls","formDetail","entityStatusInfo","approveStatus","isSupplierUser","convertStringDatesToDate","isNewEndDateAvailable","editDate","isStartDate","isNewStartDateAvailable","newStartDate","openFormHistoryModal","formHistory","onUpdateForm","ctx_r69","QuestionAnswerComponent","onShowDisputeModal","disputeModal","showDisputHistory","questionAnswerInput","_questionAnswerInput","answerResult","isCheckInSelected","checkInAnswerResult","checkOutAnswerResult","completeAnswerDate","checkInAnswerMode","completeCheckInAnswerDate","checkOutAnswerMode","completeCheckOutAnswerDate","getData","showUserInformationPanel","setData","checkInQuestionAnswers","checkOutQuestionAnswers","siteAttendanceDocuments","accompanyingPersons","accompaniers","visitedAnnouncements","scannedItems","siteInductions","permitForms","supplierDocuments","siteAttendanceApprovalStatus","setUserInformationFields","getSiteInductionsFilledInfo","getAnnouncementTypeLabel","announcementType","needParentRefresh","resultOfApproveReject","onlySiteAttendanceDocuments","disputeModalRef","onUpdateAttachment","showCheckInHistory","showDisputeHistoryType","fullInduction","ExportAsFileType","ExportAsService","dateTimePipe","genderPipe","exportAs","rows","preFileName","currentdate","getCurrentDateTime","exportToCsv","separator","fieldName","csvContent","row","cell","cellType","FieldType","DateTime","Mobile","function","Blob","msSaveBlob","link","download","visibility","removeChild","is_date","item_r8","item_r16","UserActivityComponent","exportAsService","siteAttendance","selectedModel","report","hasCheckoutDate","exportAsCSV","FormTitlePipe","data_r46","ctx_r64","SiteActivityReportComponent","_selectedUserId","isReportMode","userIdValidator","searchQueryForm","prepareGridConfig","GridConfig","reportType","reportColumns","tableSettingKey","siteIdList","GridTemplate","accompaniersText","accompanierCount","businessName","businessAcn","businessAbn","announcementVisits","pad","num","openContactTracingModal","selectedSiteActivityReport","grid","getAnnouncementIconCSSClass","visit","onSelectedUser","getApprovalStatusFriendlyLabel","approvalStatusChangeBy","approvalStatusChangeDateTimeOffset","getQAs","reportItem","isCheckin","siteQuestionAnswers","SiteActivityComponent","SiteAttendanceComponent","setNow","DocumentTypeViewerUlComponent","isRoot","isRootInput","randIdPrefix","onOrderedList","DocumentTypeViewerComponent","rootDocuments","MultiImageModePipe","UserDocumentTypesComponent","addDocTypeReplaySub","addDocumentTypeReplay","types","addEditUserDocumentType","updateDocTypeReplaySub","updateDocumentTypeReplay","deleteDocTypeReplaySub","deleteDocumentTypeReplay","getTypes","selectedDocumentParent","isSelectable","enableTitle","enableExpireDate","multiImageMode","onSubmit","UserDocumentType","ignoreChildrenOfCurrentDocument","refModel","GodComponent","CompanyCategory","ProductPlanService","FilterByPropertyPipe","CompanyCategoryPipe","company_r29","ctx_r58","ctx_r66","ctx_r72","ctx_r77","ctx_r80","ctx_r81","ctx_r82","ctx_r93","ctx_r107","ctx_r112","ctx_r116","ctx_r118","ctx_r120","ManageCompaniesComponent","countrySerivce","productPlanService","getCompanies","newCompanyFormGroup","companyTypeId","timezone","getCompanyTypes","getTimeZones","timezones","getProductPlans","getTemplateCompanies","CheckWorkflowManagementPermission","getFormEntity","tempdata","companyTypes","templateCompanies","getCompanyTypeTitle","switchViewMode","company","getAllPlans","plans","getPlanTitle","plan","billingPeriod","setActivePlan","newPlanTitle","activePlan","addCompany","CompanyViewModel","timezoneId","cloneACompanyTemplate","errorEditModalMessage","selectedCompany","editCompanyFormGroup","originalMaxSites","smsSoftLimit","smsHardLimit","companySupervisorEmailAddress","emailListValidator","onSubmitEditForm","editCompany","onShowUsersModal","users","newUserFormGroup","isAdmin","getCompanyUserList","getCompanyUsers","addNewUser","newUser","addUser","onRemoveUser","removeUser","initEdit","selectedUserIsAdmin","inEdit","updateUserAdminState","sendingWelcomeEmail","sendWelcomeEmail","sendWelcomeFormGroup","onSendWelcomeEmail","onGetCompanyStats","stats","inGettingStatsProgress","bsCompanyStatsModalRef","getCompanyStats","GetYearMonth","stat","MonthNames","en","month_names","month","month_names_short","enableWorkflowManagement","getWorkflowManagementRoute","SiteAttendanceBlockedUserService","siteBlockedUserId","SiteAttendanceBlockedUserComponent","siteAttendanceBlockedUserService","SiteAttendanceBlockedUserViewModel","getBlockeUserList","getBlockeUsers","blockedUsers","initNew","addNewMode","blockedUser","addUpdateBlockedUser","isValidate","UserSystem","AcademyService","system","ManageVideosComponent","academyService","videos","_videos","f1","f2","category","f3","pageURL","orderByField","orderDesc","searchFormGroup","onEdit","videoURL","imageURL","selectedVideo","removeVideo","addVideo","editVideo","getSystemName","userSystems","LightBoxComponent","resizeSubject","videoPlayerHeight","modal","aspectRatio","onclose","videoUrl","video","VideoListComponent","videoLists","getVideos","videoList","getCategorizedList","onResize","windowsSize$","onhide","onVideoCardClick","CheckInMode","RequestAttendanceMode","RequestSource","UserSelectorComponent","finalUser","e168Validator2","inputChangeObservable","userChange","onInputChange","resetFirstnameLastname","onUserChange","emittedUser","value1","value2","SupplierDocumentConfigMode","SupplierDocumentDescriptionViewerComponent","getDescriptionSplittedByNewLine","onDisplayDescription","SiteSupplierDocumentVersionCommentsComponent","comments","commentsList","displayCommentsModal","commentsModalRef","closeCommentsModal","displayAddNewCommentModal","addNewCommentModalRef","closeNewCommentModal","isNewCommentFormValid","comment","hasAcknowledgment","submitNewComment","hasAcknowledgement","notifySupplier","resetNewCommentControls","SupplierDocumentRendererComponent","isSignMode","supplierDocumentConfigMode","_documents","reqValidators","fc","signOffMode","getAnswers","signatureBase64","isConfirmed","viewedFiles","forceViewSupplierDocumentsBeforeSignOff","fileUrlElement","forcedViewSupplierDocumentFilesList","validateFCView","viewedItems","supplierDocumentFiles","currentCustomFormControlToSign","signModalRef","SiteRequiredRenderType","SiteRequiredFieldType","SiteRequiredFieldState","abn","acn","UserBusinessService","nameOrAbnOrAcn","UserBusinessComponent","userBusinessService","currentBusiness","_currentBusiness","lookUpBusinessList","getAddressSuggestionListBySessionKey","onSelectBusiness","selectedBusiness","resetAll","postcode","typedBusiness","ToAnyPipe","RequiredFieldRendererComponent","_valueChanged","notifyChanges","requiredFields","models","fieldType","getValidator","supplierChanged","fieldKey","getRenderType","siteRequiredFieldTypes","siteRequiredRenderTypes","Input","DropDown","Business","Supplier","EmergencyContact","siteRequiredFieldStates","mandatory","validatedMandatory","validatedMandatoryValidator","getEntries","cctrl","getFixedValue","onShowBusinessAutoComplete","businessControl","newBusiness","emergencyControl","newPerson","SiteAttendanceAccompanierModel","AccompanierMode","AccompanyPersonComponent","peopleCount","userInputPeopleCountFormControl","peopleFormArray","updatePeopleCount","editPeopleCount","userInputPeopleCount","personList","person","isDisablePeopleCount","accompanyData$","_accompanyData$","pushData","accompanierMode","addNewPerson","AccompanyPeopleResult","isFormArrayValid","persons","removePerson","personFormControl","InductionRendererComponent","_induction","resetInduction","manageDocuments","_allUserDocumentTypes","notEmptyFormControls","relatedFormControl","notEmptyFormControl","isValidDocuments","isValidQuestions","isValidAnnouncements","skipped","onSkipInductionStatusChanged","skip","onUpdateVisitedAnnouncements","onAddDocumentToDocuments","addDocumentToDocumentTypesOutput","reqDocument","removeDocumentFromRequiredDocumentsOutput","onAnnouncementCheckedMandatorySignOff","ManualCheckinComponent","selectedVisitorType","selectedVisitorTypeFormControl","userInfoFormGroup","loadUserInformation","getStoredAnonymousUserInfo","countryRegion","requiredFieldValues","json","UserInfoStoreKey","accompanyPeopleResult","isReadyToGetCheckInData","siteVisitorTypes","onUpdateUserDocumentsbySupplier","selectedSupplierId","siteVisitorTypeId","checkInUserId","updateRequiredFields","updateQuestions","hasPermissionToAddSupplierDocumentComment","supplierDocCommentAcknowledgementText","supplierCheckinData","updateSupplierQuestions","fetchSupplierCompanyDocumentTypes","supplierCompanyId","supplierCompanyAllUserDocumentTypes","resetQuestionRenderer","supplierQuestionContainerValidationSubscription","supplierQuestionContainerValid","supplierQuestions","supplierQuestionContainerValidation$","supplierAnswers","resetRequiredFieldContainer","requiredFieldContainerValidationSubscription","requiredFieldRenderer$","isSiteRequiredFieldContainerValid","isValidSupplierDocuments","supplierRequiredDocumentFormArray","isAllAnnouncementsVisitedAndSignedOff","isAllSupplierAnnouncementsVisitedAndSignedOff","isInductionsValid","isSupplierInductionsValid","attendanceFieldsRef","supplierDocumentRenderer","onCheckin","getUploadedDocumentsFromFormArray","supplierInductions","prepareInductionDocumentAnswers","Mode","siteAttendanceInfo","visitorTypeId","signedSupplierDocumentTypeVersions","supplierVisitedAnnouncements","requestSource","successMessage","resetForms","needToUpdateAttendanceCount","storeUserInformation","ind","documentsAnswers","indDoc","newData","savedData","birthDay","getCalendarDateAsStarndardFormat","dateParts","substr","allowComminiucateWithUser","isSelectedVisitorTypeValid","addDocumentToInductionDocuments","isSupplierInduction","inductionsSource","inductionIndex","findInduction","newInduction","removeDocumentFromInductionDocuments","supplierRequiredDocumentFormControls","supRes","onInductionAnnouncementCheckedMandatorySignOff","inductionAnnouncementVisit","isSupplier","onInductionAnnouncementVisit","indectionAnnouncementVisit","isSetSupplierCheckinData","SiteQuestionService","extractParamsFromModel","siteQuestioId","siteQuestionIds","GetHostCheckOutInformation","GetQuestionsToCheckOutForAnonymousUser","ManualCheckoutComponent","siteQuestionService","_questions","_supplierQuestions","checkoutSelected","tabSelected","questions$","attendees","_attendees","supplierQuestions$","selectedAttendee","onCheckout","supplierCheckOutData","onQueryChange","attendeesCountUpdate","openQuestionAnswerModal","PreCheckInListComponent","fetchPendingList","serverResult","finaliseOrCancelPreCheckin","isConfirm","confirmRes","preSiteAttendanceId","ManualCheckComponent","siteListPermission","tabs","updateAttendanceCount","attendeesCountUpdated","checkInCount","onSelectCheckout","NotFoundPageComponent","CompanyGuardService","canActivate","routerState","BaseSiteCompanyViewModel","PermissionModeEnum","FileUploadAcceptType","CompanyRoleService","getCompanyPermissionMode","setCompanyRoles","addCompanyRole","updateCompanyRole","getCompanyRoles","getCompanyRolesByCompanyId","deleteCompanyRole","updateRolePermissions","CompanyUserService","ImportUsers","UpdateCompanyUser","RoleSelectorComponent","companyRoleService","roles","selectedRoles","companyRoleId","CheckListFormControlComponent","cpcs","cfc","getCustomFormControl","FileUploadComponent","host","emitFiles","localFile","accept","onClear","isValidCSVFile","maxSize","ctx_r85","CompanyUserComponent","companyUserService","initComponentData","fileFormControl","FormData","import","currentCompanyName","companyUsers","getCurrentCompanyUsers","companyPermissions","getPermissions","companyPermissionMode","companyUserPermissions","up","onNewCompanyUser","companyUser","CompanyUserViewModel","addToFrequentUser","newUserPermissionsFormControl","addCompanyUserForm","fillCompanyUser","cUser","addCompanyUser","combinePermissions","onAddUserToFrequentUserList","errResponse","selectedPermissions","editUserPermissionFormGroup","companyRoles","isCurrentUserIsAdmin","isValidMobile","importData","onClearForm","ok","modalHandle","openImportUserModal","getPermissionLabels","getRoles","getToolTipCount","getPermissionCount","updateRoles","updateNewUserRoles","SiteAttendanceTriggerResultService","isFlagged","FlaggedUserComponent","siteAttendanceTriggerResultService","SiteAttendanceTriggerResultSearchModel","serachModel","isRejected","isReviewed","geSiteAttendanceTriggerResults","getSiteAttendanceTriggerResults","flaggedUsersList","originalFlaggedUsersList","selectedUserIsReviewed","flaggedUser","changeReviewStatus","updateFlaggState","selectUser","setFilterLabel","isFlaggedText","selectedSiteName","fullName","toLocaleString","dateChanges","CompanyOwnerComponent","BillingComponent","getActivePlan","activeProductPlan","activeSiteCountLabel","activeSiteCount","averageCheckInCountPerDayLabel","averageCheckInCountPerDay","numberOfQuestionLabel","numberOfQuestions","numberOfUserLabel","numberOfUsers","ClipboardBoxComponent","onCopy","inputId","setSelectionRange","execCommand","copyToClipboard","showCopiedMessage","copied","TwoFactorVerificationModePipe","ctx_r62","UserProfileComponent","profileInProccess","userProfile","profileFormGroup","gender","industryTypeId","profileImageBase64","profileImage","userBusiness","emergencyContact","emergencyContactAsJson","twoFactorVerificationMode","initEmailViewMode","userBusinesses","isActive2fa","currentTwoFactorMode","hasTotpSecretKey","useCurrentTotpSecretKey","industryTypeList","imageSource","onPickImage","imageSourceBase64","imageViewMode","onDiscardImageChanges","croppedImage","onSaveProfileChanges","industryStr","industryId","birthday","utcOffset","editProfile","isVerificationEmailSent","imageCropped","loadImageFailed","onRemoveProfilePicture","removeProfilePicture","onAddBusiness","newItemModel","onDelete","onSendVerificationEmail","sendVerificationEmail","emailViewMode","isEmergencyContactValid","isShowQr","showQrCodeModal","qrCodeModalref","totpGenerateQrCode","manualEntryKey","qrCode","qrCodeSetupImageUrl","secretKey","totpVerifyCode","userCode","verifyCode","useCurrentSecretKey","closeQr","setUseAuthentication","repeatPassword","ChangePasswordComponent","passwordFormGroup","currentPassword","repeatPasswordGroup","repeatPasswordValidator","onChangePassword","passwordInProccess","changePassword","UserCardComponent","_userId","getAccessibleUserBasicProfile","CompanyProfileComponent","companyHasFormFeature","getCurrentCompanyProfile","contactUserId","shareDataWithVicVisitation","imageChange","updateCurrentCompanyProfile","AnswerDeletionPolicy","DataDeletionPolicy","DataRetentionPolicyStatus","DocumentDeletionPolicy","DataRetentionPolicyService","getPolicies","deletePolicy","policyId","policyStatusChange","updatePolicy","addPolicy","DataRetentionPolicyComponent","dataRetentionPolicyService","isCompanyPolicy","daysBefore","deleteAttendance","dataDeletionPolicy","documentDeletionPolicy","answerDeletionPolicy","DataDeletionPolicyToLabel","DataDeletionPolicyToCssClass","DocumentDeletionPolicyToLabel","DocumentDeletionPolicyToCssClass","AnswerDeletionPolicyToLabel","AnswerDeletionPolicyToCssClass","deletionPolicies","formGroupIsValid","siteIds","resetFormGroup","onCloseModal","getPolicyStatus","getPolicyBooleanStatus","onPolicyStatusChange","policy","onRemovePolicy","onSiteSelect","onRemoveSite","boolToLabel","onAddNewPolicy","onUpdatePolicy","getFakeSwitchFormControl","fakeStatusSwitchFormControl","ManageInventoryService","companyInventoryConfigModel","isAssignField","dynamicFields","addToolCategory","removeToolCategory","addToolDynamicField","removeToolDynamicField","addToolStatus","removeToolStatus","getInventoryLocations","addInventoryLocation","removeInventoryLocation","getCompanyInventoryConfig","getToolStatusTriggers","toolStatusId","removeToolStatusTrigger","triggerId","updateToolStatusTrigger","addToolStatusTrigger","changeStatusToolStatusTrigger","getToolDynamicFieldTriggers","toolDynamicFieldId","removeToolDynamicFieldTrigger","updateToolDynamicFieldTrigger","addToolDynamicFieldTrigger","changeStatusToolDynamicFieldTrigger","addCategoryOperationForm","removeCategoryOperationForm","setAsDefaultInventoryLocation","updateInventoryLocation","toggleInventoryLocationStatus","addGlobalToolDynamicField","removeGlobalToolDynamicField","FormInjectorComponent","availableForms","addedForms","onAddForm","SortableComponent","updateChanges","onChangeOrderInternal","changeOrderTimer","onChangeOrder","CheckInApprovalMode","CompareOperator","LocationOverrideMode","InventoryDynamicFieldTriggerEditorComponent","manageInventoryService","now","_trigger","upsert","toolDynamicField","close","getCompareOperatorItems","CompareOperatorFriendlyLabel","InventoryDynamicFieldTriggersComponent","refreshTriggers","getTriggerConditionFriendlyName","getDynamicFieldTriggerFriendlyName","onToolDynamicFieldTriggerStateChange","onAddToolDynamicFieldTrigger","modalTemplate","currentTrigger","editModalHandle","onEditToolDynamicFieldTrigger","onRemoveToolDynamicFieldTrigger","onCloseInventoryDynamicFieldTriggerEditor","ToolDynamicFieldTypePipe","ManageToolCategoriesComponent","isBarcode","isSearchable","isLongText","isGlobalField","toolDynamicFieldformGroup","refresh","getUsage","onAddCategory","loc","onOpenToolDynamicField","openedAccordion","catId","handlerToolDynamicField","onGlobalToolDynamicFieldSelect","selectedGlobalToolDynamicField","isAddToolDynamicFieldButtonDisabled","onRemoveToolDynamicField","cat","onAddToolDynamicField","validateInfos","resetForm","onToolDynamicFieldTypeChange","onChangeDynamicFieldOrder","changeDynamicFieldOrder","isAccordionOpen","onShowTriggers","currentDynamicField","dynamicFieldTriggersModalRef","onCloseStatusTriggers","onOpenNewOperationFormModal","operationForms","ManageInventoryLocationsComponent","invertoryLocations","onSetAsDefaultLocation","onClickUpdateItem","selectedInventoryLocationNameFormControl","selectedInventoryLocation","updateName","InventoryStatusTriggerEditorComponent","toolStatus","InventoryStatusTriggersComponent","_toolStatus","onToolStatusTriggerStateChange","onAddToolStatusTrigger","onEditToolStatusTrigger","onRemoveToolStatusTrigger","onCloseInventoryStatusTriggerEditor","ManageToolStatusesComponent","toolStatuses","currentStatus","statusTriggersModalRef","ManageInventoryComponent","companyInventoryConfig","changeCompanyEnduserPermissions","saveCompanyInventoryConfig","ManageVisitorTypeComponent","bsModalSerive","getAllVisitorType","addNewVisitorType","newVisitorTypeGroup","addVisitorType","onRemoveModal","removeVisitorType","editVisitorTypeGroup","onUpdateVisitorType","updateVisitorType","entity","RegionService","ManageRegionComponent","regionService","_getRegions","regionId","regionName","resetFormGroups","getRegions","regions","onInsert","addRegion","removeRegion","updateRegion","SupplierDocumentReviewMode","SupplierDocumentApprovalMode","SupplierDocumentExpiryNotificationPeriodType","CompanySettingService","checkAndSaveAuthorization","updateProcoreConfig","getTokenInfo","toggleProcoreEnable","resetProcoreSchedule","saveMyobConfiguration","validateAndSaveMyobConfiguration","getMyobConfiguration","getMyobPaymentCategories","getMyobCompanies","getSupplierDocumentConfiguration","saveSupplierDocumentConfiguration","saveSupplierDocumentEmailReminderInfo","saveSupplierDocumentexpiryEmailnotificationReminderInfo","getHandsHQConfiguration","validateAndSaveHandsHQConfiguration","inactiveHandsHQIntegration","getBioStarConfiguration","validateAndSaveBiostarConfiguration","GetProcorePermissionsProjects","GetProjectPermissions","SupplierDocumentApprovalModePipe","SupplierDocumentReviewModePipe","SupplierDocumentExpiryNotificationPeriodTypePipe","SupplierDocumentReminderComponent","companySettingService","isActiveSupplierDocEmailReminder","supplierDocEmailReminderAtDaysCount","supplierDocEmailReminderSubject","supplierDocEmailReminderBody","supplierDocumentApprovalMode","forceEndUserToSign","supplierDocumentReviewMode","supplierDocumentRequestEmailBody","supplierFormsSubmitRequestEmailBody","supplierFullOnboardingEmailBody","supplierDocCommentEmailBody","offsiteOnboardingEmailContent","supplierDocumentExpiryNotificationPeriod","supplierDocumentExpiryNotificationAnyWorkflows","supplierDocumentWorkflowKinds","supplierDocExpiryNotificationEmailReminderSubject","supplierDocExpiryNotificationEmailReminderBody","UpdateFormValidity","supplierDocumentEmailReminder","emailReminderInfo","companySupplierDocumentConfiguration","supplierDocumentExpiryNotificationReminderModel","documentExpiryNotificationReminderInfo","fillFormGroup","getWorkflows","workflowDocumentKinds","isLegacyMode","supplierDocumentKindIdList","documentKindCheckList","getFromFormGroup","onForceViewSupplierDocumentsBeforeSignOffChanged","onSaveSupplierDocumentEmailReminder","ValidateForms","isValidForm","maxLengthErrorList","onSaveCompanySupplierDocumentConfiguration","onChangeSupplierDocumentConfigMode","supplierDocumentExpiryNotificationEmailIsValid","onSaveSupplierDocumentExpiryNotificationEmailReminder","IsSpecificWorkflow","SignOffMode","SupplierDocumentAccessMode","SupplierDocumentAmendmentMode","SupplierDocumentCommentMode","SupplierDocumentExpireDateMode","WorkflowTemplateAccessMode","WorkflowTemplateService","CompanyWorkflowTemplateService","workflowSubType","WorkflowTypePipe","MessageType","MessageTypePipe","ctx_r105","WorkflowRendererComponent","workflowTemplateService","companyWorkflowTemplateService","_workflowSubType","filterWorkflowTemplates","isInEditMode","isLockedWorkflowSection","selectedWorkflowTemplateId","_selectedWorkflowTemplateId","dataModel","workflowTemplateId","manipulatePlaceholders","defaultPlaceHolderValues","_defaultPlaceHolderValues","defaultStartVariableValues","_defaultStartVariableValues","currentWorkflowAccessMode","customWorkflowTitle","_customWorkflowTitle","workflowTitle","_workflowType","expireDateMode","_selectedSupplierDocumentExpireDateMode","selectedExpireDateMode","documentKinds","showBasicAdvancedSwitch","workflowInfo","placeholderList","accessMode","getAllWorkflowTemplate","workflowTemplateList","workflowTemplateViewModel","isStandAloneMode","onWorkflowTypeSubTypeChange","filteredWorkflowTemplateList","getPlaceHolderValue","isActiveAdvancedMode","startVariables","expireDateKey","typeString","commandList","parsedValue","RoleList","ConfirmMessage","CssClass","Key","Placeholder","onAdvancedModeChanged","isNotification","showErrorMessage","warning","getWorkflowTemplateModel","saveWorkflowTemplate","addCompanyWorkflowTemplate","SupplierDocumentAccessModePipe","SupplierDocumentExpiryDateModePipe","SupplierDocumentSignOffModePipe","SupplierDocumentCommentModePipe","SupplierDocumentAmendmentModePipe","DocumentKindAddEditComponent","isLockedDocumentKind","documentKind","workflowRenderer","_workflowRenderer","commentMode","amendmentMode","AbstractControl","signOffModeFormControl","updateWorkflowExpiryMode","updateWorkflowTitle","expiryMode","showSignOff","showWorkflowSection","getDocumentKind","workflowSpecification","inEditProgress","onClosePopup","onSaveDocumentKind","YesNoPipe","DocumentKindManagerComponent","isGodUserMode","initialCompanyId","loadKindList","selectedCompanyId","isCurrentCompanyManagement","showNewKindButton","selectedKind","ManageSupplierDocumentsComponent","showDocumentKindTab","CompanyDocumentTypeComponent","deleteDocTypeSub","companyDocumentTypes","removeCompanyDocumentType","selectedDocumentType","keyA","keyB","ignoreDocumentTypeIds","isAvailable","addCompanyDocumentType","PermitOpenPolicy","PermitStartDatePolicyEnum","emptyCompanyEvacuationSettings","evacuationDefaultSMSMessage","evacuationDefaultNotificationMessage","evacuationIsByDefaultOn","evacuationMessageType","EvacuationService","getEvacuations","getEvacuation","evacuationId","getEvacuationLogs","exportEvacuations","getSettings","settings","exportEvacuationPeople","exportEvacuationPdf","EvacuationSettingEditorComponent","evacuationService","loadEvacuationSettings","isLoading","EvacuationSettingFormControl","patchValue","evacuationSetting","constructFormGroup","updateEvacuation","updatedSettings","AccessControlService","getWhiteListUsers","addNewWhiteListUser","newRecord","removeNewWhiteListUser","whiteUserId","AccessControlWhiteListUsersComponent","accessControlService","modelService","loadWhiteListUsers","whiteListUsers","onSiteIdSelect","removeWhiteListUser","PermitStartDatePolicyPipe","PermitOpenPolicyPipe","CompanyFeatureConfigurationComponent","permitOpenPolicy","permitStartDateOffsetInDays","minRequiredExpiryForDocuments","visitorCanDisputeCheckIns","contactTitle","contactFullName","contactNumber","disableLocationRequirementForKioskMode","enableReportsOnMobileApp","lastMinExpiry","getCompanyPermitConfiguration","getCompanyInductionsAndCheckinConfiguration","getCompanyReportsConfiguration","getCompanyKioskModeConfiguration","permitFormGroup","onSaveCompanyPermitConfiguration","updateCompanyPermitConfiguration","minRequiredExpiryForDocumentsFocusout","InductionsAndCheckInFormGroup","getCompanyInductionsAndCheckInConfiguration","contactInformation","contactInformationAsJson","e168ValidatorNullableCompanyPhoneNumber","onSaveInductionsAndCheckInConfiguration","companyContactInformationAsJson","updateCompanyInductionsAndCheckInConfiguration","ReportsFormGroup","onSaveReportsConfiguration","updateCompanyReportsConfiguration","KioskModeFormGroup","onSaveKioskModeConfiguration","saveValue","formValue","updateCompanyKioskModeConfiguration","SiteUserService","getSiteUsers","addSiteUser","removeSiteUser","siteUserId","updateSiteUser","PermissionModePipe","ImportSource","ImportSourcePipe","fullAccess","PermissionsSettingsComponent","siteUserService","permissionMode","roleName","roleId","getAllPermissions","prepareSitePermissions","prepareCompanyPermissions","companyKeys","siteKeys","companyKey","siteKey","siteUserPermissions","selectedCompanyRoleName","selectedRoleToUpdateName","selectedRoleToUpdatePermissions","roleDefinitionForm","rolePermissionsForm","resetCompanyPermissions","resetSitePermissions","submitPermissionMode","upsertCompanyRole","isUpdate","displayUpdateRoleNameInput","role","displayUpdateRolePermissionsModal","isFullAccess","deleteRole","selectedPermissionsCount","tips","hasAnySitePermissionSelected","hasAnyCompanyPermissionSelected","totalPermissionsKeys","CompanySettingsComponent","ProductPlanSubscriptionType","SubscriptionTypePipePipe","ManagePlansComponent","stripePlanId","pricePerMonth","priceUnit","subscriptionType","supportViaEmail","support24x7","personalisedTraining","integrationApi","isPublic","exportFeature","enableExportFeature","requiredDocumentFieldFeature","enableRequiredDocumentFieldFeature","schaduleReportFeature","enableSchaduleReportFeature","announcementsFeature","enableAnnouncementsFeature","scannablesFeature","enableScannablesFeature","visitorTypesFeature","enableVisitorTypesFeature","siteHostsFeature","enableSiteHostsFeature","automationFeature","enableAutomationFeature","kioskFeature","enableKioskFeature","preCheckInFeature","enablePreCheckInFeature","inventory","enableInventoryFeature","_2","enableFormFeature","_3","accessControl","enableAccessControl","_4","siteBriefing","enableSiteBriefing","_5","earlyAccess","enableEarlyAccess","_6","autoRenew","enableSiteBriefingAutoRenew","_7","addUpdatePlan","SiteAutomationsComponent","PageSize","A3","A4","A5","Custom","layout","size0","getPageSize","PageLayout","Portrait","Landscape","CardLayoutService","DraggableDirective","elem","RectInfo","interact","inertia","maxPerElement","modifiers","restriction","endOnly","autoScroll","listeners","move","dragMoveListener","end","resizable","edges","right","bottom","outer","isResize","getAttribute","rect","rectInfo","deltaRect","dx","dy","webkitTransform","DraggableElementPageComponent","printLayout","_cardLayout","getPageSizeName","removeElement","elements","openSettingPage","LayoutPageComponent","_layout","CardLayout","newId","savedLayouts","apply","getPageLayoutName","updateInsert","saved","pageSizeChange","_pageLayout","CardDesignerComponent","cardLayoutService","loadlayouts","elementRepository","_elemntRepository","currentLayout","modelchange","selectedLayout","layoutList","newModel","layoutChanged","currentLayoutId","updateCardLayout","getCardLayouts","cardLayouts","cardElements","selectedLayoutId","addElementToLayout","confirmRemoveLayout","removeCardLayout","savedLayout","obj1","obj2","isEquall","saveLayout","openConfigLayout","layoutpage","getPageSizeWithLayout","layoutForConfig","addCardLayout","resizeElements","changed","chgangedPercent","AnonymousComponent","AnonymousCheckComponent","AnonymousCheckinComponent","initErrorMessage","SuccessfullAnonymousCheckinComponent","BaseIndustryType","ManageIndustryTypesComponent","newIndustryFormGroup","getIndustryTypes","addIndustryType","newIndustryType","IndustryTypeModel","industryType","IndustryTypeViewModel","selectedIndustryType","editIndustryFormGroup","editIndustryType","currentModel","cm","revertToSavedState","save","switchMode","AnnouncementProcessStatus","AnnouncementMode","SiteAnnouncementDisplayTime","FileCategory","contentAccepts","AnnouncementDisplayModeEnum","SasUploadService","upload","onProgress","sasStore","SasStore","pipeline","newPipeline","AnonymousCredential","factories","unshift","SasUpdatePolicyFactory","blockBlobClient","BlockBlobClient","fileLength","uploadBrowserData","maxSingleShotSize","loaded","loadedBytes","total","sasCache","getValidSASForBlob","blobURL","isSasStillValidInNext2Mins","getNewSasForBlob","sas","expiryStringInSas","searchParams","nextPolicy","SasUpdatePolicy","BaseRequestPolicy","sendRequest","urlObj","_nextPolicy","AnnouncementDisplayModePipe","CreateAnnouncementComponent","sasUploadService","_model","createNewEditableObject","isFileModel","onTypeChanged","defaultFileType","EditableItem","AnyTime","displayMode","announcementDisplayMode","progress","callbackResult","announcementUpdated","announcementCreated","uploadSuccess","reseted","editableModel","uploadEventHandler","errorEventHandler","fileCategory","uploadResult","_response","dataStorageKey","storageKey","ctype","isUpdateMode","textTypes","whiteListFileTypes","getValidFileExtensions","typeExtensions","isSelectedFileCompatibleWithType","isDataModel","onFileChange","resetTemporyProperties","validateModel","onDiscardChanges","Youtube","getFileInputAccept","announcementGroups$","announcementGroupLoader","onSelectAnnouncementGroup","SiteSelectorWithExternalComponent","SortPipe","desc","fac","section","SiteAnnouncementDisplayTimePipe","AnnouncementModePipe","SiteAnnouncementForceViewModePipe","AnnouncementComponent","sortColumn","loadAnnouncements","newAnnouncement","Pdf","onlyActiveItems","HttpEventType","errorHandler","onSwitchMode","Audio","Image","Video","onViewSites","selectAnnouncement","sitesOfAnnouncement","del","onAnnouncementCreated","onAnnouncementUpdated","isModelDataUrl","removeFromAllSitesOfCompany","openAddToAllSitesOfCompanyModal","selectedAnnouncement","newAnnouncementForAll","validFrom","validTo","announcementMode","Silent","Disable","displayTime","AfterCheckin","addToAllSiteModalref","addToAllSitesOfCompanyModal","WhileCheckin","onChangeSelectedSite","openAddSitesToAnnouncement","addSiteToAnnouncementClick","RemoveSiteFromAnnouncement","siteAnnouncementId","AnnouncementManagerComponent","ScannableService","addGroup","removeGroup","getGroups","getItems","updateItem","updateGroup","ScannableItemsComponent","scannableService","scannableGroupId","groupId","groups","changeGroup","skipLocationChange","onAddItem","signedUploadInfoModel","getGroupName","getGroupLabel","onRemoveItem","onShowUpdateItem","removeFile","onUpdateItem","ScannableGroupsComponent","allowMultiScan","onRemoveGroup","onUpdateGroup","selectedGroup","onManageSitesModal","MultipleCheckinType","AutomaticCheckInMode","MaxPeopleOnSiteMode","AutoCheckOutType","ImportRecordState","QrCodeCheckinMode","NicyNullPipe","CheckinLocationMode","CheckinLocationModePipe","AutomaticCheckinModePipe","isShortName","QRCodeCheckinModePipe","AccompanierModePipe","ImportSitesComponent","isImport","geolocations","isDataValid","validationStatus","importRecordStates","Valid","isImportModelValid","index1","errorMessages","index2","memberNames","onImport","fieldIsValid","isValidSite","showGetGoegrathicData","index3","member","getCheckinApprovalModeFriendlyMode","getcheckInLocationOverrideInKioskMode","getcheckInLocationOverrideInKioskModeFriendlyMode","getLocation","ScheduleReportModePipe","ScheduleReportTypePipe","ReportDeliveryTypePipe","ReportPeriodTypePipe","MyScheduledReportsComponent","loadReports","reports","removeReport","handleNoAccess","PermissionGuardService","BasePermissionGuardService","OverLappedPermissionGuardService","SitesPageGuardService","CompanyAdminGuardService","SiteAdminGuardService","GodUserGuardService","routeData","godPermission","isFrequentUser","ctx_r84","ctx_r86","SiteUserComponent","initData","siteUsers","deleteUser","onAddSiteUser","editMode","siteUserFormGroup","onUpdateSiteUser","siteUser","siteIdChanged","getPermissionTooltip","addToFrequentUsers","AnonymousCheckoutComponent","activeReloadStatus","clearReloadStatus","getAnonymousCheckInStatus","reloadHandle","getAnonymousUserProfileWithCheckIns","nocheckinFound","userAttendances","onCheckOut","selectedStatus","anonymousCheckInKey","checkout","longtitude","FeatureGuardService","allowForTemplates","ToFormGroupPipe","AdditionalCompanyHostComponent","initFormGroup","hosts","getHosts","toFormGroup","MinimalAddSiteComponent","logoFile","menuPdfFile","serviceOrderingWebSite","newFormGroup","getSites","logoBase64","menuPdfBase64","currentActiveSites","QuickSetupComponent","layoutSerivce","onQuickSetup","psites","inprogress","_r0","SendMessageStatus","EmergencyAlarmComponent","isCompanyAdminOrGod","getTotalCountOfCheckInSiteUser","sendMessage","resultMessage","changeSite","onAllSiteModeSelected","isAllSiteMode","HostPushNotificationComponent","isSmsMode","onSendPushNotification","CompanyEmployeeService","getEmployeeDocuments","employeeId","RegionSelectorComponent","_regionId","ngOnChanges","regionSelect","regionIdSelect","selectedRegion","region","getAccessableRegions","setResponse","regions$","onRegionLoaded","CompanyEmployeeComponent","companyEmployeeService","onRegionSelect","companyEmployee","companyEmployees","getCurrentCompanyEmployees","onNewCompanyEmployee","CompanyEmployeeViewModel","employeeNo","fillCompanyEmployee","addCompanyEmployee","addEmployee","employee","removeEmployee","openImportEmployeeModal","onViewEmployeeDocuments","inDocProgress","employeeToViewDocuments","docs","DocumentReportComponent","showAllCards","filterCheckInDateRanges","LinkToCompanyStatus","CompanySupplierComponent","contactName","isInUpdating","filteredSuppliers","supplierFilter","companySupplierBusinesses","showArchivedSuppliers","getSupplierModel","onEditSupplier","supplier","openUpsertModal","onAddSupplier","openInvitationModal","selectedSupplier","invitationEmail","invitationMobile","companySupplierId","sendInvitationToCompany","validateInvitationFields","resendSupplierEmail","EditCompanySupplierComponent","canAddBusiness","license","getUserDocumentTypes","inGettingBussiness","businesses","temporaryAddBusiness","business","licenseNumber","lookupUserBusiness","inGettingDocumentTypes","documentFormGroup","userDocumentTypeId","getTypeLabel","AssignToolType","TextToolFieldRendererComponent","toolDynamicFieldType","c_r6","ImageToolFieldRendererComponent","_control","fileAcceptType","images","tempData","addImageInput","updateValues","removeImageInput","nc","fileName","removeImage","image","ToolFieldRendererComponent","_fields","updateFormValues","_values","getCustomFormControlItem","getFieldValues","toToolDynamicFieldModel","toCustomFormControl","UpsertInventoryAssetComponent","statusId","toUserId","toLocationId","assignType","isTemporarilyAsset","isTempAsset","updateOnChangeTempStatus","asset","_asset","resetUserLocation","updateMainImageSource","assetConfiguration","isRequiredShortTermAssetImage","isRequiredAssetImage","categories","statuses","currentStatusId","onEditAsset","isEditFormValid","mainImageFileInfo","fieldValues","toolFieldRenderer","toolDynamicFieldValues","closeMe","createQueryModel","toSiteId","onAddAsset","showSubmitButton","getCurrentCategory","isAddFormValid","isTempAddFormValid","onLocationChange","showRegionSelectorComponent","showAssetAdditionalInfo","additionalData","onViewAssetAdditionalInfo","ToolAssignHistoryComponent","tool","getToolHistory","requestModel","createRequestModel","ctx_r60","InventoryToolReportComponent","dynamicFieldValues","assignDynamicFieldValues","imagesURLs","currentAssignedUserMobile","currentAssignedLocation","openUpsertAssetModal","currentAsset","upsertAssetModalRef","backdrop","hideUpsertAssetModal","selectedItemToViewHistory","onRemoveAsset","FormScope","ItemsMixtureTypeEnum","MultipleDragDropSortableComponent","longPressTime","verifyLongPress","multiSelect","verifyDragStarted","ctrlMode","firstContainer","selectDrag","dragStarted","dragEnded","dropListDropped","dragList","dragListCopy","dragErase","Symbol","previousContainer","container","currentIndex","previousIndex","otherListCopy","querySelectorAll","onScrollEventInternal","onScrollEvent","drop","itemSelected","isSelected","moveItemInArray","transferArrayItem","AnnouncementForceViewModeSelectorComponent","emitOutput","OptionalMandatoryPipe","OptionalMandatorySelectorComponent","selectedState","onChangeSelectedState","DocumentSelectorComponent","availableDocuments","addedDocuments","ad","onAddDocument","AnnouncementSelectorComponent","availableAnnouncements","filteredArray","array_el","addedAnnouncements","anotherOne_el","setState","pendingAnnouncement","addAnnouncement","ItemsMixtureComponent","documentTypeService","winSize","innerWidth","isXLarge","scrollLocked","scrollToByElementId","scrollTo","selectedDocumentIds","selectedAnnouncementIds","selectedQuestionIds","_this","selectedDocs","allDocs","allDocuments","selectedDocuments","allAnnouncements","orderableItems","documentState","announcementState","getAddedAnnouncements","getAnnouncementById","getAddedDocuments","getDocumentById","onShowAddDocumentsModal","documentModalRef","onShowAddAnnouncementsModal","announcementModalRef","removeSelectedAnnouncementConfirmation","removeSelectedAnnouncement","setValuesAndEmit","reDrawSortable","removeSelectedQuestionConfirmation","removeSelectedQuestion","removeSelectedDocumentConfirmation","documentId","removeSelectedDocument","getMaxOrderIndex","isSensitive","orderIndex","onCloseAddDocumentsModal","onCloseAddAnnouncementsModal","getQuestionById","onChangedOrder","tmpItems","displayOnly","sendOrdersToServer","updateState","newState","itemsMixtureTypeEnum","updateAnnouncementState","showObcSortable","onRemoveSelected","FormAskMode","CompanySiteScope","FormApprovalMode","AssetOperationFormCategoryType","PermitClosurePolicy","ExpiryMode","FormExpiryMode","ExpiryUnit","AutoRenew","RadioFormGroupComponent","VisitorTypeSelectorComponent","selectedVisitorIds","_selectedVisitorIds","displayAsSingleSelectBox","limited","selectedVisitorIdsChange","vt","onSwitchStateChange","PreviewUpsertComponent","previewType","previewInduction","inductionModel","inductionViewModel","formModel","formViewModel","FormScopePipe","FormApplyForPipe","FormAskModePipe","ExpiryModePipe","FormApprovalModePipe","PermitClosurePolicyPipe","UpsertFormComponent","cdr","formCategories","_formCategories","formCategoriesLoadInitiated","setFormCategories","isAutoRenewEnabled","_isAutoRenewEnabled","formToEdit","getFormTypes","activeTypes","ac","getIsAutoRenewEnabled","getExpiryModes","permitInUseFormId","_permitInUseFormId","permitOnholdFormId","_permitOnholdFormId","permitCloseFormId","_permitCloseFormId","assetOperatorFormId","_assetOperatorFormId","currentFormType","currentAutoRenew","showDocumentKindSection","onSelectForm","approvalMode","visitorTypeIds","permitClosurePolicy","permitStatusAfterApproval","isEnablePermitZone","isEnablePermitSchedule","assetOperationFormCategoryType","assetOperationFormCategories","documentKindValidator","optionalMandatoryState","detectChanges","formCategorySelector","focus","formCategorySelectCompareFn","isFormGroupValid","createFormModel","Generic","SiteBriefing","Permit","kinds","getSelectedIdList","onModalPreview","onSelectedVisitorTypeChange","formGroups$","formGroupLoader","onSelectFormGroup","isVisitorTypeFieldVisible","formCategoriesLoading","FormManageComponent","filterFormTypes","loadForms","InitPage","filteredForms","formsFilter","selectedTypes","formsList","onRemoveFilter","currentItems","onlyActiveForms","onModalAutomation","upsertModalRef","onModalUpsertForm","closeQuestionModal","onRemoveForm","getVisitorType","onCloneForm","formIdToClone","closeCloneModal","cloneName","cloneButtonTitle","InductionAskMode","OffsiteSupplierCollectionModeEnum","ExpiryUnitPipe","InductionAskModePipe","UpsertInductionComponent","isActiveFormControl","isMandatory","expiryCount","expiryUnit","inductionToEdit","createInductionModel","ivm","expiryModeEnum","addInduction","toggleAttachAdditionalDocuments","CompanySiteScopePipe","InductionManageComponent","loadInductions","inds","onlyActiveInductions","onModalUpsertInduction","onRemoveInduction","getModeTitle","showInductionDetails","showDetailsConfig","onModalClone","inductionToClone","cloneInduction","OnboardingType","MessageQueryType","SupplierDocumentReviewFormSelectionMode","SupplierDocumentReviewComponent","supplierPermitsService","formSelectionMode","addClass","toggleShowPic","supplierDocumentReviewFromSelectionMode","withoutForm","unloadPDF","loadPDF","loadFromWorkflow","formsToFill","hasForm","onlyShowForm","showPicPanel","onlyShowFiles","withForm","showFormAndFile","viewFormSelector","modalTitle","selectedSiteSupplierDocument","isReviewFormValid","approveDecline","formAnswers","formDataRenderer","lastSupplierVersionId","formDataModel","ApproveDeclineSiteSupplierDocumentVersion","isApproved","expirationDate","onApproveDeclineSiteSupplierVersionAndFillForm","catch","saveFromWorkflow","onSubmitPermitForm","showTabPage","pdfIsLoaded","removeClass","MessageService","getMesasgeHistory","MessageHistoryComponent","messageService","messageList","showContent","msg","currentMessage","ExternalSitePermissionPipe","ctx_r89","ctx_r98","ctx_r102","ctx_r106","ctx_r108","ctx_r110","ctx_r113","ctx_r114","ctx_r122","ctx_r124","ctx_r128","ctx_r130","ctx_r132","ctx_r134","ctx_r136","ctx_r137","SupplierDocumentsComponent","onboardingFormControl","emailInfo","SelectedSiteSupplierForSupplierLinkOperations","fullOnboardingEmailInfoViewModel","quickOnboardingEmailInfoViewModel","emailBody","emailSubject","resetMarkdownEditor","updateSupplierFormGroup","pageYOffset","generalSearcControl","supplierDocumentFilter","_calSiteSupplierDocumentTypes","supplierFormControl","siteMode","resetSearchTermValue","changeSiteId","toggleSort","onSelectSiteOrSupplier","foundItem","allSiteSupplierDocumentTypes","_loadItem","selectedSiteSupplierDocumentTypes","onSelectSupplierDocumentType","selectedSupplierDocumentType","removeSiteSupplierDocumentType","ss","ssdt","siteSupplierDocumentTypes","forceToResetValues","supplierDocumentTypeName","documentTypeStatusChanged","supplierDocumentStatus","onAssignDocumentTypeToSupplier","onSaveSDT","_clearForm","dataToServer","supplierDocumentTypes","selectedSiteSupplierId","closeNewSiteSupplierModal","onSiteSupplierStatusChange","modalResult","toPromise","onRemoveSDT","onEditSDT","onViewHashLink","currentLink","lastEmailAddress","supplierEmailAddress","supplierEmailBody","supplierEmailSubject","addOffsiteTemplate","isOffsiteEnabled","refViewHashLink","firstEmail","onboardingType","offsiteEmailTemplate","displayForm","newForm","_openNewForm","newSiteSuplierModalRef","tmpItem","scrollToTop","supplierSearchTerm","siteSearchTerm","hasSupplierReviewForm","selectedSupplierIds","selectedSites","onPagingUpdate","onEmailBodyChanged","emailBodyType","onIncludeOffsiteInductionChange","currentTarget","showMarkdownEditor","onSendEmail","toEmailAddress","supplierLinkBody","supplierLinkSubject","offsiteTemplateBody","onApproveDeclineSiteSupplierVersion","isInViewMode","isPending","isDocumentTypeIsVisible","siteSupplier","_showAll","hasHiddenItems","isDocumentTypeIsVisibleInEditMode","hasHiddenItemsInEditMode","onEditNoneStandardSupplierDocumentType","renameNoneStandardSupplierDocumentTypeFormControl","selectedSiteSupplierForRename","selectedSiteSupplierDocumentTypeForRename","bsModalRefRenameDOT","updateNoneStandardSupplierDocumentType","onOpenformReview","onSupplierDocumentFilterChange","onViewFilledForm","selectedFormDataId","getSupplierDocumentListCount","getPermitCount","countArray","permitStatistics","getAssetCount","assetStatistics","onAccordionClick","isOpen","selectedAccordionItemId","hasSiteSupplierPermission","siteSupplierPermission","openExternalPermissionModal","siteSupplierToEditExternalSitePermissions","bsModalRefEditPermission","updateExternalSitePermissionsValue","getmanageItemsRouteLink","supplierMobile","selectedSupplierViewModel","showEmailHistory","emailHistoryRequest","SiteSupplierAccessMode","FilledFormStatusPipe","AnonymousPermitComponent","siteSupplierHashLink","fetchPermitList","permitsInfo","permitsList","permits","pendingPermits","onApplyNewPermit","onHidePopup","onViewFormDetails","onApproveOrRejectPermit","TemporarilyAssetIconComponent","SiteAssetCheckInOutComponent","isUpdateLocationRequested","submit","selectedSiteAsset","isCheckinRequested","submitConfirmed","RegisterAssetMode","RegisterAssetAsType","AssetSelectorComponent","_assetId","assets","assetSelect","assetIdSelect","selectedAsset","getAssetList","onLoadAssets","assets$","RegisterSiteAssetComponent","onlyTempAssets","_onlyTempAssets","registerAssetMode","CompanyName","activeRegisterAssetAs","registerAssetAs","showRegisterAssetAs","mainCompanyId","enableTempAssets","loadAssetRegistrationForms","loadSiteSuppliers","assetRegistrationForms","siteSuppliers","registerAssetAsChanged","onChangeAssetId","selectedAssetid","selectedAssetId","onLoadAssetsToRegister","onLoadAssetsToRegisterCalled","isValidAsset","insertAssetRenderer","insertTempAssetRenderer","onClickNextButton","newAsset","newTemporarilyAsset","showRegisterPanel","toolName","assetName","tempAssetShowRegisterPanel","newTool","onSubmitSiteAsset","modalReference","RegisterSiteAssetOperatorComponent","updateMobile","updateValidState","updateFirstName","updateLastName","operatorFormIsValid","registerOperator","onRegisterOperator","SupplierDocumentTypeStatusTooltipPipe","SupplierDocumentTypeStatusIconPipe","FormDetailsComponent","formDataDetails","filledFormInfo","initializeFormData","setAttendanceInformationFields","setsupplierReviewInfoFields","formDataSiteAttendanceDetail","formDataSupplierReviewDetail","multipleTabsAvailable","siteAttendanceInfoFields","supplierReviewInfoFields","SiteAssetCheckinHistoryComponent","fetchHistory","assetIdsHistoryModel","checkedInSiteAssetHistory","ctx_r96","ctx_r100","ManageSiteAssetComponent","_siteName","hasUserApproveRejectPermissions","assetRegisterFormgroup","queryMode","referer","hashlink","isInSupplierMode","externalInfo","isExternalCompanyMode","showAddNewAssetButton","siteAssets","allowToApproveAnything","onFetchSiteAssets","onOpenRegisterComponent","operatorBsModal","onRegisterOperatorDone","onOpenFormDetail","selectedSiteAssetId","onCheckInOutSiteAsset","siteAsset","onShowAssetCheckInOutHistory","selectedAssetIds","tempAssetId","onApproveRejectOperator","siteAssetOperatorId","saveNickname","nickname","setNicknameModel","SiteAssetId","NewNickname","isNickNameEditing","SupplierDocumentWorkflowConstant","ApproveActivityId","SignOffActivityId","ShowSupplierDocumentReviewButton","SupplierDocumentTypeOperation","ObcWorkflowStatus","ApprovalModeEnum","SiteSupplierDocumentListenerService","onChangeData","dataChanged","type_r37","ctx_r101","ctx_r139","ctx_r141","ctx_r143","ctx_r149","ctx_r151","ctx_r153","ViewSiteSupplierDocumentVersionComponent","siteSupplierDocumentListenerService","filterDocumentTitles","filterDocumentKinds","filterExpireDateRanges","getPath","portalDisplayMode","changeDocumentKindIdFormControl","setVariablesOfSelectedDocumentKind","getDocumentTypeByWorkflowDocumentTypeId","variablesFormGroup","variablesOfSelectedDocumentKindToChange","hasDeleteSupplierDocumentsPermission","updateSiteSupplier","operation","selectedSuplierId","isArchiveTab","allowedSupplierDocumentWorkflows","workflowDocumentKindId","oldf","oldfIndex","openWorkflowEngine","instanceId","selectedInstanceId","workflowEngineModal","keyboard","dirtyCheckSubscribe","selectedFormDirtyState","queryModel","documentTitles","expireDateRanges","isArchived","sub","supplierDocumentDataModel","getDocumentType","companyReviewForms","onSiteSupplierLoad","onUpdateDocuments","docVersion","selectedDocumentKindId","selectedVariableList","workflowStartVariables","siteSupplierDocumentType","uploadFileModalRef","onUpdateRequestDocuments","onArchiveDocuments","siteSupplierDocumentTypeIds","onUnarchiveDocuments","onViewHistory","onViewComments","resComment","supplierDocumentVersionComments","displayVersion","onOpenDeleteForm","onDeleteAllFiles","getDeleteAllButtonTitle","documentKindSignOffMode","showSignOffConfiguration","supplierDocumentDataConfiguration","enableSetSiteSupplierDocumentTypeMode","isSignOffEnabled","setSignOffVisibility","showDocumentTypeStatus","enableDocumentTypeStatus","selectedSiteSupplierDocumentTypeMode","getSignOffModeValue","isStandardSupplierDocumentType","onRequestNewDocumentType","typeId","supplierDocumentFormControl","hasAnySelectedToArchive","isMessage","filesDragedOrSelected","uploadMultipleDocumentTemplate","selectedWorkflowTitle","selectedFilesToSendToModal","addDocumentClicked","requestDocumentClicked","requestDocumentTemplate","onDownloadFile","selectedSupplierDocumentVersionViewModel","displayChangeDocumentKindModal","selectedSiteSupplierDocumentTypeToChangeType","bsModalRefChangeDocumentKind","updateSiteSupplierDocumentKind","variables","closeChangeDocumentKind","SiteSupplierDocumentUploaderContainerComponent","isHashlinkMode","setCompanyId","fragment","selectedTab","ref","setHashLink","validateResult","showDocumentsArchiveTab","FormReportComponent","exportPdf","onIncludeInactiveFormsChanged","filterSettings","includeInactiveItems","SeatingModeLabels","qrCodeImageBase64","_qrCodeImageBase64","DirtyComponentItem","DelayedAnswerMode","AccessControlAutomaticAttendanceMode","AccessControlInductionMode","AccessControlSiteBriefingMode","AccessControlSupplierDocumentMode","AccessControlUnitDirection","SiteManagementMode","AccessControlUnitProvider","ManageSiteService","getSiteFullData","saveSiteFullData","ManageSupplierSiteService","getSiteSupplierFullData","saveSitSupplierFullData","AccessControlAutomaticAttendanceModePipe","AccessControlUnitProviderPipe","BiostarService","getBioStarDevices","getLogs","EmailListDirective","NG_VALIDATORS","ContactInformationComponent","_contactInformationAsJson","parsedContactInformation","DurationSelectorComponent","durationSelectedChanged","durationInHour","HourMinuteSelectorComponent","valueAsMinute","valueAsHour","changeMode","alreadyInitialized","isMinuteActiveByDefault","currentMode","setHourMinuteValues","checkValidity","QuestionRepository","ManageSiteQuestionVisitorTypeMode","SiteRequiredUserDocumentService","SiteRequiredFieldService","ManageSiteVisitorTypeComponent","manageSiteViewModel","manageSiteModel","checkedIds","getCheckedType","visitorType","siteVisitorType","toggleCheckedType","updateCheckedIds","onItemClick","onchange","_limited","isVisitorTypesEnabled","onClearAll","ManageSiteQuestionVisitorTypeComponent","modeLabel","selecteds","checkedTypes","siteEntityId","_siteEntityId","vType","questionVisitorTypeIds","questionVisitorTypeId","anySelected","_limitedPrivate","onVisitorTypeStatusChanged","ctx_r88","SiteAnnouncementManageComponent","PrimitiveUserInformation","setDirtyComponents","dirtyComponents","makeComponentDirty","myCopy","siteAnnouncements","canAddNewAnnouncement","maxAnnouncementCount","loadSiteAnnouncements","switchview","_switchview","newSiteAnnouncement","headerInfo","getCountLabel","reOrderSiteAnnouncements","sortSiteAnnouncements","initAddEditSiteAnouncement","switchView","companySuppliers","siteAnnouncementDisplayTime","getAnnouncementList","relatedAnnouncement","onAnnouncementTypeChanged","getIndustryTypeList","getVisitorTypeList","getCompanySupplierList","currentCompleteUser","isEnableAddUser","isEnableAddIndustryType","isEnableAddVisitorType","isEnableAddCompanySupplier","onEditSelected","selectedSiteAnnouncement","newAnnouncementType","selectedAnnouncementId","changeEnableAddUser","onPushNewUser","getUserFullName","changeEnableAddIndustry","changeEnableAddVisitor","changeEnableAddCompanySupplier","visitorTypeList","companySupplierList","onPushNewIndustryType","onPushNewVisitorType","onPushNewCompanySupplier","selectedCompanySupplier","onRemoveIndustryType","industryTpe","onRemoveVisitorType","onRemoveCompanySupplier","companySupplier","changeSiteAnnouncementOrder","editableObject","oldIndex","newIndex","getWhiteListFileTypes","playThroughLimitedFileTypes","InductionSelectorComponent","availableInductions","addedInductions","onAddInduction","SiteInductionComponent","onRemoveSiteInduction","onAddSiteInduction","getInductionModeLabel","onOpenAddInduction","SiteFormsComponent","dirtyComponentFieldName","siteForms","entityTitle","firstRun","onRemoveSiteForm","onAddSiteForm","siteFormId","onOpenAddForm","getMainTitle","SiteScannableGroupComponent","scannableGroups","siteGroupIds","siteSelectFC","siteGroups","routeChange","onShowSiteScannableGroupModal","removeSiteGroup","unAddedSiteGroups","addSiteGroup","ctx_r94","ctx_r109","SiteQuestionsManagementComponent","siteRequiredUserDocumentService","siteRequiredFieldService","componentFactoryResolver","getQuestionCompleted","getSiteRelatedData","initializeCopies","_siteQuestions","isDeprecated","shouldDisplay","_companyQuestions","siteRequiredUserDocuments","requiredDocuments","allDocumentsOriginal","originalSiteRequiredUserDocuments","visitorTypesHeaderInfo","visitorTypesStatus","displayVisitorTypes","documentExtraInfoHeaderInfo","countRequiredFields","checkOutQuestionHeaderInfo","siteCheckOutQuestions","checkInQuestionHeaderInfo","siteCheckInQuestions","maxOrder","isAllowedToManageVisitorTypes","_isAllowedToManageVisitorTypes","onChangeVisitor","checkedVisitorType","visitorTypeTitle","updateVisitorTypesAndAllPropertiesVisitorTypes","getSiteQuestions","getRequiredDocuments","getVisitorTypes","getAllUserRequiredDocuments","updateUserSelectedDocuments","onShowRequiredDocumentsModal","bsRequiredDocumentsModalRef","onShowCheckinQuestionsModal","bsCheckinQuestionsModalRef","activeModalRef","onShowCheckoutQuestionsModal","bsCheckoutQuestionsModalRef","onAddQuestionClick","bsQuestionModalRef","checkInOut","addQuestionToSite","documentInfo","userSelectedDocuments","addRequiredDocument","userDocumentTypeTitle","checkIn","removeRequiredDocument","onRequiredFieldChange","onRequiredDocumentChange","companyCheckinQuestions","companyCheckoutQuestions","checkInQuestions","checkOutQuestions","removeFromSiteQuestion","sqId","targetSiteQuestion","getQuestionViewModel","removeQuestion","emitToParent","qid","isMasterQuestion","qText","isCheckInQuestion","slave","original","others","item1","item2","addMasterQuestions","addMasterQuestion","masterQuestionIds","mq","isAddingMasterQuestionsProgress","onsiteVisitorAccompanierChange","visitorTypeAccompanier","visitorTypeAccompaniers","toggleDefaultSiteMode","onlyTitles","accompanierObjFromAccompaniers","siteVisitorTypesIds","manageSiteViewModelChange","questionVisitorTypeClicked","documentVisitorTypeClicked","fieldVisitorTypeClicked","components","component","itemKey","findDirtyComponentKey","returnObj","ImageCropperFormControlComponent","croppedImageSourceBase64","setModel","clearModel","onClearSelectedImage","isFileSelected","AutoCheckOutTypePipe","DelayAnswerModePipe","EnabledDisabledSwitchPipe","DicToArrayPipe","AccessControlInductionModePipe","AccessControlSiteBriefingModePipe","AccessControlSupplierDocumentModePipe","AccessControlUnitDirectionPipe","tmp_b_0","ctx_r103","ctx_r133","ctx_r193","ctx_r195","ctx_r201","ctx_r209","ctx_r211","ctx_r213","ctx_r214","ctx_r216","ctx_r228","SiteManagementComponent","manageSiteService","manageSupplierSiteService","accessControlAutomaticAttendanceModePipe","accessControlUnitProviderPipe","biostarService","ngZone","DirtyComponents","projectSettings","isPublicSite","maxAllowedSiteRadius","isForcedCheckOutTime","isForcedCheckOutAfterMinute","forceCheckOutAfterMinute","checkinLocationMode","checkInLocationOverrideInKioskMode","forceCheckOutTime","checkInApprovalMode","siteSupervisorEmailAddress","advancedSettings","seatingLocationFillMode","logoUrl","multipleCheckinType","enableNotifyNearUser","seatingModeLabels","maxPeopleOnSiteMode","maxPeopleOnSite","logoExtension","integrationConfigAsJson","automatedAttendance","autoCheckInType","autoCheckInDelayInMinute","autoCheckOutType","geofencingThresholdInMinutes","delayedAnswerModeForCheckIn","delayedAnswerModeForCheckOut","delayedAnswerNotificationAfterCheckOutNotifyCount","delayedAnswerNotificationFrequencyInMinute","delayedAnswerForCheckInThresholdInHour","delayedAnswerForCheckOutThresholdInHour","cameraQR","qrCodeCheckinMode","forceCheckOutAnonymousAfterInMinute","offsite","enablePreCheckIn","enableOffsiteInductions","enableOffsiteQR","enablePreCheckInForFrequentUsers","enablePreCheckInByCode","preCheckInCode","preCheckInPassword","accessControlUnitProvider","enableAccessControlUnitReport","isBioStarEnabled","bioStarApiServerUrl","bioStarApiUsername","bioStarApiPassword","enableBioStarAccessGroup","bioStarAccessGroup","bioStarUserGroup","accessControlAutomaticCheckInMode","accessControlAutomaticCheckOutMode","accessControlInductionCheckingMode","accessControlSiteBriefingCheckingMode","accessControlSupplierDocumentCheckingMode","siteAccessControlUnits","newAccessControlUnit","controlUnitIdentifier","displayName","entryBarcodeScannerIdentifier","exitBarcodeScannerIdentifier","entryGateIdentifier","exitGateIdentifier","limitEntryGateRepeatedScansInSeconds","limitExitGateRepeatedScansInSeconds","activeHoursFrom","activeHoursTo","evacuationIdentifier","tnaEnterCode","tnaExitCode","SiteQrCodeViewModel","verticalOffset","submitButtonFixed","beforeunloadHandler","isAnyAccordionDirty","returnValue","canDeactivate","clearDirtyComponents","siteManagementFG","markAsPristine","_clone_fg_","cloneFormGroup","accessControlUnits","getNewAccessControlUnitFormGroup","onNewControlUnit","onRemoveAccessControlUnit","removeAt","setSubscriptionsOnDelayedAnswerModeFields","onDelayedAnswerModeFields","setAutomatedAttendanceCheckoutThresholdSubscription","siteManagementMode","__updateAutomatedAttendanceCheckoutThresholdValidator","_checkIfGeofencingThresholdInMinutesIsRequired","checkOutMode","maxPeopleOnSiteModeFn","qrCodeCheckinModeFn","checkinLocationModeFn","findInvalidControlsCount","formGroupName","touched","checkIfFormGroupIsDirty","areAllAccordionsValid","allStates","mapItemsToAdminSiteViewModel","AdminSiteViewModel","fcKey","fcValue","dateToTime","mapSiteInfoToFormGroup","unitsFormArray","unitPropName","unitPropVal","forceCheckoutAfterTimePeriod","isForcedCheckOutAfterMinuteMethod","_clearValidatorsIfIsTemplate","isNewSiteRequest","getSiteInfo","validateCoordinate","point","updateContactInformation","contactInformationFG","getContactInformationDetail","contactInformationString","currentUserIsGod","enableAccessControlFeature","siteLogoFormControl","maxAllowedGeofencingThresholdInMinutes","maxNumber","closeInfoPanel","showInfo","onRemoveLogo","removeSiteLogo","constants","autoCheckOutTypes","Optional","checkInLocationOverrideInKioskModeCondition","fullData","_8","_9","_10","_11","_12","_13","_14","_15","_16","_17","$s","Dr","_18","_19","SiteManagementModeEnum","Ks","Hs","_20","_21","CheckInLocationOverrideInKioskMode","frmVal","validateLatLng","checkInDelayInMinutes","validateSiteRadius","showInvalidSiteRadiusMessage","validateMaxSiteRadius","validateGeofencingThresholdInMinutes","callChangeActiveService","regenerateSecretKey","showSecretKey","clearSecretKey","siteQRCode","showQrCodeWithInstruction","showOffsiteSecretKey","offsiteQRCode","qrCodeContent","print","printOffsite","printContents","popupWin","printOffsiteSection","printSection","write","getMultipleCheckinType","getMaxPeopleOnSiteMode","currentSite","clonedSite","clonedFormGroup","stringifies","stringValue","switchValue","forceCheckout","updateForcedCheckOutAfterMinute","updateManageSiteModel","isActiveAutoCheckInPanel","resetSelectedSite","originalSiteId","dirtyResult","updateSelectedSite","getAccessControlHeaderInfo","provider","providerTitle","isAccessControlDisabled","is1BcProviederSelected","isBioProviederSelected","isBiostarEnabled","getBioStarDeviceList","bioDevicesFetchInProgress","bioStartDeviceList","initBioStarDeviceList","showSelectBioStarDeviceModal","onSelectBiostarDevice","device","changeBioStarActiveState","changeBioStarEnableAccessGroup","filterTna","tna","showTnaCodes","ProcoreConfigurationAccessCodeCallbackComponent","opener","procoreConfigCompleted","ProcoreIntegrationType","IntegrationOperation","ProcoreExportCheckInAsTimeCardMode","ProcoreExportCheckInAsVisitorLogMode","ProcoreExportCheckInAsManpowerMode","ProcoreCommentMode","ProcoreConnectionMode","ProcoreFolderStructureMode","ProcoreExportSiteAttendanceAsTimeCardModePipePipe","ProcoreCommentModePipe","ProcoreExportSiteAttendanceAsVisitorLogModePipePipe","ProcoreExportSiteAttendanceAsManpowerModePipe","ProcoreFolderStructureModePipe","ProcoreIntegrationComponent","clientId","clientSecret","procoreConnectionMode","procoreCompanyId","procoreWebHookEnabled","procoreImportSitesEnabled","procoreExportSiteAttendanceAsTimeCardMode","procoreExportSiteAttendanceAsVisitorLogMode","procoreExportSiteAttendanceAsManpowerMode","procoreImportUsersEnabled","procoreImportSiteUserAsFrequent","procoreUploadSiteSupplierDocumentsEnabled","procoreUploadSiteInductionsEnabled","procoreUploadPermitFormsEnabled","procoreUploadSiteAssetsFormEnabled","procoreUploadSiteBriefingsEnabled","procoreUploadGenericFormsEnabled","procoreUploadEvacuationsEnabled","procoreTemplateSiteId","procoreImportCompanyDirectoryEnabled","procoreImportProjectDirectoryEnabled","procoreImportCompanyRolesEnabled","procoreImportProjectUserRolesEnabled","enableProcoreSyncIncompleteForTimecard","enableProcoreSyncIncompleteForVisitorLog","enableProcoreSyncIncompleteForManpower","procoreFolderStructureMode","isCreateProcoreFolderAsPrivate","procoreCommentModeForTimecards","procoreCommentModeForVisitorLogs","procoreCommentModeForManpowers","isProcoreEnable","procoreEnableFormControl","isMarketPlaceOrDmsa","secretFormGroup","isDmsaMode","hasProcoreCompanyId","configFormGroup","showConfig","editModeOfEnabledZone","showCheckPermissionButton","currentProcoreEnabledState","getTokenAuthorizationInfo","setFormValues","onUpdateProcoreConfig","procoreEnabled","disableEdit","procoreCheckTokenResponse","unsubscribeToFormControlChanges","infoMessage","procoreSummeryInfo","apiUserEmail","login","companyList","procoreIntegrationTypeInfos","configuration","isInEditingMode","godUserFormGroup","editClientInfo","isReadyToConnectToProcore","siteTemplates","templateSites","subscribeToFormControlChanges","initializeEditingModeVariables","enableEdit","onUpdateProcoreConfigSubs","isProcoreConfigEdited","onCheckAndSaveAuthorization","onAuthOnProcore","marketplaceAppConfiguration","marketplaceAppAuthorizationUrl","dmsaAppClientId","dmsaAppRedirectUrl","marketplaceAppClientId","marketplaceAppRedirectUrl","onProcoreConfigSuccess","showReSyncButtonForExportAttendance","showReSyncButtonForUploadSiteSupplierDocuments","showReSyncButtonForUploadSiteInductions","showReSyncButtonForUploadPermitForms","showReSyncButtonForUploadSiteBriefings","showReSyncButtonForUploadGenericForms","showReSyncButtonForUploadEvacuations","showReSyncButtonForUploadSiteAssetForms","showReSyncButtonForImportCompanyDirectory","showReSyncButtonForImportProjectDirectory","showReSyncButtonForImportCompanyRoles","showReSyncButtonForImportProjectUserRoles","procoreCompanyInfo","checkPermissions","companyPermissionsProjects","getProjectPermission","projectPermissions","projectId","forceMode","onProcoreEnabledChange","onSaveProcoreEnable","cancelEdit","MyobSystemType","MyobPeriodTypePipe","MyobIntegrationComponent","isMyobEnabled","myobSystemType","lable","getConfig","updateUiVars","editApiSection","myobApiKey","myobApiSecret","editMyobSyncConfig","isReadyToSyncAttendance","isValidToCallApi","authorizeOnMyobSite","redirectUri","autorizeUrlToGetAccessCode","myobConfigCompleted","onMyobConfigSuccess","myobAccessCode","saveMyobAccountRightConfig","showConfigurationPanel","paymentCategories","companyFiles","myobDefaultPayrolCategoryUid","onCompanyFileChanged","myobCompanyFile","myobCompanyFileUid","onDone","resetMessages","myobDefaultPayrolCategoryName","newConfig","saveAdvancedModeConfig","myobAdvancedUrl","myobAdvancedUsername","myobAdvancedPassword","myobAdvancedTenant","editMyobAdvancedConfig","HandsHQSupplierDocumentApprovalMode","TokenizePipe","displayCharsCount","HandsHQSupplierDocumentApprovalModePipe","HandshqIntegrationComponent","isHandsHQEnabled","allConfigurations","handsHQApiToken","handsHQSupplierId","handsHQSupplierName","handsHQDocumentSignOffMode","handsHQSupplierDocumentApprovalMode","onCompanySupplierChange","selectedIndex","openCompanyConfigurationModal","onAddCompanyApiToken","onRemoveCompanyApiToken","getCompanySuppliers","getConfigurationModel","validateAndSaveHandsHQConfig","inactiveHandsHQ","BiostarConfigurationComponent","bioStarService","isReadyToConnect","editBiostarSyncConfig","onEnabledChanged","editBiostarAdvancedConfig","showLogs","logModalRef","closeLogModal","CompanyIntegrationsComponent","enabledIntegration","CanDeactivateGuard","SiteInductionRejectStatus","ctx_r92","PendingToApproveListComponent","approveEntityTypePipe","getInductionActionButtonText","setCurrentSite","currentSiteTitle","includeInactive","pendingToApproveList","getStartDate","hasDate","getEndDate","isTextOverflow","toggleExpand","expandedItems","onOpenFormReview","formModalRef","onOpenDetail","attendanceId","relatedFormDataId","selectedEntityId","onOpenFormDataDetail","selectedEntityTypeForReviewModal","selectedItemIsEnableFormExpiryDate","isEnableFormExpiryDate","selectedEntityEndDate","endDateTime","adjustDates","Gi","showRequestRevisionButton","onGeneralResetStatus","entityTypeTitle","onDisplayRequestRevisionModal","selectedItemToRequestRevision","requestRevisionModalRef","showStartEndDateTime","getDateShowValue","main","detail","showValue","hasWorkflow","inWorkflowStep","isLagacyReview","isSimpleApproveReject","MyobConfigurationAccessCodeCallbackComponent","PermitService","updatePermitStatus","permitHistory","permitId","UpdatePermitStatusComponent","permitService","validatePermitStatusForm","isPermitStatusFormValid","onUpdatePermitStatus","nextStatus","onSubmitted","PermitHistoryComponent","generalFormDataId","PermitReportComponent","ApproveRejectPermit","onOpenPermitStatusForm","permit","selectedPermit","permitStatusForm","statusInfo","permitCloseForm","permitOnholdForm","permitInUseForm","onConfirm","approveRejectPermit","Nothing","Approve","filledFormId","onIncludeInactivePermitFormsChanged","FormDataStatusPipe","SupplierFormHistoryComponent","onViewForm","closeFormDetailsModal","SupplierFormsComponent","_calSupplierForms","formMode","changeFormId","addNewForm","selectedFormIds","allSuppliers","protocol","displayHistory","selectedFormIdToViewHistory","SupplierFillFormComponent","onSubmitForm","subs","onCancel","SupplierAnonymousFormsComponent","onFillForm","SupplierJoinToCompanyComponent","hasAnyCompany","hostCompanyTitle","joinSupplierInfo","companyTitle","currentTimeZone","urlToken","updateSelectedCompany","isPageFullyLoaded","newCompanyTimeZoneId","isValidatedSmsToken","showFirstPanel","loginState","loginStateNotAMember","newCompanyOwnerMobile","newCompanyMobileDisplay","newCompanyMobileCountryCodeDisplay","validateToken","isSMSTokenEntered","isEmptyObject","newCompanyTitle","firstCompanyId","validateNewCompanyFields","newCompanyOwnerFirstName","newCompanyOwnerLastName","sendJoinRequest","newCompanyMode","linkToCompanyId","linkToCompany","timeZoneId","ownerFirstName","ownerLastName","ownerMobileNumber","createdCompanyId","msgModal","successLinkToCompanyMessage","successLinkToNewCompany","onSendSMS","disableGoBackLink","backToFirst","SecurityLogType","SecurityLogService","systemReport","getLogDetails","getSystemLogDetails","SecurityLogTypePipe","SecurityLogReportComponent","securityLogService","loadReport","selectedEntityType","showDetails","details","AccessControlUnitGateStatus","AccessControlUnitGateType","AccessControlUnitService","openGate","getEvacMode","setEvacMode","GetClientLogs","serial","SiteAccessControlUnitManualComponent","accessControlUnitService","selectedSiteAccessControlUnit","accessControlUnitGates","acug","accessControlUnitGateType","identifier","acu","accessControlUnitGateStatus","accessControlUnit","gate","getAccessControlUnitOpenCloseModel","getAccessControlUnitOpenCloseModelToToggleEvacMode","handleGate","handleSetEvac","handleOpenGate","getGateButtonTitle","openClose","gateMode","TemplateCompanyAssetManagerComponent","ManageGlobalDynamicFieldsComponent","allDynamicFields","NotificationSettingComponent","isPersonalMode","_isPersonalMode","currentSetting","personalUserNotificationSettings","currentCompanyUserNotificationSettings","loadSettings","userNotificationSettings","notificationSettings","getOrderOfGroupedNotificationItems","groupedItem","minNumber","getAggregatedSetting","enabledCount","pushEnabledCount","isPushNotificationEnabled","emailEnabledCount","isEmailEnabled","isAggregated","isEnabledPartially","isPushNotificationEnabledPartially","isEmailEnabledPartially","setAdvancedIsOpen","groupTitle","advancedIsOpen","onSettingEnabledChanged","onSettingWayEnabledChanged","isEmailWay","notificationType","PermissionContainerComponent","PermissionTab","isCompanyHost","setTabAsShown","isSiteHost","Frequents","TaggedList","tab","currentTab","showTabContentFlags","displayTab","showTagedList","DropdownButtonComponent","EvacuationMode","EvacuationStatus","EvacuationModePipe","EvacuationStatusPipe","EvacuationDetailsComponent","_evacuationId","evacId","loadEvacuation","searchEvacuationPerson","evacuation","evacuationPersonViewModels","openPersonModal","personDetailsTemplate","siteAttendanceToShowCheckIn","openLogModal","logTemplate","evacuationLogs","getPresentCount","isPresent","EvacuationReportComponent","loadEvacuations","openEvcuationModal","evacuationDetailsTemplate","ViewSiteSupplierDocumentVersionHistoryComponent","siteSupplierDocumentVersions","siteSupplierDocumentVersionsInfo","selectedFiles","getFilePrefix","version","lastVersionKey","SupplierDocumentReportComponent","lastToggleResult","onlyLatestVersion","onViewVersions","ProcoreSyncMonitoringComponent","ManageGatesComponent","logGridConfig","isOnline","logGridColumns","showClientLogs","identifire","registeredClientViewModel","showLogModelJson","logModel","ControlUnitId","Command","ComponentLoaderDirective","viewContainerRef","WorkflowEngineComponent","handleParam","returnUrl","getComponentByName","componentName","WORKFLOW_COMPONENT","tId","loadStepComponent","workflowEningeModalHide","getWorkflowByInstanceId","workflow","userControlAddress","componentLoader","stepComponentData","createComponent","step","initWorkflow","handleUnknownException","hasError","loadErrorMessage","initialResult","commandFired","command","validateCommand","confirmCommand","saveStep","continue","workflowVariableValues","continueWorkflow","activityId","commandKey","commandRoles","roleList","note","executed","saveStepResult","confirmMessage","validationResult","validateStep","returnTo","ObcEntityType","WorkflowCartableComponent","dataType","onOpenHistory","reloadCartable","showTerminateButton","OtherSiteSupplierDocumentReportComponent","attId","checkGridSettingsForHistoryButton","TemplateCompanyVisitorTypesComponent","ProcoreService","getProcoreResetData","procoreSyncReset","CompanySelectorComponent","companies$","SpecificCompanySiteSelectorComponent","_siteService","IntegrationOperationPipe","ProcoreForceToSyncComponent","procoreService","selectedProcoreIntegrationType","dateRange","integrationOperationsToReset","onSelectedCompany","resetData","loadSites","removeSelectedSite","onSelectSyncType","procoreIntegrationType","getIntegrationDescription","onSelectFromDate","onSelectToDate","resetSyncStatus","cancelSync","CompanyWorkflowTemplateComponent","onCloseWorkflowPopup","onAddWorkflow","viewDetails","GenericFormSubmissionMethod","SiteBriefingService","getSignedList","siteBriefingQueryModel","deactive","SiteBriefingDeactivateRequestModel","SiteBriefingFormViewerComponent","_selectedFormDataId","configGrid","signaturesGridConfig","signatureUrl","signaturesGridColumns","SiteBriefingReportComponent","siteBriefingService","deactiveClicked","IncludeAnnouncements","onIncludeInactiveSiteBriefingFormsChanged","SiteInductionDetailComponent","getSiteInductionInfo","AiDecision","RequestRevisionComponent","siteInductionStatusPipe","currentSiteInductionId","historyLogData","requestorUserFullname","currentSiteInductionHistoryLog","hasPermissionToReview","hasApprovePermission","getHistoryItemButtonText","historyData","showInductionPanel","_showInductionPanel","displayHistoryFunc","refreshParent","reviewMode","onRefreshFunc","showSiteInduction","getSiteInductionIcon","siteInductionLog","showEntireReviewPanel","showReviewPanel","getCommentPanelContent","requestRevisionDescription","approveDescription","rejectDescription","getStyleCssClass","isHistoryPanelOpen","getStatusText","getAiRecommendation","aiResponseInProgress","aiResponse","InductionReportComponent","userMobile","cssStyle","isRefreshRequired","selectedSiteInductionId","hasResetPermission","resetInductionStatus","onInductionUpdated","onIncludeExpiredInductionsChanged","onIncludeInactiveInductionsChanged","isReadyToRequestRevision","isExpired","WorkerProfileField","WorkerProfileService","loadWorkerProfile","updateUserProfile","SupplierDocumentSignoffReportComponent","SiteBriefingSignoffComponent","signedByUser","WorkerProfileCardHistoryComponent","companyUserCardId","closePopup","WorkerProfileCardReportComponent","historyPopUpReference","ActorType","WorkerProfileSubTypePipe","ObjectToListKeyValuePipe","WorkerProfileHistoryComponent","getSubType","dataAsJson","jsonParsed","userActivityEventType","userProfileField","WorkProfileTabComponent","workerProfileService","calculatedSelectedSites","sortAndShow","tabset","first","showTab","isModalTab","profile","cleanedFields","cleanAndGetField","WorkerProfileComponent","toast","EditableFields","_profile","editableFields","profileField","sid","reloadAll","selectedSiteArray","isEditFormDirty","setProfileDataToControls","calculateEditAccess","isInProcess","showPanels","showEditButton","hasAccessToEdit","infoFormGroup","companySupplierTitle","dateOfBirth","isSetGender","isSetDOB","getProfileAvatarText","onEditProfileButtonClicked","infoFormGroupSubscription","getSnapshotOfFormGroupData","stringifiedKeyValueList","entryValue","getGenderValue","initialEditFormGroupSnapshot","updatedEditFormGroupSnapshot","isInfoFormGroupUpdated","isSaveButtonDisabled","onSaveProfileButton","reqModel","newProfile","onProfileUpdated","genderControl","selectVisitorType","updateEmergencyContact","incorrect","onSelectSupplier","UserDirectoryComponent","onSelectSite","showProfile","selectedUserProfile","showProfilePanel","confirmIgnoreUnsavedChanges","isEditFormDirtyFlag","onBackButton","navigateBack","ToggleSelectorComponent","planControl","getProviderTag","smsProviders","displayText","TestMessageComponentComponent","numberToTest","routes","redirectTo","pathMatch","ManageSmsProviderComponent","AppRoutingModule","RouterModule","scrollPositionRestoration","environment","GoogleAnalyticsService","onRouteChange","gTagScript","async","head","dataLayerScript","gtag","page_path","urlAfterRedirects","eventCategory","eventLabel","event_category","event_label","ModalComponent","option","trueLabel","falseLabel","cleanup","do","AppComponent","viewportScroller","googleAnalyticsService","evt","RoutesRecognized","store","getScrollPosition","Scroll","currentUrl","routerEvent","scrollToPosition","removeRecaptcha","captchaCheckInterval","captchaCheckThreshold","setProperty","HttpHelperInterceptor","intercept","urlsCalledCount","isCaptchaActive","UrlNeedToken","getTokenAndCallRequest","nextHandle","HttpResponse","WhiteListRouteRegexListFor401StatusCode","matched","HttpErrorResponse","getToken","API_MAX_TRY_COUNT","NgxBootstrapModule","PaginationModule","TabsModule","ProgressbarModule","BsDatepickerModule","ButtonsModule","BsDropdownModule","PopoverModule","AccordionModule","TimepickerModule","AlertModule","SiteSupplierDocumentUploaderComponent","siteSupplierDocumentTypeTitle","siteSupplierDocumentTypeDescription","setSiteSupplierDocumentTypeTitle","fileModel","guid","resetFileInput","_siteSupplierDocumentType","variableFormGroups","onRemoveFile","sortedfile","onAddSDTVersion","updateFileDone","showFileInput","onChangeFilesOrder","onlyfilename","SupplierDocumentSelectorComponent","getSupplierDocumentTypes","supplierDocumentTypesBackUp","_update","excludedDocumentTypes","$supplierDocumentTypes","changes","exDocTypes","currentValue","WorkflowVariablesRendererComponent","SiteSupplierDocumentMultipleUploaderComponent","initUploadModelArray","inputFiles","dropped","isCheckAnyItem","checkItemCount","addNewUploadModel","documentTypeMode","sortedFile","updateDocumentTypeMode","isNewDocument","groupCheckedItems","checkedItems","mergedToItem","unGroupCheckedItems","removeCheckedItems","droppedFile","fileEntry","isFile","HtmlNewLinePipe","DocumentTypeViewerItemComponent","opacity","companyTree","cacheUniqueId","emitAddNew","emitUpdate","emitDelete","saveDocumentCheckedStatusOnCache","SupplierDocumentReviewWorkflowComponent","_workflow","siteSupplierDocumentFiles","isInitilize","supplierDocument","SupplierDocumentDetailWorkflowComponent","WorkflowInstanceHistoryComponent","getWorkflowInstanceHistory","workflowInstanceHistory","viewHistoryFilledForm","formDetails","getWorkflowFilledForm","filledFormData","SupplierDocumentKindUploderComponent","addClicked","requestClicked","AppModule","bootstrap","HTTP_INTERCEPTORS","useClass","LOCALE_ID","useValue","RECAPTCHA_V3_SITE_KEY","DraggableItemService","imports","BrowserModule","BrowserAnimationsModule","HttpClientModule","ReactiveFormsModule","warnOnNgModelWithFormControl","FormsModule","ModalModule","GoogleMapsModule","ChartModule","TypeaheadModule","TooltipModule","SortableModule","ImageCropperModule","NgSelectModule","ToastrModule","NgxFileDropModule","DragDropModule","RecaptchaV3Module","NgxExtendedPdfViewerModule","NgxPendoModule","pendoApiKey","pendoIdFormatter","pendoId","i8","i1","i10","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","tt","Ye"],"sources":["./src/app/extensions/date.extensions.ts","./src/app/enums/company-status.enum.ts","./src/app/enums/user-permission.enum.ts","./src/app/enums/god-user-permission.enum.ts","./src/app/enums/external-site-permission.ts","./src/app/enums/portal-display-mode.enum.ts","./src/app/enums/constants.ts","./src/app/services/storage.service.ts","./src/app/services/company-auth.service.ts","./src/app/services/user.service.ts","./src/app/helpers/date-time-format.ts","./src/app/services/locale.service.ts","./src/app/pipes/datetime.pipe.ts","./src/app/pipes/mobile.pipe.ts","./src/app/components/user-info-modal/user-info-modal.component.ts","./src/app/components/user-info-modal/user-info-modal.component.html","./src/app/services/modal.service.ts","./src/app/custom-controls/loader/loader.component.html","./src/app/custom-controls/loader/loader.component.ts","./src/app/components/user-edit-phone/user-edit-phone.component.ts","./src/app/components/user-edit-phone/user-edit-phone.component.html","./src/app/components/no-access/no-access.component.html","./src/app/components/no-access/no-access.component.ts","./src/app/enums/local-storage-key.enum.ts","./src/app/services/layout.service.ts","./src/app/services/error.service.ts","./src/app/services/company.service.ts","./src/app/services/signal-r.service.ts","./src/app/enums/product-plan-feature.enum.ts","./src/app/enums/event-type.ts","./src/app/services/sign-in.service.ts","./src/app/custom-controls/switch/switch.component.ts","./src/app/custom-controls/switch/switch.component.html","./src/app/custom-controls/css-spinner/css-spinner.component.ts","./src/app/custom-controls/css-spinner/css-spinner.component.html","./src/app/services/notification.service.ts","./src/app/components/notification-center/notification-center.component.html","./src/app/components/notification-center/notification-center.component.ts","./src/app/layout/top-bar/top-bar.component.html","./src/app/layout/top-bar/top-bar.component.ts","./src/app/models/sidebar-item-mode.ts","./src/app/pipes/order-by.pipe.ts","./src/app/pipes/filter.pipe.ts","./src/app/layout/side-bar/side-bar.component.html","./src/app/layout/side-bar/side-bar.component.ts","./src/app/layout/secure/secure.component.html","./src/app/layout/secure/secure.component.ts","./src/app/enums/chart-type.ts","./src/app/helpers/color-helper.ts","./src/app/models/chart-model.ts","./src/app/models/dashboard-total-infos.ts","./src/app/enums/dashboard-report-period.enum.ts","./src/app/helpers/url-validator.ts","./src/app/enums/dashboard-widget-type.enum.ts","./src/app/helpers/uuid.ts","./src/app/services/dashboard.service.ts","./src/app/pipes/weekday.pipe.ts","./src/app/custom-controls/summary-widget/summary-widget.component.html","./src/app/custom-controls/summary-widget/summary-widget.component.ts","./src/app/custom-controls/chart/chart.component.ts","./src/app/custom-controls/chart/chart.component.html","./src/app/pipes/safe-pipe.ts","./src/app/components/dashboard/dashboard.component.html","./src/app/components/dashboard/dashboard.component.ts","./src/app/models/site-viewmodel.ts","./src/app/enums/site-active-status.enum.ts","./src/app/enums/site-template-status.enum.ts","./src/app/enums/question-type.ts","./src/app/enums/site-document-state.enum.ts","./src/app/models/custom-formcontrol.ts","./src/app/enums/file-type.enum.ts","./src/app/helpers/general-functions.ts","./src/app/services/site.service.ts","./src/app/custom-controls/pagination/pagination.component.html","./src/app/custom-controls/pagination/pagination.component.ts","./src/app/services/address-lookup.service.ts","./src/app/custom-controls/map/map.component.html","./src/app/custom-controls/map/map.component.ts","./src/app/components/site/site-location-verify/site-location-verify.component.html","./src/app/components/site/site-location-verify/site-location-verify.component.ts","./src/app/custom-controls/address-form-control/address-form-control.component.html","./src/app/custom-controls/address-form-control/address-form-control.component.ts","./src/app/components/company/company.component.html","./src/app/components/company/company.component.ts","./src/app/components/user/user.component.ts","./src/app/layout/public/public.component.ts","./src/app/layout/public/public.component.html","./src/app/helpers/mobile-format-validator.ts","./src/app/enums/datetime-picker-mode.enum.ts","./src/app/services/site-attendance-permission.service.ts","./src/app/custom-controls/descriptor/descriptor.component.html","./src/app/custom-controls/descriptor/descriptor.component.ts","./src/app/components/site-selector/site-selector.component.html","./src/app/components/site-selector/site-selector.component.ts","./src/app/helpers/datetimeValidator.ts","./src/app/custom-controls/date-time-picker/date-time-picker.component.html","./src/app/custom-controls/date-time-picker/date-time-picker.component.ts","./src/app/custom-controls/input-date-time-picker/input-date-time-picker.component.html","./src/app/custom-controls/input-date-time-picker/input-date-time-picker.component.ts","./src/app/components/site-permissions/site-attendance-permission/manage-site-attendance-permission/manage-site-attendance-permission.component.html","./src/app/components/site-permissions/site-attendance-permission/manage-site-attendance-permission/manage-site-attendance-permission.component.ts","./src/app/components/site-permissions/site-attendance-permission/site-attendance-permission.component.ts","./src/app/components/site-permissions/site-attendance-permission/site-attendance-permission.component.html","./src/app/enums/otp-request-mode.enum.ts","./src/app/enums/userAuthenticationResult.enum.ts","./src/app/models/user-credentials-viewModel.ts","./src/app/enums/two-factor-verification-mode.ts","./src/app/enums/login-state-enum.ts","./src/app/services/country.service.ts","./src/app/enums/captcha-mode.ts","./src/app/services/captcha.service.ts","./src/app/components/site-management/accordion-header/accordion-header.component.html","./src/app/components/site-management/accordion-header/accordion-header.component.ts","./src/app/auth/login/login.component.html","./src/app/auth/login/login.component.ts","./src/app/models/helper-models.ts","./src/app/models/question-viewmodel.ts","./src/app/services/question.service.ts","./src/app/pipes/question-type.pipe.ts","./src/app/helpers/general-lists.ts","./src/app/pipes/regex.pipe.ts","./src/app/enums/question-profile-sub-type-enum.ts","./src/app/pipes/question-profile-sub-type.pipe.ts","./src/app/models/questionParameters/multi-select-render-type.ts","./src/app/models/questionParameters/single-select-render-type.ts","./src/app/pipes/questin-render-mode.pipe.ts","./src/app/models/questionParameters/question-answer-file-format.ts","./src/app/pipes/question-answer-file-format.pipe.ts","./src/app/components/question/question-extended-title/question-extended-title.component.html","./src/app/components/question/question-extended-title/question-extended-title.component.ts","./src/app/custom-controls/answer-selector/answer-selector.component.html","./src/app/custom-controls/answer-selector/answer-selector.component.ts","./src/app/components/question/conditional-question/conditional-question.component.html","./src/app/components/question/conditional-question/conditional-question.component.ts","./src/app/enums/ask-period-mode.ts","./src/app/enums/question-default-mode.ts","./src/app/enums/ask-mode.ts","./src/app/enums/global-item-type.enum.ts","./src/app/enums/tool-dynamic-field-usage.enum.ts","./src/app/helpers/extract-params-from-model.ts","./src/app/services/inventory.service.ts","./src/app/custom-controls/item-selector/item-selector.component.html","./src/app/custom-controls/item-selector/item-selector.component.ts","./src/app/components/question/question-asset-field/question-asset-field.component.ts","./src/app/components/question/question-asset-field/question-asset-field.component.html","./src/app/models/questionParameters/date-question-parameter.ts","./src/app/enums/supplier-document-editor-type.ts","./src/app/services/file-storage.service.ts","./src/app/components/markdown-editor/markdown-editor.component.ts","./src/app/helpers/supplier-documents-editor-placeholder.ts","./src/app/components/markdown-editor/markdown-editor.component.html","./src/app/enums/tooltip-enums.ts","./src/app/custom-controls/tooltip/tooltip.component.ts","./src/app/custom-controls/tooltip/tooltip.component.html","./src/app/enums/text-render-type.ts","./src/app/pipes/enum-to-array.pipe.ts","./src/app/pipes/text-render-type.pipe.ts","./src/app/components/question/question-text/question-text.component.html","./src/app/components/question/question-text/question-text.component.ts","./src/app/enums/display-style.ts","./src/app/components/question/question-items-renderer/question-items-renderer.component.html","./src/app/components/question/question-items-renderer/question-items-renderer.component.ts","./src/app/components/question/question-multi-select/question-multi-select.component.html","./src/app/components/question/question-multi-select/question-multi-select.component.ts","./src/app/components/question/question-single-select/question-single-select.component.html","./src/app/components/question/question-single-select/question-single-select.component.ts","./src/app/components/question/question-boolean/question-boolean.component.ts","./src/app/components/question/question-boolean/question-boolean.component.html","./src/app/services/user-document-type.service.ts","./src/app/services/company-document-type.service.ts","./src/app/components/document-type-nested-selector/document-type-nested-selector.component.html","./src/app/components/document-type-nested-selector/document-type-nested-selector.component.ts","./src/app/components/question/question-file/question-file.component.html","./src/app/components/question/question-file/question-file.component.ts","./src/app/components/question/question-date/date-question-limit/date-question-limit.component.html","./src/app/components/question/question-date/date-question-limit/date-question-limit.component.ts","./src/app/components/question/question-date/question-date.component.html","./src/app/components/question/question-date/question-date.component.ts","./src/app/components/question/question-signature-pad/question-signature-pad.component.ts","./src/app/components/question/question-signature-pad/question-signature-pad.component.html","./src/app/components/question/question-profile/question-profile.component.html","./src/app/components/question/question-profile/question-profile.component.ts","./src/app/pipes/ask-question-period-mode.pipe.ts","./src/app/pipes/ask-mode.pipe.ts","./src/app/pipes/question-default-mode.pipe.ts","./src/app/components/question/question-add/question-add.component.html","./src/app/components/question/question-add/question-add.component.ts","./src/app/enums/trigger-type.enum.ts","./src/app/services/company-tag.service.ts","./src/app/custom-controls/chip-container/chip-container.component.html","./src/app/custom-controls/chip-container/chip-container.component.ts","./src/app/enums/trigger-action.enum.ts","./src/app/enums/company-site-selected-type.ts","./src/app/enums/site-attendance-approval-status.enum.ts","./src/app/enums/form-type.ts","./src/app/services/company-trigger-action.service.ts","./src/app/services/form.service.ts","./src/app/custom-controls/company-site-selector/company-site-selector.component.html","./src/app/custom-controls/company-site-selector/company-site-selector.component.ts","./src/app/components/trigger-selector/trigger-selector.component.html","./src/app/components/trigger-selector/trigger-selector.component.ts","./src/app/helpers/email-list-validator.ts","./src/app/helpers/email-template-validator.ts","./src/app/custom-controls/array-form-control/array-form-control.component.ts","./src/app/custom-controls/array-form-control/array-form-control.component.html","./src/app/components/company-settings/company-trigger-action/email-template/email-template.component.html","./src/app/components/company-settings/company-trigger-action/email-template/email-template.component.ts","./src/app/pipes/form-type.pipe.ts","./src/app/pipes/site-attendance-approval-status.pipe.ts","./src/app/components/company-settings/company-trigger-action/company-trigger-action.component.html","./src/app/components/company-settings/company-trigger-action/company-trigger-action.component.ts","./src/app/pipes/item-value.pipe.ts","./src/app/components/question/question-triggers/question-triggers.component.html","./src/app/components/question/question-triggers/question-triggers.component.ts","./src/app/components/question/add-remove-question-all-sites/add-remove-question-all-sites.component.ts","./src/app/components/question/add-remove-question-all-sites/add-remove-question-all-sites.component.html","./src/app/components/question/question-manager/question-manager.component.html","./src/app/components/question/question-manager/question-manager.component.ts","./src/app/enums/user-auto-complete-target-fields.ts","./src/app/enums/site-activity-report-type.enum.ts","./src/app/enums/filter-type.enum.ts","./src/app/pipes/date.pipe.ts","./src/app/enums/table.enum.ts","./src/app/models/grid/grid.config.ts","./src/app/models/emergency-contact-view-model.ts","./src/app/enums/schedule-report-mode.ts","./src/app/enums/schedule-report-type.ts","./src/app/models/question-answer-inputmodel.ts","./src/app/models/questionParameters/question-parameter.ts","./src/app/enums/report-type.enum.ts","./src/app/enums/sort-order-enum.ts","./src/app/directive/grid-template-name.directive.ts","./src/app/services/site-attendance.service.ts","./src/app/services/table-setting.service.ts","./src/app/enums/text-operator.enum.ts","./src/app/enums/tool-dynamic-field-type.enum.ts","./src/app/components/question-selector/question-selector.component.html","./src/app/components/question-selector/question-selector.component.ts","./src/app/pipes/filter-by-condition.pipe.ts","./src/app/pipes/text-operator.pipe.ts","./src/app/components/question-answer/question-answer-filter/question-answer-filter.component.html","./src/app/components/question-answer/question-answer-filter/question-answer-filter.component.ts","./src/app/services/announcement.service.ts","./src/app/components/site-activity/filtered-announcement/filtered-announcement.component.ts","./src/app/components/site-activity/filtered-announcement/filtered-announcement.component.html","./src/app/custom-controls/announcement-filter/announcement-filter.component.html","./src/app/custom-controls/announcement-filter/announcement-filter.component.ts","./src/app/components/inventory/dynamic-fields-filter/dynamic-fields-filter.component.html","./src/app/components/inventory/dynamic-fields-filter/dynamic-fields-filter.component.ts","./src/app/components/inventory/dynamic-fields-filter-renderer/dynamic-fields-filter-renderer.component.html","./src/app/components/inventory/dynamic-fields-filter-renderer/dynamic-fields-filter-renderer.component.ts","./src/app/components/question-answer/question-answer-filter-renderer/question-answer-filter-renderer.component.html","./src/app/components/question-answer/question-answer-filter-renderer/question-answer-filter-renderer.component.ts","./src/app/enums/approve-entity-type.ts","./src/app/pipes/approve-entity-type.pipe.ts","./src/app/enums/approve-status.ts","./src/app/pipes/approve-status.pipe.ts","./src/app/enums/document-expiry-status.enum.ts","./src/app/pipes/document-expiry-status.pipe.ts","./src/app/enums/asset-category-type-enum.ts","./src/app/pipes/asset-category-type-pipe.ts","./src/app/enums/site-asset-query-mode.enum.ts","./src/app/pipes/site-asset-query-mode.pipe.ts","./src/app/enums/site-supplier-document-status.ts","./src/app/pipes/site-supplier-document-version-status.pipe.ts","./src/app/enums/site-briefing-status.ts","./src/app/pipes/site-briefing-status.pipe.ts","./src/app/enums/obc-event-log-type.enum.ts","./src/app/pipes/worker-profile-log-type.pipe.ts","./src/app/services/site-supplier.service.ts","./src/app/services/workflow.service.ts","./src/app/services/document-kind.service.ts","./src/app/pipes/document-kind.pipe.ts","./src/app/custom-controls/filter-list-renderer/filter-list-renderer.component.html","./src/app/custom-controls/filter-list-renderer/filter-list-renderer.component.ts","./src/app/components/pdf-viewer/pdf-viewer.component.html","./src/app/components/pdf-viewer/pdf-viewer.component.ts","./src/app/components/file-viewer/file-viewer.component.html","./src/app/components/file-viewer/file-viewer.component.ts","./src/app/directive/document-expiry-status.directive.ts","./src/app/custom-controls/sortable-title-header/sortable-title-header.component.html","./src/app/custom-controls/sortable-title-header/sortable-title-header.component.ts","./src/app/enums/default-date-range.enum.ts","./src/app/enums/gender.enum.ts","./src/app/enums/site-induction-status.ts","./src/app/helpers/enum-to-array.ts","./src/app/enums/permit-status.ts","./src/app/enums/workflow/workflow-type.ts","./src/app/services/visitor-type.service.ts","./src/app/services/industry-type-service.ts","./src/app/services/cache.service.ts","./src/app/pipes/permit-status.pipe.ts","./src/app/pipes/site-induction-status.pipe.ts","./src/app/services/replay-subjects.ts","./src/app/services/company-supplier.service.ts","./src/app/custom-controls/company-supplier/company-supplier-selector.component.html","./src/app/custom-controls/company-supplier/company-supplier-selector.component.ts","./src/app/custom-controls/filter-asset-category/filter-asset-category.component.html","./src/app/custom-controls/filter-asset-category/filter-asset-category.component.ts","./src/app/custom-controls/document-type/document-type-selector.component.ts","./src/app/custom-controls/document-type/document-type-selector.component.html","./src/app/enums/form-load-mode.enum.ts","./src/app/services/supplier-permits.service.ts","./src/app/components/form-manage/form-selector/form-selector.component.html","./src/app/components/form-manage/form-selector/form-selector.component.ts","./src/app/models/user-basic-info-viewmodel.ts","./src/app/services/site-asset.service.ts","./src/app/custom-controls/user-autocomplete/user-autocomplete.component.html","./src/app/custom-controls/user-autocomplete/user-autocomplete.component.ts","./src/app/custom-controls/duration-form-control/duration-form-control.component.ts","./src/app/custom-controls/duration-form-control/duration-form-control.component.html","./src/app/components/inventory/inventory-location-selector/inventory-location-selector.component.html","./src/app/components/inventory/inventory-location-selector/inventory-location-selector.component.ts","./src/app/enums/site-induction-mode.enum.ts","./src/app/services/induction-service.ts","./src/app/custom-controls/company-induction-selector/company-induction-selector.component.html","./src/app/custom-controls/company-induction-selector/company-induction-selector.component.ts","./src/app/custom-controls/popover-filter/popover-filter-simple/popover-filter-simple.component.html","./src/app/custom-controls/popover-filter/popover-filter-simple/popover-filter-simple.component.ts","./src/app/custom-controls/popover-filter/popover-filter-simple/filter-header/filter-header.component.html","./src/app/custom-controls/popover-filter/popover-filter-simple/filter-header/filter-header.component.ts","./src/app/custom-controls/export-csv-popup/export-csv-popup.component.html","./src/app/custom-controls/export-csv-popup/export-csv-popup.component.ts","./src/app/custom-controls/grid/table-setting/table-setting.component.html","./src/app/custom-controls/grid/table-setting/table-setting.component.ts","./src/app/services/supplier-document.service.ts","./src/app/components/supplier-documents/supplier-document-sign-off-viewer/supplier-document-sign-off-viewer.component.html","./src/app/components/supplier-documents/supplier-document-sign-off-viewer/supplier-document-sign-off-viewer.component.ts","./src/app/services/approve-service.ts","./src/app/components/pending-approval/approve-reject/approve-reject.component.html","./src/app/components/pending-approval/approve-reject/approve-reject.component.ts","./src/app/custom-controls/induction-status/induction-status.component.html","./src/app/custom-controls/induction-status/induction-status.component.ts","./src/app/components/user-detail-card/user-detail-card.component.ts","./src/app/components/user-detail-card/user-detail-card.component.html","./src/app/pipes/gender.pipe.ts","./src/app/enums/form-register-for.ts","./src/app/pipes/form-register-for.pipe.ts","./src/app/custom-controls/grid/base-grid.component.html","./src/app/custom-controls/grid/base-grid.component.ts","./src/app/enums/answer-mode.enum.ts","./src/app/enums/document-provider.enum.ts","./src/app/enums/site-attendance-dispute-type.enum.ts","./src/app/models/userProfile/worker-profile-view-model.ts","./src/app/custom-controls/site-attendance-approval-status/site-attendance-approval-status.component.html","./src/app/custom-controls/site-attendance-approval-status/site-attendance-approval-status.component.ts","./src/app/components/emergency-contact-viewer/emergency-contact-viewer.component.html","./src/app/components/emergency-contact-viewer/emergency-contact-viewer.component.ts","./src/app/components/question-answer/user-information/user-information.component.html","./src/app/components/question-answer/user-information/user-information.component.ts","./src/app/components/induction/induction-filled-info/induction-filled-info.component.html","./src/app/components/induction/induction-filled-info/induction-filled-info.component.ts","./src/app/components/question-answer/document-answer-renderer/document-answer-renderer.component.html","./src/app/components/question-answer/document-answer-renderer/document-answer-renderer.component.ts","./src/app/models/questionParameters/text-render-mode-type.ts","./src/app/components/question/renderer/question-title-renderer/question-title-renderer.component.html","./src/app/components/question/renderer/question-title-renderer/question-title-renderer.component.ts","./src/app/components/question/renderer/rich-text-renderer/rich-text-renderer.component.ts","./src/app/components/question/renderer/rich-text-renderer/rich-text-renderer.component.html","./src/app/components/question-answer/question-list-answer-renderer/question-list-answer-renderer.component.html","./src/app/components/question-answer/question-list-answer-renderer/question-list-answer-renderer.component.ts","./src/app/enums/site-announcement-force-view-mode.ts","./src/app/components/announcement-renderer/checkin-announcement-renderer/checkin-announcement-renderer.component.html","./src/app/components/announcement-renderer/checkin-announcement-renderer/checkin-announcement-renderer.component.ts","./src/app/services/dispute-site-attendance.service.ts","./src/app/components/dispute-attendance/dispute-attendance.component.html","./src/app/components/dispute-attendance/dispute-attendance.component.ts","./src/app/components/dispute-history/dispute-history.component.html","./src/app/components/dispute-history/dispute-history.component.ts","./src/app/enums/form-data-status.ts","./src/app/enums/site-asset-request-approve-status.enum.ts","./src/app/enums/fill-form-mode.ts","./src/app/enums/form-apply-for.ts","./src/app/models/announcement-visit.ts","./src/app/models/workflow/variable-difinition.ts","./src/app/services/supplier-form.service.ts","./src/app/models/sitequestion-viewmodel.ts","./src/app/models/site-question-viewmodel.ts","./src/app/components/question/renderer/question-renderer/question-renderer.component.ts","./src/app/components/question/renderer/boolean-question-renderer/boolean-question-renderer.component.html","./src/app/components/question/renderer/boolean-question-renderer/boolean-question-renderer.component.ts","./src/app/pipes/display-style-css-class.pipe.ts","./src/app/components/question/renderer/single-select-question-renderer/single-select-question-renderer.component.html","./src/app/components/question/renderer/single-select-question-renderer/single-select-question-renderer.component.ts","./src/app/components/question/renderer/multi-select-question-renderer/multi-select-question-renderer.component.html","./src/app/components/question/renderer/multi-select-question-renderer/multi-select-question-renderer.component.ts","./src/app/components/question/renderer/text-question-renderer/text-question-renderer.component.html","./src/app/components/question/renderer/text-question-renderer/text-question-renderer.component.ts","./src/app/components/required-field/emergency-contact/emergency-contact.component.html","./src/app/components/required-field/emergency-contact/emergency-contact.component.ts","./src/app/components/question/renderer/emergency-contact-question-renderer/emergency-contact-question-renderer.component.html","./src/app/components/question/renderer/emergency-contact-question-renderer/emergency-contact-question-renderer.component.ts","./src/app/components/question/renderer/date-question-renderer/date-question-renderer.component.html","./src/app/components/question/renderer/date-question-renderer/date-question-renderer.component.ts","./src/app/enums/dropzone-source-type.ts","./src/app/components/question/renderer/dropzone-file/dropzone-file.component.html","./src/app/components/question/renderer/dropzone-file/dropzone-file.component.ts","./src/app/components/question/renderer/file-question-renderer/file-question-renderer.component.html","./src/app/components/question/renderer/file-question-renderer/file-question-renderer.component.ts","./src/app/custom-controls/signature-pad/signature-pad.component.ts","./src/app/custom-controls/signature-pad/signature-pad.component.html","./src/app/components/question/renderer/signature-pad-question-renderer/signature-pad-question-renderer.component.html","./src/app/components/question/renderer/signature-pad-question-renderer/signature-pad-question-renderer.component.ts","./src/app/components/question/renderer/single-question-renderer/single-question-renderer.component.html","./src/app/components/question/renderer/single-question-renderer/single-question-renderer.component.ts","./src/app/components/announcement-renderer/announcement-item-renderer/announcement-item-renderer.component.html","./src/app/components/announcement-renderer/announcement-item-renderer/announcement-item-renderer.component.ts","./src/app/enums/document-multi-image-mode-enum.ts","./src/app/components/question/renderer/required-document-renderer/required-document-renderer.component.html","./src/app/components/question/renderer/required-document-renderer/required-document-renderer.component.ts","./src/app/components/items-renderer/items-renderer.component.html","./src/app/components/items-renderer/items-renderer.component.ts","./src/app/workflow/workflow-form-renderer/workflow-form-renderer.component.html","./src/app/workflow/workflow-form-renderer/workflow-form-renderer.component.ts","./src/app/enums/permit-schedule-type.ts","./src/app/enums/DaysOfWeek.ts","./src/app/pipes/number-to-weekday.pipe.ts","./src/app/components/permit-schedule-selector/permit-schedule-item/permit-schedule-item.component.html","./src/app/components/permit-schedule-selector/permit-schedule-item/permit-schedule-item.component.ts","./src/app/pipes/days-of-week.pipe.ts","./src/app/components/permit-schedule-selector/permit-schedule-selector.component.html","./src/app/components/permit-schedule-selector/permit-schedule-selector.component.ts","./src/app/enums/asset-operator-mode.enum.ts","./src/app/enums/manage-site-asset-mode.enum.ts","./src/app/components/site-asset/asset-operator-mode-selector/asset-operator-mode-selector.component.html","./src/app/components/site-asset/asset-operator-mode-selector/asset-operator-mode-selector.component.ts","./src/app/components/form-manage/form-data-renderer/form-data-renderer.component.html","./src/app/components/form-manage/form-data-renderer/form-data-renderer.component.ts","./src/app/components/form-manage/filled-form-edit/filled-form-edit.component.html","./src/app/components/form-manage/filled-form-edit/filled-form-edit.component.ts","./src/app/pipes/group-by.pipe.ts","./src/app/components/announcement-renderer/announcement-renderer.component.html","./src/app/components/announcement-renderer/announcement-renderer.component.ts","./src/app/components/form-manage/form-history/form-history.component.html","./src/app/components/form-manage/form-history/form-history.component.ts","./src/app/pipes/asset-operator-mode.pipe.ts","./src/app/pipes/list-of-operator-registration-mode.pipe.ts","./src/app/pipes/time.pipe.ts","./src/app/pipes/permit-status-icon.pipe.ts","./src/app/pipes/permit-status-color.pipe.ts","./src/app/pipes/permit-status-title.pipe.ts","./src/app/pipes/filled-form-entity-status-icon.pipe.ts","./src/app/pipes/filled-form-entity-status-color.pipe.ts","./src/app/pipes/site-asset-request-approve-status.pipe.ts","./src/app/components/form-manage/form-data-details/form-data-details.component.html","./src/app/components/form-manage/form-data-details/form-data-details.component.ts","./src/app/components/question-answer/question-answer.component.html","./src/app/components/question-answer/question-answer.component.ts","./src/app/enums/export-as-file-type.ts","./src/app/services/export-as.service.ts","./src/app/helpers/datetime-helper.ts","./src/app/components/user-activity/user-activity.component.html","./src/app/components/user-activity/user-activity.component.ts","./src/app/pipes/form-title.pipe.ts","./src/app/components/site-activity/site-activity-report-component/site-activity-report-component/site-activity-report.component.html","./src/app/components/site-activity/site-activity-report-component/site-activity-report-component/site-activity-report.component.ts","./src/app/components/site-activity/site-activity.component.ts","./src/app/components/site-activity/site-activity.component.html","./src/app/components/site-attendance/site-attendance.component.html","./src/app/components/site-attendance/site-attendance.component.ts","./src/app/models/user-document-type.ts","./src/app/components/document-type-viewer/document-type-viewer-ul/document-type-viewer-ul.component.html","./src/app/components/document-type-viewer/document-type-viewer-ul/document-type-viewer-ul.component.ts","./src/app/components/document-type-viewer/document-type-viewer.component.ts","./src/app/components/document-type-viewer/document-type-viewer.component.html","./src/app/pipes/multi-image-mode-pipe.pipe.ts","./src/app/components/user-document-types/user-document-types.component.html","./src/app/components/user-document-types/user-document-types.component.ts","./src/app/components/god/god.component.ts","./src/app/components/god/god.component.html","./src/app/models/company-viewmodel.ts","./src/app/enums/company-category.ts","./src/app/services/product-plan.service.ts","./src/app/pipes/filter-by-property.pipe.ts","./src/app/pipes/company-category.pipe.ts","./src/app/components/god/manage-companies/manage-companies.component.html","./src/app/components/god/manage-companies/manage-companies.component.ts","./src/app/models/site-attendance-blocked-user-view-model.ts","./src/app/services/site-attendance-blocked-user.service.ts","./src/app/components/site-permissions/site-attendance-blocked-user/site-attendance-blocked-user.component.html","./src/app/components/site-permissions/site-attendance-blocked-user/site-attendance-blocked-user.component.ts","./src/app/enums/user-system.enum.ts","./src/app/services/academy.service.ts","./src/app/components/manage-videos/manage-videos.component.html","./src/app/components/manage-videos/manage-videos.component.ts","./src/app/components/light-box/light-box.component.ts","./src/app/components/light-box/light-box.component.html","./src/app/components/video-list/video-list.component.html","./src/app/components/video-list/video-list.component.ts","./src/app/enums/checkin-mode.enum.ts","./src/app/models/attendance-request/attendance-request-viewmodel.ts","./src/app/custom-controls/user-selector/user-selector.component.html","./src/app/custom-controls/user-selector/user-selector.component.ts","./src/app/enums/supplier-document-config-mode.enum.ts","./src/app/components/supplier-documents/supplier-document-description-viewer/supplier-document-description-viewer.component.html","./src/app/components/supplier-documents/supplier-document-description-viewer/supplier-document-description-viewer.component.ts","./src/app/components/supplier-documents/site-supplier-document-version-comments/site-supplier-document-version-comments.component.html","./src/app/components/supplier-documents/site-supplier-document-version-comments/site-supplier-document-version-comments.component.ts","./src/app/components/supplier-documents/supplier-document-renderer/supplier-document-renderer.component.html","./src/app/components/supplier-documents/supplier-document-renderer/supplier-document-renderer.component.ts","./src/app/models/site-required-field-viewmodel.ts","./src/app/helpers/validate-mandatory-business-validator.ts","./src/app/services/user-business-service.ts","./src/app/custom-controls/user-business/user-business.component.html","./src/app/custom-controls/user-business/user-business.component.ts","./src/app/pipes/to-any.pipe.ts","./src/app/components/required-field/required-field-renderer/required-field-renderer.component.html","./src/app/components/required-field/required-field-renderer/required-field-renderer.component.ts","./src/app/models/site-attendance-accompanier-model.ts","./src/app/enums/accompanier-mode.ts","./src/app/models/accompany-people-result.ts","./src/app/components/accompany-person/accompany-person.component.html","./src/app/components/accompany-person/accompany-person.component.ts","./src/app/components/question/induction-renderer/induction-renderer.component.html","./src/app/components/question/induction-renderer/induction-renderer.component.ts","./src/app/components/manual-check/manual-checkin/manual-checkin.component.html","./src/app/components/manual-check/manual-checkin/manual-checkin.component.ts","./src/app/services/site-question.service.ts","./src/app/components/manual-check/manual-checkout/manual-checkout.component.html","./src/app/components/manual-check/manual-checkout/manual-checkout.component.ts","./src/app/components/pre-check-in-list/pre-check-in-list.component.html","./src/app/components/pre-check-in-list/pre-check-in-list.component.ts","./src/app/components/manual-check/manual-check.component.html","./src/app/components/manual-check/manual-check.component.ts","./src/app/components/not-found-page/not-found-page.component.ts","./src/app/services/company-guard.service.ts","./src/app/models/company-user-view-model.ts","./src/app/helpers/permission-helper.ts","./src/app/enums/permission-mode.enum.ts","./src/app/enums/file-upload-accept-type.ts","./src/app/services/company-role.service.ts","./src/app/services/company-user.service.ts","./src/app/components/role-selector/role-selector.component.html","./src/app/components/role-selector/role-selector.component.ts","./src/app/custom-controls/check-list-form-control/check-list-form-control.component.html","./src/app/custom-controls/check-list-form-control/check-list-form-control.component.ts","./src/app/custom-controls/file-upload/file-upload.component.html","./src/app/custom-controls/file-upload/file-upload.component.ts","./src/app/components/site-permissions/company-user/company-user.component.html","./src/app/components/site-permissions/company-user/company-user.component.ts","./src/app/models/site-attendance-trigger-result-search-model.ts","./src/app/services/site-attendance-trigger-result.service.ts","./src/app/components/site-permissions/flagged-user/flagged-user.component.html","./src/app/components/site-permissions/flagged-user/flagged-user.component.ts","./src/app/components/company-owner/company-owner.component.ts","./src/app/components/company-owner/company-owner.component.html","./src/app/components/company-owner/billing/billing.component.html","./src/app/components/company-owner/billing/billing.component.ts","./src/app/custom-controls/clipboard-box/clipboard-box.component.html","./src/app/custom-controls/clipboard-box/clipboard-box.component.ts","./src/app/pipes/two-factor-verification-mode.pipe.ts","./src/app/components/user-profile/user-profile.component.html","./src/app/components/user-profile/user-profile.component.ts","./src/app/helpers/repeat-password-validator.ts","./src/app/components/change-password/change-password.component.ts","./src/app/components/change-password/change-password.component.html","./src/app/components/user-card/user-card.component.html","./src/app/components/user-card/user-card.component.ts","./src/app/components/company-settings/company-profile/company-profile.component.html","./src/app/components/company-settings/company-profile/company-profile.component.ts","./src/app/enums/answer-deletion-policy.enum.ts","./src/app/enums/data-deletion-policy.enum.ts","./src/app/enums/data-retention-policy-status.enum.ts","./src/app/enums/document-deletion-policy.enum.ts","./src/app/services/data-retention-policy.service.ts","./src/app/components/data-retention-policy/data-retention-policy.component.html","./src/app/components/data-retention-policy/data-retention-policy.component.ts","./src/app/services/manage-inventory.service.ts","./src/app/components/form-manage/form-injector/form-injector.component.html","./src/app/components/form-manage/form-injector/form-injector.component.ts","./src/app/custom-controls/sortable/sortable.component.html","./src/app/custom-controls/sortable/sortable.component.ts","./src/app/enums/check-in-approval-mode.enum.ts","./src/app/enums/compare-operator.enum.ts","./src/app/enums/location-override-mode-enum.ts","./src/app/helpers/friendly-label.ts","./src/app/components/inventory/inventory-dynamic-field-trigger-editor/inventory-dynamic-field-trigger-editor.component.html","./src/app/components/inventory/inventory-dynamic-field-trigger-editor/inventory-dynamic-field-trigger-editor.component.ts","./src/app/components/inventory/inventory-dynamic-filed-triggers/inventory-dynamic-field-triggers.component.html","./src/app/components/inventory/inventory-dynamic-filed-triggers/inventory-dynamic-field-triggers.component.ts","./src/app/pipes/tool-dynamic-field-type.pipe.ts","./src/app/components/inventory/manage-tool-categories/manage-tool-categories.component.html","./src/app/components/inventory/manage-tool-categories/manage-tool-categories.component.ts","./src/app/components/inventory/manage-inventory-locations/manage-inventory-locations.component.html","./src/app/components/inventory/manage-inventory-locations/manage-inventory-locations.component.ts","./src/app/components/inventory/inventory-status-trigger-editor/inventory-status-trigger-editor.component.html","./src/app/components/inventory/inventory-status-trigger-editor/inventory-status-trigger-editor.component.ts","./src/app/components/inventory/inventory-status-triggers/inventory-status-triggers.component.html","./src/app/components/inventory/inventory-status-triggers/inventory-status-triggers.component.ts","./src/app/components/inventory/manage-tool-statuses/manage-tool-statuses.component.html","./src/app/components/inventory/manage-tool-statuses/manage-tool-statuses.component.ts","./src/app/components/inventory/manage-inventory/manage-inventory.component.html","./src/app/components/inventory/manage-inventory/manage-inventory.component.ts","./src/app/components/manage-visitor-type/manage-visitor-type.component.html","./src/app/components/manage-visitor-type/manage-visitor-type.component.ts","./src/app/services/region.service.ts","./src/app/components/region/manage-region/manage-region.component.html","./src/app/components/region/manage-region/manage-region.component.ts","./src/app/enums/supplier-document-review-mode.enum.ts","./src/app/enums/supplier-document-approval-mode.enum.ts","./src/app/enums/supplier-document-expiry-notification-priod-type.enum.ts","./src/app/services/company-setting.service.ts","./src/app/pipes/supplier-document-approval-mode.pipe.ts","./src/app/pipes/supplier-document-review-mode.pipe.ts","./src/app/pipes/supplier-document-expiry-notification-period-type.pipe.ts","./src/app/components/supplier-documents/supplier-document-reminder/supplier-document-reminder.component.html","./src/app/components/supplier-documents/supplier-document-reminder/supplier-document-reminder.component.ts","./src/app/enums/signoff-mode.enum.ts","./src/app/enums/supplier-document-access-mode.enum.ts","./src/app/enums/supplier-document-amendment-mode.enum.ts","./src/app/enums/supplier-document-comment-mode.enum.ts","./src/app/enums/supplier-document-expire-date-mode.enum.ts","./src/app/enums/workflow-template-access-mode.ts","./src/app/services/workflow-template.service.ts","./src/app/services/company-workflow-template.service.ts","./src/app/pipes/workflow-type.pipe.ts","./src/app/enums/message-type.enum.ts","./src/app/pipes/message-type-filter.pipe.ts","./src/app/components/workflow-renderer/workflow-renderer.component.html","./src/app/components/workflow-renderer/workflow-renderer.component.ts","./src/app/pipes/supplier-document-access-mode.pipe.ts","./src/app/pipes/supplier-document-expiry-date-mode.pipe.ts","./src/app/pipes/supplier-document-sign-off-mode.pipe.ts","./src/app/pipes/supplier-document-comment-mode.pipe.ts","./src/app/pipes/supplier-document-amendment-mode.pipe.ts","./src/app/components/document-kind-add-edit/document-kind-add-edit.component.html","./src/app/components/document-kind-add-edit/document-kind-add-edit.component.ts","./src/app/pipes/yes-no.pipe.ts","./src/app/components/god/document-kind-manager/document-kind-manager.component.html","./src/app/components/god/document-kind-manager/document-kind-manager.component.ts","./src/app/components/supplier-documents/manage-supplier-documents/manage-supplier-documents.component.html","./src/app/components/supplier-documents/manage-supplier-documents/manage-supplier-documents.component.ts","./src/app/components/company-settings/company-document-type/company-document-type.component.html","./src/app/components/company-settings/company-document-type/company-document-type.component.ts","./src/app/enums/permit-open-policy.enum.ts","./src/app/enums/permit-start-date-policy.enum.ts","./src/app/components/evacuation-setting-editor/evacuation-setting-models/CompanyEvacuationSettings.ts","./src/app/services/evacuation.service.ts","./src/app/components/evacuation-setting-editor/evacuation-setting-editor.component.html","./src/app/components/evacuation-setting-editor/evacuation-setting-editor.component.ts","./src/app/extensions/form.helper.ts","./src/app/services/access-control.service.ts","./src/app/components/access-control-white-list-users/access-control-white-list-users.component.html","./src/app/components/access-control-white-list-users/access-control-white-list-users.component.ts","./src/app/pipes/permit-start-date-policy.pipe.ts","./src/app/pipes/permit-open-policy.pipe.ts","./src/app/components/company-Feature-Configuration/company-Feature-Configuration.component.html","./src/app/components/company-Feature-Configuration/company-Feature-Configuration.component.ts","./src/app/services/site-user.service.ts","./src/app/pipes/permission-mode.pipe.ts","./src/app/enums/import-source.enum.ts","./src/app/pipes/import-source.pipe.ts","./src/app/components/company-settings/permissions-settings/permissions-settings.component.html","./src/app/components/company-settings/permissions-settings/permissions-settings.component.ts","./src/app/components/company-settings/company-settings.component.html","./src/app/components/company-settings/company-settings.component.ts","./src/app/enums/product-plan-subscription-type.enum.ts","./src/app/pipes/subscription-type-pipe.pipe.ts","./src/app/components/god/manage-plans/manage-plans.component.html","./src/app/components/god/manage-plans/manage-plans.component.ts","./src/app/components/company-owner/site-automations/site-automations.component.ts","./src/app/components/company-owner/site-automations/site-automations.component.html","./src/app/models/print-layout/print-layout-model.ts","./src/app/services/card-layout.service.ts","./src/app/directive/draggable.directive.ts","./src/app/components/designer/draggable-element-page/draggable-element-page.component.html","./src/app/components/designer/draggable-element-page/draggable-element-page.component.ts","./src/app/components/designer/layout-page/layout-page.component.html","./src/app/components/designer/layout-page/layout-page.component.ts","./src/app/components/designer/card-designer/card-designer.component.html","./src/app/components/designer/card-designer/card-designer.component.ts","./src/app/layout/anonymouse/anonymous.component.ts","./src/app/layout/anonymouse/anonymous.component.html","./src/app/components/anonymous-check/anonymous-check.component.ts","./src/app/components/anonymous-check/anonymous-check.component.html","./src/app/components/anonymous-check/anonymous-checkin/anonymous-checkin.component.html","./src/app/components/anonymous-check/anonymous-checkin/anonymous-checkin.component.ts","./src/app/components/anonymous-check/anonymous-checkin/successfull-anonymous-checkin/successfull-anonymous-checkin.component.ts","./src/app/components/anonymous-check/anonymous-checkin/successfull-anonymous-checkin/successfull-anonymous-checkin.component.html","./src/app/models/industry-type/base-industry-type.ts","./src/app/models/industry-type/industry-type-view-model.ts","./src/app/models/industry-type/industry-type-model.ts","./src/app/components/god/manage-industry-types/manage-industry-types.component.html","./src/app/components/god/manage-industry-types/manage-industry-types.component.ts","./src/app/models/editable-item.ts","./src/app/enums/announcement-process-status.enum.ts","./src/app/enums/announcement-mode.enum.ts","./src/app/enums/site-announcement-display-time.enum.ts","./src/app/enums/file-category.enum.ts","./src/app/enums/accept-type.enum.ts","./src/app/enums/announcement-display-mode.enum.ts","./src/app/services/sas-store.ts","./src/app/pipes/announcement-display-mode.pipe.ts","./src/app/components/announcement-manager/create-announcement/create-announcement.component.html","./src/app/components/announcement-manager/create-announcement/create-announcement.component.ts","./src/app/components/site-selector-withexternal/site-selector-withexternal.component.html","./src/app/components/site-selector-withexternal/site-selector-withexternal.component.ts","./src/app/pipes/sort.pipe.ts","./src/app/pipes/site-announcement-display-time.pipe.ts","./src/app/pipes/announcement-mode.pipe.ts","./src/app/pipes/site-announcement-force-view-mode.pipe.ts","./src/app/components/announcement-manager/announcement/announcement.component.html","./src/app/components/announcement-manager/announcement/announcement.component.ts","./src/app/components/announcement-manager/announcement-manager.component.ts","./src/app/components/announcement-manager/announcement-manager.component.html","./src/app/services/scannable.service.ts","./src/app/components/scannables/scannable-items/scannable-items.component.html","./src/app/components/scannables/scannable-items/scannable-items.component.ts","./src/app/components/scannables/scannable-groups/scannable-groups.component.html","./src/app/components/scannables/scannable-groups/scannable-groups.component.ts","./src/app/enums/multiple-checkin-type.enum.ts","./src/app/enums/automatic-checkin-mode.ts","./src/app/enums/max-people-on-site-mode.enum.ts","./src/app/enums/auto-check-out-type.enum.ts","./src/app/enums/import-record-status.enum.ts","./src/app/enums/qr-code-checkin-mode.ts","./src/app/pipes/nicy-null.pipe.ts","./src/app/enums/checkin-location-mode.enum.ts","./src/app/pipes/checkin-location-mode.pipe.ts","./src/app/pipes/automatic-checkin-mode.pipe.ts","./src/app/pipes/qrcode-checkin-mode.pipe.ts","./src/app/pipes/accompanier-mode.pipe.ts","./src/app/components/site/import-sites/import-sites.component.html","./src/app/components/site/import-sites/import-sites.component.ts","./src/app/pipes/schedule-report-mode.pipe.ts","./src/app/pipes/schedule-report-type.pipe.ts","./src/app/pipes/report-delivery-type.pipe.ts","./src/app/pipes/report-period-type.pipe.ts","./src/app/components/site-activity/my-scheduled-reports/my-scheduled-reports.component.html","./src/app/components/site-activity/my-scheduled-reports/my-scheduled-reports.component.ts","./src/app/services/permission-guard.service.ts","./src/app/components/site-permissions/site-user/site-user.component.html","./src/app/components/site-permissions/site-user/site-user.component.ts","./src/app/components/anonymous-check/anonymous-checkout/anonymous-checkout.component.html","./src/app/components/anonymous-check/anonymous-checkout/anonymous-checkout.component.ts","./src/app/services/feature-guard.service.ts","./src/app/pipes/to-form-group.pipe.ts","./src/app/components/quick-setup/additional-company-host/additional-company-host.component.html","./src/app/components/quick-setup/additional-company-host/additional-company-host.component.ts","./src/app/components/quick-setup/minimal-add-site/minimal-add-site.component.html","./src/app/components/quick-setup/minimal-add-site/minimal-add-site.component.ts","./src/app/components/quick-setup/quick-setup.component.ts","./src/app/components/quick-setup/quick-setup.component.html","./src/app/enums/send-message-status.ts","./src/app/components/emergency-alarm/emergency-alarm.component.html","./src/app/components/emergency-alarm/emergency-alarm.component.ts","./src/app/components/host-push-notification/host-push-notification.component.html","./src/app/components/host-push-notification/host-push-notification.component.ts","./src/app/services/company-employee.service.ts","./src/app/components/region-selector/region-selector.component.html","./src/app/components/region-selector/region-selector.component.ts","./src/app/components/site-permissions/company-employee/company-employee.component.html","./src/app/components/site-permissions/company-employee/company-employee.component.ts","./src/app/components/document-report/document-report.component.ts","./src/app/components/document-report/document-report.component.html","./src/app/enums/link_to_company_status.ts","./src/app/components/company-supplier/company-supplier.component.html","./src/app/components/company-supplier/company-supplier.component.ts","./src/app/components/company-supplier/edit-company-supplier/edit-company-supplier.component.html","./src/app/components/company-supplier/edit-company-supplier/edit-company-supplier.component.ts","./src/app/enums/assign-tool-type.enum.ts","./src/app/components/inventory/tool-field-renderers/text-tool-field-renderer/text-tool-field-renderer.component.html","./src/app/components/inventory/tool-field-renderers/text-tool-field-renderer/text-tool-field-renderer.component.ts","./src/app/components/inventory/tool-field-renderers/image-tool-field-renderer/image-tool-field-renderer.component.html","./src/app/components/inventory/tool-field-renderers/image-tool-field-renderer/image-tool-field-renderer.component.ts","./src/app/components/inventory/tool-field-renderers/tool-field-renderer/tool-field-renderer.component.html","./src/app/components/inventory/tool-field-renderers/tool-field-renderer/tool-field-renderer.component.ts","./src/app/components/inventory/upsert-inventory-asset/upsert-inventory-asset.component.html","./src/app/components/inventory/upsert-inventory-asset/upsert-inventory-asset.component.ts","./src/app/components/inventory/reports/tool-assign-history/tool-assign-history.component.html","./src/app/components/inventory/reports/tool-assign-history/tool-assign-history.component.ts","./src/app/components/inventory/reports/inventory-tool-report/inventory-tool-report.component.html","./src/app/components/inventory/reports/inventory-tool-report/inventory-tool-report.component.ts","./src/app/enums/form-scope.ts","./src/app/enums/items-mixture-type.enum.ts","./src/app/components/items-mixture/multiple-drag-drop-sortable/multiple-drag-drop-sortable.component.html","./src/app/components/items-mixture/multiple-drag-drop-sortable/multiple-drag-drop-sortable.component.ts","./src/app/components/site/announcement-force-view-mode-selector/announcement-force-view-mode-selector.component.html","./src/app/components/site/announcement-force-view-mode-selector/announcement-force-view-mode-selector.component.ts","./src/app/pipes/optional-mandatory.pipe.ts","./src/app/custom-controls/optional-mandatory-selector/optional-mandatory-selector.component.html","./src/app/custom-controls/optional-mandatory-selector/optional-mandatory-selector.component.ts","./src/app/components/document-selector/document-selector.component.html","./src/app/components/document-selector/document-selector.component.ts","./src/app/components/announcement-selector/announcement-selector.component.html","./src/app/components/announcement-selector/announcement-selector.component.ts","./src/app/components/items-mixture/items-mixture.component.html","./src/app/components/items-mixture/items-mixture.component.ts","./src/app/enums/form-ask-mode.enum.ts","./src/app/enums/company-site-scope.ts","./src/app/enums/form-approval-mode.ts","./src/app/enums/asset-operation-form-category-type.enum.ts","./src/app/enums/permit-closure-policy.enum.ts","./src/app/enums/expiry-mode.enum.ts","./src/app/enums/auto-renew.enum.ts","./src/app/custom-controls/radio-form-group/radio-form-group.component.html","./src/app/custom-controls/radio-form-group/radio-form-group.component.ts","./src/app/components/visitor-type-selector/visitor-type-selector.component.html","./src/app/components/visitor-type-selector/visitor-type-selector.component.ts","./src/app/components/preview-upsert/preview-upsert.component.html","./src/app/components/preview-upsert/preview-upsert.component.ts","./src/app/pipes/form-scope.pipe.ts","./src/app/pipes/form-apply-for.pipe.ts","./src/app/pipes/form-ask-mode.pipe.ts","./src/app/pipes/expiry-mode.pipe.ts","./src/app/pipes/form-approval-mode.pipe.ts","./src/app/pipes/permit-closure-policy.pipe.ts","./src/app/components/form-manage/upsert-form/upsert-form.component.html","./src/app/components/form-manage/upsert-form/upsert-form.component.ts","./src/app/components/form-manage/form-manage/form-manage.component.html","./src/app/components/form-manage/form-manage/form-manage.component.ts","./src/app/enums/induction-ask-mode.enum.ts","./src/app/enums/offsite-supplier-collection-mode.enum.ts","./src/app/pipes/expiry-unit.pipe.ts","./src/app/pipes/induction-ask-mode.pipe.ts","./src/app/components/induction/upsert-induction/upsert-induction.component.html","./src/app/components/induction/upsert-induction/upsert-induction.component.ts","./src/app/pipes/company-site-scope.pipe.ts","./src/app/components/induction/induction-manage/induction-manage.component.html","./src/app/components/induction/induction-manage/induction-manage.component.ts","./src/app/enums/onboarding-type.enum.ts","./src/app/enums/message-query-type.enum.ts","./src/app/enums/supplier-documnet-review-form-selection-mode.enum.ts","./src/app/components/supplier-documents/supplier-document-review/supplier-document-review.component.html","./src/app/components/supplier-documents/supplier-document-review/supplier-document-review.component.ts","./src/app/services/message.service.ts","./src/app/components/message-history/message-history.component.html","./src/app/components/message-history/message-history.component.ts","./src/app/pipes/external-site-permission.pipe.ts","./src/app/components/supplier-documents/supplier-documents.component.html","./src/app/components/supplier-documents/supplier-documents.component.ts","./src/app/enums/site-supplier-access-mode.enum.ts","./src/app/pipes/filled-form-status.pipe.ts","./src/app/components/anonymous-permit/anonymous-permit.component.html","./src/app/components/anonymous-permit/anonymous-permit.component.ts","./src/app/custom-controls/temporarily-asset-icon/temporarily-asset-icon.component.ts","./src/app/custom-controls/temporarily-asset-icon/temporarily-asset-icon.component.html","./src/app/components/site-asset/site-asset-check-in-out/site-asset-check-in-out.component.html","./src/app/components/site-asset/site-asset-check-in-out/site-asset-check-in-out.component.ts","./src/app/enums/register-asset-mode.enum.ts","./src/app/components/inventory/asset-selector/asset-selector.component.html","./src/app/components/inventory/asset-selector/asset-selector.component.ts","./src/app/components/site-asset/register-site-asset/register-site-asset.component.html","./src/app/components/site-asset/register-site-asset/register-site-asset.component.ts","./src/app/components/site-asset/register-site-asset-operator/register-site-asset-operator.component.html","./src/app/components/site-asset/register-site-asset-operator/register-site-asset-operator.component.ts","./src/app/pipes/supplier-document-type-status-tooltip.pipe.ts","./src/app/pipes/document-type-status-icon.pipe.ts","./src/app/components/form-manage/form-details/form-details.component.html","./src/app/components/form-manage/form-details/form-details.component.ts","./src/app/components/site-asset/site-asset-checkin-history/site-asset-checkin-history.component.html","./src/app/components/site-asset/site-asset-checkin-history/site-asset-checkin-history.component.ts","./src/app/components/site-asset/manage-site-asset/manage-site-asset.component.html","./src/app/components/site-asset/manage-site-asset/manage-site-asset.component.ts","./src/app/enums/workflow/workflow-activities-enum.ts","./src/app/enums/show-supplier-document-review-button.ts","./src/app/enums/supplier-document-type-operation-kind.enum.ts","./src/app/enums/workflow/workflow-status.enum.ts","./src/app/enums/approval-mode-enum.ts","./src/app/components/supplier-documents/site-supplier-document-listener.service.ts","./src/app/components/supplier-documents/view-site-supplier-document-version/view-site-supplier-document-version.component.html","./src/app/components/supplier-documents/view-site-supplier-document-version/view-site-supplier-document-version.component.ts","./src/app/components/supplier-documents/site-supplier-document-uploader-container/site-supplier-document-uploader-container.component.html","./src/app/components/supplier-documents/site-supplier-document-uploader-container/site-supplier-document-uploader-container.component.ts","./src/app/components/form-manage/form-report/form-report.component.html","./src/app/components/form-manage/form-report/form-report.component.ts","./src/app/enums/seating-mode.enum.ts","./src/app/models/site-qrcode-viewmodel.ts","./src/app/models/dirty-components.ts","./src/app/enums/delayed-answer-mode.ts","./src/app/enums/access-control-automatic-attendance-mode.ts","./src/app/enums/site-management-mode.ts","./src/app/enums/access-control-unit-provider.ts","./src/app/services/manage-site.service.ts","./src/app/services/manage-supplier-site.service.ts","./src/app/pipes/access-control-automatic-attendance-mode.pipe.ts","./src/app/pipes/access-control-unit-provider.pipe.ts","./src/app/services/biostar.service.ts","./src/app/directive/email-list.directive.ts","./src/app/components/site-management/contact-information/contact-information.component.ts","./src/app/components/site-management/contact-information/contact-information.component.html","./src/app/custom-controls/duration-selector/duration-selector.component.html","./src/app/custom-controls/duration-selector/duration-selector.component.ts","./src/app/custom-controls/hour-minute-selector/hour-minute-selector.component.ts","./src/app/custom-controls/hour-minute-selector/hour-minute-selector.component.html","./src/app/enums/question-repo.ts","./src/app/enums/manage-site-question-visitor-type-mode.enum.ts","./src/app/services/site-required-user-document.service.ts","./src/app/services/site-required-field.service.ts","./src/app/components/manage-site-visitor-type/manage-site-visitor-type.component.html","./src/app/components/manage-site-visitor-type/manage-site-visitor-type.component.ts","./src/app/components/manage-site-question-visitor-type/manage-site-question-visitor-type.component.html","./src/app/components/manage-site-question-visitor-type/manage-site-question-visitor-type.component.ts","./src/app/models/user-profile-viewmodel.ts","./src/app/components/site/site-announcement-manage/site-announcement-manage.component.html","./src/app/components/site/site-announcement-manage/site-announcement-manage.component.ts","./src/app/components/induction/induction-selector/induction-selector.component.html","./src/app/components/induction/induction-selector/induction-selector.component.ts","./src/app/components/site/site-induction/site-induction.component.html","./src/app/components/site/site-induction/site-induction.component.ts","./src/app/components/site/site-forms/site-forms.component.html","./src/app/components/site/site-forms/site-forms.component.ts","./src/app/components/scannables/site-scannable-group/site-scannable-group.component.html","./src/app/components/scannables/site-scannable-group/site-scannable-group.component.ts","./src/app/components/site-management/site-questions-management/site-questions-management.component.html","./src/app/components/site-management/site-questions-management/site-questions-management.component.ts","./src/app/custom-controls/image-cropper-form-control/image-cropper-form-control.component.html","./src/app/custom-controls/image-cropper-form-control/image-cropper-form-control.component.ts","./src/app/pipes/auto-check-out-type.pipe.ts","./src/app/pipes/delay-answer-mode.pipe.ts","./src/app/pipes/enabled-disabled-switch.pipe.ts","./src/app/pipes/dic-to-array.pipe.ts","./src/app/pipes/access-control-induction-mode.pipe.ts","./src/app/pipes/access-control-sitebriefing-mode.pipe.ts","./src/app/pipes/access-control-supplier-document-mode.pipe.ts","./src/app/pipes/access-control-unit-direction.pipe.ts","./src/app/components/site-management/site-management.component.html","./src/app/components/site-management/site-management.component.ts","./src/app/components/company-integrations/procore-configuration-access-code-callback/procore-configuration-access-code-callback.component.html","./src/app/components/company-integrations/procore-configuration-access-code-callback/procore-configuration-access-code-callback.component.ts","./src/app/enums/procore-integration-type.enum.ts","./src/app/enums/procore-export-modes.enum.ts","./src/app/enums/procore-connection-mode.ts","./src/app/enums/procore-folder-structure-mode.enum.ts","./src/app/pipes/procore-export-site-attendance-as-time-card-mode-pipe.pipe.ts","./src/app/pipes/procore-comment-mode.pipe.ts","./src/app/pipes/procore-export-site-attendance-as-visitor-log-mode-pipe.pipe.ts","./src/app/pipes/procore-export-site-attendance-as-manpower-mode-pipe.pipe.ts","./src/app/pipes/procore-folder-structure-mode.pipe.ts","./src/app/components/company-integrations/procore-integration/procore-integration.component.html","./src/app/components/company-integrations/procore-integration/procore-integration.component.ts","./src/app/enums/myob-system-type.enum.ts","./src/app/pipes/myob-period-type.pipe.ts","./src/app/components/company-integrations/myob-integration/myob-integration.component.html","./src/app/components/company-integrations/myob-integration/myob-integration.component.ts","./src/app/enums/handshq-supplier-document-approval-mode.ts","./src/app/pipes/tokenize.pipe.ts","./src/app/pipes/handshq-supplier-document-approval-mode.pipe.ts","./src/app/components/company-integrations/handshq-integration/handshq-integration.component.html","./src/app/components/company-integrations/handshq-integration/handshq-integration.component.ts","./src/app/components/company-integrations/biostar-integration/biostar-configuration/biostar-configuration.component.html","./src/app/components/company-integrations/biostar-integration/biostar-configuration/biostar-configuration.component.ts","./src/app/components/company-integrations/company-integrations.component.html","./src/app/components/company-integrations/company-integrations.component.ts","./src/app/services/can-deactivate-guard.service.ts","./src/app/enums/site-induction-reject-status.ts","./src/app/components/pending-approval/pending-to-approve-list/pending-to-approve-list.component.html","./src/app/components/pending-approval/pending-to-approve-list/pending-to-approve-list.component.ts","./src/app/components/company-integrations/myob-configuration-access-code-callback/myob-configuration-access-code-callback.component.html","./src/app/components/company-integrations/myob-configuration-access-code-callback/myob-configuration-access-code-callback.component.ts","./src/app/services/permit.service.ts","./src/app/components/form-manage/permit/update-permit-status/update-permit-status.component.html","./src/app/components/form-manage/permit/update-permit-status/update-permit-status.component.ts","./src/app/components/form-manage/permit/permit-history/permit-history.component.html","./src/app/components/form-manage/permit/permit-history/permit-history.component.ts","./src/app/components/form-manage/permit/permit-report/permit-report.component.html","./src/app/components/form-manage/permit/permit-report/permit-report.component.ts","./src/app/pipes/form-data-status.pipe.ts","./src/app/components/supplier-forms/supplier-form-history/supplier-form-history.component.html","./src/app/components/supplier-forms/supplier-form-history/supplier-form-history.component.ts","./src/app/components/supplier-forms/supplier-forms.component.html","./src/app/components/supplier-forms/supplier-forms.component.ts","./src/app/components/supplier-forms/supplier-fill-form/supplier-fill-form.component.ts","./src/app/components/supplier-forms/supplier-fill-form/supplier-fill-form.component.html","./src/app/components/supplier-forms/supplier-anonymous-forms/supplier-anonymous-forms.component.html","./src/app/components/supplier-forms/supplier-anonymous-forms/supplier-anonymous-forms.component.ts","./src/app/components/supplier-join-to-company/supplier-join-to-company.component.html","./src/app/components/supplier-join-to-company/supplier-join-to-company.component.ts","./src/app/enums/security-log-type.enum.ts","./src/app/services/security-log-service.service.ts","./src/app/pipes/security-log-type.pipe.ts","./src/app/components/security-log-report/security-log-report.component.html","./src/app/components/security-log-report/security-log-report.component.ts","./src/app/enums/access-control-unit-gate-status.enum.ts","./src/app/enums/access-control-unit-gate-type.enum.ts","./src/app/services/access-control-unit.service.ts","./src/app/components/site-access-control-unit-manual/site-access-control-unit-manual.component.html","./src/app/components/site-access-control-unit-manual/site-access-control-unit-manual.component.ts","./src/app/components/inventory/template-company-asset-manager/template-company-asset-manager.component.ts","./src/app/components/inventory/template-company-asset-manager/template-company-asset-manager.component.html","./src/app/components/inventory/manage-global-dynamic-fields/manage-global-dynamic-fields.component.html","./src/app/components/inventory/manage-global-dynamic-fields/manage-global-dynamic-fields.component.ts","./src/app/components/notification-setting/notification-setting.component.html","./src/app/components/notification-setting/notification-setting.component.ts","./src/app/components/permission-container/permission-container.component.html","./src/app/components/permission-container/permission-container.component.ts","./src/app/custom-controls/dropdown-button/dropdown-button.component.html","./src/app/custom-controls/dropdown-button/dropdown-button.component.ts","./src/app/models/evacuation/evacuation-viewmodels.ts","./src/app/pipes/evacuation-mode.pipe.ts","./src/app/pipes/evacuation-status.pipe.ts","./src/app/components/evacuation-report/evacuation-details/evacuation-details.component.html","./src/app/components/evacuation-report/evacuation-details/evacuation-details.component.ts","./src/app/components/evacuation-report/evacuation-report.component.html","./src/app/components/evacuation-report/evacuation-report.component.ts","./src/app/components/supplier-documents/view-site-supplier-document-version-history/view-site-supplier-document-version-history.component.html","./src/app/components/supplier-documents/view-site-supplier-document-version-history/view-site-supplier-document-version-history.component.ts","./src/app/components/supplier-documents/supplier-document-report/supplier-document-report.component.html","./src/app/components/supplier-documents/supplier-document-report/supplier-document-report.component.ts","./src/app/components/procore-sync-monitoring/procore-sync-monitoring.component.html","./src/app/components/procore-sync-monitoring/procore-sync-monitoring.component.ts","./src/app/components/god/manage-gates/manage-gates.component.html","./src/app/components/god/manage-gates/manage-gates.component.ts","./src/app/workflow/ComponentLoaderDirective.ts","./src/app/workflow/workflow-engine/workflow-engine.component.html","./src/app/workflow/workflow-engine/workflow-engine.component.ts","./src/app/models/workflow/workflow-list-viewmodel.ts","./src/app/workflow/workflow-cartable/workflow-cartable.component.html","./src/app/workflow/workflow-cartable/workflow-cartable.component.ts","./src/app/components/other-site-supplier-document-report/other-site-supplier-document-report.component.html","./src/app/components/other-site-supplier-document-report/other-site-supplier-document-report.component.ts","./src/app/components/template-company-visitor-types/template-company-visitor-types.component.ts","./src/app/components/template-company-visitor-types/template-company-visitor-types.component.html","./src/app/services/procore.service.ts","./src/app/components/company-selector/company-selector.component.html","./src/app/components/company-selector/company-selector.component.ts","./src/app/components/site-selector/company-site-selector/specific-company-site-selector.component.ts","./src/app/pipes/integration-operation.pipe.ts","./src/app/components/god/procore-force-to-sync/procore-force-to-sync.component.html","./src/app/components/god/procore-force-to-sync/procore-force-to-sync.component.ts","./src/app/components/god/company-workflow-template/company-workflow-template.component.html","./src/app/components/god/company-workflow-template/company-workflow-template.component.ts","./src/app/enums/generic-form-submission-method.enum.ts","./src/app/services/site-briefing-service.ts","./src/app/components/form-manage/site-briefing-form-viewer/site-briefing-form-viewer.component.html","./src/app/components/form-manage/site-briefing-form-viewer/site-briefing-form-viewer.component.ts","./src/app/components/form-manage/site-briefing-report/site-briefing-report.component.html","./src/app/components/form-manage/site-briefing-report/site-briefing-report.component.ts","./src/app/components/induction/site-induction-detail/site-induction-detail.component.html","./src/app/components/induction/site-induction-detail/site-induction-detail.component.ts","./src/app/models/ai/ai-response.ts","./src/app/components/pending-approval/request-revision/request-revision.component.html","./src/app/components/pending-approval/request-revision/request-revision.component.ts","./src/app/components/induction/induction-report/induction-report.component.html","./src/app/components/induction/induction-report/induction-report.component.ts","./src/app/enums/worker-profile-field.enum.ts","./src/app/services/worker-profile.service.ts","./src/app/components/supplier-documents/supplier-document-signoff/supplier-document-signoff-report/supplier-document-signoff-report.component.html","./src/app/components/supplier-documents/supplier-document-signoff/supplier-document-signoff-report/supplier-document-signoff-report.component.ts","./src/app/components/site-briefings/site-briefing-signoff/site-briefing-signoff/site-briefing-signoff.component.html","./src/app/components/site-briefings/site-briefing-signoff/site-briefing-signoff/site-briefing-signoff.component.ts","./src/app/components/worker-profile/worker-profile-cards/worker-profile-card-history/worker-profile-card-history.component.ts","./src/app/components/worker-profile/worker-profile-cards/worker-profile-card-history/worker-profile-card-history.component.html","./src/app/components/worker-profile/worker-profile-cards/worker-profile-card-report/worker-profile-card-report.component.html","./src/app/components/worker-profile/worker-profile-cards/worker-profile-card-report/worker-profile-card-report.component.ts","./src/app/enums/actor-type.ts","./src/app/pipes/worker-profile-sub-type.pipe.ts","./src/app/pipes/object-to-list-key-value.pipe.ts","./src/app/components/worker-profile/worker-profile-history/worker-profile-history/worker-profile-history.component.html","./src/app/components/worker-profile/worker-profile-history/worker-profile-history/worker-profile-history.component.ts","./src/app/components/worker-profile/work-profile-tab/work-profile-tab.component.html","./src/app/components/worker-profile/work-profile-tab/work-profile-tab.component.ts","./src/app/components/worker-profile/worker-profile-component/worker-profile.component.html","./src/app/components/worker-profile/worker-profile-component/worker-profile.component.ts","./src/app/components/worker-profile/user-directory/user-directory.component.html","./src/app/components/worker-profile/user-directory/user-directory.component.ts","./src/app/components/god/manage-sms-provider/toggle-selector/toggle-selector.component.html","./src/app/components/god/manage-sms-provider/toggle-selector/toggle-selector.component.ts","./src/app/components/god/manage-sms-provider/test-message-component/test-message-component.component.html","./src/app/components/god/manage-sms-provider/test-message-component/test-message-component.component.ts","./src/app/components/god/manage-sms-provider/manage-sms-provider.component.html","./src/app/app-routing.module.ts","./src/app/components/god/manage-sms-provider/manage-sms-provider.component.ts","./src/environments/environment.prod.ts","./src/app/services/google-analytics.service.ts","./src/app/custom-controls/modal/modal.component.html","./src/app/custom-controls/modal/modal.component.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/services/http-helper.interceptor.ts","./src/app/shared-modules/ngx-bootstrap.module.ts","./src/app/components/supplier-documents/site-supplier-document-uploader/site-supplier-document-uploader.component.html","./src/app/components/supplier-documents/site-supplier-document-uploader/site-supplier-document-uploader.component.ts","./src/app/custom-controls/supplier-document-selector/supplier-document-selector.component.html","./src/app/custom-controls/supplier-document-selector/supplier-document-selector.component.ts","./src/app/components/workflow-renderer/workflow-variables-renderer/workflow-variables-renderer.component.html","./src/app/components/workflow-renderer/workflow-variables-renderer/workflow-variables-renderer.component.ts","./src/app/components/supplier-documents/site-supplier-document-multiple-uploader/site-supplier-document-multiple-uploader.component.html","./src/app/components/supplier-documents/site-supplier-document-multiple-uploader/site-supplier-document-multiple-uploader.component.ts","./src/app/pipes/html-new-line.pipe.ts","./src/app/components/document-type-viewer/document-type-viewer-item/document-type-viewer-item.component.html","./src/app/components/document-type-viewer/document-type-viewer-item/document-type-viewer-item.component.ts","./src/app/components/supplier-documents/supplier-document-review/workflow/supplier-document-review-workflow/supplier-document-review-workflow.component.html","./src/app/components/supplier-documents/supplier-document-review/workflow/supplier-document-review-workflow/supplier-document-review-workflow.component.ts","./src/app/components/supplier-documents/supplier-document-review/workflow/supplier-document-detail-workflow/supplier-document-detail-workflow.component.html","./src/app/components/supplier-documents/supplier-document-review/workflow/supplier-document-detail-workflow/supplier-document-detail-workflow.component.ts","./src/app/workflow/workflow-instance-history/workflow-instance-history.component.html","./src/app/workflow/workflow-instance-history/workflow-instance-history.component.ts","./src/app/components/supplier-documents/supplier-document-kind-uploder/supplier-document-kind-uploder.component.html","./src/app/components/supplier-documents/supplier-document-kind-uploder/supplier-document-kind-uploder.component.ts","./src/app/app.module.ts","./src/main.ts","/app/node_modules/moment/locale|sync|/^//.*$/"],"sourcesContent":["interface Date {\n addDays(days: number): Date;\n addYears(years: number): Date;\n UTCDate(isoDate: string): Date;\n UTCDate2(): Date;\n}\n\nDate.prototype.addDays = function (days): Date {\n var date = new Date(this.valueOf());\n date.setDate(date.getDate() + days);\n return date;\n};\n\nDate.prototype.addYears = function (years): Date {\n var date = new Date(this.valueOf());\n date.setFullYear(date.getFullYear() + years);\n return date;\n};\n\nDate.prototype.UTCDate = function (isoString): Date {\n console.log('isoString : ', isoString);\n var c = isoString.split(/\\D+/);\n console.log('c : ', c);\n\n var b = c.map(c => +c);\n console.log('b : ', b);\n\n return new Date(Date.UTC(b[0], --b[1], b[2], b[3], b[4], b[5], b[6]));\n};\n\nDate.prototype.UTCDate2 = function (): Date {\n var date = new Date(this.valueOf());\n var now_utc = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(),\n date.getHours(), date.getMinutes(), date.getSeconds());\n\n return new Date(now_utc);\n};\n","export enum CompanyStatus {\n CanAddSite = 0,\n IsEnableSeatingLocation = 1,\n WorkflowEngineDisplayMode = 2,\n HasAnySupplierDocumentWorkflow = 3,\n CanUseAi = 4,\n}\n","\nexport enum UserPermission {\n None = 0,\n ManageAutomations = 1 << 0, // done I,II 1\n SendEmergencyAlarm = 1 << 1, // done I,II 2\n ManualCheckIn = 1 << 2, // done I,II 4\n ManualCheckOut = 1 << 3, // done I, II 8\n ModifySite = 1 << 4, // done I, II 16\n ManageSiteQuestion = 1 << 5, // done I, II 32\n ManageSiteAnnouncement = 1 << 6, //done I, II 64\n CompanyHost = 1 << 7,\n ViewReports = 1 << 8, //done I,II 256\n ManageViewTaggedUser = 1 << 9, //done I 512\n ViewAttendanceAnswers = 1 << 10, //done I,II 1024\n AdjustSiteLocation = 1 << 11, //done I,II 2048\n AddSiteByTemplate = 1 << 12, //done I,II 4096 I didn't found any method in web call \"site/add-site-baseon-template\"\n SiteHost = 1 << 13,\n ViewKioskMode = 1 << 15,\n SendPushNotification = 1 << 16,\n ApproveRejectSiteInduction = 1 << 17,\n AssetTrackerAdmin = 1 << 18,\n SupplierManagement = 1 << 19,\n ViewSensitiveAnswers = 1 << 20,\n EditUserDirectory = 1 << 21,\n\n ManualCheck = ManualCheckIn | ManualCheckOut,\n LiveAttendance = ManualCheckIn | ManualCheckOut | ViewReports,\n}\n\n\nexport const CombinedUserPermissionList: UserPermission =\n UserPermission.None |\n UserPermission.ManageAutomations |\n UserPermission.SendEmergencyAlarm |\n UserPermission.ManualCheckIn |\n UserPermission.ManualCheckOut |\n UserPermission.ModifySite |\n UserPermission.ManageSiteQuestion |\n UserPermission.ManageSiteAnnouncement |\n UserPermission.CompanyHost |\n UserPermission.ViewReports |\n UserPermission.ManageViewTaggedUser |\n UserPermission.ViewAttendanceAnswers |\n UserPermission.AdjustSiteLocation |\n UserPermission.AddSiteByTemplate |\n UserPermission.SiteHost |\n UserPermission.ViewKioskMode |\n UserPermission.SendPushNotification |\n UserPermission.ApproveRejectSiteInduction |\n UserPermission.AssetTrackerAdmin |\n UserPermission.SupplierManagement\nUserPermission.ViewSensitiveAnswers |\n UserPermission.EditUserDirectory;\n\nexport const UserPermissionList = [\n UserPermission.ManageAutomations,//1 << 0, // done I,II 1\n UserPermission.SendEmergencyAlarm,// 1 << 1, // done I,II 2\n UserPermission.ManualCheckIn,//1 << 2, // done I,II 4\n UserPermission.ManualCheckOut,//1 << 3, // done I, II 8\n UserPermission.ModifySite,//1 << 4, // done I, II 16\n UserPermission.ManageSiteQuestion,//1 << 5, // done I, II 32\n UserPermission.ManageSiteAnnouncement,//1 << 6, //done I, II 64\n UserPermission.CompanyHost,//1 << 7,\n UserPermission.ViewReports,//1 << 8, //done I,II 256\n UserPermission.ManageViewTaggedUser,//1 << 9, //done I 512\n UserPermission.ViewAttendanceAnswers,//1 << 10, //done I,II 1024\n UserPermission.AdjustSiteLocation,//1 << 11, //done I,II 2048\n UserPermission.AddSiteByTemplate,//1 << 12, //done I,II 4096 I didn't found any method in web call \"site/add-site-baseon-template\"\n UserPermission.SiteHost,//1 << 13,\n UserPermission.ViewKioskMode,//1 << 15,\n UserPermission.SendPushNotification,\n UserPermission.ApproveRejectSiteInduction,\n UserPermission.AssetTrackerAdmin,\n UserPermission.SupplierManagement,\n UserPermission.ViewSensitiveAnswers,\n UserPermission.EditUserDirectory,\n];\n","export enum GodUserPermission {\n None = 0,\n ManageCompanies = 1 << 0, //1\n ManagePlans = 1 << 1, //2\n EditMobileNumber = 1 << 2, //4\n DeleteSupplierDocuments = 1 << 3, //8\n ManageDocumentTypes = 1 << 4, //16\n ManageVideos = 1 << 5, //32\n ManageIndustryTypes = 1 << 6, //64\n ManageGlobalAssetFields = 1 << 7, //128\n AuditLog = 1 << 8, //256\n ProcoreSyncMonitoring = 1 << 9, //512\n ManageGates = 1 << 10, //1024\n ForceProcoreSync = 1 << 11,//2048\n WorkflowManagement = 1 << 12,//4096\n WorklfowAdvancedManagement = 1 << 13,\n ManageSMSProvider = 1 << 14,\n ExprimentalAccess = 1 << 15,\n}\n\nexport const CombinedGodUserPermissionList: GodUserPermission =\n GodUserPermission.None |\n GodUserPermission.ManageCompanies |\n GodUserPermission.ManagePlans |\n GodUserPermission.EditMobileNumber |\n GodUserPermission.DeleteSupplierDocuments |\n GodUserPermission.ManageDocumentTypes |\n GodUserPermission.ManageVideos |\n GodUserPermission.ManageIndustryTypes |\n GodUserPermission.ManageGlobalAssetFields |\n GodUserPermission.AuditLog |\n GodUserPermission.ProcoreSyncMonitoring |\n GodUserPermission.ManageGates |\n GodUserPermission.ForceProcoreSync |\n GodUserPermission.WorkflowManagement |\n GodUserPermission.WorklfowAdvancedManagement |\n GodUserPermission.ExprimentalAccess;\n\nexport const GodUserPermissionList = [\n GodUserPermission.ManageCompanies, //1\n GodUserPermission.ManagePlans, //2\n GodUserPermission.EditMobileNumber, //4\n GodUserPermission.DeleteSupplierDocuments, //8\n GodUserPermission.ManageDocumentTypes, //16\n GodUserPermission.ManageVideos, //32\n GodUserPermission.ManageIndustryTypes, //64\n GodUserPermission.ManageGlobalAssetFields, //128\n GodUserPermission.AuditLog, //256\n GodUserPermission.ProcoreSyncMonitoring, //512\n GodUserPermission.ManageGates, //1024\n GodUserPermission.ForceProcoreSync,//2048\n GodUserPermission.WorkflowManagement,//4,096\n GodUserPermission.WorklfowAdvancedManagement,\n GodUserPermission.ManageSMSProvider,\n GodUserPermission.ExprimentalAccess,\n];\n","export enum ExternalSitePermission {\n NoPermission = 0,\n ViewActivity = 1 << 0,\n DefineQuestions = 1 << 1,\n DefineAnnouncements = 1 << 2,\n DefineForms = 1 << 3,\n DefineInductions = 1 << 4,\n}\nexport enum AggregatedExternalSitePermission {\n AccessToManageSiteItems = ExternalSitePermission.DefineQuestions | ExternalSitePermission.DefineAnnouncements | ExternalSitePermission.DefineForms | ExternalSitePermission.DefineInductions,\n\n}\n","\nexport enum PortalDisplayMode {\n Page = 0,\n PopUp= 1,\n}\n","import { PortalDisplayMode } from \"./portal-display-mode.enum\";\n\nexport const Constants = {\n SELF_ATTENDANCE_TITLE: \"Self\",\n AUTO_ATTENDANCE_TITLE: \"Auto\",\n HOST_ATTENDANCE_TITLE: \"Host\",\n ANONYMOUS_ATTENDANCE_TITLE: \"Camera QR\",\n KIOSK_ATTENDANCE_TITLE: \"Kiosk\",\n TEXT_IS_ANYTHING_CONDITION_VALUE: '**/**',\n WORKER_PROFILE_REPORT_PREFIX: \"wp_\",\n}\n\nexport const MaxFileSize = 100;\nexport const InlineRichTextMaxFileSizeInMegaByte = 10;\nexport const DefaultWorkflowDisplayMode = PortalDisplayMode.PopUp;\n\n","import { Injectable, PLATFORM_ID, Inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StorageService {\n\n constructor(@Inject(PLATFORM_ID) private platformId: Object) { }\n\n set(name: string, value: string, saveInSessionStorage: boolean = false) {\n if (isPlatformBrowser(this.platformId)) {\n if (saveInSessionStorage)\n sessionStorage.setItem(name, value);\n else\n localStorage.setItem(name, value);\n }\n }\n\n get(name: string, loadFromSessionStorage: boolean = true): string {\n if (isPlatformBrowser(this.platformId)) {\n var value = loadFromSessionStorage ? sessionStorage.getItem(name) : null;\n return value ?? localStorage.getItem(name);\n }\n }\n\n remove(name: string) {\n if (isPlatformBrowser(this.platformId)) {\n localStorage.removeItem(name);\n }\n }\n\n clearAll() {\n if (isPlatformBrowser(this.platformId)) {\n localStorage.clear();\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyAuthService {\n\n hashLink: string = null;\n activeCompanyId: number = null;\n currentCompanyId: number = null;\n\n constructor() { }\n\n setCurrentCompanyId = (currentCompanyId?: number) => this.currentCompanyId = currentCompanyId;\n\n setCompanyId = (companyId?: number) => this.activeCompanyId = companyId;\n\n getCompanyId = (): number => this.activeCompanyId ?? this.currentCompanyId;\n\n setHashLink = (hashLink: string) => this.hashLink = hashLink;\n\n getHashLink = (): string => this.hashLink;\n}","import { SendOtpModel } from './../models/send-otp-model';\nimport { CompanyStatus } from 'src/app/enums/company-status.enum';\nimport { KeyValue } from './../models/helper-models';\nimport { AnonymousUserProfileWithStatusViewmodel } from './../models/anonymous-user-profile-with-status-viewmodel';\nimport { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { UserInfoViewModel } from '../models/user-info-viewmodel';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { UserBasicInfoViewModel } from '../models/user-basic-info-viewmodel';\nimport { CompanyViewModel } from '../models/company-viewmodel';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { RequestUserProfileUpdateViewmodel, UserProfileViewmodel } from '../models/user-profile-viewmodel';\nimport { ChangePasswordViewmodel } from '../models/change-password-viewmodel';\nimport { ServerResult, ServerResultData } from '../models/server-result-data';\nimport { UserPermissionsModel } from '../models/user-permissions-model';\nimport { UserPermission } from '../enums/user-permission.enum';\nimport { ProductPlanFeature } from '../enums/product-plan-feature.enum';\nimport { IntDictionary } from '../models/dictionary';\nimport { UserSearchModel as UserSearchModel } from '../models/user-search-model';\nimport { UserEditMobileModel } from '../models/user-edit-mobile-model';\nimport { UserEditMobileViewModel } from '../models/user-edit-mobile-viewmodel';\nimport { GodUserPermission } from '../enums/god-user-permission.enum';\nimport { SiteDetailsViewModel } from '../models/site-viewmodel';\nimport { AggregatedExternalSitePermission } from '../enums/external-site-permission';\nimport { PreLoginStatusViewModel } from '../models/pre-login-status-view-model';\nimport { TotpModel } from '../models/totp-model';\nimport { TotpVerifyViewModel } from '../models/totp-verify-view-model';\nimport { PortalDisplayMode } from '../enums/portal-display-mode.enum';\nimport { DefaultWorkflowDisplayMode } from '../enums/constants';\nimport { ScheduledReportLogViewModel } from \"../models/scheduled-report-log-view-model\";\nimport { StorageService } from './storage.service';\nimport { CompanyAuthService } from './company-auth.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService {\n\n apiUrl: string = '/api/user';\n info: BehaviorSubject = new BehaviorSubject(null);\n\n companyStatuses: BehaviorSubject[]> = new BehaviorSubject([]);\n currentCompany$: BehaviorSubject = new BehaviorSubject(null);\n _currentCompany: CompanyViewModel = null;\n companyFeatures = new BehaviorSubject>(null)\n userPermissions: BehaviorSubject = new BehaviorSubject(null);\n\n editorMaxLength: BehaviorSubject = new BehaviorSubject(100000);\n defaultServerTimeZone: BehaviorSubject = new BehaviorSubject(null);\n defaultCompanyType: BehaviorSubject = new BehaviorSubject(null);\n\n currentXsrfToken = '';\n\n setXsrfToken(xsrfToken: string) {\n this.currentXsrfToken = xsrfToken;\n this.storageService.set('XSRF-TOKEN', xsrfToken);\n }\n\n getXsrfToken(): string {\n if (!this.currentXsrfToken?.length)\n this.currentXsrfToken = this.storageService.get('XSRF-TOKEN');\n return this.currentXsrfToken ?? '';\n }\n\n constructor(\n private http: HttpClient,\n private router: Router,\n private route: ActivatedRoute,\n private storageService: StorageService,\n private companyAuthService: CompanyAuthService) {\n }\n\n get backUrl(): string {\n return this.route.snapshot.queryParams['returnPath'];\n }\n\n initUserInfo(): void {\n this.currentCompany$.subscribe((res) => this._currentCompany = res);\n\n this.http\n .get(`${this.apiUrl}/user-info`)\n .subscribe((res) => {\n if (res.reloadPage) {\n window.location.reload();\n return;\n }\n this.info.next(res);\n this.companyStatuses.next(res.companyStatuses);\n this.userPermissions.next(res.userPermissions);\n this.companyFeatures.next(res.companyFeatures);\n this.editorMaxLength.next(res.editorMaxLength);\n this.defaultServerTimeZone.next(res.defaultServerTimeZone);\n this.defaultCompanyType.next(res.defaultCompanyType);\n\n this.companyAuthService.setCurrentCompanyId(res.currentCompanyId);\n\n if (res.companies && res.companies.length > 0) {\n var cc = res.companies.find((c) => c.id == res.currentCompanyId);\n if (cc != null) this.currentCompany$.next(cc);\n }\n setTimeout(() => {\n if (res.redirectUrl) {\n this.router.navigateByUrl(res.redirectUrl);\n return;\n }\n if (res.firstName == null || res.lastName == null) {\n this.router.navigateByUrl('/user/profile');\n } else if (res.currentCompanyId != 0) {\n if (this.backUrl) this.router.navigateByUrl(this.backUrl);\n else if (this.router.url == '/not-found') {\n if (this.isTemplateCompany == true)\n this.router.navigateByUrl('/question');\n else this.router.navigateByUrl('/sites');\n }\n }\n }, 100);\n });\n }\n\n get currentCompany(): CompanyViewModel {\n return this._currentCompany;\n }\n\n get currentCompanyId(): number {\n if (this._currentCompany == null) return null;\n else return this._currentCompany.id;\n }\n\n get companyName(): string {\n if (this._currentCompany == null) return null;\n else return this._currentCompany.title;\n }\n\n get isTemplateCompany(): boolean {\n if (this._currentCompany == null) return false;\n else return this._currentCompany.isTemplate;\n }\n\n hasCompanyFeature(feature: ProductPlanFeature) {\n var companyFeatures = this.companyFeatures.value;\n if (!companyFeatures)\n return false;\n if (companyFeatures[feature])\n return true;\n else\n return false;\n }\n\n hasAdminPermissionOnSite(siteId: number): boolean {\n var userPermissions = this.userPermissions.value;\n if (!userPermissions)\n return false;\n return this.isCompanyAdminUser() || (userPermissions.siteIdsWithAdminPrivilage?.includes(siteId) ?? false);\n }\n\n hasAdminPermissionOnAnySite(): boolean {\n var userPermissions = this.userPermissions.value;\n if (!userPermissions)\n return false;\n return this.isCompanyAdminUser() || ((userPermissions.siteIdsWithAdminPrivilage?.length ?? 0) > 0);\n }\n\n hasAccessToUserDirectory(): boolean {\n return this.hasUserAnyOfPermissions([UserPermission.ViewReports, UserPermission.EditUserDirectory]);\n }\n\n hasAccessToEditUserDirectory(siteId: number): boolean {\n return this.hasUserPermissionForCompany(UserPermission.EditUserDirectory);\n }\n\n hasPermissionOnSite(siteId: number, userPermission: UserPermission): boolean {\n var userPermissions = this.userPermissions.value;\n if (!userPermissions)\n return false;\n return this.hasAdminPermissionOnSite(siteId) ||\n (userPermissions.siteLevelPermissions &&\n (userPermissions.siteLevelPermissions[siteId] & userPermission) > 0);\n }\n\n hasPermissionOnCompany(permission: UserPermission): boolean {\n var userPermissions = this.userPermissions.value;\n if (!userPermissions)\n return false;\n if (userPermissions?.isCompanyAdmin || userPermissions?.isGodUser)\n return true;\n else if ((userPermissions?.companyLevelPermissions & permission) > 0)\n return true;\n\n return false;\n }\n\n\n hasUserPermissionForCompany(permission: UserPermission, siteId?: number): boolean {\n var userPermissions = this.userPermissions.value;\n if (!userPermissions)\n return false;\n if (userPermissions?.isCompanyAdmin || userPermissions?.isGodUser)\n return true;\n else if ((userPermissions?.companyLevelPermissions & permission) > 0)\n return true;\n var sites = Object.keys(userPermissions?.siteLevelPermissions);\n\n if (siteId == null) {\n var found = sites.filter(site => {\n var sitePermissions = userPermissions.siteLevelPermissions[site];\n if (sitePermissions != null && ((sitePermissions & permission) > 0))\n return true\n else return false;\n }).length > 0;\n return found;\n } else {\n if (this.hasAdminPermissionOnSite(siteId))\n return true;\n\n var sitePermissions = userPermissions.siteLevelPermissions[siteId];\n if (sitePermissions != null && ((sitePermissions & permission) > 0))\n return true\n else return false;\n }\n\n }\n\n hasUserAnyOfPermissions(permissions: UserPermission[]): boolean {\n var ups = this.userPermissions.value;\n if (!ups || !(permissions?.length > 0))\n return false;\n if (ups?.isCompanyAdmin || ups?.isGodUser)\n return true;\n\n var combined = UserPermission.None;\n for (let index = 0; index < permissions.length; index++) {\n const element = permissions[index];\n combined |= element;\n }\n\n if ((ups.companyLevelPermissions & combined) != UserPermission.None)\n return true;\n\n var sites = Object.keys(ups.siteLevelPermissions);\n for (let index = 0; index < sites.length; index++) {\n const element = ups.siteLevelPermissions[sites[index]];\n if ((element & combined) != UserPermission.None)\n return true;\n }\n return false;\n }\n\n hasGodUserPermissionForCompany(permission: GodUserPermission): boolean {\n var userPermissions = this.userPermissions.value;\n if (!userPermissions || !userPermissions?.isGodUser)\n return false;\n else if (userPermissions?.godUserPermissions && (userPermissions?.godUserPermissions & permission) == permission)\n return true;\n\n return false;\n }\n\n isCompanyAdminUser(): boolean {\n var userPermissions = this.userPermissions.value;\n return userPermissions?.isCompanyAdmin || userPermissions?.isCompanyOwner || userPermissions?.isGodUser;\n }\n\n isGodUser(): boolean {\n var userPermissions = this.userPermissions.value;\n return userPermissions?.isGodUser;\n }\n\n isCompanyOwnerUser(): boolean {\n var userPermissions = this.userPermissions.value;\n return userPermissions?.isCompanyOwner || userPermissions?.isGodUser;\n }\n\n searchUser = (model: UserSearchModel): Observable =>\n this.http.post(`${this.apiUrl}/search`, model);\n\n public resendOtp(model: SendOtpModel): Observable {\n return this.http.post(`/api/obcauthentication/send-2fa-otp`, model);\n }\n\n changeCompany = (id: number): Observable =>\n this.http.get(`${this.apiUrl}/change-company/${id}`);\n\n userProfile = (): Observable =>\n this.http.get(`${this.apiUrl}/user-profile`);\n\n getAccessibleUserBasicProfile = (id: number): Observable =>\n this.http.get(`${this.apiUrl}/get-accessible-user-basic-profile/${id}`);\n\n editProfile = (model: RequestUserProfileUpdateViewmodel): Observable =>\n this.http.post(`${this.apiUrl}/edit-profile`, model);\n\n changePassword = (model: ChangePasswordViewmodel): Observable =>\n this.http.post(`${this.apiUrl}/change-password`, model);\n\n sendVerificationEmail = (): Observable =>\n this.http.get(`${this.apiUrl}/send-verification-email`);\n\n removeProfilePicture = (): Observable =>\n this.http.get(`${this.apiUrl}/remove-profile-picture`);\n\n getAnonymousUserProfileWithCheckIns = (): Observable =>\n this.http.get(`${this.apiUrl}/get-anonymous-user-status`);\n\n validateEditUserMobile = (model: UserEditMobileModel): Observable =>\n this.http.post(`${this.apiUrl}/get-user-by-mobile`, model);\n\n editUserMobile = (model: UserEditMobileModel): Observable =>\n this.http.post(`${this.apiUrl}/edit-user-mobile`, model);\n\n checkCompanyStatusValue(key: CompanyStatus, value: any) {\n if (this.companyStatuses.value) {\n const entry = this.companyStatuses.value.find(x => x.key == key)\n if (entry == null) return false;\n return entry.value === value;\n }\n return false;\n }\n\n isAiEnabled(): boolean {\n return this.isGodUser() && this.hasGodUserPermissionForCompany(GodUserPermission.ExprimentalAccess);\n }\n\n getCompanyWorkflowDisplayMode(): PortalDisplayMode {\n let mode = this.getCompanyStatusValue(CompanyStatus.WorkflowEngineDisplayMode);\n return mode ?? DefaultWorkflowDisplayMode;\n }\n\n getCompanyStatusValue(key: any): any {\n if (this.companyStatuses.value) {\n const entry = this.companyStatuses.value.find(x => x.key == key)\n if (entry == null) return null;\n return entry.value;\n }\n return null;\n }\n\n get canAddSite(): boolean {\n return this.checkCompanyStatusValue(CompanyStatus.CanAddSite, true);\n }\n\n get isEnableSeatLocation(): boolean {\n return this.checkCompanyStatusValue(CompanyStatus.IsEnableSeatingLocation, true);\n }\n\n get canAddNewLocation(): boolean {\n this.currentCompany$.subscribe((res) => (this._currentCompany = res));\n return this._currentCompany?.endUserCanAddNewLocation ?? false;\n }\n\n hasAccessToManageSite(site: SiteDetailsViewModel) {\n return site.isActive === true &&\n (\n (site.isExternalSite == false && this.hasUserPermissionForCompany(UserPermission.ModifySite, site.id)) ||\n (site.isExternalSite == true && (site.externalSitePermissions & AggregatedExternalSitePermission.AccessToManageSiteItems) > 0));\n }\n\n totpGenerateQrCode = (): Observable =>\n this.http.post(`${this.apiUrl}/totp-generate-qrcode`, null);\n\n totpVerifyCode = (model: TotpVerifyViewModel): Observable =>\n this.http.post(`${this.apiUrl}/totp-verify-code`, model);\n\n getScheduledReports = (): Observable> =>\n this.http.get(`${this.apiUrl}/reports-log`);\n\n hasAnyAccess(siteId: number = null): boolean {\n var ups = this.userPermissions.value;\n if (!ups)\n return false;\n\n let hasAnySiteLevelPermission = siteId ? Object.keys(ups.siteLevelPermissions).some(x => x == siteId.toString()) : false;\n let hasAnyCompanyAccess = ups.companyLevelPermissions > UserPermission.None;\n if (ups?.isCompanyAdmin || ups?.isGodUser || hasAnySiteLevelPermission || hasAnyCompanyAccess)\n return true;\n\n return false;\n }\n}\n","import * as moment from 'moment';\nexport const timeFormat = \"HH:mm\";\nexport const dateFormat = \"DD/MM/YYYY\";\nexport const dateTimeFormat = \"DD/MM/YYYY, hh:mm a\";\nexport const dateTimeFormatWithSeconds = \"DD/MM/YYYY, hh:mm:ss a\";\nexport const triggerDateTimeFormat = \"YYYY-MM-DDT00:00:00.000\";\n\nexport function parseDate(str) {\n try {\n return moment(str, dateFormat).toDate();\n } catch {\n return null;\n }\n}\n\nexport function formatDate(date: any, format: string) {\n return moment(date).format(format);\n}\n\nexport function parseDateTime(str, ignoreFormat?: boolean) {\n try {\n var m = ignoreFormat == true ? new Date(Date.parse(str)) : moment(str, dateTimeFormat).toDate();\n return m;\n } catch {\n return null;\n }\n}\n\nexport function parseDateTime2(str, format: string) {\n try {\n var m = moment(str, format ?? dateTimeFormat).toDate();\n return m;\n } catch {\n return null;\n }\n}\n\nexport function formatDateTime(date) {\n try {\n return moment(date).format(dateTimeFormat);\n } catch {\n return null;\n }\n}\n\nexport function parseUTCDateTimeToLocalDateTime(str) {\n try {\n return moment.utc(str).local().toDate();\n } catch {\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocaleService {\n\n constructor() { }\n\n public get defaultLocale(): string {\n //return 'en-AU';\n let userSettingLanguage = false;\n return (userSettingLanguage ? 'readme from user setting' :\n (Intl?.DateTimeFormat()?.resolvedOptions()?.locale ? Intl.DateTimeFormat().resolvedOptions().locale :\n (navigator.language ? navigator.language : 'en-AU')));\n };\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { LocaleService } from '../services/locale.service';\nimport { dateTimeFormat } from '../helpers/date-time-format';\nimport * as moment from 'moment';\n@Pipe({\n name: 'datetime'\n})\nexport class DatetimePipe implements PipeTransform {\n\n private datePipe: DatePipe;\n\n constructor(private localeService : LocaleService) {\n this.datePipe = new DatePipe(this.localeService.defaultLocale);\n }\n\n transform(value: any, format?: string): string {\n if(!value)\n return null;\n var ret = moment(value).format(format ?? dateTimeFormat);;\n return ret;\n\n //return this one if timezone is needed\n return new Intl.DateTimeFormat(this.localeService.defaultLocale, {\n year: \"2-digit\",\n month: \"numeric\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\n }).format(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parsePhoneNumber, PhoneNumber } from 'awesome-phonenumber';\nimport { UserService } from 'src/app/services/user.service';\n\n@Pipe({\n name: 'mobile'\n})\nexport class MobilePipe implements PipeTransform {\n currentRegion: string;\n\n constructor(userService: UserService) {\n this.currentRegion = 'AU';\n userService.info.subscribe(info => {\n try {\n const prefix = info.mobile !== null && info.mobile.startsWith('+') ? '' : '+';\n const number = parsePhoneNumber(prefix + info.mobile);\n this.currentRegion = number.isValid() ? number.getRegionCode() : 'AU';\n } catch (e) {\n this.currentRegion = 'AU';\n }\n });\n }\n\n transform(value: string): string {\n try {\n const prefix = value !== null && value.startsWith('+') ? '' : '+';\n const number = parsePhoneNumber(prefix + value, this.currentRegion);\n return number.isValid()\n ? number.getRegionCode() == this.currentRegion ? number.getNumber('national') : number.getNumber('international')\n : value;\n }\n catch (e) {\n return value;\n }\n }\n}\n","import { UserService } from './../../services/user.service';\nimport { Component, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { UserEditMobileModel } from 'src/app/models/user-edit-mobile-model';\nimport { UserEditMobileViewModel } from 'src/app/models/user-edit-mobile-viewmodel';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'obc-user-info-modal',\n templateUrl: './user-info-modal.component.html',\n styleUrls: ['./user-info-modal.component.scss']\n})\nexport class UserInfoModalComponent implements OnInit {\n public onClose: Subject;\n\n mobileModel: UserEditMobileModel;\n selectedUser: UserEditMobileViewModel;\n constructor(public bsModalRef: BsModalRef, public userService: UserService) { }\n\n ngOnInit(): void {\n this.onClose = new Subject();\n }\n\n cancelModal() {\n this.bsModalRef.hide();\n }\n\n editMobileNumber() {\n this.userService.editUserMobile(this.mobileModel).subscribe(res => {\n if (res) {\n this.onClose.next(true);\n this.bsModalRef.hide();\n }\n }, err => {\n this.onClose.next(false);\n this.bsModalRef.hide();\n });\n }\n\n}\n","
\n
\n Confirm Change Mobile Number\n \n
\n
\n
\n
\n Are you sure you want to change mobile number?\n
\n
\n
\n
\n First Name: {{selectedUser?.firstName == null? '-' : selectedUser?.firstName}}\n
\n
\n
\n
\n Last Name: {{selectedUser?.lastName == null? '-': selectedUser?.lastName}}\n
\n
\n
\n
\n Email: {{selectedUser?.email == null? '-': selectedUser?.email}}\n
\n
\n
\n
\n Last Login Date: {{selectedUser?.lastLoginDate == null? '-': selectedUser?.lastLoginDate | datetime}}\n
\n
\n
\n
\n Current Mobile Number: {{mobileModel.currentMobileNumber | mobile}}\n
\n
\n
\n
\n New Mobile Number: {{mobileModel.newMobileNumber | mobile}}\n
\n
\n
\n
\n  \n \n
\n
\n
\n
","import { Injectable, TemplateRef } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ModalService {\n\n private modalRefList: BsModalRef[] = [];\n private currentModalRef: BsModalRef;\n\n private _confirmMessage: Subject = new Subject();\n public confirmMessage: Observable = this._confirmMessage.asObservable();\n private _confirmResult: Subject = new Subject();\n public confirmResult: Observable = this._confirmResult.asObservable();\n\n constructor(private modalService: BsModalService) { }\n\n show(template: TemplateRef | any, cssClass: string = '', param?: any): Observable {\n\n const initialState = {\n paramFromParent: param\n };\n\n let modalRef = this.modalService.show(template, { class: cssClass, initialState });\n this.modalRefList.push(modalRef);\n\n return new Observable(this.getConfirmSubscriber(this.modalService, modalRef));\n }\n\n confirm(message: string, header: string = '', trueButtonLabel: string = '', falseButtonLabel: string = '',\n trueButtonClass: string = '', falseButtonClass: string = '', isDangerState: boolean = false): Observable {\n this._confirmMessage.next({\n message: message, header: header, state: State[\"modal-block-primary\"],\n falseButtonLabel: falseButtonLabel, trueButtonLabel: trueButtonLabel,\n falseButtonClass: falseButtonClass, trueButtonClass: trueButtonClass,\n isDangerState: isDangerState,\n });\n return new Observable(this.getConfirmResult());\n }\n\n\n info(message: string, header: string = ''): Observable {\n this._confirmMessage.next({ message: message, header: header, state: State[\"modal-block-info\"] });\n return new Observable(this.getConfirmResult());\n }\n\n success(message: string, header: string = ''): Observable {\n this._confirmMessage.next({ message: message, header: header, state: State[\"modal-block-success\"] });\n return new Observable(this.getConfirmResult());\n }\n\n warn(message: string, header: string = ''): Observable {\n this._confirmMessage.next({ message: message, header: header, state: State[\"modal-block-warning\"] });\n return new Observable(this.getConfirmResult());\n }\n\n error(message: string, header: string = ''): Observable {\n this._confirmMessage.next({ message: message, header: header, state: State[\"modal-block-danger\"] });\n return new Observable(this.getConfirmResult());\n }\n\n hide(result?: any) {\n this.currentModalRef = this.modalRefList.pop();\n if (this.currentModalRef) {\n this.currentModalRef.content = result;\n this.currentModalRef.hide();\n }\n }\n\n closeConfirm(isYes: boolean | null = false) {\n this._confirmResult.next(isYes);\n }\n\n private getConfirmSubscriber(modalService, modalRef) {\n return (observer) => {\n const subscription = modalService.onHidden.subscribe(() => {\n observer.next(modalRef.content);\n observer.complete(modalRef.content = null);\n });\n\n return {\n unsubscribe() {\n subscription.unsubscribe();\n }\n };\n }\n }\n\n private getConfirmResult() {\n return (observer) => {\n const subscription = this.confirmResult.subscribe((result: boolean | null) => {\n observer.next(result);\n observer.complete();\n });\n\n return {\n unsubscribe() {\n subscription.unsubscribe();\n }\n };\n }\n }\n}\n\n\nexport class Options {\n header: string = '';\n message: string = '';\n state: State;\n trueButtonLabel?: string;\n falseButtonLabel?: string;\n trueButtonClass?: string;\n falseButtonClass?: string;\n isDangerState?: boolean;\n}\n\nexport enum State {\n //'modal-block-primary' = 1,\n 'modal-block-info' = 2,\n 'modal-block-success' = 3,\n 'modal-block-warning' = 4,\n 'modal-block-danger' = 5,\n 'modal-block-primary' = 6\n}\n\nexport enum Icon {\n ///'fa-question-circle' = State[\"modal-block-primary\"],\n 'fa-info-circle' = State[\"modal-block-info\"],\n 'fa-check' = State[\"modal-block-success\"],\n 'fa-exclamation-triangle' = State[\"modal-block-warning\"],\n 'fa-times-circle' = State[\"modal-block-danger\"],\n 'fa-question-circle' = State[\"modal-block-primary\"]\n}\n","
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'obc-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n @Input() show : boolean = false;\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { UserInfoModalComponent } from './../user-info-modal/user-info-modal.component';\nimport { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { UserEditMobileModel } from 'src/app/models/user-edit-mobile-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { UserEditMobileViewModel } from 'src/app/models/user-edit-mobile-viewmodel';\n\n@Component({\n selector: 'obc-user-edit-phone',\n templateUrl: './user-edit-phone.component.html',\n styleUrls: ['./user-edit-phone.component.scss']\n})\nexport class UserEditPhoneComponent implements OnInit {\n modalRef: BsModalRef;\n mobileInProccess: boolean = false;\n mobileFormGroup: FormGroup;\n selectedUser: UserEditMobileViewModel;\n palceholder: string = \"Mobile number in international format like +61xxxxxxxxx\";\n\n constructor(private userService: UserService, private modalService: ModalService, private bsModalService: BsModalService) { }\n\n ngOnInit() {\n let mobilePattern = /^\\+[0-9]{8,}$/;\n this.mobileFormGroup = new FormGroup({\n currentMobile: new FormControl('', [Validators.required, Validators.pattern(mobilePattern)]),\n newMobile: new FormControl('', [Validators.required, Validators.pattern(mobilePattern)])\n })\n }\n\n validateEditMobile() {\n var model = {\n currentMobileNumber: this.mobileFormGroup.get(\"currentMobile\").value,\n newMobileNumber: this.mobileFormGroup.get(\"newMobile\").value,\n } as UserEditMobileModel;\n\n this.mobileInProccess = true;\n this.userService.validateEditUserMobile(model).subscribe(res => {\n this.selectedUser = res;\n\n this.modalRef = this.bsModalService.show(UserInfoModalComponent, {\n class: \"modal-lg\",\n initialState: {\n selectedUser: this.selectedUser,\n mobileModel: model\n }\n });\n this.modalRef.content.onClose.subscribe(result => {\n if (result == true) {\n this.modalService.info('Mobile changed successfully');\n this.mobileFormGroup.get(\"currentMobile\").setValue('');\n this.mobileFormGroup.get(\"newMobile\").setValue('');\n }\n else\n this.modalService.error('Error in change mobile number', 'error');\n })\n\n\n this.mobileInProccess = false;\n\n\n }, err => {\n this.modalService.error(err.error, \"Change Mobile Error\").subscribe(res => {\n this.mobileInProccess = false;\n });\n });\n }\n}\n","
\n
Change Mobile
\n
\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n
","\n
\n
\n
\n
\n
\n
\n
\n

401

\n

We're sorry, but the page you were looking for doesn't exist or you have not permission to view!

\n
\n
\n
\n

Here are some useful links

\n \n
\n
\n
\n
\n
\n
\n\n\n","import { UserService } from 'src/app/services/user.service';\nimport { Component, OnInit } from '@angular/core';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\n\n@Component({\n selector: 'app-no-access',\n templateUrl: './no-access.component.html',\n styleUrls: ['./no-access.component.scss']\n})\nexport class NoAccessComponent implements OnInit {\n UserPermission = UserPermission;\n constructor(public userService : UserService) { }\n\n ngOnInit() {\n }\n\n}\n","export enum LocalStorageKey {\n DarkClassName = \"0\",\n LeftMenuState = \"1\",\n LastVisitedSiteId = \"LastVisitedSiteId\",\n PrintLayoutStorageKey = 'card_print_layout',\n IsActiveAdvancedMenu = 'IsActiveAdvancedMenu',\n SiteSettingsInfoClose = \"SiteSettingsInfoClose\"\n}\n","import { Injectable } from '@angular/core';\nimport { StorageService } from './storage.service';\nimport { LocalStorageKey } from '../enums/local-storage-key.enum';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LayoutService {\n i: number = 0;\n isDark = new BehaviorSubject(null);\n get leftMenuIsOpen(): boolean {\n return (this.storageService.get(LocalStorageKey.LeftMenuState) === null);\n }\n\n get isInDarkMode(): boolean {\n if (this.isDark.value == null)\n this.isDark.next(this.storageService.get(LocalStorageKey.DarkClassName) !== null);\n return this.isDark.value;\n }\n\n header$: Subject = new Subject();\n set header(_val: string) {\n this.header$.next(_val);\n };\n\n constructor(private storageService: StorageService) {\n this.header$.next('');\n }\n\n toggleSideBar() {\n document.documentElement.classList.toggle('sidebar-left-collapsed');\n if (this.leftMenuIsOpen) {\n this.storageService.set(LocalStorageKey.LeftMenuState, 'close');\n }\n else {\n this.storageService.remove(LocalStorageKey.LeftMenuState);\n }\n }\n\n closeSideBar() {\n document.documentElement.classList.add('sidebar-left-collapsed');\n }\n\n toggleSideBarInMobileMode() {\n document.documentElement.classList.toggle('sidebar-left-opened');\n }\n\n closeSideBarInMobileMode() {\n document.documentElement.classList.remove('sidebar-left-opened');\n }\n\n toggleSubMenu(event, ul) {\n ul.classList.toggle('nav-expanded');\n event.preventDefault();\n event.stopPropagation();\n }\n\n //#region top bar\n public toggleDarkMode(isDark, saveInSessionStorage: boolean = false, updateStorages: boolean = true) {\n if (isDark) {\n if(updateStorages)\n this.storageService.set(LocalStorageKey.DarkClassName, 'dark', saveInSessionStorage);\n document.documentElement.classList.add('dark');\n }\n else {\n if(updateStorages)\n this.storageService.remove(LocalStorageKey.DarkClassName);\n document.documentElement.classList.remove('dark');\n }\n this.isDark.next(isDark);\n }\n\n\n public get getLogoPath(): string {\n if (this.isInDarkMode)\n return \"assets/img/dealer-drive-logo-silver.png\";\n else\n return \"assets/img/dealer-drive-logo-light.png\";\n }\n\n public get getLogoClass(): string {\n if (this.isInDarkMode)\n return \"dark\";\n else\n return \"light\";\n }\n\n public get getBackgroundColor(): string {\n if (this.isInDarkMode)\n return \"#1D2127\";\n else\n return \"#5bc0de\";\n }\n\n public get getColor(): string {\n if (this.isInDarkMode)\n return \"white\";\n else\n return \"white\";\n }\n\n //#endregion top bar\n}\n","import { Injectable } from '@angular/core';\nimport { throwError, Observable } from 'rxjs';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ErrorService {\n\n constructor() { }\n\n public handleError(error: HttpErrorResponse): Observable {\n let ErrorMessage: any = \"\";\n if (error.status == 404)\n ErrorMessage = \"Request Not Found\";\n\n else if (error.status == 401 && error.statusText == 'Unauthorized')\n ErrorMessage = \"Please Login Again\";\n\n if (error.error instanceof ErrorEvent) {\n ErrorMessage = error.error.message;\n } else {\n ErrorMessage = (error.error) ? ((!error.error.server_error) ? error.error : error.error.server_error) : error;\n }\n\n ErrorMessage = (ErrorMessage instanceof Array) ? ErrorMessage[0] : ErrorMessage;\n console.error('ErrorMessage : ', ErrorMessage);\n\n return throwError(ErrorMessage);\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CompanyViewModel } from '../models/company-viewmodel';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { catchError } from 'rxjs/operators';\nimport { UpdateCompanyProfileModel } from '../models/company-profile-viewmodel';\nimport { SendWelcomeEmailUserProfile } from '../models/user-profile-viewmodel';\nimport { CompanyTypeViewModel } from '../models/company-type-viewmodel';\nimport { CompaniesQueryModel } from '../models/get-companies-query-model';\nimport { PagingViewModel } from '../models/site-list-paging-view-model';\nimport { CompanyStats } from '../models/company-stats';\nimport { CompanyInductionsAndCheckInConfigurationViewModel, CompanyKioskModeConfigurationViewModel, CompanyPermitConfigurationViewModel, CompanyReportsConfigurationViewModel } from '../models/company-feature-configuration-viewmodel';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getCompanies = (query: CompaniesQueryModel): Observable> =>\n this._http.post>(`/api/company/get-all`, query)\n .pipe(catchError(this._errorService.handleError));\n\n addCompany = (model, templateCompanyId?: number): Observable =>\n this._http.post(`/api/company/add/${templateCompanyId}`, model)\n .pipe(catchError(this._errorService.handleError));\n\n editCompany = (model): Observable =>\n this._http.post('/api/company/update', model)\n .pipe(catchError(this._errorService.handleError));\n\n getCompanyUsers = (id): Observable =>\n this._http.get(`/api/company/get-users/${id}`)\n .pipe(catchError(this._errorService.handleError));\n\n addUser = (user): Observable =>\n this._http.post(`/api/company/add-user`, user)\n .pipe(catchError(this._errorService.handleError));\n\n updateUserAdminState = (userId: number, adminState: boolean): Observable =>\n this._http.put(`/api/company/edit-user/${userId}`, adminState)\n .pipe(catchError(this._errorService.handleError));\n\n removeUser = (id): Observable =>\n this._http.get(`/api/company/remove-user/${id}`)\n .pipe(catchError(this._errorService.handleError));\n\n getTemplateCompanies = (): Observable =>\n this._http.get('/api/company/template-companies')\n .pipe(catchError(this._errorService.handleError));\n\n getCurrentCompanyProfile = (): Observable =>\n this._http.get('/api/companyprofile/get-profile')\n .pipe(catchError(this._errorService.handleError));\n\n setActivePlan = (companyId: number, activePlanId: number): Observable =>\n this._http.get(`/api/company/set-active-plan/${companyId}/${activePlanId}`)\n .pipe(catchError(this._errorService.handleError));\n\n updateCurrentCompanyProfile = (model: UpdateCompanyProfileModel): Observable =>\n this._http.post('/api/companyprofile/update-profile', model)\n .pipe(catchError(this._errorService.handleError));\n\n sendWelcomeEmail = (model: SendWelcomeEmailUserProfile): Observable =>\n this._http.post('/api/SendMessage/send-welcome-email', model)\n .pipe(catchError(this._errorService.handleError));\n\n getCompanyTypes = (): Observable =>\n this._http.get('/api/company/company-types')\n .pipe(catchError(this._errorService.handleError));\n\n getCompanyStats = (companyId: number): Observable =>\n this._http.get(`/api/company/company-stats/${companyId}`)\n .pipe(catchError(this._errorService.handleError));\n\n getCompanyPermitConfiguration = (): Observable =>\n this._http.get('/api/companyFeatureConfiguration/get-company-permit-configuration')\n .pipe(catchError(this._errorService.handleError)); \n\n updateCompanyPermitConfiguration = (model: CompanyPermitConfigurationViewModel): Observable =>\n this._http.post('/api/CompanyFeatureConfiguration/update-company-permit-configuration', model)\n .pipe(catchError(this._errorService.handleError));\n\n getCompanyInductionsAndCheckInConfiguration = (): Observable =>\n this._http.get('/api/companyFeatureConfiguration/get-company-inductions-checkin-configuration')\n .pipe(catchError(this._errorService.handleError));\n \n updateCompanyInductionsAndCheckInConfiguration = (model: CompanyInductionsAndCheckInConfigurationViewModel): Observable =>\n this._http.post('/api/CompanyFeatureConfiguration/update-company-inductions-checkin-configuration', model)\n .pipe(catchError(this._errorService.handleError)); \n \n getCompanyKioskModeConfiguration = (): Observable =>\n this._http.get('/api/companyFeatureConfiguration/get-company-kiosk-mode-configuration')\n .pipe(catchError(this._errorService.handleError));\n\n updateCompanyKioskModeConfiguration = (model: CompanyKioskModeConfigurationViewModel): Observable =>\n this._http.post('/api/CompanyFeatureConfiguration/update-company-kiosk-mode-configuration', model)\n .pipe(catchError(this._errorService.handleError)); \n\n getCompanyReportsConfiguration = (): Observable =>\n this._http.get('/api/companyFeatureConfiguration/get-company-reports-configuration')\n .pipe(catchError(this._errorService.handleError)); \n \n updateCompanyReportsConfiguration = (model: CompanyReportsConfigurationViewModel): Observable =>\n this._http.post('/api/CompanyFeatureConfiguration/update-company-reports-configuration', model)\n .pipe(catchError(this._errorService.handleError)); \n}\n","import { Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\nimport { Subject } from \"rxjs\";\nimport { NotificationServerResponseViewModel } from \"../models/notification-server-response-view-model\";\n@Injectable({\n providedIn: 'root'\n})\nexport class SignalRService {\n\n serverMessage: Subject = new Subject();\n private connection: signalR.HubConnection;\n constructor() { }\n\n connect() {\n if(!this.connection) {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(`hub/notifications`)\n .withAutomaticReconnect()\n .build();\n }\n if(this.connection?.state == signalR.HubConnectionState.Disconnected) {\n this.start();\n this.connection?.on('ServerMessage', (data: NotificationServerResponseViewModel) => {\n this.serverMessage.next(data)\n });\n }\n }\n\n start() {\n this.connection?.start().then(() => {});\n }\n\n closeConnection() {\n if(this.connection &&\n this.connection?.state != signalR.HubConnectionState.Disconnected &&\n this.connection?.state != signalR.HubConnectionState.Disconnecting) {\n this.connection?.stop().then();\n }\n }\n}\n","export enum ProductPlanFeature {\n Export = 0,\n RequiredDocumentField = 1,\n SchaduleReport = 2,\n Announcements = 3,\n Scannables = 4,\n VisitorTypes = 5,\n SiteHosts = 6,\n Automation = 7,\n ViewKioskMode = 8,\n IntegrationApi = 9,\n PreCheckIn = 10,\n Inventory = 11,\n Form = 12,\n AccessControl = 13,\n SiteBriefing = 14,\n EarlyAccess = 15,\n SiteBriefingAutoRenew = 16,\n}\n","export enum EventType {\n SubmittingScheduledReport = 0,\n ScheduleReportTaskResult = 1,\n Notification = 2,\n ShowNotification = 3,\n}\n","import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { throwError as observableThrowError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { UserCredentialsViewModel } from '../models/user-credentials-viewModel';\nimport { SignalRService } from \"./signal-r.service\";\n@Injectable({\n providedIn: 'root'\n})\nexport class SignInService {\n\n constructor(private http: HttpClient, private router: Router, private signalRService: SignalRService) { }\n\n public getInitXsrfToken() {\n return this.http.post(`/api/obcauthentication/get-init-xsrf-token`, {})\n .pipe(catchError((error) => observableThrowError(error)))\n }\n\n public webPreLogin(mobile: string, countryCode: string) {\n return this.http\n .post(`/api/obcauthentication/web-pre-login?countryCode=${countryCode}`, JSON.stringify(mobile))\n .pipe(catchError((error) => observableThrowError(error)))\n }\n\n public requestSendToken(mobileNumber: string, countryCode: string) {\n return this.http\n .post(`/api/obcauthentication/send-reset-pass-otp`, JSON.stringify({ mobileNumber, countryCode }))\n .pipe(catchError((error) => observableThrowError(error)))\n }\n\n public signIn(returnPath, body: UserCredentialsViewModel) {\n const headers = new HttpHeaders({ 'ReturnPath': returnPath === undefined ? '' : returnPath });\n\n return this.http\n .post('/api/obcauthentication/web-sign-in', body, { headers: headers, observe: 'response' })\n .pipe(catchError((error) => observableThrowError(error)))\n }\n\n signOut() {\n this.http.post('/api/obcauthentication/web-sign-out', {}, { observe: 'response' }).subscribe((resp: HttpResponse) => {\n //this.userStore.resetPermissions(); TODO must impelment\n this.handleRedirection(resp, true);\n this.signalRService.closeConnection();\n });\n }\n\n private handleRedirection(response: any, reload: boolean = false) {\n const ajaxRedirectStatusCode = 200;\n if (response.status === ajaxRedirectStatusCode) {\n if (reload)\n location.href = response.headers.get('Location');\n else\n this.router.navigate([response.headers.get('Location')]);\n }\n }\n}\n","import { Component, OnInit, Input, HostBinding, Output, EventEmitter, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'obc-switch',\n templateUrl: './switch.component.html',\n styleUrls: ['./switch.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SwitchComponent),\n multi: true\n }\n ]\n})\nexport class SwitchComponent implements ControlValueAccessor {\n\n @Input() small: boolean = false;\n @Input() tagged: any;\n @Input() disabled: boolean = false;\n internalDisabled: boolean = false;\n get isDisabled() {\n return this.disabled || this.internalDisabled;\n }\n @Output() public objectChanged: EventEmitter<{ value: boolean, tagged: any }> = new EventEmitter<{ value: boolean, tagged: any }>();\n @HostBinding('attr.id')\n externalId = '';\n @Output() public valueChanged = new EventEmitter();\n @Output() public switchChanged = new EventEmitter();\n @Input()\n set id(value: string) {\n this._ID = value;\n this.externalId = null;\n }\n\n @Input() semiActive: boolean = false;\n\n get id() {\n return this._ID;\n }\n\n private _ID = '';\n\n @Input() falseLabel: string = 'No';\n @Input() trueLabel: string = 'Yes';\n\n @Input() falseValue: any;\n @Input() trueValue: any;\n\n\n _value = false;\n onChange: any = () => {\n // this function never call\n this.valueChanged.emit(this.value);\n this.objectChanged.emit({ value: this.value, tagged: this.tagged });\n };\n onTouched: any = () => { };\n\n get value() {\n return this._value;\n }\n\n @Input() set value(val) {\n this._value = val;\n this.onChange(val);\n this.onTouched();\n //this.switchChanged.emit(val);\n }\n\n constructor() { }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n writeValue(value) {\n if (value) {\n this.value = value;\n }\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n toggle() {\n this.value = !this.value;\n //Must call emitter only when user act on UI, not when value was set\n var emitValue = (this.value ? this.trueValue : this.falseValue) ?? this.value;\n this.switchChanged.emit(emitValue);\n }\n setDisabledState(isDisabled: boolean): void {\n this.internalDisabled = isDisabled;\n }\n}\n","
\n \n \n \n
","import {Component, Input, OnInit} from '@angular/core';\nimport { LayoutService } from \"../../services/layout.service\";\n\n@Component({\n selector: 'obc-css-spinner',\n templateUrl: './css-spinner.component.html',\n styleUrls: ['./css-spinner.component.scss']\n})\nexport class CssSpinnerComponent implements OnInit {\n\n @Input() size: number = 24;\n @Input() color: string = \"#7A320A\";\n @Input() darkColor: string = \"#efefef\";\n @Input() backgroundColor: string = \"rgba(255,255,255,0.4)\";\n @Input() darkBackgroundColor: string = \"rgba(255,255,255,0.3)\";\n @Input() speed: number = 1;\n @Input() class: string = \"\";\n @Input() thickness: number = 3;\n constructor(public layoutService: LayoutService) { }\n\n ngOnInit(): void {\n }\n\n}\n","\n\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { UserNotificationInfo, UserNotificationModel, UserNotificationQueryModel, UserNotificationViewModel } from '../models/notifications/models';\nimport { UserNotificationSettingModel, UserNotificationSettingViewModel } from '../models/notifications/viewmodels';\nimport { InfoPagingViewModel } from '../models/site-list-paging-view-model';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getUserNotificationSettings(): Observable {\n return this._http.get(`api/NotificationSetting/settings`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateSettings(data: UserNotificationSettingModel) {\n return this._http.post(`api/NotificationSetting/update`, data)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getUserNotificationList(request: UserNotificationQueryModel): Observable> {\n return this._http.post>(`api/Notification/list`, request)\n .pipe(catchError(this._errorService.handleError));\n }\n\n deleteNotification(data: UserNotificationModel) {\n return this._http.post(`api/Notification/delete`, data)\n .pipe(catchError(this._errorService.handleError));\n }\n\n readNotification(data: UserNotificationModel) {\n return this._http.post(`api/Notification/read`, data)\n .pipe(catchError(this._errorService.handleError));\n }\n\n unreadNotification(data: UserNotificationModel) {\n return this._http.post(`api/Notification/unread`, data)\n .pipe(catchError(this._errorService.handleError));\n }\n\n readAllNotification() {\n return this._http.post(`api/Notification/read-all`,null)\n .pipe(catchError(this._errorService.handleError));\n }\n\n\n}\n","
\n \n
\n\n Notifications 0\">{{unreadNotificationCount}}\n\n \n \n \n \n Mark All As\n Read\n \n
\n
\n
\n
\n No notifications\n
\n
\n
\n
\n
\n
\n {{\n notif.title }}\n
\n {{ notif.dateTime | datetime }}\n
\n
\n
\n
\n {{ notif.content }}\n
\n
\n {{notif.companyName}}\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n","import { UserNotificationModel } from './../../models/notifications/models';\nimport { Component, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { UserNotificationQueryModel, UserNotificationViewModel } from 'src/app/models/notifications/models';\nimport { BasePagingModel } from 'src/app/models/paging_model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { NotificationService } from 'src/app/services/notification.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { NotificationServerResponseViewModel } from \"../../models/notification-server-response-view-model\";\nimport { EventType } from \"../../enums/event-type\";\nimport { SignalRService } from \"../../services/signal-r.service\";\nimport { UserService } from \"../../services/user.service\";\n\n@Component({\n selector: 'obc-notification-center',\n templateUrl: './notification-center.component.html',\n styleUrls: ['./notification-center.component.scss']\n})\nexport class NotificationCenterComponent implements OnInit {\n\n pageInfo: BasePagingModel = { pageSize: 50, pageNumber: 0 };\n inProgress: boolean;\n notifications: UserNotificationViewModel[];\n notificationsCount: number;\n unreadNotificationCount: number;\n formattedUnreadNotificationCount: string;\n hideElement: boolean[];\n ignoreSignalRLoadNotificationInvoke: boolean = false;\n\n @Input() hide: boolean = true;\n @Output() onUpdateNotificationCount: EventEmitter = new EventEmitter();\n\n constructor(private notificationService: NotificationService,\n private modalService: ModalService,\n private layoutService: LayoutService,\n private signalRService: SignalRService,\n private userService: UserService,\n ) {\n }\n\n ngOnInit(): void {\n this.userService.info.asObservable().subscribe((res) => {\n if(res) {\n this.loadNotifications();\n }\n })\n this.signalRService.serverMessage.asObservable().subscribe((res: NotificationServerResponseViewModel) => {\n if (res?.eventType == EventType.Notification) {\n if (this.ignoreSignalRLoadNotificationInvoke) {\n this.ignoreSignalRLoadNotificationInvoke = false;\n this.emitNotificationCount();\n } else {\n this.pageInfo.pageNumber = 0;\n this.loadNotifications();\n }\n }\n });\n }\n\n get isDark() {\n return this.layoutService.isInDarkMode;\n }\n\n hidePanel() {\n this.hide = true;\n }\n\n loadNotifications(add = false) {\n if (this.inProgress)\n return;\n this.inProgress = true;\n this.notificationService.getUserNotificationList({ pagingInfo: this.pageInfo } as UserNotificationQueryModel)\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(\n res => {\n this.inProgress = false;\n if (!add)\n this.notifications = res.data;\n else {\n res.data.forEach(item => {\n this.notifications.push(item);\n });\n }\n this.notificationsCount = res.totalCount;\n this.unreadNotificationCount = res.info.unreadCount;\n this.formattedUnreadNotificationCount = res.info.formattedUnreadCount;\n this.emitNotificationCount();\n }\n );\n }\n\n emitNotificationCount() {\n if (this.onUpdateNotificationCount)\n this.onUpdateNotificationCount.emit(this.formattedUnreadNotificationCount);\n }\n\n @HostListener('scroll', ['$event'])\n onScroll(event) {\n if (this.inProgress)\n return;\n var scrollTop = event.srcElement.scrollTop;\n var scrollHeight = event.srcElement.scrollHeight;\n var elementHeight = event.srcElement.clientHeight;\n var atBottom = scrollHeight < (elementHeight + scrollTop + 50);\n if (atBottom) {\n if (this.notificationsCount >= (this.pageInfo.pageSize * (this.pageInfo.pageNumber + 1))) {\n this.pageInfo.pageNumber++;\n this.loadNotifications(true);\n }\n }\n }\n\n SwitchReadState(item: UserNotificationViewModel) {\n var notificationModel: UserNotificationModel = { notificationId: item.id };\n this.inProgress = true;\n if (item.isRead) {\n this.notificationService.unreadNotification(notificationModel).subscribe(res => {\n this.reloadNotificationsManually();\n });\n } else {\n this.notificationService.readNotification(notificationModel).subscribe(res => {\n this.reloadNotificationsManually();\n });\n }\n }\n\n RemoveNotification(item: UserNotificationViewModel) {\n this.modalService.confirm('Are you sure you want to remove this record?').subscribe(res => {\n var notificationModel: UserNotificationModel = { notificationId: item.id };\n if (res == true) {\n this.inProgress = true;\n this.notificationService.deleteNotification(notificationModel).pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.reloadNotificationsManually();\n });\n }\n });\n }\n\n MarkAllAsRead() {\n this.inProgress = true;\n this.notificationService.readAllNotification()\n .subscribe(res => {\n this.reloadNotificationsManually();\n });\n }\n\n reloadNotificationsManually() {\n this.inProgress = false;\n\n // ignore fetch data from server when signal r notification event receives from server\n this.ignoreSignalRLoadNotificationInvoke = true;\n\n this.loadNotifications();\n }\n}\n\n","
\n
\n
\n\n

\n
\n
1Breadcrumb

\n
\n
\n \n
\n
\n \n \n
\n
\n\n
\n \n
\n\n \n
\n \n \n
\n
\n
\n \n
\n \n {{ csvExportTitle }}\n
\n
\n
\n There is no report to display\n
\n
\n
\n
\n
\n Requested at \n \n {{ scheduleReportLog.createdAt | datetime }}\n \n
\n
\n {{ scheduleReportLog.csvTitle ?? 'No Title' }}\n
\n
\n
\n
\n \n {{ scheduleReportLog.status }}\n \n {{ scheduleReportLog.nextExecutionDateTime | datetime:'MMMM Do YYYY, h:mm a' }}\n \n \n
\n
\n \n Sent email to: {{ displayRecipients(scheduleReportLog.emails) }}\n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n\n \n \n
\n
\n \n
\n \n
\n\n","import { Component, ElementRef, Input, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { SignInService } from 'src/app/services/sign-in.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { UserInfoViewModel } from 'src/app/models/user-info-viewmodel';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { ScheduledReportLogViewModel } from \"../../models/scheduled-report-log-view-model\";\nimport { SignalRService } from \"../../services/signal-r.service\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { EventType } from \"../../enums/event-type\";\nimport { NotificationServerResponseViewModel } from \"../../models/notification-server-response-view-model\";\n\n@Component({\n selector: 'obc-top-bar',\n templateUrl: './top-bar.component.html',\n styleUrls: ['./top-bar.component.scss']\n})\nexport class TopBarComponent implements OnInit {\n\n @Input() showEmergencyAlaram: boolean = true;\n @Input() isAnonymous: boolean = false;\n\n @ViewChild('notificationButton') notificationButton: ElementRef;\n @ViewChild('notificationPanel') notificationPanel: ElementRef;\n isNotificationMenuOpen: boolean = false;\n @ViewChild('userbox') userbox;\n showUserBox: boolean = false;\n notificationCount: string;\n\n fullName: string = \"User Full Name\";\n displayInfo: UserInfoViewModel = null;\n isCompanyOwner: boolean = false\n userPermissions = UserPermission;\n ProductPlanFeature = ProductPlanFeature;\n loadingNotification: boolean = false;\n\n constructor(public layoutService: LayoutService, private signInService: SignInService,\n private signalRService: SignalRService,\n public userService: UserService,\n public toastr: ToastrService,\n private modalService: ModalService, private renderer: Renderer2) {\n document.addEventListener('click', this.closeUserBoxOnClickOutside.bind(this));\n\n //Show/hide Notification Panel\n this.renderer.listen('window', 'click', (e: Event) => {\n if (e.target !== this.notificationButton?.nativeElement && e.target !== this.notificationPanel?.nativeElement && !this.notificationPanel?.nativeElement!.contains(e.target)) {\n this.isNotificationMenuOpen = false;\n }\n });\n }\n\n toggleNotificationMenu() {\n this.isNotificationMenuOpen = !this.isNotificationMenuOpen;\n }\n\n _currentCompany: CompanyViewModel = null;\n get currentCompany(): CompanyViewModel {\n return this._currentCompany;\n }\n\n userScheduledReportLogs: ScheduledReportLogViewModel[];\n\n ngOnInit(): void {\n this.signalRService.serverMessage.asObservable().subscribe((res: NotificationServerResponseViewModel) => {\n switch (res?.eventType) {\n case EventType.SubmittingScheduledReport:\n this.signalRScheduledReportsRequest();\n break;\n case EventType.ScheduleReportTaskResult:\n if (res?.message) {\n if (res?.isSuccess) {\n this.toastr.success(res?.message)\n } else {\n this.toastr.error(res?.message)\n }\n }\n this.signalRScheduledReportsRequest();\n break;\n case EventType.Notification:\n this.loadingNotification = true;\n break;\n case EventType.ShowNotification:\n if (res?.message) {\n if (res?.isSuccess) {\n this.toastr.success(res?.message)\n } else {\n this.toastr.error(res?.message)\n }\n }\n }\n });\n\n this.isCompanyOwner = this.userService.isCompanyAdminUser();\n\n this.userService.info.subscribe(res => {\n this.displayInfo = res;\n this.isCompanyOwner = res?.userPermissions?.isCompanyAdmin;\n if (res) {\n this.getScheduledReports();\n }\n });\n\n this.userService.currentCompany$.subscribe(res => this._currentCompany = res);\n }\n hasExportFeatureOnCompany() {\n return this.userService.hasCompanyFeature(ProductPlanFeature.Export);\n }\n\n signalRScheduledReportsRequest() {\n this.csvExportTitle = 'Fetching';\n this.getScheduledReports();\n }\n\n loadingScheduledReports: boolean = false;\n csvExportTitle: string = 'Exports';\n\n getScheduledReports() {\n if (this.isAnonymous)\n return;\n\n this.loadingScheduledReports = true;\n this.userService.getScheduledReports().subscribe({\n next: (res) => {\n if (res.success && res.data) {\n this.userScheduledReportLogs = res.data;\n }\n this.loadingScheduledReports = false;\n this.csvExportTitleFunc();\n },\n error: (_) => {\n this.loadingScheduledReports = false;\n this.csvExportTitleFunc();\n },\n complete: () => {\n this.loadingScheduledReports = false;\n this.csvExportTitleFunc();\n }\n });\n }\n\n csvExportTitleFunc() {\n if (this.userScheduledReportLogs.find((s) => s?.isInProgressState)) {\n this.csvExportTitle = \"Exporting\";\n this.loadingScheduledReports = true;\n } else {\n this.csvExportTitle = \"Exports\";\n this.loadingScheduledReports = false;\n }\n }\n\n onCsvPopoverClick($event) {\n if ($event.target.id != 'cancel') {\n $event.stopPropagation()\n }\n }\n\n closeUserBoxOnClickOutside(event: any) {\n if (!this.userbox?.nativeElement?.contains(event.target)) {\n this.showUserBox = false;\n }\n }\n\n signOut() {\n this.signInService.signOut();\n }\n\n get isTemplateCompany(): boolean {\n if (this._currentCompany == null)\n return false;\n else\n return this._currentCompany.isTemplate;\n }\n\n get companyName(): string {\n if (this._currentCompany == null)\n return null;\n else\n return this._currentCompany.title;\n }\n\n openModal(template) {\n this.modalService.show(template, 'modal-lg');\n }\n\n closeModal() {\n this.modalService.hide();\n }\n\n onUpdateNotificationCount(notificationCount: string) {\n this.notificationCount = notificationCount;\n this.loadingNotification = false;\n }\n\n displayRecipients(recipients: string[]) {\n let outputArray = [...recipients];\n let output = outputArray.join(\", \");\n if (outputArray.length > 2) {\n outputArray.splice(2);\n output = outputArray.join(\", \");\n if ((recipients.length - 2) > 0)\n output += (` +${recipients.length - 2} more`)\n }\n return output;\n }\n}\n","export class SidebarItem {\n\n private _route: string;\n public parent?: SidebarItem;\n\n constructor(title: string);\n constructor(title: string, route: string);\n constructor(title: string, route: string, icon: string);\n constructor(title: string, route: string, icon: string, condition: () => boolean);\n constructor(title: string, route: string, icon: string, condition: () => boolean, allChilds: SidebarItem[], isExpanded?: boolean, target?: string);\n constructor(public title: string, route?: string, public icon?: string, public condition: () => boolean = () => true, public allChilds: SidebarItem[] = null, public isExpanded: boolean = false, public target: string = '') {\n if (allChilds) allChilds.forEach(ch => ch.parent = this);\n this._route = route;\n }\n\n public get childs(): SidebarItem[] {\n if (!this.allChilds) return []\n return this.allChilds?.filter(ch => ch.condition && ch.condition())\n }\n\n public get show(): boolean {\n return !this.condition || (this.condition() && (!this.allChilds || this.childs.length > 0))\n }\n\n public get id(): string {\n return this.childs.length > 0 ? this.title.toLowerCase() : null;\n }\n\n public get route(): string {\n if (this._route) return this._route;\n return null;\n }\n\n public get element(): any {\n return document.getElementById(this.id);\n }\n\n private _routeLinkActive: string[]\n public get routerLinkActive(): string[] {\n if (!this._routeLinkActive) {\n this._routeLinkActive = this.hasChild ? [] : ['link-active', 'nav-active'];\n }\n return this._routeLinkActive\n }\n\n public get class(): string {\n return ''\n }\n\n public get hasChild(): boolean {\n return this.childs.length > 0;\n }\n\n public get href(): string {\n return this.route?.startsWith('http') ? this.route : null;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'orderBy'\n})\nexport class OrderByPipe implements PipeTransform {\n\n transform(array: any[], field: string, asc: boolean = true, nullIsFirst: boolean = false): any[] {\n if (!Array.isArray(array)) {\n return;\n }\n\n array.sort((a, b) => {\n var v1 = a[field];\n var v2 = b[field];\n // equal items sort equally\n if (v1 === v2) {\n return 0;\n }\n // nulls sort after anything else according to nullIsFirst\n else if (v1 === null) {\n return nullIsFirst ? -1 : 1;\n }\n else if (v2 === null) {\n return nullIsFirst ? 1 : -1;\n }\n\n if (typeof v1 == 'string')\n v1 = v1.toLowerCase();\n\n if (typeof v2 == 'string')\n v2 = v2.toLowerCase();\n\n if (asc)\n return v1 > v2 ? 1 : v1 < v2 ? -1 : 0;\n return v1 > v2 ? -1 : v1 < v2 ? 1 : 0;\n\n });\n\n return array;\n }\n\n}\n\n@Pipe({\n name: 'orderByFuction'\n})\nexport class OrderByFuctionPipe implements PipeTransform {\n\n transform(array: any[], field: Function, asc: boolean = true, nullIsFirst: boolean = false): any[] {\n if (!Array.isArray(array)) {\n return;\n }\n array.sort((a, b) => {\n var v1 = field(a);\n var v2 = field(b);\n // equal items sort equally\n if (v1 === v2) {\n return 0;\n }\n // nulls sort after anything else according to nullIsFirst\n else if (v1 === null) {\n return nullIsFirst ? -1 : 1;\n }\n else if (v2 === null) {\n return nullIsFirst ? 1 : -1;\n }\n\n if (typeof v1 == 'string')\n v1 = v1.toLowerCase();\n\n if (typeof v2 == 'string')\n v2 = v2.toLowerCase();\n\n if (asc)\n return v1 > v2 ? 1 : v1 < v2 ? -1 : 0;\n return v1 > v2 ? -1 : v1 < v2 ? 1 : 0;\n\n });\n\n return array;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MobilePipe } from './mobile.pipe';\n\n@Pipe({\n name: 'filter'\n})\nexport class FilterPipe implements PipeTransform {\n\n constructor(private mobilePipe: MobilePipe) { }\n\n transform(list: any[], filterTerm: any, filterProperties: string[] = null): any[] {\n if (!filterTerm || filterTerm == '' || !list || !list.length)\n return list;\n\n var term = filterTerm.toLowerCase();\n if (!filterProperties)\n filterProperties = Object.keys(list[0]);\n\n return list.filter(item => {\n var isAny = filterProperties.filter(key => {\n var v = item[key];\n if (v && v.toString().toLowerCase().indexOf(term) >= 0)\n return true;\n if (key == 'mobile') {\n v = this.mobilePipe.transform(item[key]);\n return v && v.toString().toLowerCase().split(' ').join('').indexOf(term) >= 0;\n }\n return false;\n });\n return isAny.length > 0;\n });\n\n //if (!filterObject)\n // return list;\n //var keys = Object.keys(filterObject);\n //if (keys.length == 0 || keys.every(k => !filterObject[k] || filterObject[k] == ''))\n // return list;\n\n //return list.filter(item => keys.some(k => item[k] && item[k].toString().contains(filterObject[k].toString())));\n\n }\n\n}\n","\n\n","import { Component, OnInit } from '@angular/core';\nimport { Event, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { UserPermission, UserPermissionList } from 'src/app/enums/user-permission.enum';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { StorageService } from 'src/app/services/storage.service';\nimport { LocalStorageKey } from 'src/app/enums/local-storage-key.enum';\nimport { SidebarItem } from 'src/app/models/sidebar-item-mode';\nimport { GodUserPermission } from 'src/app/enums/god-user-permission.enum';\nimport { CompanyStatus } from 'src/app/enums/company-status.enum';\n\n@Component({\n selector: 'obc-side-bar',\n templateUrl: './side-bar.component.html',\n styleUrls: ['./side-bar.component.scss']\n})\nexport class SideBarComponent implements OnInit {\n ProductPlanFeature = ProductPlanFeature;\n isGod: boolean = false;\n isAdminMode: boolean = false;\n hasCompany: boolean = false;\n isCompanyOwner: boolean = false;\n viewAcademyLink: boolean = false;\n companies: CompanyViewModel[] = null;\n filterCompanyListTerm: string;\n userPermissions = UserPermission;\n userPermissionList = UserPermissionList;\n isActiveAdvancedMenu: boolean = false;\n canViewActivityReport: boolean = false;\n isSupplierCompany: boolean;\n supplierManageFormsHashLink: string;\n\n sidebarItems: SidebarItem[] = []\n\n constructor(public layoutService: LayoutService,\n public userService: UserService,\n private router: Router,\n private storageService: StorageService) {\n this.router.events.subscribe((event: Event) => {\n if (event instanceof NavigationStart) {\n }\n\n if (event instanceof NavigationEnd) {\n layoutService.closeSideBarInMobileMode();\n }\n\n if (event instanceof NavigationError) {\n console.log(event.error);\n }\n });\n\n }\n\n ngOnInit() {\n\n this.isActiveAdvancedMenu = this.storageService.get(LocalStorageKey.IsActiveAdvancedMenu) == 'true';\n this.userService.info.subscribe(res => {\n this.companies = res?.companies;\n this.isGod = res?.userPermissions?.isGodUser;\n this.hasCompany = res?.currentCompanyId != 0;\n if (!this.hasCompany) // active admin mode\n this.isAdminMode = true;\n\n this.isSupplierCompany = res?.isSupplierCompany ?? false;\n this.supplierManageFormsHashLink = res?.supplierManageFormsHashLink;\n\n this.isCompanyOwner = res?.userPermissions?.isCompanyAdmin\n\n });\n this.userService.userPermissions.subscribe(res => {\n if (!res) return;\n this.setMenuItems();\n\n })\n this.userService.currentCompany$.subscribe(res => {\n this._currentCompany = res;\n this.canViewActivityReport = this._currentCompany?.maxSites == null || this._currentCompany?.maxSites > 0;\n });\n\n if (this.layoutService.leftMenuIsOpen === false)\n this.layoutService.closeSideBar();\n\n // this.academyService.getCount(UserSystem.desktop).subscribe(res => this.viewAcademyLink = res > 0);\n }\n\n private setMenuItems() {\n this.sidebarItems = [];\n this.sidebarItems = [\n new SidebarItem('Dashboard', '/dashboard', 'fas fa-chart-line', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserAnyOfPermissions(this.userPermissionList)),\n new SidebarItem('Sites', '/sites', 'fas fa-archway', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserAnyOfPermissions([UserPermission.AdjustSiteLocation, UserPermission.ManageAutomations, UserPermission.ManageSiteQuestion, UserPermission.ModifySite, UserPermission.ManageSiteAnnouncement])),\n new SidebarItem('Approvals', '/reports/pending-approval', 'fas fa-check-square', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserAnyOfPermissions([UserPermission.ApproveRejectSiteInduction])),\n new SidebarItem('Supplier Forms', '/manage-site-supplier-forms/', 'fas fa-file-alt', () => !this.isAdminMode && this.isSupplierCompany),\n new SidebarItem('Suppliers', '/supplier', 'fas fa-industry', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserPermissionForCompany(UserPermission.SupplierManagement)),\n new SidebarItem('User Directory', '/user-directory', 'fas fa-users', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasAccessToUserDirectory()),\n new SidebarItem('Editor', '', 'fas fa-cog', () => this.hasCompany && !this.isAdminMode && (this.userService.isCompanyAdminUser() || this.userService.hasUserAnyOfPermissions([UserPermission.ManageSiteAnnouncement])), [\n new SidebarItem('Questions', '/question', 'fas fa-question', () => this.hasCompany && !this.isAdminMode && this.userService.isCompanyAdminUser()),\n new SidebarItem('Announcements', '/manage-announcements', 'fas fa-bell', () => this.hasCompany && !this.isAdminMode && (this.userService.isCompanyAdminUser() || this.userService.hasUserAnyOfPermissions([UserPermission.ManageSiteAnnouncement]) && this.userService.hasCompanyFeature(ProductPlanFeature.Announcements))),\n new SidebarItem('Forms', '/forms', 'fas fa-file-alt', () => this.hasCompany && !this.isAdminMode && this.userService.isCompanyAdminUser() && (this.userService.hasCompanyFeature(ProductPlanFeature.Form) || this.isTemplateCompany)),\n new SidebarItem('Inductions', '/inductions', 'fas fa-id-badge', () => this.hasCompany && !this.isAdminMode && this.userService.isCompanyAdminUser()),\n // new SidebarItem('Scannables', '/scannables', 'fa fa-object-group', () => this.isActiveAdvancedMenu && this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.isCompanyAdminUser() && this.userService.hasCompanyFeature(ProductPlanFeature.Scannables)),\n new SidebarItem('Asset Manager', '/asset-manager', 'fa fa-tools', () => this.isTemplateCompany && this.hasCompany && !this.isAdminMode && this.userService.isCompanyAdminUser()),\n new SidebarItem('Roles and Permissions', '/company-roles', 'fa fa-user-shield', () => this.isTemplateCompany && this.hasCompany && !this.isAdminMode && this.userService.isCompanyAdminUser()),\n new SidebarItem('Visitor Types', '/visitor-type-manager', 'fa fa-user', () => this.isTemplateCompany && this.hasCompany && !this.isAdminMode && this.userService.isCompanyAdminUser())\n ]),\n // new SidebarItem('Permissions', '', 'fas fa-users', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && (this.userService.isCompanyAdminUser() || this.userService.hasUserAnyOfPemissions([UserPermission.ManageViewTaggedUser, UserPermission.SiteHost, UserPermission.CompanyHost])), [\n // new SidebarItem('Company Hosts', '/manage-hosts', '', () => this.userService.hasUserPermissionForCompany(UserPermission.CompanyHost)),\n // new SidebarItem('Site Hosts', '/site-users', '', () => this.userService.hasUserPermissionForCompany(UserPermission.SiteHost) && this.userService.hasCompanyFeature(ProductPlanFeature.SiteHosts)),\n // new SidebarItem('Frequent Users', '/user-permissions', '', () => this.userService.isCompanyAdminUser()),\n // new SidebarItem('Company Employees', '/employees', '', () => this.userService.isCompanyAdminUser()),\n // new SidebarItem('Temporary Invites', '/user-permissions/temporary', '', () => this.isActiveAdvancedMenu && this.userService.isCompanyAdminUser()),\n // new SidebarItem('Blocked Users', '/blocked-users', '', () => this.isActiveAdvancedMenu && this.userService.isCompanyAdminUser()),\n // new SidebarItem('Tagged Users', '/flagged-users', '', () => this.isActiveAdvancedMenu && this.userService.hasUserPermissionForCompany(UserPermission.ManageViewTaggedUser) && this.userService.hasCompanyFeature(ProductPlanFeature.Automation))],\n // ),\n new SidebarItem('Reports', '', 'fas fa-align-left', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany, [\n new SidebarItem('Live Attendance', '/reports/site-attendance', '', () => this.canViewActivityReport && this.userService.hasUserPermissionForCompany(UserPermission.ViewReports)),\n new SidebarItem('Activity Report', '/reports/site-activity/answers', '', () => this.canViewActivityReport && this.userService.hasUserPermissionForCompany(UserPermission.ViewReports)),\n new SidebarItem('Asset Report', '/reports/asset-report', '', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasCompanyFeature(ProductPlanFeature.Inventory) && (this.userService.hasUserPermissionForCompany(UserPermission.ViewReports) || this.userService.hasPermissionOnCompany(UserPermission.AssetTrackerAdmin))),\n new SidebarItem('Card Report', '/reports/card', '', () => this.userService.hasUserPermissionForCompany(UserPermission.ViewReports)),\n new SidebarItem('Induction Report', '/reports/induction-report', '', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserPermissionForCompany(UserPermission.ViewReports)),\n new SidebarItem('Form Report', '/reports/form-report', '', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserPermissionForCompany(UserPermission.ViewReports) && this.userService.hasCompanyFeature(ProductPlanFeature.Form)),\n new SidebarItem('My Scheduled Reports', '/reports/my-scheduled-reports', '', () => this.userService.hasCompanyFeature(ProductPlanFeature.SchaduleReport) && this.userService.hasUserPermissionForCompany(UserPermission.ViewReports)),\n new SidebarItem('Contact Tracing', '/reports/user-activity/tracing', '', () => this.isActiveAdvancedMenu && this.userService.hasUserPermissionForCompany(UserPermission.ViewReports)),\n new SidebarItem('Permits', '/reports/permit-report', '', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && (this.userService.hasUserPermissionForCompany(UserPermission.ViewReports) || this.userService.hasUserAnyOfPermissions([UserPermission.ApproveRejectSiteInduction])) && this.userService.hasCompanyFeature(ProductPlanFeature.Form)),\n new SidebarItem('Evacuations', '/reports/evacuations', '', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserPermissionForCompany(UserPermission.ViewReports)),\n new SidebarItem('Supplier Document Report' + ' Report', '/reports/supplier-document', '', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserPermissionForCompany(UserPermission.ViewReports) && this.userService.hasUserPermissionForCompany(UserPermission.SupplierManagement)),\n new SidebarItem('Site Briefings', '/reports/site-briefing-report', '', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserPermissionForCompany(UserPermission.ViewReports) && this.userService.hasCompanyFeature(ProductPlanFeature.SiteBriefing)),\n ]),\n new SidebarItem('Host', '', 'fas fa-user-cog', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany, [\n new SidebarItem('Check-In/Out', '/manual-check', 'fas fa-check', () => this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.hasUserPermissionForCompany(UserPermission.ManualCheck)),\n new SidebarItem('Send Push Notification', '/host-push-notification', 'far fa-comment', () => !this.isTemplateCompany && this.userService.hasUserPermissionForCompany(UserPermission.SendPushNotification)),\n new SidebarItem('Access Control Unit', '/site-access-control-unit', 'fa fa-door-open', () => this.userService.hasAdminPermissionOnAnySite() && this.userService.hasCompanyFeature(ProductPlanFeature.AccessControl))\n ]),\n new SidebarItem('Workflows', '/workflow-cartable', 'fas fa-table', () => this.hasCompany && this.isActiveAdvancedMenu && !this.isAdminMode && !this.isTemplateCompany && this.userService.getCompanyStatusValue(CompanyStatus.HasAnySupplierDocumentWorkflow) == true),\n new SidebarItem('Audit Logs', '/audit-log-report', 'fas fa-user-secret', () => this.isGod && this.isActiveAdvancedMenu && this.hasCompany && !this.isAdminMode && !this.isTemplateCompany && this.userService.isCompanyAdminUser()),\n new SidebarItem('Card Designer', '/card-designer', 'fas fa-id-card', () => false && this.hasCompany && !this.isAdminMode && !this.isTemplateCompany),\n new SidebarItem('Support', 'https://support.1breadcrumb.com', 'fas fa-question', () => !this.isTemplateCompany, null, false, 'support'),\n new SidebarItem('Administration', '', 'fas fa-crown', () => this.isGod && this.isAdminMode, [\n new SidebarItem('Company Management', '/manage-companies', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ManageCompanies)),\n new SidebarItem('Plan Management', '/manage-plans', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ManagePlans)),\n new SidebarItem('Document Types', '/user-documents', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ManageDocumentTypes)),\n new SidebarItem('Videos', '/manage-videos', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ManageVideos)),\n new SidebarItem('Industry Types', '/manage-industry-types', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ManageIndustryTypes)),\n new SidebarItem('Global Asset Fields', '/asset-global-dynamic-fields', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ManageGlobalAssetFields)),\n new SidebarItem('Change Mobile Number', '/user-edit-phone', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.EditMobileNumber)),\n new SidebarItem('Audit Logs', '/audit-log-report/system', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.AuditLog)),\n new SidebarItem('Procore Sync Monitoring', '/procore-sync-monitoring', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ProcoreSyncMonitoring)),\n new SidebarItem('Gate Management', '/manage-gates', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ManageGates)),\n new SidebarItem('Procore Force ReSync', '/force-procore-sync', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ForceProcoreSync)),\n new SidebarItem('SMS Service Provider Management', '/sms-service-provider', '', () => this.isGod && this.isAdminMode && this.userService.hasGodUserPermissionForCompany(GodUserPermission.ManageSMSProvider))\n ], true)\n ];\n }\n\n handleSidebarItemClick($event, sidebarItem: SidebarItem) {\n if (sidebarItem.route) {\n //this.router.navigate([sidebarItem.route]);\n return;\n } else {\n let el = document.getElementById(sidebarItem.id);\n this.layoutService.toggleSubMenu($event, el);\n }\n }\n\n onAdvancedMenuChanged(isActive) {\n this.isActiveAdvancedMenu = isActive;\n this.storageService.set(LocalStorageKey.IsActiveAdvancedMenu, this.isActiveAdvancedMenu.toString());\n }\n\n onChangeCompany(id: number) {\n this.userService.changeCompany(id).subscribe(res => {\n window.location.replace('/');\n }, err => {\n console.log(err);\n })\n }\n\n _currentCompany: CompanyViewModel = null;\n get currentCompany(): CompanyViewModel {\n return this._currentCompany;\n }\n\n get isTemplateCompany(): boolean {\n if (this._currentCompany == null)\n return false;\n else\n return this._currentCompany.isTemplate;\n }\n\n get currentCompanyId(): number {\n if (this._currentCompany == null)\n return null;\n else\n return this._currentCompany.id;\n }\n\n get companyName(): string {\n if (this._currentCompany == null)\n return null;\n else\n return this._currentCompany.title;\n }\n\n preventEventPropagation(event: MouseEvent) {\n event.stopPropagation()\n }\n}\n","\n
\n \n
\n
\n
\n \n
\n
\n
\n

\n \n {{header}}\n \n

\n
\n
    \n
  1. \n \n \n \n
  2. \n
  3. Layouts
  4. \n
\n\n \n
\n
\n
\n \n
\n
\n
\n \n
\n Loading...
Please wait...
\n
\n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { CompanyService } from 'src/app/services/company.service';\nimport { SignalRService } from '../../services/signal-r.service';\nimport { IAccount, IVisitor, NgxPendoService } from 'ngx-pendo';\nimport { PendoData } from 'src/app/models/user-info-viewmodel';\n\n@Component({\n selector: 'obc-secure',\n templateUrl: './secure.component.html',\n styleUrls: ['./secure.component.scss'],\n})\nexport class SecureComponent implements OnInit {\n header: string = '';\n\n constructor(\n public layoutService: LayoutService,\n public companyService: CompanyService,\n private signalRService: SignalRService,\n public userService: UserService,\n private ngxPendoService: NgxPendoService\n ) { }\n\n ngOnInit(): void {\n this.userService.initUserInfo();\n this.userService.info.asObservable().subscribe((res) => {\n if (res) {\n try {\n this.signalRService.connect();\n }\n catch (e) { console.error(e); }\n\n try {\n this.userService.info.subscribe(user => {\n if (user?.id) {\n var pendoData = user.pendoData;\n //visitor\n const visitor: IVisitor = {\n id: pendoData.visitorId\n };\n if (pendoData.visitorData) {\n Object.entries(pendoData.visitorData).forEach(([key, value]) => {\n visitor[key] = value;\n });\n }\n //account\n const account: IAccount = {\n id: pendoData.accountId\n };\n if (pendoData.accountData) {\n Object.entries(pendoData.accountData).forEach(([key, value]) => {\n account[key] = value;\n });\n }\n this.ngxPendoService.initialize(\n visitor,\n account);\n }\n });\n }\n catch (e) { console.error(e); }\n }\n });\n this.layoutService.header$.subscribe((res) =>\n setTimeout(() => {\n this.header = res;\n }, 100)\n );\n }\n}\n","export enum ChartType {\n line = 0,\n pie = 1,\n}","\nexport function createBgColor(id?: any): number[] {\n return random_bg_color(id);\n}\n\nexport function getFontColor(rgb: number[]): string {\n var FontColor = '#eee';\n if (colorIsLight(rgb)) {\n FontColor = '#555';\n }\n return FontColor\n}\n\nfunction random_bg_color(id?: any): number[] {\n var r = Math.floor((Math.random()) * 255);\n var g = Math.floor((Math.random()) * 255);\n var b = Math.floor((Math.random()) * 255);\n\n return [r, g, b];\n}\n\nexport function rgbStringFormat(x: number[]) {\n return 'rgb(' + x[0] + ',' + x[1] + ',' + x[2] + ')';\n};\n\nfunction colorIsLight(rgb: number[]) {\n var a = 1 - (0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]) / 255;\n return (a < 0.5);\n}\n\n","import { ChartType } from '../enums/chart-type';\nimport { ChartResponse } from './chart-response';\nimport { createBgColor, rgbStringFormat } from '../helpers/color-helper';\n\nexport class ChartModel {\n chartType: ChartType;\n data: {};\n options: {};\n title: string;\n inProgress: boolean;\n\n private labels: string[];\n private values: number[];\n colors: string[] = [];\n legendPosition: string = 'top';\n titlePosition: string = 'bottom';\n\n constructor(type: ChartType) {\n this.chartType = type;\n }\n\n init(data: ChartResponse[]) {\n\n this.labels = data.map(c => c.label);\n this.values = data.map(c => c.value);\n this.colors = data.map(c => rgbStringFormat(createBgColor()));\n\n switch (this.chartType) {\n case ChartType.line:\n this.data = this.lineFormat[\"data\"];\n this.options = this.lineFormat[\"options\"];\n break;\n case ChartType.pie:\n this.data = this.pieFormat[\"data\"];\n this.options = this.pieFormat[\"options\"];\n break;\n }\n }\n\n public static getChartModel(widget: any): ChartModel {\n var chart = new ChartModel(widget.chartType as ChartType);\n chart.legendPosition = widget.legendPosition;\n chart.titlePosition = widget.titlePosition;\n chart.title = widget.widgetModel.title;\n var colors = widget.labels.map(c => rgbStringFormat(createBgColor()));\n\n switch (chart.chartType) {\n case ChartType.line:\n chart.data = {\n labels: widget.labels,\n datasets: (widget.datasets as any[]).map(p => {\n return {\n label: p.label,\n data: p.data,\n lineTension: 0,\n fill: false,\n backgroundColor: colors,\n borderColor: rgbStringFormat(createBgColor()),\n }\n })\n };\n chart.options = {\n legend: {\n display: true,\n position: widget.legendPosition\n },\n title: {\n display: true,\n position: widget.titlePosition,\n text: widget.widgetModel.title\n },\n tooltips: {\n enabled: true,\n mode: 'index',\n intersect: true,\n callbacks : {\n title : ()=> {\n return null;\n },\n label : (dataPoint, data) => {\n var tooltips = widget.datasets[dataPoint.datasetIndex].tooltips[dataPoint.index];\n return `${tooltips} : ${dataPoint.yLabel}`;\n }\n }\n },\n responsive: true,\n maintainAspectRatio: true\n }\n break;\n case ChartType.pie:\n chart.data = {\n labels: widget.labels,\n datasets: (widget.datasets as any[]).map(p => {\n return {\n label: p.label,\n data: p.data,\n lineTension: 0,\n fill: false,\n backgroundColor: colors,\n borderColor: rgbStringFormat(createBgColor()),\n }\n })\n };\n chart.options = {\n legend: {\n display: widget.labels != null && widget.labels.length <= 10,\n position: widget.legendPosition\n },\n title: {\n display: true,\n position: widget.titlePosition,\n text: widget.widgetModel.title\n },\n responsive: true,\n maintainAspectRatio: true\n }\n break;\n }\n return chart;\n }\n\n\n get lineFormat(): {} {\n return {\n data: {\n labels: this.labels,\n datasets: [\n {\n label: \"Daily Check-in ***\",\n lineTension: 0,\n fill: false,\n data: this.values,\n backgroundColor: this.colors,\n borderColor: rgbStringFormat(createBgColor()),\n }\n ]\n },\n options: {\n legend: {\n display: true,\n position: this.legendPosition\n },\n title: {\n display: true,\n position: this.titlePosition,\n text: this.title\n },\n responsive: true,\n maintainAspectRatio: true\n }\n };\n }\n\n get pieFormat(): {} {\n return {\n data: {\n labels: this.labels,\n datasets: [\n {\n label: \"Daily Check-in ***\",\n lineTension: 0,\n fill: false,\n data: this.values,\n backgroundColor: this.colors,\n }\n ]\n },\n options: {\n legend: {\n display: this.labels != null && this.labels.length <= 10,\n position: this.legendPosition,\n },\n title: {\n display: true,\n position: this.titlePosition,\n text: this.title\n },\n responsive: true,\n maintainAspectRatio: true\n }\n };\n }\n}\n\n","export class DashboardTotalsInfo {\n public totalSite: number;\n public totalUsers: number;\n public totalCheckIn: number;\n public todayAnswerQuestions: number;\n}","export enum DashboardReportPeriod {\n LastWeek = 0,\n LastMonth = 1,\n Last3Month = 2,\n Last6Month = 3,\n LastYear = 4,\n}","import { AbstractControl } from '@angular/forms';\n\n\nexport function urlValidator(control: AbstractControl): { [key: string]: boolean } | null {\n if(!control.value)\n return null;\n var value = control.value as string;\n var valid = validURL(value);\n return valid ? null : { 'urlValidator': true };\n}\n\nfunction validURL(str) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/\n return regexp.test(str);\n\n // var pattern = new RegExp('^(https?:\\\\/\\\\/)?' + // protocol\n // '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n // '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n // '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n // '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n // '(\\\\#[-a-z\\\\d_]*)?$', 'i'); // fragment locator\n // return !!pattern.test(str);\n}\n\n","export enum DashboardWidgetType {\n CheckInReport = 1,\n SiteVisit = 2,\n TotalSite = 3,\n TotalUsers = 4,\n TotalCheckIns = 5,\n TodayAnsweredQuestions = 6,\n ExternalLink = 7,\n TotalUsersOnsite = 8,\n TotalOpenPermits = 9,\n TotalOnHoldPermits = 10,\n TotalAwaitingApprovalPermits = 11,\n TotalAwaitingApprovalSupplierDocuments = 12,\n}\n","/**\n * Create a GUID\n * @see https://stackoverflow.com/a/2117523/319711\n *\n * @returns RFC4122 version 4 compliant GUID\n */\nexport const uuid4 = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n // tslint:disable-next-line:no-bitwise\n const r = (Math.random() * 16) | 0;\n // tslint:disable-next-line:no-bitwise\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n };\n ","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { catchError } from 'rxjs/operators';\nimport { ChartResponse } from '../models/chart-response';\nimport { DashboardTotalsInfo } from '../models/dashboard-total-infos';\nimport { DashboardReportPeriod } from '../enums/dashboard-report-period.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardService {\n\n apiUrl: string = '/api/dashboard';\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n get timeZone(): number {\n return new Date().getTimezoneOffset();\n }\n\n getChackInBySiteInDateRange = (): Observable =>\n this._http.get(`${this.apiUrl}/bysite/${this.timeZone}`)\n .pipe(catchError(this._errorService.handleError));\n\n //like get check-in in lastweek, in this case labels should be last week days name\n getCheckInByDateInDateRange = (): Observable =>\n this._http.get(`${this.apiUrl}/bydate/${this.timeZone}`)\n .pipe(catchError(this._errorService.handleError));\n\n\n getDashboardTotalInfos = (): Observable =>\n this._http.get(`${this.apiUrl}/totals/${this.timeZone}`)\n .pipe(catchError(this._errorService.handleError));\n\n getDashboardWidgets = (period : DashboardReportPeriod): Observable =>\n this._http.get(`${this.apiUrl}/get-dashboard-widgets/${this.timeZone}/${period}`)\n .pipe(catchError(this._errorService.handleError));\n updateCompanyWidgetConfig = (model: any): Observable =>\n this._http.post(`${this.apiUrl}/update-dashboard-widgets`, model)\n .pipe(catchError(this._errorService.handleError));\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocaleService } from '../services/locale.service';\nimport { DatePipe } from '@angular/common';\n\n@Pipe({\n name: 'weekday'\n})\nexport class WeekdayPipe implements PipeTransform {\n\n private datePipe: DatePipe;\n constructor(private localeService : LocaleService) {\n this.datePipe = new DatePipe(this.localeService.defaultLocale);\n }\n\n transform(value: any): string{\n return this.datePipe.transform(value,'EEEE');\n }\n}\n","
\n
\n
\n \n
\n
\n
\n
\n

{{data.widgetModel.title}}

\n
\n {{data.amount}}\n
\n
\n \n
\n
\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'obc-summary-widget',\n templateUrl: './summary-widget.component.html',\n styleUrls: ['./summary-widget.component.css']\n})\nexport class SummaryWidgetComponent implements OnInit {\n @Input() data : any;\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { ChartModel } from 'src/app/models/chart-model';\nimport { ChartType } from 'src/app/enums/chart-type';\n\n@Component({\n selector: 'obc-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss']\n})\nexport class ChartComponent implements OnInit {\n\n chartType = ChartType;\n _chartModel: ChartModel;\n @Input() set chartModel(_chart: ChartModel) {\n if (!_chart) return;\n this._chartModel = _chart;\n }\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n\n\n","\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nexport type SafePipeType = 'html' | 'style' | 'script' | 'url' | 'resourceUrl';\n\n@Pipe({\n name: 'safe'\n})\n\nexport class SafePipe implements PipeTransform {\n\n constructor(protected sanitizer: DomSanitizer) {}\n\n transform(value: string, type: SafePipeType) {\n switch (type) {\n case 'html': return this.sanitizer?.bypassSecurityTrustHtml(value);\n case 'style': return this.sanitizer?.bypassSecurityTrustStyle(value);\n case 'script': return this.sanitizer?.bypassSecurityTrustScript(value);\n case 'url': return this.sanitizer?.bypassSecurityTrustUrl(value);\n case 'resourceUrl': return this.sanitizer?.bypassSecurityTrustResourceUrl(value);\n default: throw new Error(`Invalid safe type specified: ${type}`);\n }\n }\n}\n","
\n
\n
\n
\n \n
\n
\n \n \n
\n
\n\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n\n \n
\n
\n \n Select / Remove Widget(s)\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Widget
{{widgetModel.title}}
\n

all widgets are selected

\n
\n
\n \n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n

\n \n

\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Company Widget(s)Order
{{companyWidgetModel.title}}\n
\n \n \n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n","import { Component, ElementRef, OnInit } from '@angular/core';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { DashboardService } from 'src/app/services/dashboard.service';\nimport { DashboardSearchModel } from 'src/app/models/dashboard-search-model';\nimport { finalize, map } from 'rxjs/operators';\nimport { ChartModel } from 'src/app/models/chart-model';\nimport { ChartType } from 'src/app/enums/chart-type';\nimport { WeekdayPipe } from 'src/app/pipes/weekday.pipe';\nimport { ChartResponse } from 'src/app/models/chart-response';\nimport 'src/app/extensions/date.extensions';\n//import { getDateRangeFromNowTo } from 'src/app/helpers/datetime-helper';\nimport { DashboardTotalsInfo } from 'src/app/models/dashboard-total-infos';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { WidgetModel, CompanyWidgetModel } from 'src/app/models/widget-model';\nimport { OrderByPipe } from 'src/app/pipes/order-by.pipe';\nimport { UserService } from 'src/app/services/user.service';\nimport { StorageService } from 'src/app/services/storage.service';\nimport { DashboardReportPeriod } from 'src/app/enums/dashboard-report-period.enum';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { urlValidator } from 'src/app/helpers/url-validator';\nimport { DashboardWidgetType } from 'src/app/enums/dashboard-widget-type.enum';\nimport { Observable, of } from 'rxjs';\nimport { delay, tap } from 'rxjs/operators';\nimport { uuid4 } from 'src/app/helpers/uuid';\n\nconst key = \"dashboard-period\";\n@Component({\n selector: 'obc-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss']\n})\nexport class DashboardComponent implements OnInit {\n DashboardWidgetTypes = DashboardWidgetType;\n externalWidgetFormGroup = new FormGroup({\n title: new FormControl('', [Validators.required]),\n url: new FormControl('', [Validators.required, urlValidator]),\n type: new FormControl(this.DashboardWidgetTypes.ExternalLink),\n width: new FormControl(\"col-md-12 col-sm-12\", [Validators.required]),\n height: new FormControl(null, [Validators.required]),\n unit: new FormControl('pixel', [Validators.required]),\n });\n lineChart: ChartModel = new ChartModel(ChartType.line);\n pieChart_ChekInBySite: ChartModel = new ChartModel(ChartType.pie);\n dashboardTotalInfos: DashboardTotalsInfo = new DashboardTotalsInfo();\n inProgress: boolean = false;\n get period(): number {\n var period = +this.storageService.get(key);\n if (period == null) {\n period = DashboardReportPeriod.LastWeek;\n this.storageService.set(key, period.toString());\n }\n return period;\n }\n\n set period(value: number) {\n this.storageService.set(key, value.toString());\n }\n\n constructor(private layoutService: LayoutService,\n private dashboardService: DashboardService,\n private bsModalService: BsModalService,\n private orderByPipe: OrderByPipe,\n public userService: UserService,\n private storageService: StorageService,\n private weekdayPipe: WeekdayPipe) { }\n ngOnInit(): void {\n this.layoutService.header = \"Dashboard\";\n //this.getChartsInfo();\n this.init();\n }\n\n getChartsInfo() {\n this.lineChart.inProgress = true;\n this.dashboardService.getCheckInByDateInDateRange()\n .pipe(finalize(() => { this.lineChart.inProgress = false; }))\n .subscribe(res => {\n let points = res;\n this.lineChart.init(points)\n },\n error => { console.log(error); });\n\n\n this.pieChart_ChekInBySite.inProgress = true;\n this.dashboardService.getChackInBySiteInDateRange()\n .pipe(finalize(() => { this.pieChart_ChekInBySite.inProgress = false; }))\n .subscribe(res => { this.pieChart_ChekInBySite.init(res) }, error => { console.log(error); });\n\n this.inProgress = true;\n this.dashboardService.getDashboardTotalInfos()\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => { this.dashboardTotalInfos = res; }, error => { console.log(error); });\n }\n\n widgets: any;\n widgetModels: WidgetModel[] = [];\n baseWidgetModels: WidgetModel[] = [];\n companyWidgets: CompanyWidgetModel[] = [];\n\n init() {\n this.inProgress = true;\n this.dashboardService.getDashboardWidgets(this.period)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n for (var i = 0; i < res.dashboardWidgets.length; i++) {\n res.dashboardWidgets[i].id = uuid4();\n this.setExternalWidgetHeight(res.dashboardWidgets[i]);\n }\n this.widgets = res.dashboardWidgets;\n this.widgetModels = res.widgetModels;\n this.baseWidgetModels = res.baseWidgetModels;\n\n var i = 0;\n this.companyWidgets = (res.dashboardWidgets as any[]).map((w) => {\n if (w.widgetModel.type == this.DashboardWidgetTypes.ExternalLink) {\n return {\n type: w.widgetModel.type,\n order: i++,\n title: w.title,\n url: w.url,\n width: w.width,\n height: w.height,\n unit: w.unit,\n } as CompanyWidgetModel;\n }\n else\n return { type: w.widgetModel.type, order: i++, title: w.widgetModel.title } as CompanyWidgetModel;\n })\n }, error => { console.log(error); }\n );\n }\n\n getChart(widget: any): ChartModel {\n if (!widget.chart)\n widget.chart = ChartModel.getChartModel(widget);\n return widget.chart;\n }\n bsModalRef: any;\n\n\n copyBaseWidgetModels: WidgetModel[] = [];\n copyCompanyWidgets: CompanyWidgetModel[] = [];\n\n manageWidgets(template) {\n this.bsModalRef = this.bsModalService.show(template, {\n ignoreBackdropClick: true\n });\n this.copyCompanyWidgets = [...this.companyWidgets];\n this.copyBaseWidgetModels = [...this.baseWidgetModels];\n }\n\n closeModal() {\n this.companyWidgets = [...this.copyCompanyWidgets];\n this.copyBaseWidgetModels = [...this.copyBaseWidgetModels];\n this.bsModalRef.hide();\n }\n\n get orderedCompanyWidgets(): any[] {\n return this.orderByPipe.transform(this.companyWidgets, \"order\");\n }\n\n get unusedWidgets(): any[] {\n return this.baseWidgetModels.filter(w => {\n if (w.type == this.DashboardWidgetTypes.ExternalLink) return false;\n var repeated = this.companyWidgets.find(i => i.type == w.type);\n return !repeated;\n })\n }\n\n changeOrder(companyWidgetModel: any, moveUp: boolean) {\n companyWidgetModel.order += (1.5 * (moveUp ? -1 : +1));\n this.reorderWidgets();\n }\n\n removeWidget(companyWidgetModel: any) {\n var index = this.companyWidgets.indexOf(companyWidgetModel);\n this.companyWidgets.splice(index, 1);\n this.reorderWidgets();\n }\n\n addWidget(widgetModel: any) {\n var companyWidgetModel = {\n type: widgetModel.type,\n order: this.companyWidgets ? this.companyWidgets.length : 0,\n title: widgetModel.title,\n };\n this.companyWidgets.push(companyWidgetModel);\n this.reorderWidgets();\n }\n\n addExternalWidget() {\n var companyWidgetModel = {\n type: this.externalWidgetFormGroup.controls.type.value,\n order: this.companyWidgets ? this.companyWidgets.length : 0,\n title: this.externalWidgetFormGroup.controls.title.value,\n url: this.externalWidgetFormGroup.controls.url.value,\n width: this.externalWidgetFormGroup.controls.width.value,\n height: this.externalWidgetFormGroup.controls.height.value,\n unit: this.externalWidgetFormGroup.controls.unit.value,\n };\n this.companyWidgets.push(companyWidgetModel);\n this.externalWidgetFormGroup.reset();\n this.reorderWidgets();\n }\n\n private reorderWidgets() {\n for (let index = 0; index < this.orderedCompanyWidgets.length; index++) {\n const element = this.companyWidgets[index];\n element.order = index;\n }\n }\n\n onSaveChanges() {\n var model = {\n widgetModels: this.orderedCompanyWidgets\n };\n this.dashboardService.updateCompanyWidgetConfig(model).subscribe(res => {\n this.bsModalRef.hide();\n this.init();\n });\n }\n\n\n setExternalWidgetHeight(widget) {\n setTimeout(() => {\n var heigth = +widget.height;\n if (!widget.id) return;\n var element = document.getElementById(widget.id);\n if (!element) return;\n var width = element.offsetWidth;\n var unit = widget.unit as string;\n var h = 0;\n switch (unit) {\n case \"pixel\": {\n h = heigth;\n break;\n }\n case \"precent\": {\n h = width * heigth / 100\n break;\n }\n default: {\n h = width * 0.5\n break;\n }\n }\n element.style.height = `${h}px`\n }, 1000)\n }\n}\n","import { SeatingMode as FillMode } from './../enums/seating-mode.enum';\nimport { AccompanierMode } from '../enums/accompanier-mode';\nimport { AutomaticCheckInMode } from '../enums/automatic-checkin-mode';\nimport { Timezone } from './time-zone';\nimport { CountryViewModel } from './country-view-model';\nimport { UserDocumentType } from './user-document-type';\nimport { SiteQuestionsViewModel } from './sitequestion-viewmodel';\nimport { BaseSiteRequiredFieldViewModel } from './site-required-field-viewmodel';\nimport { AutoCheckOutType } from '../enums/auto-check-out-type.enum';\nimport { MultipleCheckinType } from '../enums/multiple-checkin-type.enum';\nimport { MaxPeopleOnSiteMode } from '../enums/max-people-on-site-mode.enum';\nimport { VisitorType } from './visitor-type';\nimport { ImportRecordState } from '../enums/import-record-status.enum';\nimport { ValidationResultModel } from './validation-result-model';\nimport { InductionMode } from '../enums/site-induction-mode.enum';\nimport { SiteAttendanceInductionViewModel } from './site-attendance-induction-view-model';\nimport { SiteVisitorTypeViewModel } from './site-visitortype-accompanier-viewmodel';\nimport { CheckInApprovalMode } from '../enums/check-in-approval-mode.enum';\nimport { DelayedAnswerMode } from '../enums/delayed-answer-mode';\nimport { QrCodeCheckinMode as QrCodeCheckinMode } from '../enums/qr-code-checkin-mode';\nimport { CheckinLocationMode } from '../enums/checkin-location-mode.enum';\nimport { AccessControlAutomaticAttendanceMode, AccessControlInductionMode, AccessControlSiteBriefingMode, AccessControlSupplierDocumentMode } from '../enums/access-control-automatic-attendance-mode';\nimport { AccessControlUnitModel } from './access-control/access-control-unit';\nimport { ExternalSitePermission } from '../enums/external-site-permission';\nimport { LocationOverrideMode } from '../enums/location-override-mode-enum';\n\nexport interface SiteCloningModel {\n name: string;\n address: string;\n latitude: string;\n longitude: string;\n}\n\nexport interface BaseSiteViewModel {\n id: number;\n name: string;\n siteReference?: string;\n accompanierMode?: AccompanierMode;\n secretCode?: string;\n}\n\nexport interface BaseSiteWithVisitorTypesViewModel extends BaseSiteViewModel {\n siteVisitorTypes: SiteVisitorTypeViewModel[];\n}\n\nexport class SiteViewModel implements BaseSiteViewModel {\n public static MAX_ALLOWED_SITE_RADIUS_DEFAULT: number = 500;\n public static MAX_ALLOWED_AUTOMATIC_CHECKOUT_THRESHOLD_MINUTES_DEFAULT: number = 60;\n public seatingLocationFillMode: FillMode;\n public id: number;\n public companyId: number;\n public name: string;\n public description: string;\n public enableNotifyNearUser: boolean;\n //public enableGeofencing: boolean;\n public autoCheckOutType: AutoCheckOutType;\n public isPublicSite: boolean;\n public companyName: string;\n public siteAttendancesCount: number;\n public address: string;\n public secretCode: string;\n public latitude: string;\n public longitude: string;\n public checkinLocationMode: CheckinLocationMode;\n public qrCodeCheckinMode: QrCodeCheckinMode;\n public geofencingThresholdInMinutes: number;\n public siteRadius: number;\n public maxAllowedSiteRadius: number =\n SiteViewModel.MAX_ALLOWED_SITE_RADIUS_DEFAULT;\n public accompanierMode: AccompanierMode;\n public multipleCheckinType: MultipleCheckinType;\n public autoCheckInType: AutomaticCheckInMode;\n public autoCheckInDelayInMinute: number;\n public siteReference: string;\n public timezoneId?: number;\n public timezone: Timezone;\n public isForcedCheckOutTime: boolean;\n public forceCheckOutTime?: any;//confirm end time of day for example 22:00\n public forceCheckOutAnonymousAfterInMinute?: number;\n public forceCheckOutAfterMinute?: number;//Confirm minutes a person colud be checked in\n public isActive: boolean;\n public siteSupervisorEmailAddress: string;\n public maxPeopleOnSite: number;\n public maxPeopleOnSiteMode: MaxPeopleOnSiteMode;\n public checkInApprovalMode: CheckInApprovalMode;\n public logoUrl: string;\n //public forceCheckOutDateTime? :Date; this property didn't used\n public logoBase64: string;\n public logoExtension: string;\n public locationVerifiedUserId: number;\n public locationVerifiedDate: Date;\n public delayedAnswerModeForCheckIn: DelayedAnswerMode;\n public delayedAnswerModeForCheckOut: DelayedAnswerMode;\n public delayedAnswerForCheckInThresholdInHour: number;\n public delayedAnswerForCheckOutThresholdInHour: number;\n public isTemplate: boolean;\n public delayedAnswerNotificationFrequencyInMinute?: number;\n public delayedAnswerNotificationAfterCheckOutNotifyCount?: number;\n public enablePreCheckIn: boolean;\n public enableOffsiteInductions: boolean;\n public enableOffsiteQR: boolean;\n public enablePreCheckInForFrequentUsers: boolean;\n public enablePreCheckInByCode: boolean;\n public inductionMode: InductionMode;\n public contactUserId: number;\n public regionId: number;\n public contactInformationAsJson: string;\n\n // Only for compatibility fields\n public enableDelayedAnswerForCheckIn: boolean;\n public enableDelayedAnswerForCheckOut: boolean;\n public enableAnonymousCheckinWithQRCode: boolean;\n public locationIsRequired: boolean;\n public CheckInLocationOverrideInKioskMode: LocationOverrideMode;\n\n public bioStarApiServerUrl: string;\n public bioStarApiUsername: string;\n public bioStarApiPassword: string;\n}\n\nexport class SiteDetailsViewModel extends SiteViewModel {\n public isExternalSite: boolean;\n public externalSiteSupplierId?: number;\n public externalSiteSupplierLinkHash?: number;\n public externalSupplierId: number;\n public externalSitePermissions: ExternalSitePermission;\n}\nexport class AdminSiteViewModel extends SiteViewModel {\n public preCheckInCode: string;\n public preCheckInPassword: string;\n public regionName: string;\n public integrationConfigAsJson: string;\n public accessControlAutomaticCheckInMode: AccessControlAutomaticAttendanceMode;\n public accessControlAutomaticCheckOutMode: AccessControlAutomaticAttendanceMode;\n public accessControlInductionCheckingMode: AccessControlInductionMode;\n public accessControlSiteBriefingCheckingMode: AccessControlSiteBriefingMode;\n public accessControlSupplierDocumentCheckingMode: AccessControlSupplierDocumentMode;\n public siteAccessControlUnits: AccessControlUnitModel[];\n public checkInLocationOverrideInKioskMode: LocationOverrideMode;\n}\n\nexport class ImportSiteResponse {\n valid: boolean;\n message: string;\n sites: ImportSiteModel[];\n}\n\nexport class ImportSiteModel extends SiteViewModel {\n validationStatus: ImportRecordState;\n errorMessages: ValidationResultModel[];\n isUpdateRequest: boolean;\n}\n\nexport class AnonymousCheckInSiteViewModel extends SiteViewModel {\n country: CountryViewModel;\n companyLogoUrl: string;\n questions: SiteQuestionsViewModel[];\n inductions: SiteAttendanceInductionViewModel[];\n requiredDocuments: UserDocumentType[];\n requiredFields: BaseSiteRequiredFieldViewModel[];\n visitorTypes: VisitorType[];\n}\n","export enum SiteActiveStatus {\n All,\n Active,\n InActive,\n}","export enum SiteTemplateStatus {\n All,\n Normal,\n Templates,\n}","export enum QuestionType {\n Boolean = 0,\n SingleSelect = 1,\n MultiSelect = 2,\n Text = 3,\n File = 4,\n RichText = 5,\n Date = 6,\n SignaturePad = 7,\n AssetField = 8,\n ProfileInfo = 9,\n EmergencyContact = 10,\n}\n","export enum OptionalMandatoryState {\n Optional = 0,\n Mandatory = 1,\n}\n","import { FormControl, ValidatorFn, AbstractControlOptions, AsyncValidatorFn } from '@angular/forms';\n\nexport class CustomFormControl extends FormControl {\n constructor(state, public item, validatorOrOpts?: ValidatorFn[] ) {\n super(state, validatorOrOpts);\n }\n}\n","export enum FileType {\n Pdf = 0,\n Video = 1,\n Text = 2,\n Audio = 3,\n Youtube = 4,\n Image = 5,\n ExternalLink = 6,\n Binary = 7\n}\n","import { FormArray, FormGroup, Validators } from '@angular/forms';\nimport { QuestionType } from '../enums/question-type';\nimport { OptionalMandatoryState } from '../enums/site-document-state.enum';\nimport { SiteAttendanceQuestionAnswer } from '../models/attendance-request/site-attendance-question-answer';\nimport { SiteQuestionViewModel } from '../models/site-question-viewmodel';\nimport { CustomFormControl } from \"../models/custom-formcontrol\";\nimport { RequiredDocumentAnswer } from \"../models/requiredDocumentAnswer\";\nimport { RequiredDocumentViewModel } from \"../models/user-document-type\";\nimport { SupplierCheckinViewModel } from \"../models/supplier-checkin-view-model\";\nimport { FileType } from \"../enums/file-type.enum\";\nimport { CheckListItemViewModel } from '../custom-controls/check-list-form-control/check-list-item';\n\nexport const getPaginationKeyByUrl = () => {\n let url = window.location.pathname.replace(/\\d+/g, '');\n url = url.replace(/^\\//, '');\n url = url.replace(/(\\/)+/g, '\\/');\n url = url.replace(/\\/+$/g, '');\n return \"items_per_page_\" + url;\n};\nexport const getPageSizeByUrl = () => {\n let paginationKey = getPaginationKeyByUrl();\n\n if (localStorage && localStorage.getItem(paginationKey)) {\n return parseInt(localStorage.getItem(paginationKey), 10);\n }\n return null;\n};\n\nexport const toBase64 = file => new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n});\n\nexport const removeContentTypeFromBase64 = (body: string) => {\n if (body == null) return null;\n const parts = (body as string).split(';base64,');\n if (parts.length != 2)\n return body;\n return parts[1];\n};\nexport function getBase64FileType(source) {\n return fileTypes[source.substring(\"data:image/\".length, source.indexOf(\";base64\"))];\n}\n\nexport function validateEmail(email: string) {\n const regexp = new RegExp(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\n return email != null && regexp.test(email);\n}\n\nexport function popup(url: string, title: string, width: number = null, height: number = null): Window {\n if (!width)\n width = screen.width / 2;\n if (!height)\n height = screen.height / 2;\n\n const left = (screen.width - width) / 2;\n const top = (screen.height - height) / 2;\n return window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=' + width + ', height=' + height + ', top=' + top + ', left=' + left);\n}\n\nexport function isEquall(obj1: Object, obj2: Object): boolean {\n return JSON.stringify(obj1) === JSON.stringify(obj2);\n}\n\n\nexport function compare(obj1, obj2) {\n //Loop through properties in object 1\n for (const p in obj1) {\n //Check property exists on both objects\n if (obj1.hasOwnProperty(p) !== obj2.hasOwnProperty(p)) return false;\n\n switch (typeof (obj1[p])) {\n //Deep compare objects\n case 'object':\n if (!compare(obj1[p], obj2[p])) return false;\n break;\n //Compare function code\n case 'function':\n if (typeof (obj2[p]) == 'undefined' || (p != 'compare' && obj1[p].toString() != obj2[p].toString())) return false;\n break;\n //Compare values\n default:\n if (obj1[p] != obj2[p]) return false;\n }\n }\n\n //Check object 2 for any extra properties\n for (const p in obj2) {\n if (typeof (obj1[p]) == 'undefined') return false;\n }\n return true;\n}\n\nexport function getFileExtenstion(filename: string) {\n const re = /(?:\\.([^.]+))?$/;\n return re.exec(filename)[1];\n}\n\nexport function getFilename(filename: string) {\n return filename.match(/([^\\/]+)(?=\\.\\w+$)/)[0];\n}\n\nexport function formGroupToModel(formGroup: FormGroup) {\n const keys = Object.keys(formGroup?.controls);\n const ret = {};\n for (let index = 0; index < keys.length; index++) {\n const element = keys[index];\n ret[element] = formGroup.controls[element].value;\n }\n return ret;\n}\n\nexport function deepCloneJson(input: any): any {\n if (input == null) return null;\n return JSON.parse(JSON.stringify(input));\n}\n\n\nexport function maxNumber(list: number[]) {\n return Math.max(...list);\n}\n\nexport function minNumber(list) {\n return Math.min(...list);\n}\n\nexport function clone(obj: T): T {\n const keys = Object.keys(obj);\n const ret = {} as T;\n for (let index = 0; index < keys.length; index++) {\n const element = keys[index];\n ret[element] = obj[element];\n }\n return ret;\n}\n\nexport function getEndPointUrl() {\n return `${location.protocol}//${location.hostname}${location.port?.length ? `:${location.port}` : ''}`;\n}\n\nexport function copyToClipboard(inputId: string) {\n const nativeElement = document.getElementById(inputId) as any;\n nativeElement.select();\n nativeElement.setSelectionRange(0, 99999);\n document.execCommand(\"copy\");\n}\n\nexport function getCountLabel(count: number, label: string, useExactLabel = false) {\n if (count == 0) return '';\n let lbl = label ?? '';\n return `${count} ${lbl}${useExactLabel == true || count == 1 ? '' : 's'}`;\n}\n\n\nexport function isEqual(x, y) {\n if (x === y) return true;\n // if both x and y are null or undefined and exactly the same\n\n if (!(x instanceof Object) || !(y instanceof Object)) return false;\n // if they are not strictly equal, they both need to be Objects\n\n if (x.constructor !== y.constructor) return false;\n // they must have the exact same prototype chain, the closest we can do is\n // test there constructor.\n\n for (const p in x) {\n if (!x.hasOwnProperty(p)) continue;\n // other properties were tested using x.constructor === y.constructor\n\n if (!y.hasOwnProperty(p)) return false;\n // allows to compare x[ p ] and y[ p ] when set to undefined\n\n if (x[p] === y[p]) continue;\n // if they have the same strict value or identity then they are equal\n\n if (typeof (x[p]) !== \"object\") return false;\n // Numbers, Strings, Functions, Booleans must be strictly equal\n\n if (!isEqual(x[p], y[p])) return false;\n // Objects and Arrays must be tested recursively\n }\n\n for (const p in y)\n if (y.hasOwnProperty(p) && !x.hasOwnProperty(p))\n return false;\n // allows x[ p ] to be set to undefined\n\n return true;\n}\n\nexport function deepCloneCircular(obj, hash = new WeakMap()) {\n // Do not try to clone primitives or functions\n let result;\n if (Object(obj) !== obj || obj instanceof Function) return obj;\n if (obj instanceof Date) return new Date(obj.getTime());\n if (hash.has(obj)) return hash.get(obj); // Cyclic reference\n try { // Try to run constructor (without arguments, as we don't know them)\n result = new obj.constructor();\n } catch (e) { // Constructor failed, create object without running the constructor\n result = Object.create(Object.getPrototypeOf(obj));\n }\n // Optional: support for some standard constructors (extend as desired)\n if (obj instanceof Map)\n Array.from(obj, ([key, val]) => result.set(deepCloneCircular(key, hash),\n deepCloneCircular(val, hash)));\n else if (obj instanceof Set)\n Array.from(obj, (key) => result.add(deepCloneCircular(key, hash)));\n // Register in hash\n hash.set(obj, result);\n // Clone and assign enumerable own properties recursively\n return Object.assign(result, ...Object.keys(obj).map(\n key => ({ [key]: deepCloneCircular(obj[key], hash) })));\n}\nexport function deepClone(obj) {\n if (typeof obj == 'function') {\n return obj;\n }\n const result = Array.isArray(obj) ? [] : {};\n for (const key in obj) {\n // include prototype properties\n const value = obj[key];\n const type = {}.toString.call(value).slice(8, -1);\n if (type == 'Array' || type == 'Object') {\n result[key] = deepClone(value);\n } else if (type == 'Date') {\n result[key] = new Date(value.getTime());\n } else if (type == 'RegExp') {\n result[key] = RegExp(value.source, deepClone_getRegExpFlags(value));\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction deepClone_getRegExpFlags(regExp) {\n if (typeof regExp.source.flags == 'string') {\n return regExp.source.flags;\n } else {\n const flags = [];\n regExp.global && flags.push('g');\n regExp.ignoreCase && flags.push('i');\n regExp.multiline && flags.push('m');\n regExp.sticky && flags.push('y');\n regExp.unicode && flags.push('u');\n return flags.join('');\n }\n}\n\nexport function isQuestionIsVisibleByCheckingConditions(question: SiteQuestionViewModel,\n questions: SiteQuestionViewModel[],\n answers: SiteAttendanceQuestionAnswer[]\n): boolean {\n return _isQuestionIsVisibleByCheckingConditions(question, questions, answers);\n}\n\nfunction _isQuestionIsVisibleByCheckingConditions(question: SiteQuestionViewModel, questions: SiteQuestionViewModel[], answers: SiteAttendanceQuestionAnswer[]): boolean {\n // has condition ?\n if (!question.conditions?.length)\n return true;\n\n if (!questions?.length)\n return true;\n // master exist ?\n const masterQuestion = questions.find(q => q.questionId == question.conditions[0].masterQuestionId); // all conditions have one question master\n if (!masterQuestion) return true;\n\n // check answers\n const cndAns = question.conditions.map(x => x.answers);\n const masterQuestionAnswer = answers?.find(x => x.questionId == masterQuestion.questionId);\n\n if (!masterQuestionAnswer) return false;\n\n if (masterQuestion.questionType != QuestionType.MultiSelect)\n return cndAns.some(x => x == masterQuestionAnswer.answer);\n else {\n return cndAns.some(condition => condition.split(',').every(ca => masterQuestionAnswer.answer.split(',').some(ua => ua == ca)));\n }\n}\n\n\n\nexport function convertSingleDocumentToFormControl(document: RequiredDocumentViewModel) {\n if (document) {\n if (document.documentType?.order) {\n document.documentType.order = document.displayOrder;\n }\n let isRequired = document?.documentType?.state == OptionalMandatoryState.Optional ? [] : [Validators.required];\n return new CustomFormControl(null, document, isRequired);\n }\n return null;\n}\nexport function convertDocumentToFormControl(documents: RequiredDocumentViewModel[], questionDocumentsFormControls: CustomFormControl[]) {\n let requiredDocumentFormControls: CustomFormControl[];\n if ((documents && documents.length > 0) || (questionDocumentsFormControls && questionDocumentsFormControls.length > 0)) {\n if (documents) {\n // documents\n requiredDocumentFormControls = documents.map(e => {\n return convertSingleDocumentToFormControl(e)\n });\n }\n let formArrayControls: CustomFormControl[] = [];\n requiredDocumentFormControls.forEach(function (c) {\n formArrayControls.push(c);\n });\n questionDocumentsFormControls.forEach(function (c) {\n formArrayControls.push(c);\n });\n return { formArray: new FormArray(formArrayControls), controls: requiredDocumentFormControls };\n }\n return { formArray: new FormArray([]), controls: [] };\n}\nexport function getUploadedDocumentsFromFormArray(documentsFormArray: FormArray): RequiredDocumentAnswer[] {\n return documentsFormArray.controls.map(\n (formControl) => {\n let form = formControl as CustomFormControl;\n return form.value as RequiredDocumentAnswer;\n }\n ).filter(doc => doc != null);\n}\n\n// questions type is any, means = SiteQuestionViewModel, SiteQuestionsViewModel\n// todo: SiteQuestionsViewModel has no isRequired property\nexport function setDocumentFormControlForQuestions(questions, inductionId?: number) {\n return questions?.map(function (question) {\n\n let requiredDocument: RequiredDocumentViewModel = question.document;\n if (requiredDocument) {\n requiredDocument.questionId = question.questionId;\n requiredDocument.inductionId = inductionId;\n requiredDocument.documentTypes.map((doc) => {\n doc.state = question.isRequired ? OptionalMandatoryState.Mandatory : OptionalMandatoryState.Optional;\n })\n requiredDocument.documentType.state = question.isRequired ? OptionalMandatoryState.Mandatory : OptionalMandatoryState.Optional;\n requiredDocument.question = question;\n\n requiredDocument.displayOrder = (question)?.displayOrder ?? (question)?.order ?? 0;\n (requiredDocument).order = requiredDocument.displayOrder;\n }\n\n let oldValue = question?.documentFormControl?.value;\n question.documentFormControl = convertSingleDocumentToFormControl(requiredDocument);\n question.documentFormControl?.setValue(oldValue);\n return question;\n })\n}\n\nexport function isDateValid(input) {\n return input.value !== null &&\n input.value != '' &&\n input.value !== undefined &&\n input.value != 'Invalid Date';\n}\n\nexport function prependZero(number: number) {\n return ('0' + number).slice(-2);\n}\n\n\nexport function isSetSupplierCheckinData(supplierCheckinViewModel: SupplierCheckinViewModel) {\n return (supplierCheckinViewModel?.siteQuestions && supplierCheckinViewModel?.siteQuestions?.length > 0) ||\n (supplierCheckinViewModel?.inductions && supplierCheckinViewModel?.inductions?.length > 0) ||\n (supplierCheckinViewModel?.announcements && supplierCheckinViewModel?.announcements?.length > 0);\n}\n\nlet fileTypes = {\n 'text/html': FileType.Text,\n 'text/css': FileType.Text,\n 'text/xml': FileType.Text,\n 'image/gif': FileType.Image,\n 'image/jpeg': FileType.Image,\n 'text/mathml': FileType.Text,\n 'text/plain': FileType.Text,\n 'text/vnd.sun.j2me.app-descriptor': FileType.Text,\n 'text/vnd.wap.wml': FileType.Text,\n 'text/x-component': FileType.Text,\n 'image/png': FileType.Image,\n 'image/tiff': FileType.Image,\n 'image/vnd.wap.wbmp': FileType.Image,\n 'image/x-icon': FileType.Image,\n 'image/x-jng': FileType.Image,\n 'image/x-ms-bmp': FileType.Image,\n 'image/svg+xml': FileType.Image,\n 'image/webp': FileType.Image,\n 'application/pdf': FileType.Pdf,\n 'application/zip': FileType.ExternalLink,\n 'application/x-7z-compressed': FileType.ExternalLink,\n 'application/postscript': FileType.ExternalLink,\n 'application/rtf': FileType.ExternalLink,\n 'application/vnd.ms-excel': FileType.ExternalLink,\n 'application/vnd.ms-powerpoint': FileType.ExternalLink,\n 'application/vnd.wap.wmlc': FileType.ExternalLink,\n 'application/vnd.google-earth.kml+xml': FileType.ExternalLink,\n 'application/vnd.google-earth.kmz': FileType.ExternalLink,\n 'application/x-cocoa': FileType.ExternalLink,\n 'application/x-java-archive-diff': FileType.ExternalLink,\n 'application/x-java-jnlp-file': FileType.ExternalLink,\n 'application/x-makeself': FileType.ExternalLink,\n 'application/x-perl': FileType.ExternalLink,\n 'application/x-pilot': FileType.ExternalLink,\n 'application/x-rar-compressed': FileType.ExternalLink,\n 'application/x-redhat-package-manager': FileType.ExternalLink,\n 'application/x-sea': FileType.ExternalLink,\n 'application/x-shockwave-flash': FileType.ExternalLink,\n 'application/x-stuffit': FileType.ExternalLink,\n 'application/x-tcl': FileType.ExternalLink,\n 'application/x-x509-ca-cert': FileType.ExternalLink,\n 'application/x-xpinstall': FileType.ExternalLink,\n 'application/xhtml+xml': FileType.ExternalLink,\n 'application/octet-stream': FileType.ExternalLink,\n 'audio/midi': FileType.Audio,\n 'audio/mpeg': FileType.Audio,\n 'audio/ogg': FileType.Audio,\n 'audio/x-realaudio': FileType.Audio,\n 'video/3gpp': FileType.Video,\n 'video/mpeg': FileType.Video,\n 'video/quicktime': FileType.Video,\n 'video/x-flv': FileType.Video,\n 'video/x-mng': FileType.Video,\n 'video/x-ms-asf': FileType.Video,\n 'video/x-ms-wmv': FileType.Video,\n 'video/x-msvideo': FileType.Video,\n 'video/mp4': FileType.Video,\n}\nlet mimeTypes = {\n 'html': 'text/html',\n 'htm': 'text/html',\n 'shtml': 'text/html',\n 'css': 'text/css',\n 'xml': 'text/xml',\n 'gif': 'image/gif',\n 'jpeg': 'image/jpeg',\n 'jpg': 'image/jpeg',\n 'js': 'application/x-javascript',\n 'atom': 'application/atom+xml',\n 'rss': 'application/rss+xml',\n 'mml': 'text/mathml',\n 'txt': 'text/plain',\n 'jad': 'text/vnd.sun.j2me.app-descriptor',\n 'wml': 'text/vnd.wap.wml',\n 'htc': 'text/x-component',\n 'png': 'image/png',\n 'tif': 'image/tiff',\n 'tiff': 'image/tiff',\n 'wbmp': 'image/vnd.wap.wbmp',\n 'ico': 'image/x-icon',\n 'jng': 'image/x-jng',\n 'bmp': 'image/x-ms-bmp',\n 'svg': 'image/svg+xml',\n 'webp': 'image/webp',\n 'jar': 'application/java-archive',\n 'war': 'application/java-archive',\n 'ear': 'application/java-archive',\n 'hqx': 'application/mac-binhex40',\n 'doc': 'application/msword',\n 'pdf': 'application/pdf',\n 'ps': 'application/postscript',\n 'eps': 'application/postscript',\n 'ai': 'application/postscript',\n 'rtf': 'application/rtf',\n 'xls': 'application/vnd.ms-excel',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'wmlc': 'application/vnd.wap.wmlc',\n 'kml': 'application/vnd.google-earth.kml+xml',\n 'kmz': 'application/vnd.google-earth.kmz',\n '7z': 'application/x-7z-compressed',\n 'cco': 'application/x-cocoa',\n 'jardiff': 'application/x-java-archive-diff',\n 'jnlp': 'application/x-java-jnlp-file',\n 'run': 'application/x-makeself',\n 'pl': 'application/x-perl',\n 'pm': 'application/x-perl',\n 'prc': 'application/x-pilot',\n 'pdb': 'application/x-pilot',\n 'rar': 'application/x-rar-compressed',\n 'rpm': 'application/x-redhat-package-manager',\n 'sea': 'application/x-sea',\n 'swf': 'application/x-shockwave-flash',\n 'sit': 'application/x-stuffit',\n 'tcl': 'application/x-tcl',\n 'tk': 'application/x-tcl',\n 'der': 'application/x-x509-ca-cert',\n 'pem': 'application/x-x509-ca-cert',\n 'crt': 'application/x-x509-ca-cert',\n 'xpi': 'application/x-xpinstall',\n 'xhtml': 'application/xhtml+xml',\n 'zip': 'application/zip',\n 'bin': 'application/octet-stream',\n 'exe': 'application/octet-stream',\n 'dll': 'application/octet-stream',\n 'deb': 'application/octet-stream',\n 'dmg': 'application/octet-stream',\n 'eot': 'application/octet-stream',\n 'iso': 'application/octet-stream',\n 'img': 'application/octet-stream',\n 'msi': 'application/octet-stream',\n 'msp': 'application/octet-stream',\n 'msm': 'application/octet-stream',\n 'mid': 'audio/midi',\n 'midi': 'audio/midi',\n 'kar': 'audio/midi',\n 'mp3': 'audio/mpeg',\n 'ogg': 'audio/ogg',\n 'ra': 'audio/x-realaudio',\n '3gpp': 'video/3gpp',\n '3gp': 'video/3gpp',\n 'mpeg': 'video/mpeg',\n 'mpg': 'video/mpeg',\n 'mov': 'video/quicktime',\n 'flv': 'video/x-flv',\n 'mng': 'video/x-mng',\n 'asx': 'video/x-ms-asf',\n 'asf': 'video/x-ms-asf',\n 'wmv': 'video/x-ms-wmv',\n 'avi': 'video/x-msvideo',\n 'm4v': 'video/mp4',\n 'mp4': 'video/mp4',\n}\n\nexport function detectExtension(url: string) {\n return url.split(/[#?]/)[0].split('.').pop().trim();\n}\nexport function detectFileType(url: string) {\n let extension = detectExtension(url);\n if (extension) {\n let mimeType = mimeTypes[extension.toLowerCase().trim()];\n if (mimeType) {\n return fileTypes[mimeType];\n }\n }\n return null;\n}\nexport function getFileNameFromUrl(url: string) {\n let parts = url.split(/[#?]/)[0].split('.');\n return parts[parts.length - 2].split('/').pop();\n}\n\nexport function getMimeTypeFromExtension(extension): string {\n return mimeTypes[extension.toLowerCase().trim()];\n}\nexport function getFileTypeFromExtension(extension): FileType {\n return fileTypes[mimeTypes[extension.toLowerCase()]];\n}\nexport function getFileInputTypeByMimeType(mimeType): FileType {\n return fileTypes[mimeType];\n}\n\nexport function isNumber(value: any) {\n // A valid, better and more secure way to check numbers\n // https://stackoverflow.com/a/9716488/884588\n return !isNaN(parseFloat(value)) && isFinite(value);\n}\n\nexport function fileSize(bytes, si = false, dp = 1) {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = si\n ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);\n\n\n return bytes.toFixed(dp) + ' ' + units[u];\n}\n\nexport function isValidImageFile(mimeType) {\n return ['image/png', 'image/gif', 'image/jpeg'].includes(mimeType);\n}\nexport function isValidPDFFile(mimeType) {\n return ['application/pdf'].includes(mimeType);\n}\nexport function isValidCSVFile(mimeType) {\n return ['text/csv'].includes(mimeType);\n}\nexport function approximateFileSizeFromBase64String(base64String: string) {\n let stringLength = base64String.length - 'data:image/png;base64,'.length;\n return 4 * Math.ceil((stringLength / 3)) * 0.5624896334383812;\n}\nexport function getSelectedIdList(kinds: CheckListItemViewModel[]): number[] {\n return kinds?.filter(p => p.value == true).map(d => d.key);\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n AdminSiteViewModel,\n AnonymousCheckInSiteViewModel,\n SiteCloningModel,\n SiteDetailsViewModel,\n SiteViewModel\n} from '../models/site-viewmodel';\nimport { catchError } from 'rxjs/operators';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { SiteQrCodeViewModel } from '../models/site-qrcode-viewmodel';\nimport { SiteUpdateLocationModel } from '../models/site-update-location-model';\nimport { VisitorTypesWithSiteVisitorTypeIdsViewModel as VisitorTypesWithSiteVisitorTypeIdsViewModel } from '../models/visitor-type';\nimport { SiteActiveStatus } from '../enums/site-active-status.enum';\nimport { SiteTemplateStatus } from '../enums/site-template-status.enum';\nimport { UserPermission } from '../enums/user-permission.enum';\nimport { SiteVisitorTypeAccompanierViewModel } from '../models/site-visitortype-accompanier-viewmodel';\nimport { QuickSetupModel } from '../models/quick-setup-models/quick-setup-model';\nimport { CompanySiteListQueryModel, SiteListQueryModel } from '../models/site-list-query-model';\nimport { PagingViewModel } from '../models/site-list-paging-view-model';\nimport { SiteAccessControlViewModel } from '../models/site-access-control-unit-view-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getSiteBySession(session: string) {\n return this._http.get(`/api/site/get-site-by-session/${session}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getById(siteId: number): Observable {\n return this._http.get('/api/site/' + siteId)\n .pipe(catchError(this._errorService.handleError));\n }\n getFullDataById(siteId: number): Observable {\n return this._http.get('/api/site/get-full-data/' + siteId)\n .pipe(catchError(this._errorService.handleError));\n }\n getAllSites(query: SiteListQueryModel): Observable> {\n return this._http.post>(`/api/site/all-sites`, query)\n .pipe(catchError(this._errorService.handleError));\n }\n //ACCESS TO ONLY GOD USERS\n getAllCompanySites(companyId: number): Observable {\n return this._http.post(`/api/site/all-company-sites/${companyId}`, {})\n .pipe(catchError(this._errorService.handleError));\n }\n getAllPermissionedSites(permission: UserPermission, activeStatus: SiteActiveStatus, templateStatus: SiteTemplateStatus, includeExternalSites: boolean = false): Observable {\n return this._http.post(`/api/site/site-list`,\n {\n permission: permission,\n activeStatus: activeStatus,\n templateStatus: templateStatus,\n includeExternalSites: includeExternalSites,\n })\n .pipe(catchError(this._errorService.handleError));\n }\n getAllSitesForExternalCompany(activeStatus: SiteActiveStatus, templateStatus: SiteTemplateStatus): Observable {\n return this._http.get(`/api/site/all-permissioned-supplier-sites/${activeStatus}/${templateStatus}`)\n .pipe(catchError(this._errorService.handleError));\n }\n //this is used when we need just active sites\n getAllActiveSites(): Observable {\n return this._http.get(`/api/site/all-active-sites`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getAllPermissionedActiveSites(permission: UserPermission): Observable {\n return this._http.get(`/api/site/all-permissioned-sites/${permission}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n add(site: SiteViewModel): Observable {\n return this._http.post(`/api/site/`, site)\n .pipe(catchError(this._errorService.handleError));\n }\n\n update(site: AdminSiteViewModel) {\n return this._http.put(`/api/site/${site.id}`, site)\n .pipe(catchError(this._errorService.handleError));\n }\n\n delete(siteId: number) {\n return this._http.delete(`/api/site/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n regenerateSecretKey = (siteId) =>\n this._http.get(`/api/site/regenerate-secretkey/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n\n\n clearSecretKey = (siteId) =>\n this._http.get(`/api/site/clear-secretkey/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n\n showSecretKey = (siteId): Observable =>\n this._http.get(`/api/site/show-secretkey/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n\n showOffsiteSecretKey = (siteId): Observable =>\n this._http.get(`/api/site/show-offsite-secretkey/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n\n\n changeActiveState = (siteId: number, isActive: boolean): Observable =>\n this._http.post(`/api/site/active/${siteId}`, isActive)\n .pipe(catchError(this._errorService.handleError));\n\n getVisitorTypesWithSiteVisitorTypeIdsViewModel(SiteId: number): Observable {\n return this._http.get(`/api/Site/get-site-visitor-types/${SiteId}`).pipe(catchError(this._errorService.handleError));\n }\n\n removeSiteLogo = (siteId: number): Observable =>\n this._http.get(`/api/site/remove-site-logo/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n\n updateLocation(site: SiteUpdateLocationModel) {\n return this._http.post(`/api/site/update-location/${site.id}`, site)\n .pipe(catchError(this._errorService.handleError));\n }\n ValidateImportSites(formData: any, isImportRequest: boolean): Observable {\n return this._http.post(`/api/site/validate-import-sites/${isImportRequest}`, formData,\n { reportProgress: false, observe: 'events', headers: { \"do-not-modify-content-type\": \"\" } })\n .pipe(catchError(this._errorService.handleError));\n }\n addEditSiteVisitorTypeAccompaniers(model: SiteVisitorTypeAccompanierViewModel, siteId: number): Observable {\n return this._http.post(`/api/site/add-edit-site-visitor-type-accompanier/${siteId}`, model).pipe(catchError(this._errorService.handleError));\n }\n removeSiteVisitorTypeAccompanier(id: number, siteId: number): Observable {\n return this._http.delete(`/api/site/delete-site-visitor-type-accompanier/${siteId}/${id}`).pipe(catchError(this._errorService.handleError));\n }\n\n quickSetup(model: QuickSetupModel) {\n return this._http.post(`/api/site/quick-setup/`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n cloneSite(refSiteId: number, model: SiteCloningModel, cloneAsSite: boolean = true) {\n if (cloneAsSite)\n return this._http.post(`/api/site/clone-site/${refSiteId}`, model)\n .pipe(catchError(this._errorService.handleError));\n\n return this._http.post(`/api/site/clone-site-to-template/${refSiteId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n getSiteAccessControlUnits(): Observable {\n return this._http.get('/api/site/get-site-access-control-unit')\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { PaginationInfo } from 'src/app/models/pagination-info';\nimport { getPaginationKeyByUrl } from \"../../helpers/general-functions\";\n\n@Component({\n selector: 'obc-pagination',\n templateUrl: './pagination.component.html',\n styleUrls: ['./pagination.component.scss']\n})\nexport class PaginationComponent implements OnInit {\n paginationKey: string = getPaginationKeyByUrl();\n\n @Input() totalCount: number;\n _pageSize: number = 30;\n @Input() set pageSize(value: number) {\n if (this.itemsPerPageArray.indexOf(value) >= 0)\n this._pageSize = value;\n else\n this._pageSize = 30;\n }\n get pageSize() { return this._pageSize; }\n\n _pageNumber: number = 1;\n @Input() set pageNumber(value: number) {\n this._pageNumber = value + 1;\n }\n get pageNumber(): number {\n return this._pageNumber - 1;\n }\n\n @Output() pageChanged: EventEmitter = new EventEmitter();\n\n showBoundaryLinks: boolean = true;\n maxSize = 10;\n itemsPerPageArray = [10, 20, 30, 50, 100, 200];\n\n hidePagination() {\n return this.pageNumber == 0 && this.totalCount <= this.pageSize;\n }\n\n constructor() { }\n\n ngOnInit(): void {\n if (localStorage && localStorage.getItem(this.paginationKey)) {\n this._pageSize = parseInt(localStorage.getItem(this.paginationKey), 10);\n }\n }\n localPageChanged(event: any) {\n this._pageNumber = event.page;\n this.pageChanged.emit({ pageSize: event.itemsPerPage, pageNumber: event.page - 1 });\n this.storeInLocalStorage(event.itemsPerPage);\n }\n onItemPerPageChange() {\n this.pageChanged.emit({ pageSize: this.pageSize, pageNumber: 0 });\n this.storeInLocalStorage(this._pageSize);\n }\n\n storeInLocalStorage(value) {\n if (localStorage) {\n localStorage.setItem(\n this.paginationKey,\n value\n );\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { AddressLookupDetails } from '../models/gmap/address-lookup-details';\nimport { catchError } from 'rxjs/operators';\nimport { AddressLookupGetSuggestionModel } from '../models/gmap/address-lookup-get-suggestion-model';\nimport { AddressLookupSuggestion } from '../models/gmap/address-lookup-suggestion';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddressLookupService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getAddressSuggestionList = (model: AddressLookupGetSuggestionModel): Observable =>\n this._http.post('/api/addresslookup/', model)\n .pipe(catchError(this._errorService.handleError));\n\n getDetailsOfSelectedPlace = (suggestionId: string, sessionToken: string): Observable =>\n this._http.get(`/api/addresslookup/map/details/${suggestionId}/${sessionToken}`)\n .pipe(catchError(this._errorService.handleError));\n\n getLocation = (address: string): Observable =>\n this._http.get(`/api/addresslookup/get-location/${address}`)\n .pipe(catchError(this._errorService.handleError));\n}\n","\n \n \n \n \n\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { MapMarker } from '@angular/google-maps';\n\n@Component({\n selector: 'obc-map',\n templateUrl: './map.component.html',\n styleUrls: ['./map.component.scss']\n})\nexport class MapComponent implements OnInit {\n @ViewChild('#map') map: google.maps.Map;\n zoom = 14;\n marker: google.maps.Marker;\n markerOptions: google.maps.MarkerOptions;\n _center: google.maps.LatLngLiteral = { lat: -37.807406, lng: 145.028364 };\n\n @Input() markerTitle: string = '';\n\n _siteRadius = 0\n @Input() set siteRadius(radius: number) {\n this._siteRadius = radius;\n this.setCircle();\n };\n\n @Input() set location(cordinate: { lat: any, lng: any }) {\n if (!cordinate || !cordinate.lat || !cordinate.lng || isNaN(cordinate.lat) || isNaN(cordinate.lng) ||\n (cordinate.lat === this._center.lat && cordinate.lng === this._center.lng))\n return;\n\n let cordinate_number = { lat: +cordinate.lat, lng: +cordinate.lng }\n this.setPosition(cordinate_number)\n }\n\n\n @Output() locationChange: EventEmitter = new EventEmitter();\n\n _readOnly: boolean = false;\n @Input() set readonly(_readOnly: boolean) {\n this._readOnly = _readOnly;\n this.options.draggable = !_readOnly;\n this.options.scrollwheel = !_readOnly;\n if (this.markerOptions)\n this.markerOptions.draggable = !_readOnly;\n }\n\n options: google.maps.MapOptions = {\n draggable: true,\n zoomControl: true,\n scrollwheel: true,\n disableDoubleClickZoom: true,\n minZoom: 7,\n center: this._center\n }\n\n ngOnInit() {\n this.setCurrentLocation();\n }\n\n setPosition(cordinate: google.maps.LatLngLiteral) {\n this._center = { lat: cordinate.lat, lng: cordinate.lng };\n this.setMarker();\n this.setCircle();\n this.locationChange.emit(cordinate);\n }\n\n setCurrentLocation() {\n if (!location) {\n navigator.geolocation.getCurrentPosition(position => {\n console.log('pos : ', position, ' a :', position.coords.longitude, ' -- ', position.coords.latitude);\n if (!location) {\n this.setPosition({ lat: position.coords.latitude, lng: position.coords.longitude });\n }\n }, error => { this.setMarker(); console.log('error ', error) });\n }\n }\n\n circle: google.maps.Circle;\n circleOption: google.maps.CircleOptions;\n setMarker() {\n this.markerOptions = {\n position: new google.maps.LatLng(this._center.lat, this._center.lng),\n label: {\n text: this.markerTitle,\n color: 'black',\n fontWeight: 'bold'\n },\n title: this.markerTitle,\n draggable: !this._readOnly,\n animation: google.maps.Animation.DROP,\n icon: {\n url: \"./assets/img/obc_logo_90px.png\",\n scaledSize: new google.maps.Size(50, 50),\n }\n };\n\n this.marker = new google.maps.Marker(this.markerOptions);\n }\n\n setCircle() {\n this.circleOption = {\n center: this._center,\n draggable: this._readOnly,\n editable: this._readOnly,\n fillColor: '#A00',\n fillOpacity: 0.5,\n map: this.map,\n radius: this._siteRadius,\n strokeColor: '#733',\n strokeOpacity: 0.3,\n strokeWeight: 1,\n visible: true,\n }\n\n this.circle = new google.maps.Circle(this.circleOption);\n //this.circle.bindTo('center', this.marker);\n }\n\n\n click(event: any) {\n if (this._readOnly === true) return;\n this.setPosition({ lat: event.latLng.lat(), lng: event.latLng.lng() });\n }\n\n markerDragEnd(event: any) {\n if (this._readOnly === true) return;\n this.setPosition({ lat: event.latLng.lat(), lng: event.latLng.lng() });\n }\n\n zoomIn() {\n if (this.zoom < this.options.maxZoom) this.zoom++\n }\n\n zoomOut() {\n if (this.zoom > this.options.minZoom) this.zoom--\n }\n\n}\n","
\n
\n
\n
\n \n
\n

Site location verification

\n
\n
\n \n
\n \n
\n
\n \n
\n
\n Loading...\n
\n
\n
\n
\n \n \n {{ model.primaryTitle }} -\n {{ model.secondaryTitle }} -\n {{ model.description }}\n \n \n
\n
\n
\n
\n
\n Latitude\n \n
\n
\n
\n
\n Longitude\n \n
\n
\n\n \n \n
\n
\n
\n
\n
\n \n {{\n errorMessage\n }}\n \n
\n
\n \n \n
\n
\n
\n
\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { finalize, switchMap, map, tap } from 'rxjs/operators';\nimport { AsyncResult } from '../../../models/helper-models';\nimport { SiteViewModel } from '../../../models/site-viewmodel';\nimport { SiteService } from '../../../services/site.service';\nimport { AddressLookupSuggestion } from '../../../models/gmap/address-lookup-suggestion';\nimport { Observable, Observer, noop, of } from 'rxjs';\nimport { AddressLookupService } from '../../../services/address-lookup.service';\nimport { AddressLookupGetSuggestionModel } from '../../../models/gmap/address-lookup-get-suggestion-model';\nimport { uuid4 } from '../../../helpers/uuid';\nimport { TypeaheadMatch, TypeaheadOrder } from 'ngx-bootstrap/typeahead/public_api';\nimport { SiteUpdateLocationModel } from '../../../models/site-update-location-model';\n@Component({\n selector: 'obc-site-location-verify',\n templateUrl: './site-location-verify.component.html',\n styleUrls: ['./site-location-verify.component.scss'],\n})\nexport class SiteLocationVerifyComponent implements OnInit {\n @Output() public result = new EventEmitter();\n site: SiteViewModel;\n @Input() set locationVerifyInput(_site: SiteViewModel) {\n if (!_site) return;\n this.site = _site;\n }\n\n suggestions$: Observable;\n loader: boolean = false;\n uuid: string;\n errorMessage: string = '';\n selectedAddress: AddressLookupSuggestion;\n inProgress: boolean = false;\n sortConfig: TypeaheadOrder = {\n direction: 'asc',\n field: 'primaryTitle',\n };\n\n get latitude(): number {\n return isNaN(+this.site.latitude) ? null : +this.site.latitude;\n }\n\n set latitude(lat: number) {\n if (lat && !isNaN(lat)) this.site.latitude = lat.toString();\n }\n\n get longitude(): number {\n return isNaN(+this.site.longitude) ? null : +this.site.longitude;\n }\n\n set longitude(lng: number) {\n if (lng && !isNaN(lng)) this.site.longitude = lng.toString();\n }\n constructor(private siteService: SiteService, private addressLookupService: AddressLookupService) { }\n\n ngOnInit(): void {\n this.uuid = uuid4();\n this.getAddressList();\n }\n getAddressList() {\n this.suggestions$ = new Observable((observer: Observer) => {\n observer.next(this.site?.address);\n }).pipe(\n switchMap((query: string) => {\n if (query) {\n this.loader = true;\n let model: AddressLookupGetSuggestionModel = {\n address: query,\n sessionToken: this.uuid,\n };\n return this.addressLookupService.getAddressSuggestionList(model).pipe(\n map((data: AddressLookupSuggestion[]) => (data && data) || []),\n tap(\n () => noop,\n (err) => {\n var rrr = (err && err.message) || 'Something goes wrong';\n }\n ),\n finalize(() => {\n this.loader = false;\n })\n );\n }\n\n return of([]);\n })\n );\n }\n get isValid(): boolean {\n if (!this.site.latitude || isNaN(parseFloat(this.site.latitude))) {\n this.errorMessage =\n 'Please select a valid address from list or pick a place on map';\n return false;\n }\n\n return true;\n }\n cancel() {\n this.result.emit({ isFinished: true, isSucceeded: false });\n this.errorMessage = '';\n }\n onSelectAddress(event: TypeaheadMatch): void {\n this.selectedAddress = event.item;\n this.site.address = this.site.address =\n this.selectedAddress.primaryTitle +\n ' ' +\n this.selectedAddress.secondaryTitle;\n this.inProgress = true;\n this.addressLookupService\n .getDetailsOfSelectedPlace(this.selectedAddress.id, this.uuid)\n .pipe(\n finalize(() => {\n this.inProgress = false;\n })\n )\n .subscribe(\n (result) => {\n this.latitude = +result.latitude;\n this.longitude = +result.longitude;\n },\n (error) => { }\n );\n }\n\n setSiteLocationByChangeMarker(cordinate) {\n this.site.latitude = cordinate.lat.toString();\n this.site.longitude = cordinate.lng.toString();\n }\n\n addressNotFound: any;\n typeaheadNoResults(event) {\n this.addressNotFound = event;\n }\n\n updateLocation() {\n this.errorMessage = '';\n if (this.isValid === false) return;\n\n var inEdit = this.site.id && this.site.id > 0;\n\n if (inEdit) {\n var siteLocation: SiteUpdateLocationModel = {\n id: this.site.id,\n address: this.site.address,\n latitude: this.site.latitude,\n longitude: this.site.longitude,\n }\n this.siteService.updateLocation(siteLocation).subscribe(\n\n (success) => {\n this.result.emit({ isFinished: true, isSucceeded: true });\n },\n (error) => {\n this.errorMessage = 'A problem detected on updating site';\n }, () => {\n this.inProgress = false;\n }\n );\n }\n }\n}\n","
\n
\n \n
\n
\n Loading...\n
\n
\n
\n \n \n {{ model.primaryTitle }} -\n {{ model.secondaryTitle }} -\n {{ model.description }}\n \n \n
\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\nimport { add } from 'ngx-bootstrap/chronos';\nimport { TypeaheadOrder } from 'ngx-bootstrap/typeahead';\nimport { BehaviorSubject } from 'rxjs';\nimport { tap, finalize, debounceTime, filter, startWith } from 'rxjs/operators';\nimport { uuid4 } from 'src/app/helpers/uuid';\nimport { AddressLookupGetSuggestionModel } from 'src/app/models/gmap/address-lookup-get-suggestion-model';\nimport { AddressLookupSuggestion } from 'src/app/models/gmap/address-lookup-suggestion';\nimport { IAddressModel } from 'src/app/models/quick-setup-models/minimal-site-model';\nimport { AddressLookupService } from 'src/app/services/address-lookup.service';\n\n@Component({\n selector: 'obc-address-form-control',\n templateUrl: './address-form-control.component.html',\n styleUrls: ['./address-form-control.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AddressFormControlComponent,\n multi: true,\n }\n ]\n})\nexport class AddressFormControlComponent implements ControlValueAccessor {\n _isGeolocationRequierd : boolean = false;\n @Input() set isGeolocationRequierd (value: boolean) {\n this._isGeolocationRequierd = value;\n this.initFormControl();\n };\n get isGeolocationRequierd() {\n return this._isGeolocationRequierd;\n }\n onChange: Function;\n formGroup: FormGroup;\n _address: string;\n set address(value: string) {\n this.addressControl.setValue(value);\n this._address = value;\n this.formGroup.controls.address.setValue(value);\n };\n get address(): string {\n return this._address;\n }\n addressControl: FormControl = new FormControl();\n uuid: string;\n suggestions = new BehaviorSubject([]);\n addressLoader: boolean = false;\n sortConfig: TypeaheadOrder = {\n direction: 'asc',\n field: 'primaryTitle',\n };\n constructor(private addressLookupService: AddressLookupService) { }\n\n registerOnTouched(fn: any): void {\n }\n setDisabledState?(isDisabled: boolean): void {\n }\n\n ngOnInit() {\n this.uuid = uuid4();\n this.addressControl.valueChanges\n .pipe(\n startWith(''),\n // map(value => value as string),\n // tap(() => {\n // if (!this.suggestions)\n // this.suggestions = new BehaviorSubject([]);\n // }),\n filter(value => value && value.length > 0),\n debounceTime(500),\n tap(() => {\n this.addressLoader = true;\n let model: AddressLookupGetSuggestionModel = {\n address: this.addressControl.value,\n sessionToken: this.uuid,\n };\n this.addressLookupService.getAddressSuggestionList(model)\n .pipe(finalize(() => this.addressLoader = false))\n .subscribe(res => {\n this.suggestions.next(res);\n }, err => {\n console.log(err);\n })\n })\n ).subscribe(res => { });\n\n\n this.initFormControl();\n }\n\n private initFormControl() {\n var geolocValidator = this.isGeolocationRequierd ? [Validators.required] : [];\n this.formGroup = new FormGroup({\n address: new FormControl(null, [Validators.required]),\n latitude: new FormControl(null, geolocValidator),\n longitude: new FormControl(null, geolocValidator),\n });\n\n this.formGroup.valueChanges.subscribe(res => {\n if (this.onChange)\n if (!this.formGroup.valid)\n this.onChange({\n address: this._address\n });\n\n else\n this.onChange(this.formGroup.value);\n });\n }\n\n writeValue(address: IAddressModel): void {\n if (address == null)\n address = {} as IAddressModel;\n this._address = address.address;\n this.formGroup.controls.address.setValue(address.address);\n this.formGroup.controls.latitude.setValue(address.latitude);\n this.formGroup.controls.longitude.setValue(address.longitude);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n onSelectAddress($event) {\n this._address = $event.item.primaryTitle + \" - \" + $event.item.secondaryTitle;\n this.addressLookupService.getDetailsOfSelectedPlace($event.item.id, this.uuid)\n .subscribe(res => {\n this.writeValue({\n address: this._address,\n latitude: +res.latitude,\n longitude: +res.longitude,\n })\n });\n }\n\n}\n","
\n
You cannot add site to template companies!
\n
\n
\n
\n
\n \n
\n \n Display Mode: \n \n \n \n\n \n \n \n \n\n
\n
\n
Sites
\n
\n\n \n\n \n \n\n 0)\"\n class=\"btn btn-sm btn-info mr-1\" [routerLink]=\"['/import-sites']\">\n Import Sites\n \n \n Export Sites\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n\n \n\n
\n \n
\n \n \n
\n\n
\n \n
\n\n
\n \n Site Assets/Plant\n \n
\n
\n \n Permits\n \n
\n
\n \n Site Documents\n \n
\n
\n \n
\n
\n \n \n
\n \n
\n
\n
\n No sites found!\n
\n
\n\n
\n Looks like you have no sites set up yet.\n \n \n Contact administrator to get help.\n \n
\n
\n \n \n \n\n\n \n \n\n\n
\n
\n \n Clone Site {{cloneSiteFormGroup.controls.site.value.name}}\n \n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n \n
\n
\n\n
\n
\n \n
\n
\n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n \n \n \n
\n
\n
\n
\n \n
\n
\n
\n
\n","import { BsModalService } from 'ngx-bootstrap/modal';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Component, OnInit } from '@angular/core';\nimport { SiteService } from 'src/app/services/site.service';\nimport { SiteCloningModel, SiteDetailsViewModel, SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { AsyncResult } from 'src/app/models/helper-models';\nimport { debounceTime, finalize } from 'rxjs/operators';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { SiteTemplateStatus } from 'src/app/enums/site-template-status.enum';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { CompanyStatus } from 'src/app/enums/company-status.enum';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { pagingModel } from 'src/app/models/paging_model';\nimport { SiteListQueryModel } from 'src/app/models/site-list-query-model';\nimport { PaginationInfo } from 'src/app/models/pagination-info';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { getPageSizeByUrl } from \"../../helpers/general-functions\";\n\n@Component({\n selector: 'obc-company',\n templateUrl: './company.component.html',\n styleUrls: ['./company.component.scss']\n})\nexport class CompanyComponent implements OnInit {\n\n pagingInfo: pagingModel = {\n pageNumber: 0,\n pageSize: getPageSizeByUrl() ?? 30,\n totalCount: 0,\n }\n filterListTerm: string;\n filterFormcontrol = new FormControl();\n siteList: SiteDetailsViewModel[];\n templateSiteListForClone: SiteViewModel[];\n inProgress: boolean = false;\n isCompanyOwner: boolean = false;\n filterSiteListTerm: string;\n CompanyStatus = CompanyStatus;\n iscloneSiteFromTemplateList: boolean;\n get cloneAsSite(): boolean {\n return this.cloneSiteFormGroup.controls[\"cloneAsSite\"].value ?? true;\n }\n\n cloneSiteFormGroup = new FormGroup({\n cloneAsSite: new FormControl(true, [Validators.required]),\n site: new FormControl(null, [Validators.required]),\n name: new FormControl(null, [Validators.required]),\n address: new FormControl(null, []),\n rawAddress: new FormControl(null, [Validators.required]),\n latitude: new FormControl(null, [Validators.required]),\n longitude: new FormControl(null, [Validators.required]),\n });\n\n\n inCloningProgress = false;\n onlyActiveSites: boolean = true;\n onlyRealSites: boolean = true;\n locationVerifyModel: SiteViewModel = new SiteViewModel();\n userPermissions = UserPermission;\n ProductPlanFeature = ProductPlanFeature;\n\n currentCompany: CompanyViewModel;\n get isTemplateCompany(): boolean {\n return this.currentCompany?.isTemplate ?? false;\n }\n\n constructor(private siteService: SiteService, private layoutService: LayoutService,\n private bsModalService: BsModalService,\n private modalService: ModalService, public userService: UserService) { }\n\n ngOnInit(): void {\n this.getSiteList();\n this.layoutService.header = \"Sites\";\n this.isCompanyOwner = this.userService.isCompanyAdminUser();\n this.userService.info.subscribe(res => this.isCompanyOwner = res?.userPermissions?.isCompanyAdmin)\n this.userService.currentCompany$.subscribe(res => this.currentCompany = res);\n this.cloneSiteFormGroup.controls.address.valueChanges.subscribe(res => {\n this.cloneSiteFormGroup.controls.rawAddress.setValue(res.address);\n if (res.latitude != null && res.longitude != null) {\n this.cloneSiteFormGroup.controls.latitude.setValue(res.latitude);\n this.cloneSiteFormGroup.controls.longitude.setValue(res.longitude);\n }\n });\n\n this.cloneSiteFormGroup.controls.cloneAsSite.valueChanges.subscribe(res => {\n if (this.cloneAsSite) {\n this.cloneSiteFormGroup.controls['rawAddress'].setValidators([Validators.required]);\n this.cloneSiteFormGroup.controls['latitude'].setValidators([Validators.required]);\n this.cloneSiteFormGroup.controls['longitude'].setValidators([Validators.required]);\n }\n else {\n this.cloneSiteFormGroup.controls['rawAddress'].clearValidators();\n this.cloneSiteFormGroup.controls['latitude'].clearValidators();\n this.cloneSiteFormGroup.controls['longitude'].clearValidators();\n }\n this.cloneSiteFormGroup.controls['rawAddress'].updateValueAndValidity();\n this.cloneSiteFormGroup.controls['latitude'].updateValueAndValidity();\n this.cloneSiteFormGroup.controls['longitude'].updateValueAndValidity();\n this.cloneSiteFormGroup.updateValueAndValidity();\n });\n\n this.filterFormcontrol.valueChanges.pipe(\n debounceTime(500),\n ).subscribe((searchTerm) => {\n this.filterListTerm = searchTerm;\n if (searchTerm == '' || (searchTerm != null && searchTerm.length > 3)) {\n this.getSiteList(0);\n }\n });\n }\n\n onActiveChanged(value, isActiveMode) {\n if (isActiveMode)\n this.onlyActiveSites = value;\n else\n this.onlyRealSites = value;\n this.getSiteList();\n }\n createQuery(): SiteListQueryModel {\n var query = {\n activeStatus: this.onlyActiveSites ? SiteActiveStatus.Active : SiteActiveStatus.InActive,\n templateStatus: this.onlyRealSites ? SiteTemplateStatus.Normal : SiteTemplateStatus.Templates,\n pagingInfo: {\n pageNumber: this.pagingInfo.pageNumber,\n pageSize: this.pagingInfo.pageSize,\n },\n searchTerm: this.filterListTerm,\n };\n return query;\n }\n siteListInProgress = false;\n\n getSiteManageRouterLink(site: SiteDetailsViewModel) {\n return site.isExternalSite ? '/manage-site/supplier/' + site.externalSiteSupplierId : '/manage-site/' + site.id;\n }\n\n hasAccessToManageSite(site: SiteDetailsViewModel) {\n return this.userService.hasAccessToManageSite(site);\n }\n\n getSiteList(pageNumber?: number) {\n if (this.siteListInProgress == true)\n return;\n\n if (pageNumber != null && pageNumber != undefined)\n this.pagingInfo.pageNumber = pageNumber;\n\n this.inProgress = true;\n this.siteListInProgress = true;\n\n var query = this.createQuery();\n this.siteService.getAllSites(query)\n .pipe(finalize(() => { this.siteListInProgress = this.inProgress = false; }))\n .subscribe(res => {\n this.siteList = res.data;\n this.pagingInfo.totalCount = res.totalCount;\n });\n }\n\n openModal(template) {\n this.modalService.show(template, 'modal-lg');\n }\n\n closeModal(result: AsyncResult) {\n this.modalService.hide();\n if (result.isSucceeded)\n this.getSiteList();\n }\n\n deleteSite(siteId: number) {\n this.modalService.confirm('Are you sure?', 'delete question').subscribe(iamsure => {\n if (iamsure === true) {\n\n this.inProgress = true;\n this.siteService.delete(siteId)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => {\n this.getSiteList();\n }, error => {\n var errorMsg = error ?? 'This site contains saved information like check-in/out users.';\n this.modalService.error(errorMsg, \"you can't remove this site\");\n console.log('error : ', error);\n });\n }\n });\n }\n\n changeActiveState(site: SiteViewModel) {\n var header = site.isActive ? `Deactive ${site.name}` : `Activate ${site.name}`\n this.modalService.confirm(\"Are You Sure?\", header).subscribe(result => {\n if (result) {\n this.inProgress = true;\n this.siteService.changeActiveState(site.id, !site.isActive)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => {\n this.getSiteList();\n }, error => {\n console.log('error : ', error);\n this.modalService.error(error, \"active/deactive site error\").subscribe(res => {\n //alert(error);\n });\n });\n }\n })\n }\n getShowQrCodeWithInstruction(site: SiteViewModel) {\n return `/General/site-instructions/${site.id}/${site.secretCode}`;\n }\n openLocationVerifyModal(template, site: SiteViewModel) {\n this.locationVerifyModel = site;\n this.modalService.show(template, 'modal-lg');\n }\n closeLocationVerifyModal(result: AsyncResult) {\n this.modalService.hide();\n if (result.isSucceeded)\n this.getSiteList();\n }\n\n bsModalHandle = null;\n onCloneSiteFromTemplate(template: any) {\n this.iscloneSiteFromTemplateList = true;\n this.inProgress = true;\n var query = {\n activeStatus: SiteActiveStatus.Active,\n templateStatus: SiteTemplateStatus.Templates,\n pagingInfo: null,\n searchTerm: null,\n };\n\n this.siteService.getAllSites(query)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.templateSiteListForClone = res.data;\n });\n\n this.cloneSiteFormGroup.controls.site.setValue(null);\n this.cloneSiteFormGroup.controls.cloneAsSite.setValue(true);\n this.bsModalHandle = this.bsModalService.show(template);\n this.bsModalHandle.setClass(\"modal-lg\");\n }\n\n onCloneSite(site: SiteViewModel, template: any) {\n this.iscloneSiteFromTemplateList = false;\n this.cloneSiteFormGroup.controls.site.setValue(site);\n this.bsModalHandle = this.bsModalService.show(template);\n this.bsModalHandle.setClass(\"modal-lg\");\n }\n\n clone() {\n var refSiteId = this.cloneSiteFormGroup.controls.site.value.id;\n\n var model = {\n name: this.cloneSiteFormGroup.controls.name.value,\n address: !this.cloneAsSite ? null : this.cloneSiteFormGroup.controls.rawAddress.value ?? this.cloneSiteFormGroup.controls.address.value.address,\n latitude: !this.cloneAsSite ? null : this.cloneSiteFormGroup.controls.latitude.value,\n longitude: !this.cloneAsSite ? null : this.cloneSiteFormGroup.controls.longitude.value,\n } as SiteCloningModel;\n this.inCloningProgress = true;\n\n this.siteService.cloneSite(refSiteId, model, this.cloneAsSite)\n .pipe(finalize(() => { this.inCloningProgress = false; }))\n .subscribe(res => {\n this.bsModalHandle.hide();\n this.getSiteList();\n this.cloneSiteFormGroup.reset({ cloneAsSite: true });\n }, err => {\n this.modalService.error(err);\n })\n }\n onPageChange(paginationInfo: PaginationInfo) {\n this.pagingInfo.pageSize = paginationInfo.pageSize;\n this.getSiteList(paginationInfo.pageNumber);\n }\n\n hasAccessToSiteAsset(site: SiteDetailsViewModel) {\n return site.isActive === true &&\n !site.isTemplate &&\n ((site.isExternalSite && this.userService.hasAnyAccess()) ||\n (!site.isExternalSite && this.userService.hasAdminPermissionOnSite(site.id)));\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { LayoutService } from 'src/app/services/layout.service';\n\n@Component({\n selector: 'obc-user',\n template: '',\n styleUrls: ['./user.component.scss']\n})\nexport class UserComponent implements OnInit {\n\n constructor(private layoutService: LayoutService) { }\n\n ngOnInit(): void {\n this.layoutService.header = \"User Info\";\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-public',\n templateUrl: './public.component.html',\n styleUrls: ['./public.component.scss']\n})\nexport class PublicComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","","import { ValidatorFn, AbstractControl } from '@angular/forms';\nimport { CheckListItemViewModel } from '../custom-controls/check-list-form-control/check-list-item';\n\nexport function e168ValidatorNullableCompanyPhoneNumber(control: AbstractControl): { [key: string]: boolean } | null {\n let value = control.value as string;\n if (value == null || value.length == 0) return null;\n let valid = value.length >= 3;\n return valid ? null : { 'invalidE168': true };\n}\n\nexport function e168ValidatorNullable(control: AbstractControl): { [key: string]: boolean } | null {\n var value = control.value as string;\n if (value == null || value.length == 0) return null;\n var valid = true;\n var valid = mobileIsValid(value);\n return valid ? null : { 'invalidE168': true };\n}\n\nexport function e168Validator2(control: AbstractControl): { [key: string]: boolean } | null {\n var value = control.value as string;\n var valid = true;\n var valid = mobileIsValid(value);\n return valid ? null : { 'invalidE168': true };\n}\n\nexport function e168Validator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n var value = control.value as string;\n var valid = mobileIsValid(value);\n return valid ? null : { 'invalidE168': { value: control.value } };\n };\n}\n\nexport function mobileIsValid(value) {\n var valid = true;\n if (!value || !(value.length >= 9 && value.length <= 15))\n valid = false;\n if (!isNormalInteger(value?.replace(/\\+/g, '')))\n valid = false;\n\n return valid;\n}\n\n// export function e168Validator(control: AbstractControl): { [key: string]: any } | null {\n// var value = control.value as string;\n// var valid = true;\n// if (!value || !(value.length >= 10 && value.length <= 15)) valid = false;\n// if (!isNormalInteger(value)) valid = false;\n// return valid ? null : { 'invalidE168': { value: control.value } };\n// }\n\nfunction isNormalInteger(str) {\n if (!str) { // for empty\n return false;\n }\n str = str.trim();\n if (!str) { // for spaces\n return false;\n }\n str = str.replace(/^0+/, \"\") || \"0\";\n var n = Math.floor(Number(str));\n return n !== Infinity && String(n) === str && n >= 0;\n}\n\nexport function documentKindValidator(control: AbstractControl): { [key: string]: boolean } | null {\n var value = control.value as CheckListItemViewModel[];\n let data = value?.find(p => p.value == true);\n return data ? null : { 'invalidE168': true };\n}\n","export enum DatetimePickerMode {\n DateTimePicker = 0,\n Calender = 1,\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { SiteAttendancePermissionUser } from '../models/site-attendance-permission-models/site-attendance-permission-user.model';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteAttendancePermissionService {\n\n apiUrl: string = \"/api/SiteAttendancePermission\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n addSinglePerson(attendee: SiteAttendancePermissionUser): Observable {\n return this.http.post(`${this.apiUrl}/add-single-person`, attendee)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addMultiplePeople(siteId: number, phones: string): Observable {\n return this.http.post(`${this.apiUrl}/add-multiple-people/${siteId ? siteId : ''}`, { data: phones })\n .pipe(catchError(this._errorService.handleError));\n }\n\n importSiteData(data: SiteAttendancePermissionUser[]): Observable {\n return this.http.post(`${this.apiUrl}/import-site-attendees`, data)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateSiteAttendee(attendee: SiteAttendancePermissionUser): Observable {\n return this.http.post(`${this.apiUrl}/update-site-attendee`, attendee)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeSiteAttendee(siteId: number, userId: number): Observable {\n return this.http.post(`${this.apiUrl}/remove-site-attendee`, { siteId: siteId, userId: userId })\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeCompanyAttendee(userId: number): Observable {\n return this.http.post(`${this.apiUrl}/remove-company-attendee`, { userId: userId })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getSiteAttendees(siteId: number, isTemporary: boolean): Observable {\n return this.http.get(`${this.apiUrl}/get-site-attendees/${siteId}/${isTemporary}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getCompanyAttendees(isTemporary: boolean): Observable {\n return this.http.get(`${this.apiUrl}/get-company-attendees/${isTemporary}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","\n
\n \n {{text}}\n
\n","import { Component, OnInit, Input } from '@angular/core';\nimport { StorageService } from 'src/app/services/storage.service';\n\n@Component({\n selector: 'obc-descriptor',\n templateUrl: './descriptor.component.html',\n styleUrls: ['./descriptor.component.scss']\n})\nexport class DescriptorComponent implements OnInit {\n\n constructor(private storageService: StorageService) { }\n @Input() text: string = '';\n @Input() closePanelName: string = '';\n embedTypes = EmbedIn;\n @Input() embedIn: EmbedIn = EmbedIn.Card;\n show: boolean = true;\n ngOnInit(): void {\n var isClosed = this.storageService.get(this.closePanelName);\n this.show = isClosed == \"1\" ? false : true;\n }\n\n closePanel() {\n this.show = false;\n if (this.closePanelName != '')\n this.storageService.set(this.closePanelName, \"1\");\n }\n\n}\n\nexport enum EmbedIn {\n \"Card\" = 0,\n \"Field\" = 1,\n}\n","
\n \n \n {{item.name}} [{{item.siteReference}}] Template\n \n \n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { of } from 'rxjs';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { LocalStorageKey } from 'src/app/enums/local-storage-key.enum';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { SiteTemplateStatus } from 'src/app/enums/site-template-status.enum';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { BaseSiteViewModel, SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { SiteService } from 'src/app/services/site.service';\n\n@Component({\n selector: 'app-site-selector',\n templateUrl: './site-selector.component.html',\n styleUrls: ['./site-selector.component.scss']\n})\nexport class SiteSelectorComponent implements OnInit {\n @Input() maxItems = 10;\n _permission: UserPermission = UserPermission.None;\n _required = false;\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl.setValidators(Validators.required);\n }\n };\n @Input() loadForExternalCompany: boolean = false;\n\n\n @Input() excludeList: number[] = [];\n @Input() notSelectedSiteLabel: string = null;\n\n @Input() set permission(value: UserPermission) {\n this._permission = value;\n };\n\n _activeStatus: SiteActiveStatus = SiteActiveStatus.Active;\n @Input() set activeStatus(value: SiteActiveStatus) {\n this._activeStatus = value;\n }\n _templateStatus = SiteTemplateStatus.Normal;\n @Input() set templateStatus(value: SiteTemplateStatus) {\n this._templateStatus = value;\n }\n _includeExternalCompanySites: boolean = false;\n @Input() set includeExternalCompanySites(value: boolean) {\n this._includeExternalCompanySites = value;\n }\n\n @Output() siteSelect = new EventEmitter();\n @Output() siteIdSelect = new EventEmitter();\n public selectedSite = new BehaviorSubject(null);\n\n _siteId: number = null;\n @Input() set siteId(value: number) {\n if (!value) return;\n this._siteId = value;\n this.formControl.setValue(value);\n };\n\n\n sites: BaseSiteViewModel[];\n siteGroups: any[];\n\n constructor(protected siteService: SiteService) { }\n\n\n formControl = new FormControl(null, [Validators.required]);\n loading: boolean = false;\n sites$: Observable;\n term$ = new BehaviorSubject(null)\n\n ngOnInit() {\n this.formControl.valueChanges.subscribe(res => {\n if (this.sites) {\n if (res == null || res == 0) {\n this.siteSelect.emit(null);\n this.siteIdSelect.emit(null);\n this.selectedSite.next(null);\n } else {\n var site = this.sites.find(x => x.id == res);\n if (site == null) {\n } else {\n this.siteSelect.emit(site);\n this.selectedSite.next(site);\n this.siteIdSelect.emit(site.id);\n this.saveDefaultSite()\n }\n }\n }\n });\n\n setTimeout(() => {\n this.loadSiteList();\n }, 250)\n }\n\n getSiteList(): Observable {\n if (this.loadForExternalCompany) {\n return this.siteService.getAllSitesForExternalCompany(this._activeStatus, this._templateStatus);\n } else {\n if (this._permission)\n return this.siteService.getAllPermissionedSites(this._permission, this._activeStatus, this._templateStatus, this._includeExternalCompanySites);\n else\n return this.siteService.getAllActiveSites()\n }\n }\n\n loadSiteList() {\n this.loading = true;\n this.getSiteList()\n .pipe(finalize(() => this.loading = false))\n .subscribe(res => {\n this.setReponse(res);\n });\n }\n\n private setReponse(res: BaseSiteViewModel[]) {\n let that = this;\n this.sites = res.filter(function (el) {\n return that.excludeList.filter(function (selected_el) {\n return selected_el == el.id;\n }).length == 0\n });\n if (this._siteId == null) // if site set do not change that\n this.loadDefaultSite();\n\n if (this.selectedSite.value == null) {\n var site = this.sites.find(x => x.id == this.formControl.value);\n if (site) {\n this.selectedSite.next(site);\n }\n }\n this.sites$ = of(this.getNthItems(this.sites, this.maxItems));\n this.term$.subscribe(term => {\n if (term) {\n var filteredSites = this.searchSites(term);\n if (term != this.reachToEndTerm)\n this.reachToEnd = false;\n this.sites$ = of(this.getNthItems(filteredSites, this.reachToEnd ? filteredSites.length : this.maxItems));\n } else {\n this.sites$ = of(this.getNthItems(this.sites, this.reachToEnd ? this.sites.length : this.maxItems))\n }\n });\n }\n\n getNthItems(array: BaseSiteViewModel[], n: number): BaseSiteViewModel[] {\n if (!array || array.length == 0 || n <= 0) return [];\n var max = Math.min(array.length, n);\n var arr = [];\n for (var i = 0; i < max; i++)\n arr.push(array[i]);\n if (this.selectedSite.value && !arr.find(x => x.id == this.selectedSite.value.id))\n arr.push(this.selectedSite.value);\n return arr;\n }\n\n loadDefaultSite() {\n if (!this._required) return;\n\n var selectedSiteId = localStorage\n ? parseInt(localStorage.getItem(LocalStorageKey.LastVisitedSiteId), 10)\n : null;\n\n if (this.sites?.length) {\n if (this.sites.find(x => x.id == selectedSiteId))\n this.formControl.setValue(selectedSiteId);\n else {\n let id = this.sites[0].id;\n this.formControl.setValue(id);\n }\n }\n }\n\n saveDefaultSite() {\n if (localStorage && this.selectedSite?.value) {\n localStorage.setItem(\n LocalStorageKey.LastVisitedSiteId,\n this.selectedSite.value.id.toString()\n );\n }\n }\n\n getSiteLabel(site: BaseSiteViewModel) {\n return `${site.name} ${site.siteReference ? `[${site.siteReference}]` : ''}`\n }\n\n searchSites(term: string) {\n return this.sites.filter((item) => {\n return this.isMatched(term, item);\n });\n }\n\n clearInput() {\n this.formControl.setValue(null);\n }\n isMatched(term: string, item: BaseSiteViewModel): boolean {\n if (!term) return true;\n term = term.toLowerCase();\n return (item.name && item.name.toLowerCase().indexOf(term) > -1) ||\n (item.siteReference && item.siteReference.toLowerCase().indexOf(term) > -1);\n }\n\n reset() {\n this.formControl.reset();\n this.sites = [];\n //this._permission = UserPermission.None;\n }\n\n reachToEnd = false;\n reachToEndTerm = \"\";\n onScrollToEnd() {\n this.reachToEnd = true;\n this.reachToEndTerm = this.term$.value;\n this.term$.next(this.term$.value)\n }\n\n getPlaceholder() {\n return this.formControl.value\n ? null\n : (this._required\n ? 'Please Select Site'\n : (this.notSelectedSiteLabel\n ? this.notSelectedSiteLabel\n : 'All Sites'))\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { formatDateTime, parseDateTime } from './date-time-format';\n\n\nexport function datetimeValidator(control: AbstractControl): { [key: string]: boolean; } | null {\n if (!control.value)\n return null;\n var input = control.value.toString();\n var parsed = parseDateTime(control.value);\n var formated = formatDateTime(parsed)\n if (isNaN(parsed.getTime()) || (formated?.toLowerCase() != input?.toLowerCase() && (formated?.toLowerCase() != input.toLowerCase()+\", 12:00 am\")))\n return { 'datetimeValidator': true };\n}\n","
\n \n
\n \n
\n \n
\n
\n
","import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, Self, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NgControl } from '@angular/forms';\nimport { BsDatepickerInlineConfig } from 'ngx-bootstrap/datepicker';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\n\n\n@Component({\n selector: 'obc-date-time-picker',\n templateUrl: './date-time-picker.component.html',\n styleUrls: ['./date-time-picker.component.scss']\n})\nexport class DateTimePickerComponent implements ControlValueAccessor, OnInit, AfterViewInit {\n @Input() mode = DatetimePickerMode.DateTimePicker;\n DatetimePickerMode = DatetimePickerMode;\n @Input() date: Date;\n @Input() minDate: Date;\n @Input() maxDate: Date;\n onChange: Function;\n isDatePickerDisabled: boolean = false;\n timePickerFormControl = new FormControl();\n @Output() valueChange = new EventEmitter();\n @Output() self = new EventEmitter();\n @Output() select = new EventEmitter();\n @ViewChild(\"selfRef\") public selfRef: any;\n\n constructor(@Self() private controlDirective: NgControl) {\n controlDirective.valueAccessor = this;\n }\n ngAfterViewInit(): void {\n this.self.emit(this);\n }\n\n writeValue(date: Date): void {\n this.date = date;\n this.timePickerFormControl.setValue(date);\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n }\n setDisabledState?(isDisabled: boolean): void {\n this.isDatePickerDisabled = isDisabled;\n if (isDisabled) {\n this.timePickerFormControl.disable();\n } else {\n this.timePickerFormControl.enable();\n }\n }\n\n ngOnInit() {\n this.controlDirective.control.setValidators([this.validate.bind(this)]);\n this.controlDirective.control.updateValueAndValidity();\n this.timePickerFormControl.valueChanges.subscribe(res => {\n this.onDateChange(res);\n })\n }\n\n validate({ value }: FormControl) {\n if (!this.timePickerFormControl.valid) // mod it later\n return { invalid: true }\n }\n\n onDateChange($event) {\n if (this.date != $event) {\n this.date = $event;\n this.EmitChanges();\n }\n }\n\n EmitChanges() {\n this.onChange(this.date);\n this.valueChange.emit(this.date);\n }\n\n\n}\n","
\n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Optional, Output, Self, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl, Validators } from '@angular/forms';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { dateFormat, dateTimeFormat, parseDateTime, parseDateTime2 } from 'src/app/helpers/date-time-format';\nimport { datetimeValidator } from 'src/app/helpers/datetimeValidator';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { DateTimePickerComponent } from '../date-time-picker/date-time-picker.component';\n\n@Component({\n selector: 'obc-input-date-time-picker',\n templateUrl: './input-date-time-picker.component.html',\n styleUrls: ['./input-date-time-picker.component.scss'],\n providers: [DatetimePipe]\n})\nexport class InputDateTimePickerComponent implements ControlValueAccessor, OnInit {\n dateFormat = dateTimeFormat;\n datepickerComponent: DateTimePickerComponent;\n _mode = DatetimePickerMode.DateTimePicker;\n\n @Input() set value(value: string) {\n this.addRequiredToFormControl();\n }\n\n @Input() placeholder: string = '';\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() set mode(value: DatetimePickerMode) {\n this._mode = value;\n if (this._mode == DatetimePickerMode.Calender)\n this.dateFormat = dateFormat;\n else\n this.dateFormat = dateTimeFormat;\n var val = this.datePipe.transform(this._date, this.dateFormat);\n this.inputFormControl.setValue(val);\n }\n get mode(): DatetimePickerMode {\n return this._mode;\n }\n _date: Date;\n @Input() set date(value: Date) {\n this._date = value;\n this.EmitChanges();\n };\n get date(): Date {\n return this._date;\n }\n onChange: Function;\n @Output() valueChange = new EventEmitter();\n datetimePickerformControl = new FormControl(new Date());\n inputFormControl = new FormControl(null, [datetimeValidator]);\n @ViewChild('popDivTemplate') popDivTemplate: any;\n @ViewChild('pop') pop;\n @ViewChild('datepickerRef') datepickerRef;\n @ViewChild('self') self;\n constructor(@Optional() @Self() private controlDirective: NgControl, private datePipe: DatetimePipe) {\n if (controlDirective)\n controlDirective.valueAccessor = this;\n this.inputFormControl.setValue(this.datePipe.transform(new Date(), this.dateFormat));\n }\n\n writeValue(date: Date): void {\n this._date = this.getDateTime(date);\n var inputValue = this.datePipe.transform(this._date, this.dateFormat);\n this.inputFormControl.setValue(inputValue?.toLowerCase() == \"invalid date\" || inputValue == null ? null : inputValue);\n this.datetimePickerformControl.setValue(this._date);\n }\n\n getDateTime(date: Date) {\n var date1 = parseDateTime(date, true);\n if (date1 == null || date1?.toDateString()?.toLowerCase() == \"invalid date\")\n date1 = parseDateTime2(date, this.dateFormat);\n return date1;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (isDisabled) {\n this.inputFormControl.disable();\n this.datetimePickerformControl.disable();\n } else {\n this.inputFormControl.enable();\n this.datetimePickerformControl.enable();\n }\n }\n\n ngOnInit() {\n if (this.minDate != null && (this._date ?? new Date()) < this.minDate) {\n this._date = this.minDate;\n this.datetimePickerformControl.setValue(this._date);\n }\n this.addRequiredToFormControl();\n\n document.addEventListener('mousedown', this.closePopoverOnClickOutside.bind(this));\n\n this.inputFormControl.valueChanges.subscribe(res => {\n this.inputValueChange(res);\n });\n }\n\n addRequiredToFormControl() {\n if (!this.controlDirective?.control?.hasValidator(this.validate.bind(this))) {\n this.controlDirective?.control?.addValidators([this.validate.bind(this)]);\n }\n this.controlDirective?.control?.updateValueAndValidity();\n\n if (this.controlDirective?.control?.hasValidator(Validators.required)) {\n this.inputFormControl.addValidators([Validators.required]);\n } else {\n this.inputFormControl.removeValidators([Validators.required]);\n }\n }\n\n\n validate({ value }: FormControl) {\n if (!this.controlDirective?.control.valid || !this.inputFormControl.valid || !this.datetimePickerformControl.valid) // mod it later\n return { invalid: true }\n }\n\n inputValueChange(res: any) {\n try {\n if (!res)\n this.date = null;\n\n var parsed = parseDateTime(res);\n if (!parsed) {\n this.controlDirective?.control.updateValueAndValidity();\n return;\n }\n if (parsed && this.date != parsed) {\n this.date = parsed;\n this.datetimePickerformControl.setValue(parsed);\n }\n } catch {\n }\n this.controlDirective?.control.updateValueAndValidity();\n\n }\n\n datetimePickerValueChange(res: Date) {\n if (this.date != res) {\n this.date = res;\n this.inputFormControl.setValue(this.datePipe.transform(res, this.dateFormat));\n }\n\n this.controlDirective?.control.updateValueAndValidity();\n }\n\n closePopoverOnClickOutside(event: any) {\n var bool = this.popDivTemplate.nativeElement!.contains(event.target);\n if (this.datepickerComponent) {\n if (this.datepickerComponent?.selfRef?.nativeElement)\n bool = bool || this.datepickerComponent.selfRef.nativeElement!.contains(event.target);\n }\n if (!bool) {\n this.pop.hide();\n }\n }\n\n EmitChanges() {\n if (this.onChange)\n this.onChange(this.date);\n this.valueChange.emit(this.date);\n this.controlDirective?.control.updateValueAndValidity();\n }\n\n containsElement(target: any) {\n return this.self?.nativeElement?.contains(target) || this.datepickerRef?.selfRef?.nativeElement.contains(target);\n }\n\n onSelectDateTime($event) {\n if ($event && $event.toString()?.toLowerCase() != \"invalid date\") {\n this.writeValue($event);\n this.pop.hide();\n }\n }\n}\n","
\n
\n
{{pageTitle}}
\n
\n \n \n
\n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n

\n {{commaSeperatedDataError}}\n

\n
\n
\n

\n \n

\n
\n
\n
\n
\n
\n
\n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
MobileNameFamilyStart DateEnd DateSite
\n {{group.get('mobile').value | mobile}}\n \n \n \n \n \n \n \n \n \n \n \n \n {{getSiteName(group.get(\"siteId\").value)}}\n \n \n

\n \n

\n
\n {{group.get('mobile').value | mobile}}\n \n {{group.get('firstname').value}}\n \n {{group.get('lastname').value}}\n \n \n {{group.get(\"allowCheckInFrom\").value | datetime}}\n \n \n \n {{group.get(\"allowCheckInTo\").value | datetime}}\n \n \n \n {{selectedSite.name}}\n \n \n

\n \n \n

\n
\n \n Nothing Found\n \n
\n
\n
\n
\n
\n
\n","import { Component, OnInit, Input } from '@angular/core';\nimport { BaseSiteViewModel } from 'src/app/models/site-viewmodel';\nimport { FormControl, FormGroup, Validators, FormBuilder, FormArray, AbstractControl } from '@angular/forms';\nimport { SiteAttendancePermissionService } from 'src/app/services/site-attendance-permission.service';\nimport { SiteAttendancePermissionUser } from 'src/app/models/site-attendance-permission-models/site-attendance-permission-user.model';\nimport { e168Validator } from 'src/app/helpers/mobile-format-validator';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { parseDateTime, parseDateTime2 } from 'src/app/helpers/date-time-format';\n\n@Component({\n selector: 'obc-manage-site-attendance-permission',\n templateUrl: './manage-site-attendance-permission.component.html',\n styleUrls: ['./manage-site-attendance-permission.component.scss']\n})\nexport class ManageSiteAttendancePermissionComponent implements OnInit {\n DatetimePickerMode = DatetimePickerMode;\n [x: string]: any;\n inProgress: boolean = false;\n toggled: boolean = false;\n newAttendeeFormGroup: FormGroup;\n commaSeperatedData: string = \"\";\n commaSeperatedDataError: string = null;\n pageTitle: string = null;\n pageInfo: string = null;\n selectedSite: BaseSiteViewModel;\n attendeeTable: FormGroup;\n isCompanyMode: boolean = false;\n\n private _sites: BaseSiteViewModel[];\n @Input() isTemporayInvite = false;\n @Input() set sites(model: BaseSiteViewModel[]) {\n this._sites = model;\n if (this._sites && this._sites.length > 0 && this.selectedSite == null) {\n this.selectedSite = this._sites[0];\n this.onSiteChange();\n }\n };\n get sites(): BaseSiteViewModel[] {\n return this._sites;\n }\n\n constructor(private fb: FormBuilder,\n private siteAttendancePermissionService: SiteAttendancePermissionService) { }\n\n ngOnInit(): void {\n if (this.isTemporayInvite) {\n this.pageTitle = \"Temporary Users\";\n this.pageInfo = 'Adding a temporary user will provide them with access to all company sites or a private site for a period of time that you can decide.';\n }\n else {\n this.pageTitle = \"Frequent Users\";\n this.pageInfo = 'Add a frequent user will provide the individual with access to all company sites or a private site.';\n }\n\n this.attendeeTable = this.fb.group({\n tableRows: this.fb.array([])\n });\n this.newAttendeeFormGroup = new FormGroup({\n mobile: new FormControl('', [Validators.required, e168Validator()]),\n firstname: new FormControl(''),\n lastname: new FormControl(''),\n allowCheckInFrom: new FormControl(''),\n allowCheckInTo: new FormControl('')\n });\n }\n\n onActiveChanged(isCompanyMode: boolean) {\n this.isCompanyMode = isCompanyMode;\n this.onSiteChange();\n }\n\n toggle() {\n this.toggled = !this.toggled;\n }\n\n addSinglePerson(): void {\n if (this.newAttendeeFormGroup.valid) {\n var attendee = {\n mobile: this.newAttendeeFormGroup.get(\"mobile\").value,\n firstName: this.newAttendeeFormGroup.get(\"firstname\").value,\n lastName: this.newAttendeeFormGroup.get(\"lastname\").value,\n allowCheckInFrom: this.isTemporayInvite ? this.newAttendeeFormGroup.get(\"allowCheckInFrom\").value : null,\n allowCheckInTo: this.isTemporayInvite ? this.newAttendeeFormGroup.get(\"allowCheckInTo\").value : null,\n siteId: this.isCompanyMode ? null : this.selectedSite.id,\n } as SiteAttendancePermissionUser;\n\n this.siteAttendancePermissionService.addSinglePerson(attendee).subscribe(res => {\n this.newAttendeeFormGroup.reset();\n this.onSiteChange();\n }, err => console.log(err))\n\n }\n }\n\n addMultiplePeople() {\n this.commaSeperatedDataError = null;\n if (this.commaSeperatedData) {\n this.siteAttendancePermissionService.addMultiplePeople(this.isCompanyMode ? null : this.selectedSite.id, this.commaSeperatedData).subscribe(\n res => {\n this.commaSeperatedData = res;\n if (res)\n this.commaSeperatedDataError = \"invalid phone numbers\";\n this.onSiteChange();\n }, err => {\n console.log(err)\n this.commaSeperatedDataError = \"invalid phone numbers\";\n }\n )\n }\n }\n\n deleteRow($event: MouseEvent, index: number) {\n $event.stopPropagation();\n const formArray = this.attendeeTable.get('tableRows') as FormArray;\n var control = formArray.controls[index];\n var user = this.getAttendee(control);\n if (this.isCompanyMode)\n this.siteAttendancePermissionService.removeCompanyAttendee(user.userId).subscribe(\n res => {\n this.onSiteChange();\n },\n err => {\n console.log(err);\n }\n );\n else\n this.siteAttendancePermissionService.removeSiteAttendee(user.siteId, user.userId).subscribe(\n res => {\n this.onSiteChange();\n },\n err => {\n console.log(err);\n }\n );\n }\n\n editRow(group: FormGroup) {\n if (group.get('sealed').value == false)\n group.get('isEditable').setValue(true);\n }\n\n doneRow(group: FormGroup) {\n if (!group.valid) return;\n var user = this.getAttendee(group);\n this.inProgress = true;\n this.siteAttendancePermissionService.updateSiteAttendee(user).subscribe(\n res => {\n group.get('isEditable').setValue(false);\n this.inProgress = false;\n },\n err => {\n console.log(err);\n this.inProgress = false;\n }\n )\n }\n\n get getFormControls() {\n const control = this.attendeeTable.get('tableRows') as FormArray;\n return control;\n }\n\n getAttendee(ctrl: AbstractControl) {\n var user = {\n mobile: ctrl.get(\"mobile\").value,\n firstName: ctrl.get(\"firstname\").value,\n lastName: ctrl.get(\"lastname\").value,\n siteId: ctrl.get(\"siteId\").value,\n userId: ctrl.get(\"userId\").value,\n id: ctrl.get('id').value,\n sealed: ctrl.get('sealed').value,\n isEditable: [false],\n allowCheckInFrom: ctrl.get('allowCheckInFrom').value,\n allowCheckInTo: ctrl.get('allowCheckInTo').value\n } as SiteAttendancePermissionUser;\n return user;\n }\n\n addAttendee(user: SiteAttendancePermissionUser) {\n const control = this.attendeeTable.get('tableRows') as FormArray;\n control.push(this.fb.group({\n mobile: [user.mobile, [Validators.required, Validators.minLength(10)]],\n firstname: [user.firstName],\n lastname: [user.lastName],\n siteId: [user.siteId],\n userId: [user.userId],\n id: [user.id],\n sealed: [user.sealed],\n isEditable: [false],\n allowCheckInFrom: this.getDateTime(user.allowCheckInFrom),\n allowCheckInTo: user.allowCheckInTo\n }));\n }\n\n getDateTime(date: Date) {\n var date1 = parseDateTime(date, true);\n if (date1 == null || date1?.toDateString()?.toLowerCase() == \"invalid date\")\n date1 = parseDateTime2(date, this.dateFormat);\n return date1;\n }\n\n getSiteName(siteId: number) {\n if (!this.sites) return;\n return this.sites.filter((s) => s.id == siteId)[0].name;\n }\n\n nothingFound = false;\n onSiteChange($event?: BaseSiteViewModel) {\n this.nothingFound = false;\n if (this.selectedSite?.id == $event?.id) return;\n\n\n this.inProgress = true;\n if ($event)\n this.selectedSite = $event;\n\n if (this.isCompanyMode == true)\n this.siteAttendancePermissionService.getCompanyAttendees(this.isTemporayInvite).subscribe(res => this.onGetAttendees(res), err => this.onGetAttendeesError(err));\n else\n if (this.selectedSite)\n this.siteAttendancePermissionService.getSiteAttendees(this.selectedSite.id, this.isTemporayInvite).subscribe(res => this.onGetAttendees(res), err => this.onGetAttendeesError(err));\n }\n\n onGetAttendees(atts: SiteAttendancePermissionUser[]) {\n if (this.getFormControls)\n this.getFormControls.controls = [];\n if (atts != null && atts.length > 0) {\n for (let index = 0; index < atts.length; index++) {\n this.addAttendee(atts[index]);\n }\n } else\n this.nothingFound = true;\n this.inProgress = false;\n }\n\n onGetAttendeesError(err) {\n console.log(err);\n this.inProgress = false;\n }\n\n getAllowCheckInFrom(group: any) {\n return (group as FormGroup).controls.allowCheckInFrom\n }\n\n setSites(sites: any[]) {\n this.sites = sites;\n }\n}\n\n","import { Component, OnInit } from '@angular/core';\nimport { SiteService } from 'src/app/services/site.service';\nimport { SiteBasicInfo } from 'src/app/models/site-basicinfo';\n\n@Component({\n selector: 'obc-site-attendance-permission',\n templateUrl: './site-attendance-permission.component.html',\n styleUrls: ['./site-attendance-permission.component.scss']\n})\nexport class SiteAttendancePermissionComponent implements OnInit {\n sites : SiteBasicInfo[];\n constructor(private siteService: SiteService) { }\n ngOnInit(): void { \n // this.siteService.getAllActiveSites().subscribe(res => {\n // this.sites = res;\n // }, err => console.log(err));\n }\n}\n","\n","export enum OtpRequestMode\n{\n Register = 1,\n ResetPassword = 2,\n LoginByOtp = 3,\n TwoFactorVerification = 4\n}\n","export enum UserAuthenticationResult\n{\n NotFound = 0,\n Found = 1,\n IncompleteRegister = 2,\n NoCompanyRecord = 3,\n}","import { OtpRequestMode } from \"../enums/otp-request-mode.enum\"\nimport { TwoFactorVerificationMode } from \"../enums/two-factor-verification-mode\"\n\nexport class UserCredentialsViewModel {\n mobile: string;\n securityToken: string;\n regionCode: string;\n password: string;\n mode: OtpRequestMode = OtpRequestMode.Register;\n sendMode?: TwoFactorVerificationMode;\n isPersisted: boolean;\n}\n","import { ItemTitleValue } from '../models/helper-models';\n\nexport enum TwoFactorVerificationMode{\n SMS = 0,\n Email = 1,\n Totp = 2\n}\n","export enum LoginStateEnum {\n PreLogin = 1,\n Password = 2,\n ResendOTP = 3,\n TwoFactor = 4,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CountryViewModel } from '../models/country-view-model';\nimport { ServerViewModel } from '../models/server_view_model';\nimport { Timezone } from '../models/time-zone';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CountryService {\n\n constructor(\n private _http: HttpClient,\n private _errorService: ErrorService) { }\n\n getCoutries = (): Observable =>\n this._http\n .get('/api/country')\n .pipe(catchError(this._errorService.handleError));\n\n getTimeZones = (): Observable =>\n this._http.get('/api/country/time-zones')\n .pipe(catchError(this._errorService.handleError));\n\n getOtherServerList = (): Observable =>\n this._http.get('/api/country/other-server-list')\n .pipe(catchError(this._errorService.handleError));\n\n updateSmsProvider(countryId: number, smsProvider: number): Observable<{message: string}> {\n const url = `api/country/${countryId}/sms-provider`;\n return this._http.put<{message: string}>(url, smsProvider).pipe(catchError(this._errorService.handleError));\n }\n\n testSmsProvider(selectedSmsProvider: any, mobileNumber: any): Observable {\n const url = `api/country/TestSMS`;\n //TODO: update the body in the next ticket\n return this._http.post(url, {\n selectedSmsProvider, \n testMobileNumber: mobileNumber\n }).pipe(catchError(this._errorService.handleError));\n }\n \n\n}\n","export enum CaptchaMode {\n Disabled = 0,\n GoogleRecaptchaV3 = 1,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ReCaptchaV3Service } from 'ng-recaptcha';\nimport { Observable, throwError as observableThrowError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CaptchaMode } from '../enums/captcha-mode';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CaptchaService {\n private _captchaMode: CaptchaMode = CaptchaMode.Disabled;\n private urlsNeedToken: string[] = [\n \"obcauthentication/web-sign-in\",\n \"obcauthentication/send-reset-pass-otp\",\n \"obcauthentication/send-2fa-otp\",\n ];\n\n constructor(\n private _http: HttpClient,\n private recaptchaV3Service: ReCaptchaV3Service) { }\n\n isCaptchaActive = () => this._captchaMode != CaptchaMode.Disabled;\n\n set captchaMode(value: CaptchaMode) {\n this._captchaMode = value ?? CaptchaMode.Disabled;\n }\n\n UrlNeedToken = (url): boolean => {\n let result: boolean = false;\n\n this.urlsNeedToken\n .forEach((urlNeedToken) => {\n if (url.includes(urlNeedToken)) {\n result = true;\n }\n })\n\n return result;\n }\n\n getCurrentServerCaptchaConfig = () => this._http\n .get(`/api/captcha/get-current-server-captcha-config`)\n .pipe(\n catchError((error) => observableThrowError(error))\n );\n\n getToken = (): Observable => {\n return new Observable(observer =>\n this.recaptchaV3Service\n .execute('getToken')\n .subscribe((token: string) => {\n observer.next(token);\n observer.complete();\n }));\n }\n}\n","
\n
\n \n {{ mainTitle }}\n
\n
(Unsaved Changes)\n
\n
0 ? 'visible' : '' }}\">\n
\n
\n {{ invalidControlsCount }} {{ invalidControlsCount > 1 ? 'Errors' : 'Error' }}\n
\n \n
\n
\n\n 0\">\n
\n
\n \n {{ data.title }}\n {{ data.value }}\n \n \n
\n
\n
\n\n
\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-accordion-header',\n templateUrl: './accordion-header.component.html',\n styleUrls: ['./accordion-header.component.scss']\n})\nexport class AccordionHeaderComponent implements OnInit {\n\n @Input() mainTitle: string = '';\n @Input() icon: string = '';\n @Input() iconColor: string = '#333';\n @Input() invalidControlsCount: number = 0;\n @Input() isAccordionDirty: boolean = false;\n @Input() info: any[] = [];\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n
\n
\n \n
\n
\n
\n\n
\n
\n

Sign In

\n
\n
\n \n
\n {{errorMessage}}\n
\n
\n\n
\n
\n \n
\n \n \n \n \n \n \n \n
\n
\n
\n \n
\n
\n +{{selectedCountry.prefixCode}}\n
\n \n \n \n \n \n \n
\n
\n\n
\n
\n \n
\n
\n\n
\n \n
\n
\n
Can't find your country? Select another server:
\n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n
\n\n
\n \n \n \n
\n
\n\n
\n
\n \n
\n \n \n \n \n \n \n
\n
\n\n
\n
\n For next login please enter password\n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n \n
\n
\n
    \n
  • \n {{resendResponse?.message}}\n
  • \n
  • \n Minimum password length is 8 characters\n
  • \n
\n
\n \n
\n\n
\n
\n \n
\n \n \n \n \n \n \n
\n
\n
\n \n
\n
\n
    \n
  • \n {{twoFactorAuthentication.message}}\n
  • \n
\n
\n\n
\n Haven't received the\n {{twoFactorAuthentication.verificationMode==TwoFactorVerificationModeEnum.Email?'Email':'sms'}} yet?\n
Please wait ({{timeLeft}})
\n \n {{twoFactorAuthentication.resendButtonText}}\n \n
\n
\n {{resendResponse?.message}}\n
\n \n \n \n
\n \n
\n\n \n
\n
\n
\n\n
\n
\n
\n\n

© Copyright {{year}}. All Rights Reserved.

\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport PhoneNumber from 'awesome-phonenumber';\nimport { finalize } from 'rxjs/operators';\nimport { OtpRequestMode } from 'src/app/enums/otp-request-mode.enum';\nimport { CountryViewModel } from 'src/app/models/country-view-model';\nimport { PreLoginStatusViewModel } from 'src/app/models/pre-login-status-view-model';\nimport { ServerViewModel } from 'src/app/models/server_view_model';\nimport { CountryService } from 'src/app/services/country.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { UserAuthenticationResult } from '../../enums/userAuthenticationResult.enum';\nimport { UserCredentialsViewModel } from '../../models/user-credentials-viewModel';\nimport { LayoutService } from \"../../services/layout.service\";\nimport { SignInService } from '../../services/sign-in.service';\nimport { SendOtpModel } from './../../models/send-otp-model';\nimport { TwoFactorAuthenticationModel } from './../../models/two-factor-authentication-model';\nimport { TwoFactorVerificationMode } from '../../enums/two-factor-verification-mode';\nimport { CaptchaService } from '../../services/captcha.service';\nimport { LoginStateEnum } from '../../enums/login-state-enum';\nimport { CaptchaMode } from 'src/app/enums/captcha-mode';\n\n@Component({\n selector: 'obc-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss'],\n})\nexport class LoginComponent implements OnInit {\n\n // This is only for fallback.\n // The main number will receive from server.\n readonly DEFAULT_TIMEOUT = 120;\n\n @Input() minimalView: boolean = false;\n @Input() returnPath: string;\n @Input('mobile') inputMobile: string;\n @Output() done = new EventEmitter();\n countries: CountryViewModel[];\n serverList: ServerViewModel[];\n selectedCountry: CountryViewModel;\n loginForm: FormGroup;\n inProgress: boolean = false;\n errorMessage = '';\n state: LoginStateEnum = LoginStateEnum.PreLogin;\n loginStateEnum = LoginStateEnum;\n mobileNumberIsCorrect = false;\n editMobileNumber: boolean = true;\n isDarkMode = false;\n year: number;\n twoFactorAuthentication: TwoFactorAuthenticationModel;\n disableResendLink: boolean = true;\n resendResponse: PreLoginStatusViewModel;\n twoFactorVerificationMode = TwoFactorVerificationMode;\n\n TwoFactorVerificationModeEnum = TwoFactorVerificationMode;\n\n get showMobileNumber(): boolean {\n return this.editMobileNumber || !this.mobileNumberIsCorrect;\n }\n\n constructor(\n private signInService: SignInService,\n private fb: FormBuilder,\n private route: ActivatedRoute,\n private countryService: CountryService,\n private layoutService: LayoutService,\n private userService: UserService,\n private router: Router,\n private _captchaService: CaptchaService) {\n this.isDarkMode = this.layoutService.isInDarkMode;\n this.layoutService.toggleDarkMode(false, false, false);\n\n this.loginForm = this.fb.group({\n country: '',\n mobile: [\n '',\n [\n Validators.required,\n Validators.min(100000),\n Validators.max(99999999999999),\n ],\n ],\n smsCode: [\n '',\n [Validators.required, Validators.minLength(6), Validators.maxLength(6)],\n ],\n password: ['', [Validators.required, Validators.minLength(8)]],\n repeatpassword: ['', [Validators.required, Validators.minLength(8)]],\n isPersisted: [false, []],\n });\n }\n\n ngOnInit(): void {\n this.year = new Date().getFullYear();\n this.inProgress = true;\n this.countryService.getCoutries().subscribe((coutries) => {\n this.countries = coutries;\n this.selectedCountry = this.countries[0];\n this.inProgress = false;\n\n this.route.queryParams.subscribe((params) => {\n var mobile = params['m'];\n if (mobile) {\n this.loadMobileNumber(mobile);\n }\n });\n\n if (this.inputMobile != null) {\n this.loadMobileNumber(this.inputMobile);\n }\n\n if (coutries && coutries.length > 0) {\n this._captchaService.captchaMode = coutries[0].captchaMode;\n }\n\n localStorage.setItem(\"captcha-mode\", this.selectedCountry.captchaMode?.toString());\n });\n\n this.countryService.getOtherServerList().subscribe((servers) => {\n this.serverList = servers;\n });\n }\n\n private loadMobileNumber(mobile: any) {\n if (mobile.substring(0, 1) != '+')\n mobile = '+' + mobile;\n var phone = new PhoneNumber(mobile);\n\n var number = phone.getNumber('significant');\n var regionCode = phone.getRegionCode();\n if (number) {\n this.loginForm.controls['mobile'].setValue(number);\n this.selectedCountry =\n this.countries.find((c) => c.alpha2 == regionCode) ??\n this.countries[0];\n }\n return mobile;\n }\n\n sendUserNumber() {\n this.inProgress = true;\n this.mobileNumberIsCorrect = false;\n this.editMobileNumber = false;\n\n this.signInService\n .webPreLogin(\n this.loginForm.controls['mobile'].value + '',\n this.selectedCountry.alpha2\n )\n .pipe(\n finalize(() => {\n this.inProgress = false;\n this.loginForm.controls.smsCode.setValue('');\n })\n )\n .subscribe(\n (res) => {\n // login page = 1,\n // password page = 2,\n // token page = 3,\n this.done.emit({\n \"state\": res.state,\n \"country\": this.selectedCountry.prefixCode,\n \"mobile\": this.loginForm.controls['mobile'].value\n });\n\n if (res.error) {\n this.errorMessage = res.message;\n } else {\n this.errorMessage = null;\n this.state = res.state;\n }\n },\n (error) => {\n this.errorMessage = error;\n }\n );\n }\n\n private handleAuthenticationResult(response: any) {\n switch (response) {\n case UserAuthenticationResult.Found:\n this.mobileNumberIsCorrect = true;\n this.errorMessage = null;\n break;\n case UserAuthenticationResult.NotFound:\n this.errorMessage = \"Couldn't find your mobile number\";\n this.mobileNumberIsCorrect = false;\n break;\n case UserAuthenticationResult.IncompleteRegister:\n this.errorMessage = 'Your registration is incomplete';\n this.mobileNumberIsCorrect = false;\n break;\n case UserAuthenticationResult.NoCompanyRecord:\n this.errorMessage = 'You are not assigned to a company';\n this.mobileNumberIsCorrect = false;\n break;\n default:\n this.mobileNumberIsCorrect = false;\n this.errorMessage = 'Something went wrong';\n break;\n }\n }\n\n signIn() {\n this.inProgress = true;\n this.errorMessage = null;\n const returnPath = this.returnPath ?? this.route.snapshot.params['returnPath'];\n let userCredentialsViewModel = new UserCredentialsViewModel();\n userCredentialsViewModel.mobile = this.loginForm.controls['mobile'].value + '';\n userCredentialsViewModel.securityToken = this.loginForm.controls['smsCode'].value.split('-').join('');\n userCredentialsViewModel.regionCode = this.selectedCountry.alpha2;\n userCredentialsViewModel.password = this.twoFactorAuthentication == null ? this.loginForm.controls['password'].value : this.twoFactorAuthentication.token;\n userCredentialsViewModel.sendMode = this.twoFactorAuthentication?.verificationMode;\n userCredentialsViewModel.isPersisted = this.loginForm.controls['isPersisted'].value;\n\n if (this.tokenFormIsValid())\n userCredentialsViewModel.mode = OtpRequestMode.ResetPassword;\n\n if (this.twoFactorAuthentication != null && this.state == LoginStateEnum.TwoFactor) {\n userCredentialsViewModel.mode = OtpRequestMode.TwoFactorVerification;\n }\n\n this.signInService\n .signIn(returnPath, userCredentialsViewModel)\n .pipe(\n finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(\n (res) => {\n this.handleRedirection(res);\n this.done.emit();\n },\n (error) => {\n this.handleErroredSignIn(error);\n }\n );\n }\n\n private handleRedirection(response: any) {\n const ajaxRedirectStatusCode = 200;\n if (response.status === ajaxRedirectStatusCode) {\n if (response.headers.get('Location') != null) {\n this.layoutService.toggleDarkMode(this.isDarkMode);\n this.router.navigate([response.headers.get('Location')]);\n }\n else if (response.body != null) {\n this.state = LoginStateEnum.TwoFactor;\n this.twoFactorAuthentication = response.body as TwoFactorAuthenticationModel;\n this.timeLeft = this.twoFactorAuthentication.verificationTime == null ?\n this.DEFAULT_TIMEOUT :\n this.twoFactorAuthentication.verificationTime * 60;\n this.startTimer();\n }\n }\n }\n\n resendToken() {\n this.inProgress = true;\n var model: SendOtpModel = {\n countryCode: this.selectedCountry.alpha2,\n mobileNumber: this.loginForm.controls['mobile'].value + '',\n mode: OtpRequestMode.TwoFactorVerification,\n twoFactorToken: this.twoFactorAuthentication.token,\n onlyCheckUserName: false\n }\n\n this.userService\n .resendOtp(model)\n .pipe(\n finalize(() => {\n this.inProgress = false;\n })\n )\n .subscribe(\n (result) => {\n this.resendResponse = result;\n if (!this.resendResponse?.error) {\n this.timeLeft = this.twoFactorAuthentication.verificationTime == null ? this.DEFAULT_TIMEOUT : this.twoFactorAuthentication.verificationTime * 60;\n this.disableResendLink = true;\n this.startTimer();\n }\n },\n (error) => {\n console.log(error);\n }\n );\n }\n\n timeLeft: number = this.DEFAULT_TIMEOUT;\n interval;\n startTimer() {\n this.interval = setInterval(() => {\n if (this.timeLeft > 0) {\n this.timeLeft--;\n } else {\n this.pauseTimer();\n }\n }, 1000)\n }\n\n pauseTimer() {\n clearInterval(this.interval);\n this.disableResendLink = false;\n this.twoFactorAuthentication?.otherWaysList.forEach(item => {\n item.enabled = true;\n });\n }\n\n resetPassword() {\n this.inProgress = true;\n this.mobileNumberIsCorrect = false;\n this.editMobileNumber = false;\n this.twoFactorAuthentication = null;\n\n this.signInService\n .requestSendToken(\n this.loginForm.controls['mobile'].value + '',\n this.selectedCountry.alpha2)\n .pipe(\n finalize(() => {\n this.inProgress = false;\n this.loginForm.controls.smsCode.setValue('');\n }))\n .subscribe(\n (res: PreLoginStatusViewModel) => {\n this.handleAuthenticationResult(res.userStatus);\n this.resendResponse = res;\n this.state = LoginStateEnum.ResendOTP;\n },\n (error) => {\n this.errorMessage = error;\n }\n );\n }\n\n editPhoneNumber() {\n this.state = LoginStateEnum.PreLogin;\n this.twoFactorAuthentication = null;\n clearInterval(this.interval);\n }\n\n private handleErroredSignIn(response: any) {\n if (response.status == 403) {\n this.errorMessage = 'You do not have access to this service.';\n } else if (response.status == 423) {\n let responseError = response.error;\n let lockoutMessage = `Your account has been locked because you have entered an incorrect password ${responseError.wrongPasswordAttemptCountLockout} times.`;\n lockoutMessage += ` For security of your profile please try again in ${responseError.lockoutInSeconds / 60\n } minutes`;\n this.errorMessage = lockoutMessage;\n }\n else if (response.status == 406) {\n this.errorMessage = 'You must change your password to match the required complexity!';\n } else\n this.errorMessage =\n 'We were not able to sign you in with the provided credentials.';\n }\n\n tokenFormIsValid() {\n return (\n this.loginForm.controls['smsCode'].value.split('-').join('').length == 6 &&\n this.loginForm.controls['password'].valid &&\n this.loginForm.controls['password'].value ==\n this.loginForm.controls['repeatpassword'].value\n );\n }\n\n twoFactorFormIsValid() {\n return (\n this.loginForm.controls['smsCode'].value.split('-').join('').length == 6\n );\n }\n\n isRepeatPasswordValid() {\n return (\n this.loginForm.controls['password'].value ==\n this.loginForm.controls['repeatpassword'].value\n );\n }\n\n showProgress() {\n this.inProgress = true;\n }\n\n sendOtherType(type: TwoFactorVerificationMode) {\n this.inProgress = true;\n this.errorMessage = null;\n const returnPath = this.returnPath ?? this.route.snapshot.params['returnPath'];\n let userCredentialsViewModel = new UserCredentialsViewModel();\n userCredentialsViewModel.mobile = this.loginForm.controls['mobile'].value + '';\n userCredentialsViewModel.securityToken = null;\n userCredentialsViewModel.regionCode = this.selectedCountry.alpha2;\n userCredentialsViewModel.password = this.loginForm.controls['password'].value;\n userCredentialsViewModel.sendMode = type;\n userCredentialsViewModel.mode = OtpRequestMode.Register;\n\n this.signInService\n .signIn(returnPath, userCredentialsViewModel)\n .pipe(\n finalize(() => {\n this.inProgress = false;\n this.loginForm.controls.smsCode.setValue('');\n }))\n .subscribe(\n (response) => {\n this.twoFactorAuthentication = response.body as TwoFactorAuthenticationModel;\n clearInterval(this.interval);\n this.disableResendLink = true;\n this.timeLeft = this.twoFactorAuthentication.verificationTime == null ? this.DEFAULT_TIMEOUT : this.twoFactorAuthentication.verificationTime * 60;\n this.startTimer();\n },\n (error) => {\n this.handleErroredSignIn(error);\n }\n );\n }\n}\n","export interface KeyValue {\n key: T1,\n value: T2\n}\n\nexport interface KeyValuePair extends KeyValue {\n\n}\nexport interface StringKeyValuePair extends KeyValue {\n\n}\n\nexport class AsyncResult {\n isFinished: boolean;\n isSucceeded: boolean;\n message?: string = '';\n needParentRefresh?: boolean;\n result?: any\n}\n\nexport class ItemTitleValue {\n id?: number;\n itemTitle: string;\n itemValue: string;\n constructor(title: string, value: string) {\n this.itemTitle = title;\n this.itemValue = value;\n }\n}\n","import { QuestionType } from \"../enums/question-type\";\nimport { AskQuestionPeriodMode } from '../enums/ask-period-mode';\nimport { QuestionDefaultMode } from '../enums/question-default-mode';\nimport { ItemTitleValue } from \"./helper-models\";\nimport { QuestionConditionViewModel } from \"./question-condition-models\";\nimport { AskMode } from \"../enums/ask-mode\";\nimport { FormControl } from \"@angular/forms\";\nimport { RequiredDocumentViewModel } from \"./user-document-type\";\n\nexport class QuestionViewModel {\n public id: number;\n public questionText: string;\n public questionRichText: string;\n public questionType: QuestionType;\n public companyId: number;\n public askPeriodMode: AskQuestionPeriodMode;\n public askMode: AskMode;\n public defaultMode: QuestionDefaultMode;\n public isSensitive: boolean;\n public conditions: QuestionConditionViewModel[];\n questionParameters: string;\n questionParametersAsString: any = {};\n companyName: string;\n public isActive: boolean = true;\n public documentTypeId: number;\n public document: RequiredDocumentViewModel;\n\n formControl: FormControl;\n items: { itemTitle: string, itemValue: string, formControl: FormControl, disabled?: boolean }[];\n disabled: boolean;\n operatorFormControl?: FormControl;\n uuid: string;\n leaveEmptyInTextMode: boolean;\n documentTypeIdList: number[];\n\n constructor(model?: any) {\n this.loadAllProperties(model);\n }\n\n loadAllProperties(model) {\n if (!model) return;\n for (const key of Object.keys(model)) {\n if (model.hasOwnProperty(key)) {\n this[key] = model[key];\n }\n }\n this.questionParametersAsString = this.questionParameters ? JSON.parse(this.questionParameters) : {};\n delete this.questionParametersAsString?.documentTypeId;\n }\n\n isAnswerRequired(): boolean {\n return this.questionParametersAsString[\"isRequired\"] || (this.questionType == 2 && this.questionParametersAsString[\"minimumSelectCount\"] > 0);\n }\n\n getOptionTitleList(ignoreRequird: boolean): string[] {\n return this.getOptions(ignoreRequird).map(e => e.itemTitle);\n }\n getOptions(ignoreRequird: boolean): ItemTitleValue[] {\n return QuestionViewModel.getQuestionOptions(this, ignoreRequird);\n }\n\n static hasOptions(question: QuestionViewModel) {\n return [QuestionType.Boolean, QuestionType.SingleSelect, QuestionType.MultiSelect]\n .indexOf(question.questionType) >= 0;\n }\n\n static getQuestionOptions(question: QuestionViewModel, ignoreRequird: boolean): ItemTitleValue[] {\n if (!QuestionViewModel.hasOptions(question))\n return [];\n\n switch (question.questionType) {\n case QuestionType.Boolean: {\n let items = [{ itemTitle: 'Yes', itemValue: 'Yes' }, { itemTitle: 'No', itemValue: 'No' }] as ItemTitleValue[];\n\n if (!ignoreRequird && question.questionParametersAsString?.isRequired === false)\n items.push({ itemTitle: 'No Select', itemValue: null });\n return items;\n }\n case QuestionType.SingleSelect:\n case QuestionType.MultiSelect: {\n if(!question.questionParametersAsString['itemList']) {\n return [];\n }\n let items =\n question.questionParametersAsString.itemList\n .map(c => new ItemTitleValue(c.title, c.value));\n\n if (!ignoreRequird && question.questionType === QuestionType.SingleSelect && question.questionParametersAsString?.isRequired === false)\n items.push({ itemTitle: 'Not Select Item', itemValue: null });\n else if (!ignoreRequird && question.questionType === QuestionType.MultiSelect && question.questionParametersAsString?.minimumSelectCount === 0)\n items.push({ itemTitle: 'Not Select Item', itemValue: null });\n return items;\n }\n default:\n return [];\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ErrorService } from './error.service';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { QuestionViewModel } from '../models/question-viewmodel';\nimport { QuestionDefaultMode } from '../enums/question-default-mode';\nimport { QuestionListQueryModel } from '../models/question-list-query-model';\nimport { PagingViewModel } from '../models/site-list-paging-view-model';\nimport { AddQuestionConditionModel, CrudQuestionConditionModelResponse } from '../models/question-condition-models';\nimport { QuestionProfileSubTypeViewModel } from '../models/question-profile-sub-type-viewmodel';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class QuestionService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getQuestions(): Observable {\n return this._http.get('/api/question/question-list').pipe(catchError(this._errorService.handleError));\n }\n\n getActiveQuestions(query?: QuestionListQueryModel): Observable> {\n return this._http.post('/api/question/question-list/active', query).pipe(catchError(this._errorService.handleError));\n }\n\n getInactiveQuestions(query: QuestionListQueryModel): Observable> {\n return this._http.post('/api/question/question-list/inactive', query).pipe(catchError(this._errorService.handleError));\n }\n\n addNewQuestion(model: QuestionViewModel) {\n return this._http.post('/api/question/add', model).pipe(catchError(this._errorService.handleError));\n }\n\n addWithResultNewQuestion(model: QuestionViewModel) {\n return this._http.post('/api/question/add-with-result', model).pipe(catchError(this._errorService.handleError));\n }\n\n updateQuestion(model: QuestionViewModel) {\n return this._http.post(`/api/question/${model.id}/update`, model).pipe(catchError(this._errorService.handleError));\n }\n\n deleteQuestion(questionId: number) {\n return this._http.delete(`/api/question/${questionId}`).pipe(catchError(this._errorService.handleError));\n }\n\n addRemoveQuestionToAllSites(questionId: Number, addQuestionToAllSites: boolean, checkInMode: QuestionDefaultMode): Observable {\n return this._http.post(`/api/question/add-to-all-site`, { questionId: questionId, addQuestionToAllSites: addQuestionToAllSites, checkInMode: checkInMode })\n .pipe(catchError(this._errorService.handleError));\n }\n\n addQuestionCondition(model: AddQuestionConditionModel) : Observable {\n return this._http.post(`/api/question/add-question-condition`, model);\n }\n\n removeQuestionCondition(id: number) : Observable {\n return this._http.get(`/api/question/remove-question-condition/${id}`);\n }\n\n getQuestionProfileSubTypes(): Observable {\n return this._http.get('/api/question/question-profile-sub-types')\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { QuestionType } from '../enums/question-type';\n\n@Pipe({\n name: 'questionType'\n})\nexport class QuestionTypePipe implements PipeTransform {\n\n transform(value: unknown, listFormat: boolean = false): any {\n if (value == QuestionType.Boolean) { return \"Yes/No\"; }\n if (value == QuestionType.SingleSelect) { return listFormat === true ? 'Single Select' : \"Options (Single Select)\"; }\n if (value == QuestionType.MultiSelect) { return listFormat === true ? 'Multi Select' : \"Options (Multi Select)\"; }\n if (value == QuestionType.Text) { return \"Text\"; }\n if (value == QuestionType.File) { return \"File\"; }\n if (value == QuestionType.RichText) { return \"Static Text\"; }\n if (value == QuestionType.Date) { return \"Date\"; }\n if (value == QuestionType.SignaturePad) { return \"Signature Pad\"; }\n if (value == QuestionType.AssetField) { return \"Asset Field\"; }\n if (value == QuestionType.ProfileInfo) { return \"Profile Info\"; }\n if (value == QuestionType.EmergencyContact) { return \"Emergency Contact\"; }\n return value.toString();\n }\n\n}\n","import { ItemTitleValue } from '../models/helper-models';\n\nexport const regexLists : ItemTitleValue[] = [\n { id: 1, itemTitle: 'General', itemValue: '' },\n { id: 0, itemTitle: 'Custom(Regex)', itemValue: '(.*?)' },\n { id: 2, itemTitle: 'Number', itemValue: '^\\\\d+$' },\n { id: 3, itemTitle: 'Email', itemValue: '^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,})*$' },\n { id: 4, itemTitle: 'Url', itemValue: '^https?:\\\\/\\\\/(www\\\\.)?[-a-zA-Z0-9@:%._\\\\+~#=]{2,256}\\\\.[a-z]{2,}\\\\b([-a-zA-Z0-9@:%_\\\\+.~#()?&//=]*)$' },\n { id: 5, itemTitle: 'Phone Number', itemValue: '^(?:(?:\\\\(?(?:00|\\\\+)([1-4]\\\\d\\\\d|[1-9]\\\\d?)\\\\)?)?[\\\\-\\\\.\\\\ \\\\\\\\\\\\/]?)?((?:\\\\(?\\\\d{1,}\\\\)?[\\\\-\\\\.\\\\ \\\\\\\\\\\\/]?){0,})(?:[\\\\-\\\\.\\\\ \\\\\\\\\\\\/]?(?:#|ext\\\\.?|extension|x)[\\\\-\\\\.\\\\ \\\\\\\\\\\\/]?(\\\\d+))?$' }\n ]\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { regexLists } from '../helpers/general-lists';\n\n@Pipe({\n name: 'regex'\n})\nexport class RegexPipe implements PipeTransform {\n\n transform(value: string): unknown {\n if (!value || value === undefined) return '';\n var founded = regexLists.find(c => c.itemValue.trim() === value.trim());\n if (founded) return founded.itemTitle;\n return '';\n }\n\n}\n","export enum QuestionProfileSubTypeEnum {\n DOB = 0,\n ProfilePicture = 1,\n Email = 2,\n Gender = 3,\n EmergencyContact = 4,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { QuestionProfileSubTypeEnum } from '../enums/question-profile-sub-type-enum';\n\n@Pipe({\n name: 'questionProfileSubTypePipe'\n})\nexport class QuestionProfileSubTypePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == QuestionProfileSubTypeEnum.DOB || value == 0 || value == \"DOB\") return \"Date of Birth\";\n if (value == QuestionProfileSubTypeEnum.ProfilePicture || value == 1 || value == \"ProfilePicture\") return \"Profile Picture\";\n if (value == QuestionProfileSubTypeEnum.Email || value == 2 || value == \"Email\") return \"Email\";\n if (value == QuestionProfileSubTypeEnum.Gender || value == 3 || value == \"Gender\") return \"Gender\";\n if (value == QuestionProfileSubTypeEnum.EmergencyContact || value == 4 || value == \"EmergencyContact\") return \"Emergency Contact\";\n return value?.toString() ?? \"\";\n }\n\n}\n","export enum MultiSelectRenderMode\n{\n CheckBoxList = 0,\n Button = 1,\n}","export enum SingleSelectRenderMode {\n DropDown = 0,\n RadioButton = 1,\n Button = 2\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { MultiSelectRenderMode } from '../models/questionParameters/multi-select-render-type';\nimport { QuestionType } from '../enums/question-type';\nimport { SingleSelectRenderMode } from '../models/questionParameters/single-select-render-type';\n\n@Pipe({\n name: 'questinRenderMode'\n})\nexport class QuestinRenderModePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): unknown {\n if (args[0] == QuestionType.SingleSelect) {//single\n if (value == SingleSelectRenderMode.DropDown) { return \"DropDown\"; }\n if (value === SingleSelectRenderMode.RadioButton) { return \"Radio Button\"; }\n if (value === SingleSelectRenderMode.Button) { return \"Button\"; }\n }\n else if (args[0] == QuestionType.MultiSelect)//multi\n {\n if (value == MultiSelectRenderMode.CheckBoxList) { return \"CheckBox List\"; }\n if (value == MultiSelectRenderMode.Button) { return \"Button\"; }\n }\n return \"\";\n }\n\n}\n","export enum QuestionAnswerFileFormat {\n AnyFile = 0,\n Image = 1,\n PDF = 2,\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { QuestionAnswerFileFormat } from '../models/questionParameters/question-answer-file-format';\n\n@Pipe({\n name: 'questionAnswerFileFormat'\n})\nexport class QuestionAnswerFileFormatPipe implements PipeTransform {\n\n transform(value: unknown): any {\n if (value === 0 || value == QuestionAnswerFileFormat.AnyFile) { return \"Any File\"; }\n if (value === 1 || value == QuestionAnswerFileFormat.Image) { return \"Image\"; }\n if (value === 2 || value == QuestionAnswerFileFormat.PDF) { return \"PDF\"; }\n return \"Any File\";\n }\n}\n","\n
\n \n \n
0\">\n
\n
\n \n {{conditionValue(t)}}:\n \n Tag \n Reject \n
\n
\n
\n
\n \n
\n
\n
Show If:
\n
\n {{condition.masterQuestionTitle}} : {{condition.answers}}\n
\n
\n
\n
\n 0\">\n \n {{question.questionText}}\n \n \n \n \n {{ question.isActive ? '' : ' - disabled'}}\n
\n {{question.questionType|questionType : true}}\n \n -\n {{ question.questionParametersAsString['questionProfileSubType'] |\n questionProfileSubTypePipe }}\n \n \n ({{question.questionParametersAsString['renderMode'] | questinRenderMode:question.questionType}})\n \n \n - Items:\n {{(question.getOptionTitleList(true)).join(\", \")}}\n \n 0\">\n - Document Type ( {{question.documentTypeIdList?.length}} items )\n \n \n - {{ question.questionParametersAsString['fileType'] | questionAnswerFileFormat }}\n \n
\n
{{ question.questionParametersAsString['regex'] | regex}}
\n
","import { Component, OnInit, Input } from '@angular/core';\nimport { Constants } from 'src/app/enums/constants';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { QuestionViewModel } from 'src/app/models/question-viewmodel';\n\n@Component({\n selector: 'obc-question-extended-title',\n templateUrl: './question-extended-title.component.html',\n styleUrls: ['./question-extended-title.component.css']\n})\nexport class QuestionExtendedTitleComponent implements OnInit {\n Constants = Constants;\n @Input() question: QuestionViewModel;\n QuestionType = QuestionType;\n constructor() { }\n\n ngOnInit() {\n }\n\n showItems(question: QuestionViewModel) {\n return QuestionViewModel.hasOptions(question);\n }\n\n conditionValue(t: any): string {\n if (this.question.questionType == QuestionType.Text && t.condition.value[0] == Constants.TEXT_IS_ANYTHING_CONDITION_VALUE)\n return 'Anything';\n if (!t.condition.value[0])\n return this.question.questionType == QuestionType.Text ? 'Nothing' : 'No Selection';\n return t.condition.value.join(', ');\n }\n\n}\n","
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ControlValueAccessor, FormArray, FormControl, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { ItemTitleValue } from 'src/app/models/helper-models';\nimport { QuestionViewModel } from 'src/app/models/question-viewmodel';\nexport interface FormOption {\n item: ItemTitleValue,\n form: FormControl\n}\n\n@Component({\n selector: 'app-answer-selector',\n templateUrl: './answer-selector.component.html',\n styleUrls: ['./answer-selector.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AnswerSelectorComponent,\n multi: true,\n }\n ]\n})\nexport class AnswerSelectorComponent implements ControlValueAccessor, OnInit {\n changeFn: Function = null;\n touchFn: Function = null;\n _question: QuestionViewModel;\n QuestionType = QuestionType;\n get type(): QuestionType {\n return this._question.questionType;\n }\n formControl: FormControl;\n formOptions: FormOption[];\n @Input() set question(value: QuestionViewModel) {\n if (this._question?.id == value.id) return;\n this._question = value;\n switch (value.questionType) {\n case QuestionType.Text:\n {\n this.formControl = new FormControl();\n this.formControl.valueChanges.subscribe(res => {\n this.writeValue([res]);\n })\n break;\n }\n case QuestionType.Boolean:\n case QuestionType.SingleSelect:\n {\n var form = new FormControl(false, [Validators.required]);\n form.valueChanges.subscribe(res => {\n this.writeValue([res]);\n })\n this.formOptions = this._question.getOptions(true).map(e => {\n return {\n item: e,\n form: form,\n } as FormOption\n });\n break;\n }\n case QuestionType.MultiSelect:\n this.formOptions = this._question.getOptions(true).map(e => {\n return {\n item: e,\n form: new FormControl(false, []),\n } as FormOption\n });\n this.formOptions.forEach(i => {\n i.form.valueChanges.subscribe(res => {\n var selected = this.formOptions.filter(x => x.form.value).map(x => x.item.itemValue);\n this.writeValue(selected.length == 0 ? null : selected);\n })\n })\n break;\n }\n }\n\n constructor() { }\n\n writeValue(answer: any): void {\n if (this.changeFn)\n this.changeFn(answer);\n }\n\n registerOnChange(fn: any): void {\n this.changeFn = fn;\n\n }\n registerOnTouched(fn: any): void {\n this.touchFn = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n\n }\n\n ngOnInit() {\n\n }\n\n}\n","
\n
\n
\n \n
\n

Manage Display Question Conditions

\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Title\n \n Answer(s)\n \n Action\n
{{getQuestionTitle(c.masterQuestionId)}}{{c.answerTitles ? c.answerTitles : c.answers}}\n
\n \n
\n
\n
\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { finalize } from 'rxjs/operators';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { AsyncResult } from 'src/app/models/helper-models';\nimport { AddQuestionConditionModel } from 'src/app/models/question-condition-models';\nimport { QuestionViewModel } from 'src/app/models/question-viewmodel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { QuestionService } from 'src/app/services/question.service';\n\n@Component({\n selector: 'app-conditional-question',\n templateUrl: './conditional-question.component.html',\n styleUrls: ['./conditional-question.component.scss']\n})\nexport class ConditionalQuestionComponent implements OnInit {\n @Output() public result = new EventEmitter();\n @Input() question: QuestionViewModel;\n allQuestions: QuestionViewModel[] = [];\n get masterQuestion(): QuestionViewModel {\n return this.formGroup.controls.masterQuestion.value;\n };\n inprocess = false;\n get questionId(): Number {\n return this.question.id;\n };\n //question: QuestionViewModel;\n questions: QuestionViewModel[];\n formGroup = new FormGroup({\n masterQuestion: new FormControl(null, [Validators.required]),\n answers: new FormControl(null, [Validators.required])\n })\n constructor(private questionService: QuestionService, private modalService: ModalService) { }\n\n ngOnInit() {\n this.formGroup.controls.masterQuestion.valueChanges.subscribe(res => {\n this.formGroup.controls.answers.reset();\n });\n this.loadAllQuestions();\n }\n\n loadAllQuestions() {\n this.questionService.getQuestions()\n .subscribe(res => {\n this.allQuestions = res.map(x => x = new QuestionViewModel(x))\n this.setDropDownQuestion();\n })\n }\n\n private setDropDownQuestion() {\n if (this.question.conditions && this.question.conditions.length > 0) {\n var masterQuestionId = this.question.conditions[0].masterQuestionId;\n this.questions = this.allQuestions.filter(x => x.id == masterQuestionId);\n } else {\n this.questions = this.allQuestions.filter(x => x.id != this.questionId &&\n (x.questionType == QuestionType.Boolean ||\n x.questionType == QuestionType.SingleSelect ||\n x.questionType == QuestionType.MultiSelect)\n );\n }\n if (this.questions.length == 1)\n this.formGroup.controls.masterQuestion.setValue(this.questions[0]);\n }\n\n getQuestionTitle(id: number) {\n if (this.questions) {\n return this.questions.find(x => x.id == id)?.questionText ?? \"Not Found Or Inactive\";\n }\n return \"Not Found Or Inactive\";\n }\n\n onAddCondition() {\n var model = {\n questionId: this.questionId,\n masterQuestionId: this.formGroup.controls.masterQuestion.value.id,\n answers: this.formGroup.controls.answers.value\n } as AddQuestionConditionModel;\n this.inprocess = true;\n this.questionService.addQuestionCondition(model)\n .pipe(finalize(() => { this.inprocess = false }))\n .subscribe(res => {\n if (res.isValid) {\n this.question.conditions = res.conditions;\n this.formGroup.controls.answers.reset();\n this.setDropDownQuestion();\n }\n else\n this.modalService.error(res.message);\n }, err => {\n console.log(err);\n this.modalService.error(\"internal server error\");\n })\n }\n\n onRemoveCondition(id: number) {\n var condition = this.question.conditions.find(x => x.id == id);\n if (!condition) {\n this.modalService.error(\"item not found\");\n return;\n }\n this.inprocess = true;\n this.questionService.removeQuestionCondition(id)\n .pipe(finalize(() => { this.inprocess = false }))\n .subscribe(res => {\n if (res.isValid) {\n this.question.conditions = res.conditions;\n this.formGroup.controls.answers.reset();\n this.setDropDownQuestion();\n }\n else\n this.modalService.error(res.message);\n }, err => {\n console.log(err);\n this.modalService.error(\"internal server error\");\n })\n }\n\n cancel() {\n this.result.emit({ isFinished: true, isSucceeded: true });\n }\n}\n","export enum AskQuestionPeriodMode\n{\n always = 0,\n onlyOneTime = 1,\n oneTimePerSite = 2,\n oneTimePerDay = 3,\n oneTimePerDayPerSite = 4,\n}\n","export enum QuestionDefaultMode {\n Disabled = 0,\n CheckIn = 1,\n CheckOut = 2,\n CheckInCheckOut = 3,\n}\n","export enum AskMode {\n AnyTime = 0,\n CheckIn = 1,\n PreCheckIn = 2,\n}\n","export enum GlobalItemType {\n GlobalAssetField,\n}\n","export enum ToolDynamicFieldUsage {\n Tool = 0,\n ToolAssign = 1,\n}\n","import { HttpParams, HttpParameterCodec } from '@angular/common/http';\n\nexport class CustomeQueryEncoder implements HttpParameterCodec {\n encodeKey(key: string): string {\n return this.encode(key);\n }\n encodeValue(value: string): string {\n return this.encode(value);\n }\n decodeKey(key: string): string {\n return decodeURIComponent(key);\n }\n decodeValue(value: string): string {\n return decodeURIComponent(value);\n }\n private encode(v: string): string {\n return encodeURIComponent(v)\n .replace('+', '%2B');\n }\n}\n\nexport function extractParamsFromModel(searchModel): HttpParams {\n // const params: URLSearchParams = new URLSearchParams('', new CustomQueryEncoder());\n let params: HttpParams = new HttpParams({ fromString: '', encoder: new CustomeQueryEncoder() });\n for (const key of Object.keys(searchModel)) {\n const value = searchModel[key];\n if (value instanceof Array) {\n value.forEach(d => {\n if (d != null && d != undefined)\n params = params.append(key, d)\n });\n } else if (value instanceof Object && Object.keys(value)) {\n Object.keys(value).forEach(k => {\n // if (value[k] instanceof Date) {\n // if (value[k] != null && value[k] != undefined)\n // params = params.set(k, moment(value[k]).format());\n // } else \n if (value[k] instanceof Array) {\n value[k].forEach(d => {\n if (value[k] != null && value[k] != undefined)\n params = params.append(k, d);\n });\n }\n else if (value[k] != null && value[k] != undefined) {\n params = params.set(k, value[k]);\n }\n });\n } else if (value != null && value != undefined) {\n params = params.set(key, value);\n }\n }\n return params;\n}\n\nexport function convertObjectToUrlParameters(o) {\n function iter(o, path) {\n if (o === null || typeof o === typeof undefined) {\n data.push(path + '=');\n return;\n }\n if (Array.isArray(o)) {\n o.forEach(function (a, i) {\n iter(a, path + '[' + i + ']');\n });\n return;\n }\n if (o instanceof Date) {\n data.push(path + '=' + o.toISOString());\n return;\n }\n if (o !== null && typeof o === 'object') {\n Object.keys(o).forEach(function (k) {\n iter(o[k], path + '.' + k);\n });\n return;\n }\n data.push(path + '=' + o);\n }\n\n var data = [];\n Object.keys(o).forEach(function (k) {\n iter(o[k], k);\n });\n return data.join('&');\n}","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { convertObjectToUrlParameters } from '../helpers/extract-params-from-model';\nimport { GlobalViewModel } from '../models/global-viewmodel';\nimport { GlobalToolDynamicFieldViewModel } from '../models/inventory/global-tool-dynamic-field-view-model';\nimport { InventorySiteLocationsViewModel } from '../models/inventory/inventory-site-locations-view-model';\nimport { SearchGlobalToolDynamicFieldsQueryModel, SearchToolsQueryModel } from '../models/inventory/search-tools-query-model';\nimport { ToolAssignHistoryRequestModel } from '../models/inventory/tool-assign-history-request-model';\nimport { ToolAssignHistoryViewModel } from '../models/inventory/tool-assign-history-view-model';\nimport { ToolCategoryViewModel } from '../models/inventory/tool-category-model';\nimport { ToolFullInfoViewModel } from '../models/inventory/tool-full-info-view-model';\nimport { ToolReportRequestModel } from '../models/inventory/tool-report-request-model';\nimport { ToolStatusViewModel } from '../models/inventory/tool-status-model';\nimport { ToolViewModel, BaseToolModel, TemporarilyToolModel } from '../models/inventory/tool-view-model';\nimport { ServerResult, ServerResultData } from '../models/server-result-data';\nimport { PagingViewModel } from '../models/site-list-paging-view-model';\nimport { ErrorService } from './error.service';\nimport { UserService } from './user.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InventoryService {\n\n baseApiUrlWithoutCompanyId = `/api/inventory`;\n baseApiUrl = `/api/inventory/${this.userService.currentCompanyId}`;\n\n constructor(private http: HttpClient, private _errorService: ErrorService, private userService: UserService) { }\n\n //TODO: complete to use cache\n private _inventoryCategories = new BehaviorSubject(null);\n get inventoryCategories(): BehaviorSubject {\n if (this._inventoryCategories.value == null) {\n this.getToolCategories().subscribe(res => {\n this._inventoryCategories.next(res.data);\n })\n }\n return this._inventoryCategories;\n }\n\n private _inventoryToolStatuses = new BehaviorSubject(null);\n get inventoryToolStatuses(): BehaviorSubject {\n if (this._inventoryToolStatuses.value == null) {\n this.getToolStatuses().subscribe(res => {\n this._inventoryToolStatuses.next(res.data);\n })\n }\n return this._inventoryToolStatuses;\n }\n\n private _inventorySiteLocations = new BehaviorSubject(null);\n get inventorySiteLocations(): BehaviorSubject {\n if (this._inventorySiteLocations.value == null) {\n this.getInventorySiteLocations().subscribe(res => {\n if (res.success)\n this._inventorySiteLocations.next(res.data);\n })\n }\n return this._inventorySiteLocations;\n }\n\n getToolReport(model: ToolReportRequestModel): Observable>> {\n return this.http.post>>(`${this.baseApiUrl}/tool-report`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n getToolCategories(): Observable> {\n return this.http.get(`${this.baseApiUrl}/get-tool-categories`)\n .pipe(catchError(this._errorService.handleError));\n }\n getToolsForCategory(categoryId: number): Observable {\n return this.http.post(`${this.baseApiUrl}/get-tools-for-category/${categoryId}`, null)\n .pipe(catchError(this._errorService.handleError));\n }\n getToolStatuses(): Observable> {\n return this.http.get(`${this.baseApiUrl}/get-tool-statuses`)\n .pipe(catchError(this._errorService.handleError));\n }\n exportToolReportAsCsv(model: ToolReportRequestModel) {\n const params = convertObjectToUrlParameters(model);\n return window.open(this.baseApiUrl + '/export-tool-report-csv/?' + params);\n }\n getInventorySiteLocations(): Observable> {\n return this.http.get(`${this.baseApiUrl}/get-inventory-locations`)\n .pipe(catchError(this._errorService.handleError));\n }\n getInventoryLocationsBySiteId(siteId: number): Observable> {\n return this.http.get(`${this.baseApiUrl}/get-site-locations/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n getInventoryLocationsBySiteSupplierId(externalSiteSupplierId: number): Observable> {\n return this.http.get(`${this.baseApiUrl}/get-site-supplier-locations/${externalSiteSupplierId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n getToolAssignHistory(model: ToolAssignHistoryRequestModel): Observable>> {\n return this.http.post>>(`${this.baseApiUrl}/tool-assign-history`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateWebTool(toolId: number, model: BaseToolModel): Observable> {\n return this.http.post>(`${this.baseApiUrl}/update-tool/${toolId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addWebTool(model: TemporarilyToolModel): Observable> {\n return this.http.post>(`${this.baseApiUrl}/web/add-tool`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n removeAsset(id: number): Observable {\n return this.http.post(`${this.baseApiUrl}/remove-asset/${id}`, {})\n .pipe(catchError(this._errorService.handleError));\n }\n\n fetchAssets(model: SearchToolsQueryModel): Observable {\n return this.http.post(`${this.baseApiUrl}/search-assets`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getGlobalToolDynamicFields(request: SearchGlobalToolDynamicFieldsQueryModel): Observable {\n return this.http.post(`${this.baseApiUrlWithoutCompanyId}/search-global-asset-fields`, request)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","
\n \n \n {{getItemLabel(item)}}\n \n \n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { GlobalItemType } from 'src/app/enums/global-item-type.enum';\nimport { GlobalViewModel } from 'src/app/models/global-viewmodel';\nimport { SearchGlobalToolDynamicFieldsQueryModel } from 'src/app/models/inventory/search-tools-query-model';\nimport { InventoryService } from 'src/app/services/inventory.service';\n\n@Component({\n selector: 'obc-item-selector',\n templateUrl: './item-selector.component.html',\n styleUrls: ['./item-selector.component.scss']\n})\nexport class ItemSelectorComponent implements OnInit {\n\n @Input() itemType: GlobalItemType;\n @Input() options: any;\n\n\n @Input() maxItems = 10;\n @Input() valueListToHide: number[] = [];\n @Input() notSelectedLabel: string = null;\n\n _required = false;\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl.setValidators(Validators.required);\n }\n };\n\n @Output() onItemSelect = new EventEmitter();\n public selectedItem = new BehaviorSubject(null);\n\n _itemId: number = null;\n @Input() set itemId(value: number) {\n if (!value) return;\n this._itemId = value;\n this.formControl.setValue(value);\n };\n\n\n itemList: any[];\n items$: Observable;\n term$ = new BehaviorSubject(null)\n formControl = new FormControl(null, [Validators.required]);\n loading: boolean = false;\n\n constructor(\n private inventoryService: InventoryService,\n //private siteAssetService: SiteAssetService,\n ) { }\n\n\n ngOnInit() {\n this.formControl.valueChanges.subscribe(res => {\n if (this.itemList) {\n if (res == null || res == 0) {\n this.onItemSelect.emit(null);\n this.selectedItem.next(null);\n } else {\n var item = this.itemList.find(x => this.getValue(x) == res);\n if (item == null) {\n } else {\n this.onItemSelect.emit(item);\n this.selectedItem.next(item);\n }\n }\n }\n });\n\n this.term$.subscribe(term => {\n term = term ?? '';\n if (this.reachToEndTerm != term) {\n this.getItemList(term);\n }\n else {\n this.items$ = of(this.getNthItems(this.itemList, this.reachToEnd ? this.itemList.length : this.maxItems))\n }\n });\n\n setTimeout(() => {\n this.getItemList();\n }, 250);\n }\n\n getItemLabelKey(): string {\n switch (this.itemType) {\n case GlobalItemType.GlobalAssetField:\n return 'fieldName';\n default:\n return 'title';\n }\n }\n\n getItemValueKey(): string {\n switch (this.itemType) {\n case GlobalItemType.GlobalAssetField:\n return 'id';\n default:\n return 'id';\n }\n }\n\n getItemLabel(item: any) {\n return item[this.getItemLabelKey()];\n }\n\n getValue(item: any) {\n return item[this.getItemValueKey()];\n }\n\n getItemList(term: string = '') {\n this.loading = true;\n switch (this.itemType) {\n case GlobalItemType.GlobalAssetField:\n let globalToolDynamicRequest = { usage: this.options.usage, searchTerm: term } as SearchGlobalToolDynamicFieldsQueryModel;\n this.inventoryService.getGlobalToolDynamicFields(globalToolDynamicRequest)\n .pipe(finalize(() => this.loading = false))\n .subscribe(res => {\n this.reachToEndTerm == term;\n this.reachToEnd = false;\n this.itemList = this.filterExcludes(res);\n this.items$ = of(this.getNthItems(this.itemList, this.itemList.length));\n });\n }\n }\n\n private filterExcludes(res: any[]) {\n let that = this;\n return res.filter(function (el) {\n return that.valueListToHide.filter(function (selected_el) {\n return selected_el == this.getValue(el);\n }).length == 0\n });\n }\n\n getNthItems(array: GlobalViewModel[], n: number): GlobalViewModel[] {\n if (!array || array.length == 0 || n <= 0) return [];\n var max = Math.min(array.length, n);\n var arr = [];\n for (var i = 0; i < max; i++)\n arr.push(array[i]);\n if (this.selectedItem.value && !arr.find(x => this.getValue(x) == this.getValue(this.selectedItem.value)))\n arr.push(this.selectedItem.value);\n return arr;\n }\n\n searchAssets(term: string) {\n return this.itemList.filter((item) => {\n return this.isMatched(term, item);\n });\n }\n\n clearInput() {\n this.formControl.setValue(null);\n }\n\n isMatched(term: string, item: any): boolean {\n if (!term) return true;\n term = term.toLowerCase();\n return (this.getItemLabel(item) && this.getItemLabel(item).toLowerCase().indexOf(term) > -1);\n }\n\n reset() {\n this.formControl.reset();\n this.itemList = [];\n }\n\n reachToEnd = false;\n reachToEndTerm = \"\";\n onScrollToEnd() {\n this.reachToEnd = true;\n this.reachToEndTerm = this.term$.value;\n this.term$.next(this.term$.value)\n }\n\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { GlobalItemType } from 'src/app/enums/global-item-type.enum';\nimport { ToolDynamicFieldUsage } from 'src/app/enums/tool-dynamic-field-usage.enum';\nimport { GlobalToolDynamicFieldViewModel } from 'src/app/models/inventory/global-tool-dynamic-field-view-model';\n\n@Component({\n selector: 'obc-question-asset-field',\n templateUrl: './question-asset-field.component.html',\n styleUrls: ['./question-asset-field.component.scss']\n})\nexport class QuestionAssetFieldComponent implements OnInit {\n\n static readonly globalToolDynamicFieldIdKeynewLocal = 'globalToolDynamicFieldId';\n GlobalItemType = GlobalItemType;\n selectedGlobalToolDynamicFieldId: number;\n ToolDynamicFieldUsage = ToolDynamicFieldUsage;\n\n questionParam: any;\n @Input() set questionParamInput(_questionParamInput: any) {\n if (!_questionParamInput) { return; }\n else {\n this.questionParam = _questionParamInput;\n this.selectedGlobalToolDynamicFieldId = this.questionParam[QuestionAssetFieldComponent.globalToolDynamicFieldIdKeynewLocal];\n }\n }\n @Output('onItemsUpdated') onItemsUpdatedOutput = new EventEmitter();\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n onSelectGlobalField(field: GlobalToolDynamicFieldViewModel) {\n this.onItemsUpdatedOutput.emit(true);\n this.selectedGlobalToolDynamicFieldId = field?.id;\n this.questionParam[QuestionAssetFieldComponent.globalToolDynamicFieldIdKeynewLocal] = this.selectedGlobalToolDynamicFieldId;\n }\n}\n","
\n \n
\n \n \n \n \n
\n
\n
\n \n
\n \n \n
\n
","import { QuestionParameter } from \"./question-parameter\";\n\nexport class DateQuestionParameter extends QuestionParameter {\n isRequired: boolean;\n includeTime: boolean;\n limitForMinimumValue: DateQuestionLimit;\n limitForMaximumValue: DateQuestionLimit;\n}\n\nexport class DateQuestionLimit {\n valueMode: DateQuestionLimitValueMode;\n dateComparisonMode: DateComparisonMode;\n dayCount: number;\n compareValue?: string;\n}\n\nexport enum DateQuestionLimitValueMode {\n Relative = 0,\n Absolute = 1,\n}\n\nexport enum DateComparisonMode {\n Before = 0,\n After = 1,\n}","export enum SupplierDocumentEditorType {\n RequestEmailContent = 0,\n FilloutRequestEmailContent = 1,\n FullOnboardingEmailContent = 2,\n OnboardingEmailOffsiteLinkTemplate = 3,\n DocumentVersionCommentEmailContent = 4,\n}\n\nexport enum EvacuationContentEditorType {\n EvacuationNotificationContent = 5\n}","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { SignedUploadInfoRequest, FileUploadInfo } from '../models/signed-upload-info-request';\nimport { UploadFileInfo } from '../models/requiredDocumentAnswer';\nimport { InlineFileViewModel } from '../view-models/inline-file-view-model';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileStorageService {\n\n constructor(private http: HttpClient, private errorService: ErrorService) { }\n getSignedUploadInfo(model: SignedUploadInfoRequest): Observable {\n return this.http.post('/api/fileStorage/get-signed-upload-info', model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n uploadInlineFile(model: UploadFileInfo): Observable {\n return this.http.post('/api/fileStorage/upload-inline-file', model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n uploadFile(formData: FormData, uploadInfo: FileUploadInfo) {\n var file = formData.get(\"file\");\n var headers = uploadInfo.headers;\n headers[\"do-not-modify-content-type\"] = '';\n if (uploadInfo.httpMethod.toUpperCase() == \"PUT\") {\n return this.http.put(uploadInfo.url, file , { reportProgress: true, observe: 'events', headers: headers })\n } else if (uploadInfo.httpMethod.toUpperCase() == \"POST\") {\n return this.http.post(uploadInfo.url, file, { reportProgress: true, observe: 'events', headers: headers })\n } else {\n throw \"upload method not implemented\";\n }\n }\n}\n","import { Component, OnInit, Input, ElementRef, AfterViewInit, ViewChild, Output } from '@angular/core';\nimport Editor from '@toast-ui/editor';\nimport { EventEmitter } from '@angular/core';\nimport { SupplierDocumentEditorType } from 'src/app/enums/supplier-document-editor-type';\nimport { GetAllPlaceHolders } from 'src/app/helpers/supplier-documents-editor-placeholder';\nimport { getFileExtenstion, toBase64 } from 'src/app/helpers/general-functions';\nimport { FileStorageService } from 'src/app/services/file-storage.service';\nimport { UploadFileInfo } from 'src/app/models/requiredDocumentAnswer';\nimport { InlineRichTextMaxFileSizeInMegaByte, MaxFileSize } from 'src/app/enums/constants';\nimport { ModalService } from 'src/app/services/modal.service';\n\n\n@Component({\n selector: 'obc-markdown-editor',\n templateUrl: './markdown-editor.component.html',\n styleUrls: ['./markdown-editor.component.scss']\n})\nexport class MarkdownEditorComponent implements OnInit, AfterViewInit {\n\n @ViewChild('editorRef') editorRef: ElementRef;\n @Input() id: string;\n @Input() value: string;\n @Input() type: SupplierDocumentEditorType;\n @Input() height: string = '300px';\n\n @Output() public valueChanged = new EventEmitter();\n\n instance: any;\n\n constructor(private fileStorageService: FileStorageService, private modalService: ModalService) { }\n\n ngOnInit(): void {\n\n }\n\n ngAfterViewInit(): void {\n let that = this;\n this.instance = new Editor({\n el: document.querySelector('#' + this.editorRef.nativeElement.id),\n previewStyle: 'vertical',\n initialEditType: 'wysiwyg',\n height: this.height,\n initialValue: this.value,\n events: {\n change: function (value) {\n that.valueChanged.emit(that.instance.getMarkdown());\n }\n },\n hooks: {\n addImageBlobHook: function (blob, callback) {\n that.onAddImageBlob(blob, callback);\n }\n },\n usageStatistics: false,\n toolbarItems: [\n 'heading',\n 'bold',\n 'italic',\n 'strike',\n // The divider element had to be added to differentiate different groups.\n 'divider',\n 'hr',\n 'quote',\n 'divider',\n // ...\n 'ul',\n 'ol',\n 'task',\n 'indent',\n 'outdent',\n 'divider',\n // ...\n 'table',\n 'link',\n 'divider',\n 'image'\n ],\n });\n\n //Change color of placeholders on page load\n // var html = that.instance.getHtml();\n var placeHolders = GetAllPlaceHolders(that.type);\n // placeHolders.forEach(placeholder => {\n // html = html.replaceAll(placeholder, \"\" + placeholder + \"\");\n // });\n // that.instance.setHtml(html, false);\n\n if (placeHolders != null && placeHolders.length > 0) {\n //Get Toolbar\n const toolbar = this.instance.getUI().getToolbar();\n\n //Add Placeholder Button to last toolbar item\n const name = 'placeHolders';\n toolbar.addItem({\n type: 'button',\n options: {\n name: name,\n className: 'btn',\n event: 'clickPlaceholderButton',\n tooltip: '',\n text: 'Placeholders',\n style: 'background-image:none;color:black;width:100px;border: 1px solid grey;padding-bottom:10px;'\n }\n });\n\n //Get PlaceholderButton\n const placeholderButtonIndex = toolbar.indexOfItem(name);\n const { el: button } = toolbar.getItem(placeholderButtonIndex);\n\n //close all popups\n this.instance.eventManager.listen('closeAllPopup', () => {\n popup.hide();\n });\n\n this.instance.eventManager.listen('focus', () => {\n popup.hide();\n });\n\n //click placeholder button\n this.instance.eventManager.addEventType('clickPlaceholderButton');\n this.instance.eventManager.listen('clickPlaceholderButton', () => {\n if (popup.isShow()) {\n popup.hide();\n return;\n }\n\n const { offsetTop, offsetLeft, offsetHeight } = button;\n\n this.css(popup.el, {\n top: `${offsetTop + offsetHeight}px`,\n left: `${offsetLeft}px`\n }, null);\n\n this.instance.eventManager.emit('closeAllPopup');\n popup.show();\n });\n\n const placeholderContainer = document.createElement('div');\n\n if (this.type != null) {\n placeHolders.forEach(placeholder => {\n const btn = this.createButton(placeholder, 'btn btn-success');\n placeholderContainer.appendChild(btn);\n const br = document.createElement('br');\n placeholderContainer.appendChild(br);\n });\n }\n\n const popup = this.instance.getUI().createPopup({\n header: false,\n content: placeholderContainer,\n className: 'tui-popup-color',\n target: this.instance.getUI().getToolbar().el,\n css: {\n width: 'auto',\n position: 'absolute'\n }\n });\n }\n }\n\n createButton(text, className) {\n const button = document.createElement('button');\n button.setAttribute('type', 'button');\n button.className = className;\n button.style.position = \"relative\";\n button.style.marginLeft = \"0\";\n button.style.width = \"200px\";\n button.style.color = \"black\";\n button.innerHTML = text;\n button.addEventListener('click', () => {\n this.instance.insertText(text);\n // var html = this.instance.getHtml();\n // html = html.replaceAll(text, \"\" + text + \"\");\n // this.instance.setHtml(html);\n })\n return button;\n }\n\n //Utils\n css(element, key, value) {\n var style = element.style;\n\n if (this.isString(key)) {\n style[key] = value;\n\n return;\n }\n\n this.forEach(key, function (v, k) {\n style[k] = v;\n }, this);\n }\n\n isString(obj) {\n return typeof obj === 'string' || obj instanceof String;\n }\n\n forEachOwnProperties(obj, iteratee, context) {\n var key;\n\n context = context || null;\n\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (iteratee.call(context, obj[key], key, obj) === false) {\n break;\n }\n }\n }\n }\n\n forEachArray(arr, iteratee, context) {\n var index = 0;\n var len = arr.length;\n\n context = context || null;\n\n for (; index < len; index += 1) {\n if (iteratee.call(context, arr[index], index, arr) === false) {\n break;\n }\n }\n }\n\n forEach(obj, iteratee, context) {\n if (this.isArray(obj)) {\n this.forEachArray(obj, iteratee, context);\n } else {\n this.forEachOwnProperties(obj, iteratee, context);\n }\n }\n\n isArray(obj) {\n return obj instanceof Array;\n }\n\n //Upload Images\n inProgress: boolean = false;\n onAddImageBlob(blob, callback) {\n this.uploadImage(blob, callback);\n };\n\n async uploadImage(blob, callback) {\n if (blob.size > InlineRichTextMaxFileSizeInMegaByte * 1024000) {\n this.modalService.error(`Maximum File Size is ${InlineRichTextMaxFileSizeInMegaByte}mb`, \"image size\").subscribe(_ => { });\n }\n else {\n var body = blob == null ? null : (await toBase64(blob)) as string;\n var fileAsBase64 = body == null ? null : body.split(';base64,')[1];\n var inlineFile: UploadFileInfo = {\n fileAsBase64: fileAsBase64,\n fileExtension: getFileExtenstion(blob.name)\n }\n\n this.inProgress = true;\n this.fileStorageService\n .uploadInlineFile(inlineFile)\n .subscribe({\n next: res => {\n this.inProgress = false;\n callback(res.uploadedLink, '');\n },\n error: res => {\n this.modalService.error(res)\n }\n });\n };\n }\n}\n","import { EvacuationContentEditorType, SupplierDocumentEditorType } from \"../enums/supplier-document-editor-type\";\n\nexport function GetAllPlaceHolders(editorType: SupplierDocumentEditorType | EvacuationContentEditorType): string[] {\n switch (editorType) {\n case SupplierDocumentEditorType.RequestEmailContent:\n return ['[SupplierName]', '[SiteName]', '[UploadLink]'];\n case SupplierDocumentEditorType.FilloutRequestEmailContent:\n return ['[SupplierName]', '[UploadLink]'];\n case SupplierDocumentEditorType.FullOnboardingEmailContent:\n return ['[SupplierName]', '[CompanyTitle]', '[Link]', '[MobileNumber]'];\n case SupplierDocumentEditorType.OnboardingEmailOffsiteLinkTemplate:\n return ['[SiteName]', '[OffsiteLink]', '[OffsiteQR]'];\n case SupplierDocumentEditorType.DocumentVersionCommentEmailContent:\n return ['[UserFullName]', '[CompanyTitle]', '[DocumentTitle]', '[SiteName]', '[Comment]', '[Acknowledgement]'];\n case EvacuationContentEditorType.EvacuationNotificationContent:\n return []\n default: return null;\n }\n}\n","\n
\n","\nexport enum ToolTipPlace {\n top = 'top',\n right = 'right',\n left = 'left',\n bottom = 'bottom',\n auto = 'auto',\n}\n\nexport enum ToolTipTriggers {\n hover = 'hover',\n focus = 'focus',\n click = 'click'\n}\n\nexport enum ToolTipMode {\n info = 'info',\n danger = 'danger',\n success = 'success'\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { ToolTipPlace, ToolTipTriggers, ToolTipMode } from 'src/app/enums/tooltip-enums';\n\n@Component({\n selector: 'obc-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss']\n})\nexport class TooltipComponent implements OnInit {\n\n @Input() placement = ToolTipPlace.auto;\n @Input() message: string = '';\n @Input() trigger = ToolTipTriggers.hover;\n @Input() mode = ToolTipMode.info;\n\n constructor() { }\n ngOnInit(): void {\n }\n\n}\n\n","\n","export enum TextRenderType {\n SingleLine = 0,\n MultiLine = 1,\n RichText = 2\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'enumToArray'\n})\nexport class EnumToArrayPipe implements PipeTransform {\n\n transform(data: Object): string[] {\n if (!data) {\n return null;\n }\n return Object.keys(data).filter(c => isNaN(+c));\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {TextRenderType} from \"../enums/text-render-type\";\n\n@Pipe({\n name: 'textRenderType'\n})\nexport class TextRenderTypePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): unknown {\n if (value === TextRenderType.SingleLine) { return \"Single Line\"; }\n if (value === TextRenderType.MultiLine) { return \"Multi Line\"; }\n if (value === TextRenderType.RichText) { return \"Rich Text\"; }\n return value;\n }\n\n}\n","
\n \n
\n \n \n \n \n
\n
\n
\n \n
\n \n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n Please Enter Reqular Expression\n
\n
\n
\n","import { Component, OnInit, Input } from '@angular/core';\nimport { ControlContainer, NgForm } from '@angular/forms';\nimport { ItemTitleValue } from 'src/app/models/helper-models';\nimport { regexLists } from 'src/app/helpers/general-lists';\nimport { TextRenderType } from 'src/app/enums/text-render-type';\n@Component({\n selector: 'obc-question-text',\n templateUrl: './question-text.component.html',\n styleUrls: ['./question-text.component.scss'],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class QuestionTextComponent implements OnInit {\n showRegexInput: boolean;\n questionParam: any;\n regexItems: ItemTitleValue[] = regexLists;\n TextRenderType = TextRenderType;\n\n @Input() set questionParamInput(_questionParamInput: any) {\n if (!_questionParamInput) {\n this.onTextModeChanged(this.regexItems.find(c => c.itemTitle === \"General\").id); //set general mode in init\n this.onTextRenderModeChanged(TextRenderType.SingleLine); //set single line render mode in init\n return;\n }\n else {\n this.questionParam = _questionParamInput;\n\n delete this.questionParam['items'];\n\n if (!this.questionParam['regexType']) {\n var regexId = this.regexItems.find(r => r.itemValue == this.questionParam['regex'])?.id ?? 1; //set general mode in init\n this.onTextModeChanged(regexId);\n }\n\n this.showRegexInput = this.questionParam['regex']?.length > 0 && (!this.regexItems.some(r => r.itemValue == this.questionParam['regex']) || this.questionParam['regex'] == \"(.*?)\");\n // this.questionParam.questionParameters = JSON.stringify(this.question.questionParametersAsString);\n }\n }\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n onTextRenderModeChanged(item) {\n this.questionParam['textRenderMode'] = item.target.value;\n }\n\n onTextModeChanged(newItemId) {\n var item = this.regexItems.find(r => r.id == newItemId);\n this.questionParam['regex'] = '';\n this.questionParam['regexType'] = item.id;\n this.questionParam['regex'] = item.itemValue;\n this.questionParam['textRenderMode'] = TextRenderType.SingleLine; // set defualt mode 'singleLine'\n this.showRegexInput = newItemId == 0;\n }\n\n}\n","export enum DisplayStyle { \n Default = 0,\n Success = 1,\n Error = 2,\n Warning = 3,\n}\n","
\n
Answer Options
\n
\n \n
\n
\n
\n
Answers
\n
Hints
\n
Prevent Submission
\n
Actions
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n
\n
\n \n \n \n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n There is no items added yet\n
\n\n\n
\n \n \n \n
\n
\n\n\n \n {{ item.title }}\n \n\n\n\n \n
\n \n
\n
\n \n \n
\n
\n
\n \n \n \n \n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n\n\n
\n \n {{ item.hint }}\n \n
\n
\n","import {Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {DisplayStyle} from 'src/app/enums/display-style';\nimport {QuestionListItem, QuestionListItemOutputModel} from 'src/app/models/questionParameters/question-list-tem';\nimport {ModalService} from 'src/app/services/modal.service';\nimport {uuid4} from \"../../../helpers/uuid\";\nimport Sortable from 'sortablejs';\nimport {MultiSelectRenderMode} from \"../../../models/questionParameters/multi-select-render-type\";\nimport {SingleSelectRenderMode} from \"../../../models/questionParameters/single-select-render-type\";\nimport {LayoutService} from \"../../../services/layout.service\";\n\nenum ItemRendererDisplayMode {\n Dropdown = 0,\n Button = 1,\n CheckBox = 2,\n RadioButton = 3\n}\n\nenum TooltipTypeEnum {\n Empty = 1,\n Duplicate = 2\n}\n\n@Component({\n selector: 'obc-question-items-renderer',\n templateUrl: './question-items-renderer.component.html',\n styleUrls: ['./question-items-renderer.component.scss']\n})\nexport class QuestionItemsRendererComponent implements OnInit {\n showAdvancedMode: boolean = false;\n DisplayStyle = DisplayStyle;\n sortableUniqueId: string = uuid4();\n\n _items: QuestionListItem[] = [];\n @Input() set items(items: QuestionListItem[]) {\n items.forEach(item => {\n if (!item._clientRandomId)\n item._clientRandomId = uuid4();\n })\n this._items = items;\n };\n\n get items() {\n return this._items;\n }\n\n itemRenderMode: ItemRendererDisplayMode;\n ItemRendererDisplayMode = ItemRendererDisplayMode;\n\n @Input() set multipleItemRenderMode(mode: MultiSelectRenderMode) {\n switch (mode) {\n case MultiSelectRenderMode.Button:\n this.itemRenderMode = ItemRendererDisplayMode.Button;\n break;\n case MultiSelectRenderMode.CheckBoxList:\n this.itemRenderMode = ItemRendererDisplayMode.CheckBox;\n break;\n }\n }\n\n @Input() set singleItemRenderMode(mode: SingleSelectRenderMode) {\n switch (mode) {\n case SingleSelectRenderMode.Button:\n this.itemRenderMode = ItemRendererDisplayMode.Button;\n break;\n case SingleSelectRenderMode.DropDown:\n this.itemRenderMode = ItemRendererDisplayMode.Dropdown;\n break;\n case SingleSelectRenderMode.RadioButton:\n this.itemRenderMode = ItemRendererDisplayMode.RadioButton;\n break;\n }\n }\n\n @Output() onItemsUpdated = new EventEmitter();\n newItem: QuestionListItem;\n @ViewChild('input') input: ElementRef;\n\n constructor(private modalService: ModalService, private layoutService: LayoutService) {\n }\n\n ngOnInit(): void {\n this.resetNewItem();\n if (this._items?.length === 0) {\n this.addNewItemRow();\n }\n }\n\n ngAfterViewInit(): void {\n let el = document.getElementById(`sortable-list-${this.sortableUniqueId}`);\n Sortable.create(el, {\n ghostClass: 'ghost-class',\n fallbackClass: \"ghost-class\",\n handle: \".move-handler\",\n dragoverBubble: true,\n forceFallback: true,\n onEnd: (event: any) => {\n let orderedItems = [];\n\n for (let child of event.target.children) {\n let matchedItem = this.items.find((item) => item._clientRandomId == child?.dataset.id);\n if (matchedItem) {\n orderedItems.push(matchedItem);\n }\n }\n\n this.items = [\n ...orderedItems\n ];\n this._updateOutputItems();\n }\n });\n }\n\n detectPressedKey(keyEvent) {\n if (keyEvent.which === 13 || keyEvent.which === 188) {\n return false;\n }\n }\n _updateOutputItems() {\n this.onItemsUpdated?.emit({\n items: this.items,\n isValidList: !this.disabledAddNewRow()\n } as QuestionListItemOutputModel);\n }\n\n buttonStyles(style: DisplayStyle): { background: string, border: string } {\n switch (style) {\n case DisplayStyle.Error:\n return {background: '#FF644E', border: '#e55844'};\n case DisplayStyle.Warning:\n return {background: '#FFA319', border: '#db8b14'};\n case DisplayStyle.Success:\n return {background: '#91D19F', border: '#66AE87'};\n }\n }\n\n chooseQuestionStyle(event, style: DisplayStyle, item: QuestionListItem) {\n event.stopPropagation();\n if (item.displayStyle === style) {\n item.displayStyle = null;\n } else {\n item.displayStyle = style;\n }\n this._updateOutputItems();\n }\n\n resetNewItem() {\n this.newItem = {isInvalid: false, displayStyle: DisplayStyle.Default, _clientRandomId: uuid4()};\n }\n\n valueChanged() {\n if (this.newItem.value.search(/,/g) != -1) {\n this.newItem.value = this.newItem.value.replace(/,/g, ' ').replace(/ +/g, ' ');\n this.modalService.warn(\"You can't use comma character in value!\");\n }\n }\n\n addNewItemRow() {\n this.items.push({\n _clientRandomId: uuid4(),\n displayStyle: DisplayStyle.Default,\n isInvalid: false,\n title: \"\",\n value: \"\",\n hint: null,\n selectedDisplayStyle: DisplayStyle.Default,\n } as QuestionListItem)\n this._updateOutputItems();\n }\n\n removeItemRow(itemToRemove: QuestionListItem) {\n this.modalService.confirm(`Are you sure?`)\n .subscribe(confirmed => {\n if (confirmed) {\n this.items = [\n ...this.items.filter((listItem) => listItem._clientRandomId != itemToRemove._clientRandomId)\n ];\n this._updateOutputItems();\n }\n });\n }\n\n invalidRows: Record = {}\n\n get duplicateOrEmptyTitle() {\n this.invalidRows = {};\n let isInvalidResult = false;\n if (this.items.find((item: QuestionListItem) => {\n let isInvalid = item.title.trim() === \"\";\n if (isInvalid) this.invalidRows[item._clientRandomId] = TooltipTypeEnum.Empty;\n return isInvalid\n })) {\n if(isInvalidResult === false)\n isInvalidResult = true;\n }\n\n let reservedItemList = [...this.items].reverse();\n for (const item of reservedItemList) {\n if (reservedItemList.find(innerItem => {\n let isInvalid = innerItem.title === item.title && item._clientRandomId !== innerItem._clientRandomId;\n if (isInvalid) this.invalidRows[item._clientRandomId] = TooltipTypeEnum.Duplicate;\n return isInvalid;\n })) {\n if(isInvalidResult === false)\n isInvalidResult = true;\n }\n }\n return isInvalidResult;\n }\n\n updateTitle(item: QuestionListItem, input) {\n item.title = input.value;\n item.value = this.purifyText(input.value)\n this.updateTextareaSize(input);\n this._updateOutputItems();\n }\n\n purifyText(text: string) {\n return text.replace(/,/g, ' ').replace(/\\s+/g, ' ');\n }\n\n updateHint(item: QuestionListItem, input) {\n item.hint = input.value;\n this.updateTextareaSize(input);\n this._updateOutputItems();\n }\n\n updatePreventSubmission() {\n this._updateOutputItems();\n }\n\n disabledAddNewRow() {\n return this.duplicateOrEmptyTitle || this.items[this.items.length - 1]?.title?.length === 0;\n }\n\n getDefaultStyleControlColor() {\n if (this.layoutService.isInDarkMode)\n return '#777777';\n else\n return '#c5c5c5';\n }\n\n isInvalidRow(_clientRandomId: string): string | boolean {\n let invalidRow = this.invalidRows[_clientRandomId];\n if (invalidRow)\n return invalidRow;\n return false;\n }\n\n getTooltipText(_clientRandomId: string) {\n switch (this.invalidRows[_clientRandomId]) {\n case TooltipTypeEnum.Empty:\n return \"The title can not be empty\";\n case TooltipTypeEnum.Duplicate:\n return \"Duplicated titles are not permitted\";\n }\n }\n\n updateTextareaSize(input: any) {\n input.style.height = 0;\n input.style.height = ((input.scrollHeight) + 3) + \"px\"; // 3px offset\n }\n}\n","
\n \n
\n \n
\n Please select a Render type\n
\n
\n
\n
\n \n
\n \n
\n
\n\n","import {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';\nimport { MultiSelectRenderMode } from '../../../models/questionParameters/multi-select-render-type';\nimport { ControlContainer, NgForm } from '@angular/forms';\nimport { QuestionListItem, QuestionListItemOutputModel } from 'src/app/models/questionParameters/question-list-tem';\nimport { isNumber } from \"../../../helpers/general-functions\";\n\nexport const ItemsListKey = 'itemList';\n@Component({\n selector: 'obc-question-multi-select',\n templateUrl: './question-multi-select.component.html',\n styleUrls: ['./question-multi-select.component.scss'],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class QuestionMultiSelectComponent implements OnInit {\n multiSelectRenderMode = MultiSelectRenderMode;\n drpIsValid = false;\n _questionParam: any;\n @Input() set questionParamInput(_questionParamInput: any) {\n if (!_questionParamInput) { return; }\n if (_questionParamInput) {\n this._questionParam = _questionParamInput;\n this._questionParam['renderMode'] ??= MultiSelectRenderMode.Button;\n this._questionParam['minimumSelectCount'] ??= 0;\n this.checkIfDrpIsValid();\n if (this._questionParam) {\n delete this._questionParam['regex'];\n this.fillItemsArrsyByQuestionParametersAsString();\n }\n }\n }\n @Output('onItemsUpdated') onItemsUpdatedOutput = new EventEmitter();\n\n\n constructor() { }\n\n _inputItems: QuestionListItem[] = [];\n\n ngOnInit(): void {\n\n }\n\n onItemsUpdated(itemsModel: QuestionListItemOutputModel) {\n this.onItemsUpdatedOutput.emit(itemsModel.isValidList);\n this._inputItems = itemsModel.items;\n this._questionParam[ItemsListKey] = itemsModel.items;\n }\n\n fillItemsArrsyByQuestionParametersAsString() {\n if (this._questionParam[ItemsListKey]) {\n let items = this._questionParam[ItemsListKey];\n this._inputItems.push(...items ?? []);\n }\n }\n checkIfDrpIsValid() {\n this.drpIsValid = this.multiSelectRenderMode[this._questionParam['renderMode']] != undefined ? true : false;\n if (!this.drpIsValid)\n delete this._questionParam['renderMode']\n }\n\n validateMinimumSelectCount() {\n let minCount = this._questionParam['minimumSelectCount'];\n if(!minCount || !isNumber(minCount)) {\n this._questionParam['minimumSelectCount'] = 0;\n }\n }\n\n selectValue(input: HTMLInputElement) {\n input.select();\n }\n}\n\n\n","
\n \n
\n \n \n \n \n
\n
\n
\n \n
\n \n
\n Please select a Render type\n
\n
\n
\n\n","import {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';\nimport { SingleSelectRenderMode } from '../../../models/questionParameters/single-select-render-type';\nimport { ControlContainer, NgForm } from '@angular/forms';\nimport {QuestionListItem, QuestionListItemOutputModel} from 'src/app/models/questionParameters/question-list-tem';\nimport { ItemsListKey } from '../question-multi-select/question-multi-select.component';\n@Component({\n selector: 'obc-question-single-select',\n templateUrl: './question-single-select.component.html',\n styleUrls: ['./question-single-select.component.scss'],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class QuestionSingleSelectComponent implements OnInit {\n singleSelectRenderMode = SingleSelectRenderMode;\n _inputItems: QuestionListItem[] = [];\n drpIsValid = false;\n _questionParam: any;\n @Input() set questionParamInput(_questionParamInput: any) {\n if (!_questionParamInput) { return; }\n if (_questionParamInput) {\n this._questionParam = _questionParamInput;\n this._questionParam['renderMode'] ??= SingleSelectRenderMode.DropDown;\n this.checkIfDrpIsValid();\n if (this._questionParam) {//edit mode\n delete this._questionParam['regex'];\n this.fillItemsArrsyByQuestionParametersAsString();\n }\n }\n }\n @Output('onItemsUpdated') onItemsUpdatedOutput = new EventEmitter();\n\n constructor() { }\n\n ngOnInit(): void {\n\n }\n onItemsUpdated(itemsModel: QuestionListItemOutputModel) {\n this.onItemsUpdatedOutput.emit(itemsModel.isValidList);\n this._inputItems = itemsModel.items;\n this._questionParam[ItemsListKey] = itemsModel.items;\n }\n\n fillItemsArrsyByQuestionParametersAsString() {\n if (this._questionParam[ItemsListKey]) {\n let items = this._questionParam[ItemsListKey];\n this._inputItems.push(...items ?? []);\n }\n }\n\n checkIfDrpIsValid() {\n this.drpIsValid = this.singleSelectRenderMode[this._questionParam['renderMode']] != undefined ? true : false;\n if (!this.drpIsValid)\n delete this._questionParam['renderMode']\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'obc-question-boolean',\n templateUrl: './question-boolean.component.html',\n styleUrls: ['./question-boolean.component.scss']\n})\nexport class QuestionBooleanComponent implements OnInit {\n\n questionParam: any;\n @Input() set questionParamInput(_questionParamInput: any) {\n if (!_questionParamInput) { return; }\n else {\n this.questionParam = _questionParamInput;\n }\n }\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n \n
\n \n \n \n \n
\n
","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { catchError } from 'rxjs/operators';\nimport { UserDocumentType } from '../models/user-document-type';\nimport { OrderedEntity } from '../models/ordered-entity';\nimport { DocumentTypeChildrenQueryModel } from \"../models/document-type-children.query.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserDocumentTypeService {\n apiUrl: string = \"/api/UserDocumentType\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n getAll(sessionId = ''): Observable {\n let key = (sessionId == null || sessionId == 'null') ? '' : sessionId;\n return this.http.get(`${this.apiUrl}/get-all/${key}`)\n .pipe(catchError(this._errorService.handleError));\n }\n companyGetAll(companyId: number): Observable {\n return this.http.get(`${this.apiUrl}/company-get-all/${companyId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n getSelectable(sessionId = ''): Observable {\n let key = (sessionId == null || sessionId == 'null') ? '' : sessionId;\n return this.http.get(`${this.apiUrl}/get-selectable/${key}`)\n .pipe(catchError(this._errorService.handleError));\n }\n GetAllCompaniesUserDocumentTypes(): Observable {\n return this.http.get(`${this.apiUrl}/get-all-companies`)\n .pipe(catchError(this._errorService.handleError));\n }\n getUserDocumentTypeChildren(model: DocumentTypeChildrenQueryModel): Observable {\n return this.http.post(`${this.apiUrl}/get-document-type-children`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n edit(model: UserDocumentType): Observable {\n return this.http.post(`${this.apiUrl}/edit`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n add(model: UserDocumentType): Observable {\n return this.http.post(`${this.apiUrl}/add`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n delete(documentTypeId: number): Observable {\n return this.http.delete(`${this.apiUrl}/${documentTypeId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n reorder(orderedList: OrderedEntity[]): Observable {\n return this.http.post(`${this.apiUrl}/reorder`, orderedList)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getDocumentTypeChildren(documentType: UserDocumentType, allUserDocuments: UserDocumentType[]) {\n if(!documentType) return [];\n let children: UserDocumentType[] = [];\n allUserDocuments?.filter((item) => item.parentId == documentType.id)?.map((item) => {\n children.push(item);\n children = [\n ...children,\n ...this.getDocumentTypeChildren(item, allUserDocuments),\n ];\n })\n return children;\n }\n\n\n public addDocumentTypeReplay: ReplaySubject = new ReplaySubject();\n public updateDocumentTypeReplay: ReplaySubject = new ReplaySubject();\n public deleteDocumentTypeReplay: ReplaySubject = new ReplaySubject();\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from \"@angular/common/http\";\nimport { ErrorService } from \"./error.service\";\nimport { AddCompanyDocumentTypeModel } from \"../models/company-document-type-model\";\nimport { Observable } from \"rxjs\";\nimport { ServerResultData } from \"../models/server-result-data\";\nimport { UserDocumentType } from \"../models/user-document-type\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyDocumentTypeService {\n\n constructor(private http: HttpClient, private errorService: ErrorService) { }\n\n add(model: AddCompanyDocumentTypeModel): Observable> {\n return this.http.post(\"/api/CompanyDocumentType/add\",model);\n }\n\n list(): Observable {\n return this.http.get(\"/api/CompanyDocumentType/list\");\n }\n\n onlySelectableList(): Observable {\n return this.http.get(\"/api/CompanyDocumentType/only-selectable-list\");\n }\n\n remove(id: number): Observable> {\n return this.http.delete(`/api/CompanyDocumentType/remove/${id}`);\n }\n\n}\n","
\n \n {{ item?.title ?? nullValueCaption }}\n {{ item?.title }}\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BehaviorSubject } from \"rxjs\";\nimport { UserDocumentType } from \"../../models/user-document-type\";\nimport { FormControl, FormGroup } from \"@angular/forms\";\nimport { UserDocumentTypeService } from \"../../services/user-document-type.service\";\nimport { CompanyDocumentTypeService } from 'src/app/services/company-document-type.service';\n\n@Component({\n selector: 'obc-document-type-nested-selector',\n templateUrl: './document-type-nested-selector.component.html',\n styleUrls: [ './document-type-nested-selector.component.scss' ]\n})\nexport class DocumentTypeNestedSelectorComponent implements OnInit {\n constructor(private userDocumentTypeService: UserDocumentTypeService,\n private companyDocumentTypeService: CompanyDocumentTypeService) {\n }\n\n formControl = new FormControl(null);\n term$ = new BehaviorSubject(null)\n loading: boolean = false;\n allRequiredUserDocuments: UserDocumentType[];\n mainRequestResult: UserDocumentType[];\n\n @Input() getAllCompaniesDocumentTypes: boolean = false;\n @Input() onlySelectables: boolean = false;\n @Input() isMultiple: boolean = false;\n @Input() controlName: string;\n @Input() includeNullValue: boolean;\n @Input() nullValueCaption: string = 'No Parent';\n allCompaniesDocumentTypes: UserDocumentType[];\n\n _ignoreUserDocumentIds: number[];\n @Input() set ignoreUserDocumentIds(value: number[]) {\n this._ignoreUserDocumentIds = value;\n this.filterDocuments();\n }\n\n @Input() firstLoadedSelectedDocumentTypeIds: (number[] | number);\n\n @Input() set selectedDocumentTypes(value: UserDocumentType[]) {\n if(value) {\n let valueToSet;\n if(!this.isMultiple) {\n valueToSet = value[0]?.id;\n } else {\n valueToSet = value?.map((item) => item?.id);\n }\n this.formControl?.setValue(valueToSet);\n }\n }\n\n @Output() result: EventEmitter = new EventEmitter();\n\n public form: FormGroup;\n\n ngOnInit(): void {\n this.userDocumentTypeService.GetAllCompaniesUserDocumentTypes()?.subscribe((res) => {\n this.allCompaniesDocumentTypes = res;\n this.mainRequestResult = [ ...res ];\n if(this.getAllCompaniesDocumentTypes) {\n this.process();\n } else {\n this.fetchCompanyDocumentTypes();\n }\n })\n }\n\n fetchCompanyDocumentTypes() {\n (this.onlySelectables ?\n this.companyDocumentTypeService.onlySelectableList() :\n this.userDocumentTypeService.getAll())\n .subscribe({\n next: (res) => {\n this.mainRequestResult = res;\n this.process();\n }\n });\n }\n\n filterDocuments() {\n this.allRequiredUserDocuments = this.mainRequestResult?.filter((item) => !(this._ignoreUserDocumentIds ?? [])?.includes(item?.id)) ?? [];\n if(this.includeNullValue && !this.isMultiple)\n this.allRequiredUserDocuments = [\n null,\n ...this.allRequiredUserDocuments\n ];\n }\n\n completelyProcess: boolean = false;\n process() {\n\n this.completelyProcess = false;\n this.filterDocuments();\n\n let value: any = this.firstLoadedSelectedDocumentTypeIds;\n if(Array.isArray(this.firstLoadedSelectedDocumentTypeIds)) {\n value = this.firstLoadedSelectedDocumentTypeIds?.filter((id) => !(this._ignoreUserDocumentIds ?? [])?.includes(id)) ?? [];\n if(!this.isMultiple) {\n if(value?.length > 0) {\n value = value[0];\n } else {\n value = this.allRequiredUserDocuments[0]?.id;\n }\n }\n } else {\n if(!this.isMultiple) {\n if(value == undefined || this._ignoreUserDocumentIds?.includes(value)) {\n value = this.allRequiredUserDocuments[0]?.id;\n }\n }\n }\n\n this.attachGlobalScopeSelectedItems(value);\n\n this.formControl.setValue(value ?? {\"$ngOptionValue\": null, \"$ngOptionLabel\": this.nullValueCaption, \"disabled\": false});\n if(this.isMultiple) {\n this.result.emit(this.allCompaniesDocumentTypes?.filter((item) => value?.includes(item?.id)));\n } else {\n this.result.emit(this.allCompaniesDocumentTypes?.find((item) => value == item?.id));\n }\n\n this.completelyProcess = true;\n }\n\n globalScopeSelectedItems: UserDocumentType[] = [];\n\n attachGlobalScopeSelectedItems(value: number | number[]) {\n let needToAttachIds = [];\n\n // adding those document types which are not in company customized document types anymore but they are still\n // exist as selected document types for this question\n let globalScopeSelectedDocumentTypesIds = value;\n if(!Array.isArray(globalScopeSelectedDocumentTypesIds)) {\n globalScopeSelectedDocumentTypesIds = [ globalScopeSelectedDocumentTypesIds ];\n }\n\n let companyCustomizedDocumentsIds = this.allRequiredUserDocuments?.map((item) => item?.id);\n globalScopeSelectedDocumentTypesIds.map((oldId) => {\n if(!companyCustomizedDocumentsIds?.includes(oldId)) {\n needToAttachIds.push(oldId);\n }\n })\n\n if(needToAttachIds.length > 0) {\n needToAttachIds?.map((id) => {\n let matchedObj = this.allCompaniesDocumentTypes?.find((obj) => obj.id == id);\n if(matchedObj) {\n this.globalScopeSelectedItems.push(matchedObj);\n }\n })\n }\n }\n\n findUserDocumentChildren(latestSelectedItem: number) {\n this.userDocumentTypeService.getUserDocumentTypeChildren({\n documentTypeId: latestSelectedItem,\n onlySelectables: this.onlySelectables,\n }).subscribe({\n next: (res) => {\n let uniqueIds = this.formControl.value;\n if(!Array.isArray(uniqueIds))\n uniqueIds = [ uniqueIds ];\n\n res?.map((item) => {\n let itemExistsInCompanySelectableItems = this.allRequiredUserDocuments?.find((companyItem) =>\n item?.id == companyItem.id\n );\n if(itemExistsInCompanySelectableItems)\n uniqueIds.push(item?.id)\n });\n uniqueIds = [ ...new Set(uniqueIds) ];\n this.result.emit(\n this.allCompaniesDocumentTypes?.filter((item) => {\n return uniqueIds?.includes(item?.id)\n })\n )\n }\n })\n }\n\n onAdd(selectedItemId: number) {\n // for some unknown reasons. on change send a list to this method which should not\n if(Array.isArray(selectedItemId)) return;\n\n if(selectedItemId && this.isMultiple) {\n this.formControl.setValue(this.formControl.value.filter((item) => item != selectedItemId));\n this.findUserDocumentChildren(selectedItemId);\n } else {\n let selectedItemObj = this.getDocumentTypeFromId(selectedItemId);\n this.result.emit(selectedItemObj)\n }\n }\n\n onRemove(item) {\n let selectedItemObj = this.getDocumentTypeFromId(item.value);\n let excludeItems = this.formControl.value?.filter((item) => item?.id != selectedItemObj.id);\n this.formControl.setValue(excludeItems);\n\n this.result.emit(\n this.allCompaniesDocumentTypes?.filter((item) => {\n return this.formControl.value?.includes(item?.id)\n })\n );\n }\n\n getDocumentTypeFromId(id) {\n return this.allCompaniesDocumentTypes?.find((item) => item?.id == id);\n }\n}\n","
\n \n
\n \n \n \n \n
\n
\n
\n \n
\n
\n \n \n
\n\n \n \n \n\n
\n
\n
\n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { QuestionAnswerFileFormat } from 'src/app/models/questionParameters/question-answer-file-format';\nimport { ItemTitleValue } from 'src/app/models/helper-models';\nimport { UserDocumentType } from \"../../../models/user-document-type\";\nimport { finalize } from \"rxjs/operators\";\nimport { UserDocumentTypeService } from \"../../../services/user-document-type.service\";\nimport { FormControl, Validators } from '@angular/forms';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\n\n@Component({\n selector: 'obc-question-file',\n templateUrl: './question-file.component.html',\n styleUrls: ['./question-file.component.scss']\n})\nexport class QuestionFileComponent implements OnInit {\n QuestionAnswerFileFormat = QuestionAnswerFileFormat;\n _questionParam: any;\n _required = true;\n loading: boolean = false;\n genericFileDocumentTypeSelector: boolean = true;\n\n constructor() { }\n\n _documentTypeIdList = [];\n @Input() set documentTypeIdList(value: number[]) {\n if (value) {\n this._documentTypeIdList = value;\n }\n }\n get documentTypeIdList() {\n return this._documentTypeIdList;\n }\n\n\n @Input() set questionParamInput(_questionParamInput: any) {\n this._questionParam = _questionParamInput;\n }\n\n @Output('selectedDocumentTypes') documentTypesListEmitter: EventEmitter = new EventEmitter();\n @Output() isGenericDocumentType: EventEmitter = new EventEmitter();\n\n get fileTypes(): ItemTitleValue[] {\n return [\n new ItemTitleValue('Image', QuestionAnswerFileFormat.Image.toString()),\n // new ItemTitleValue('PDF', QuestionAnswerFileFormat.PDF.toString()),\n // new ItemTitleValue('Excell', QuestionAnswerFileFormat.Excell.toString()),\n ];\n }\n\n @ViewChild('documentTypeSelector') documentTypeSelector;\n\n ngOnInit(): void {\n if (this._documentTypeIdList?.length > 0) {\n this.genericFileDocumentTypeSelector = false;\n this.isGenericDocumentType.emit(false);\n } else {\n this.isGenericDocumentType.emit(true);\n }\n if (this._questionParam['fileType'] == undefined) {\n this._questionParam['fileType'] = QuestionAnswerFileFormat.AnyFile;\n }\n if (!this.documentTypeIdList) {\n this.documentTypeIdList = [];\n }\n }\n\n selectedDocumentTypes: UserDocumentType[] = [];\n onSelectedDocumentTypes(documentTypes: UserDocumentType[]) {\n if (!this.genericFileDocumentTypeSelector) {\n // if(documentTypes?.length > 0) {\n this.selectedDocumentTypes = documentTypes;\n this.documentTypesListEmitter.emit(\n documentTypes\n );\n // }\n }\n }\n\n onSelectGenericFileDocumentTypeSelector() {\n this.isGenericDocumentType.emit(this.genericFileDocumentTypeSelector);\n }\n\n}\n","
\n
\n Type\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n\n
\n \n
\n
\n \n
\n
\n \n \n \n
\n\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport {\n DateComparisonMode,\n DateQuestionLimit,\n DateQuestionLimitValueMode\n} from 'src/app/models/questionParameters/date-question-parameter';\n\n@Component({\n selector: 'obc-date-question-limit',\n templateUrl: './date-question-limit.component.html',\n styleUrls: ['./date-question-limit.component.scss']\n})\nexport class DateQuestionLimitComponent implements OnInit {\n key: string;\n @Input() limit: DateQuestionLimit;\n @Output() change: EventEmitter = new EventEmitter();\n dateFormControl: FormControl;\n\n DateQuestionLimitValueMode = DateQuestionLimitValueMode;\n DateComparisonMode = DateComparisonMode;\n DatetimePickerMode = DatetimePickerMode;\n\n\n constructor() { }\n\n ngOnInit(): void {\n this.dateFormControl = new FormControl(this.limit?.compareValue);\n this.dateFormControl.valueChanges.subscribe((res) => {\n this.limit.compareValue = res;\n this.change.emit();\n })\n this.key = 'limit_' + Math.random();\n }\n\n}\n","
\n \n
\n \n \n \n \n
\n
\n
\n \n
\n \n \n
\n
\n
\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n
\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n DateComparisonMode,\n DateQuestionLimit,\n DateQuestionLimitValueMode,\n DateQuestionParameter\n} from 'src/app/models/questionParameters/date-question-parameter';\nimport { QuestionDateResultViewModel } from \"../../../models/question-date-result-model\";\n\n@Component({\n selector: 'obc-question-date',\n templateUrl: './question-date.component.html',\n styleUrls: ['./question-date.component.scss']\n})\nexport class QuestionDateComponent implements OnInit {\n _questionParam: DateQuestionParameter;\n hasMinimumLimit: boolean = false;\n hasMaximumLimit: boolean = false;\n _minLimit = null;\n defaultMin = {\n dateComparisonMode: DateComparisonMode.Before, dayCount: 5, valueMode: DateQuestionLimitValueMode.Relative,\n compareValue: undefined\n };\n _maxLimit = null;\n defaultMax = {\n dateComparisonMode: DateComparisonMode.After, dayCount: 5, valueMode: DateQuestionLimitValueMode.Relative,\n compareValue: undefined\n };\n\n\n get minLimit(): DateQuestionLimit {\n return this._minLimit;\n }\n\n set minLimit(value: DateQuestionLimit) {\n this._minLimit = value;\n this._questionParam.limitForMinimumValue = value;\n }\n\n get maxLimit(): DateQuestionLimit {\n return this._maxLimit;\n }\n\n set maxLimit(value: DateQuestionLimit) {\n this._maxLimit = value;\n this._questionParam.limitForMaximumValue = value;\n }\n\n @Output() onChanged: EventEmitter =\n new EventEmitter();\n\n constructor() {\n }\n\n @Input() set questionParamInput(_questionParamInput: any) {\n this._questionParam = _questionParamInput;\n this.minLimit = this._questionParam?.limitForMinimumValue;// ?? this.minLimit;\n this.maxLimit = this._questionParam?.limitForMaximumValue;// ?? this.maxLimit;\n this.hasMinimumLimit = this.minLimit != null;\n this.hasMaximumLimit = this.maxLimit != null;\n }\n\n emitChanges() {\n this.onChanged.emit({\n hasMinLimit: this.minLimit != null,\n hasMaxLimit: this.maxLimit != null,\n params: this._questionParam\n });\n }\n\n ngOnInit(): void {\n }\n\n onToggleLimit(isMinToggle: boolean) {\n if (isMinToggle) {\n if (this.hasMinimumLimit)\n this.minLimit = this.defaultMin;\n else\n this.minLimit = null;\n } else {\n if (this.hasMaximumLimit)\n this.maxLimit = this.defaultMax;\n else\n this.maxLimit = null;\n }\n this.emitChanges();\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { QuestionViewModel } from '../../../models/question-viewmodel';\nimport { ControlContainer, NgForm } from '@angular/forms';\nimport { ItemTitleValue } from 'src/app/models/helper-models';\nimport { regexLists } from 'src/app/helpers/general-lists';\n@Component({\n selector: 'obc-question-signature-pad',\n templateUrl: './question-signature-pad.component.html',\n styleUrls: ['./question-signature-pad.component.scss'],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class QuestionSignaturePadComponent implements OnInit {\n questionParam: any;\n\n @Input() set questionParamInput(_questionParamInput: any) {\n this.questionParam = _questionParamInput;\n }\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n\n}\n","
\n \n
\n \n \n \n \n
\n
\n\n","
\n \n
\n \n \n \n \n
\n
\n
\n \n
\n \n
\n Please select a question profile info sub type\n
\n
\n
\n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { QuestionProfileSubTypeViewModel } from 'src/app/models/question-profile-sub-type-viewmodel';\n\n@Component({\n selector: 'obc-question-profile',\n templateUrl: './question-profile.component.html',\n styleUrls: ['./question-profile.component.scss']\n})\nexport class QuestionProfileComponent implements OnInit {\n\n questionProfileSubType: QuestionProfileSubTypeViewModel;\n\n _questionProfileSubTypes: QuestionProfileSubTypeViewModel[] = []\n @Input() set questionProfileSubTypes(subTypes) {\n this._questionProfileSubTypes = subTypes;\n this.setInitialQuestionProfileSubType();\n };\n _questionParam: any;\n @Input() set questionParamInput(_questionParamInput: any) {\n if (!_questionParamInput) { return; }\n this._questionParam = _questionParamInput;\n this.setInitialQuestionProfileSubType();\n }\n\n setInitialQuestionProfileSubType() {\n if (this._questionParam && this._questionProfileSubTypes?.length > 0) {\n if(!this._questionParam['questionProfileSubType']) {\n this.questionProfileSubType = this._questionProfileSubTypes[0];\n } else {\n this.questionProfileSubType = this._questionProfileSubTypes?.find((item) => item.key == this._questionParam['questionProfileSubType']);\n this._questionParam['questionProfileSubType'] = this.questionProfileSubType.key;\n }\n }\n }\n\n\n constructor() { }\n\n ngOnInit(): void {\n\n }\n valueChanged() {\n this._questionParam['questionProfileSubType'] = this.questionProfileSubType.key;\n }\n}\n\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'askQuestionPeriodMode'\n})\nexport class AskQuestionPeriodModePipe implements PipeTransform {\n\n transform(value: unknown): any {\n if (value === 0) { return \"Always\"; }\n if (value === 1) { return \"Only One Time\"; }\n if (value === 2) { return \"One Time Per Site\"; }\n if (value === 3) { return \"One Time Per Day\"; }\n if (value === 4) { return \"One Time Per Day Per Site\"; }\n return \"N/A\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AskMode } from '../enums/ask-mode';\n\n@Pipe({\n name: 'askMode'\n})\nexport class AskModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == AskMode.AnyTime) return \"Any Time\";\n if (value == AskMode.CheckIn) return \"Check In\";\n if (value == AskMode.PreCheckIn) return \"Pre Check In\";\n return value?.toString() ?? \"?\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'questionDefaultMode'\n})\nexport class QuestionDefaultModePipe implements PipeTransform {\n\n transform(value: unknown): any {\n if (value === 0) { return \"Disabled\"; }\n if (value === 1) { return \"Check In\"; }\n if (value === 2) { return \"Check Out\"; }\n if (value === 3) { return \"Check In / Check Out\"; }\n return \"N/A\";\n }\n\n}\n","
\n
\n
\n
\n \n
\n\n

Question

\n\n
\n
\n
\n {{errorMessage}}\n
\n
\n \n
\n \n
\n Please Enter question\n
\n
\n
\n
\n \n
\n \n \n
\n
\n
\n \n
\n \n
\n Please select a question type\n
\n
\n
\n
\n \n
\n \n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n \n \n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n\n
\n
\n \n \n
\n
\n
\n","import { UserService } from 'src/app/services/user.service';\nimport { Component , EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { QuestionViewModel } from '../../../models/question-viewmodel';\nimport { QuestionType } from '../../../enums/question-type';\nimport { QuestionService } from '../../../services/question.service';\nimport { AsyncResult } from '../../../models/helper-models';\nimport { finalize } from 'rxjs/operators';\nimport { AskQuestionPeriodMode } from 'src/app/enums/ask-period-mode';\nimport { QuestionDefaultMode } from 'src/app/enums/question-default-mode';\nimport { AskMode } from 'src/app/enums/ask-mode';\nimport { QuestionAssetFieldComponent } from '../question-asset-field/question-asset-field.component';\nimport { DateQuestionLimitValueMode } from \"../../../models/questionParameters/date-question-parameter\";\nimport { QuestionDateResultViewModel } from \"../../../models/question-date-result-model\";\nimport { UserDocumentType } from \"../../../models/user-document-type\";\nimport { QuestionProfileSubTypeViewModel } from 'src/app/models/question-profile-sub-type-viewmodel';\n\n@Component({\n selector: 'obc-question-add',\n templateUrl: './question-add.component.html',\n styleUrls: ['./question-add.component.scss']\n})\nexport class QuestionAddComponent implements OnInit {\n\n isGenericDocumentType: boolean = false;\n useRichTextTitle: boolean = false;\n displayAskQuestionField: boolean = true;\n displayQuestionIsSensitive: boolean = true;\n _documentTypeModeStateIsValid: boolean = true;\n QuestionType = QuestionType;\n\n selectedDocumentTypeIdList: number[] = [];\n pageTitle = 'please add question and press submit.';\n @Output() public result = new EventEmitter();\n _question: QuestionViewModel = this.getDefaultQuestion();\n @Input() withResult = false;\n @Input() set question(_question: QuestionViewModel) {\n if (_question) {\n this.pageTitle = 'Please edit question and press submit.'\n }\n\n let questionViewModel: QuestionViewModel;\n if (_question)\n questionViewModel = new QuestionViewModel(_question);\n else\n questionViewModel = this.getDefaultQuestion();\n\n\n this._question = JSON.parse(JSON.stringify(questionViewModel));\n this.useRichTextTitle = (this._question.questionRichText?.length ?? 0) > 0;\n\n this._questionSingle = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this._questionMulti = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this._questionText = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this._questionBoolean = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this._questionFile = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this._questionRichText = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this._questionDate = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this._questionSignaturePad = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this._questionAssetField = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this._questionProfileInfo = JSON.parse(JSON.stringify(this._question.questionParametersAsString));\n this.selectedDocumentTypeIdList = this._question?.documentTypeIdList;\n }\n _questionSingle: any = {};\n _questionMulti: any = {};\n _questionText: any = {};\n _questionBoolean: any = {};\n _questionFile: any = {};\n _questionRichText: any = {};\n _questionDate: any = {};\n _questionSignaturePad: any = {};\n _questionAssetField: any = {};\n _questionProfileInfo: any = {};\n\n questionType = QuestionType;\n askPeriodMode = AskQuestionPeriodMode;\n questionDefaultMode = QuestionDefaultMode;\n askMode = AskMode;\n\n\n _formIsvalid = true;\n errorMessage = '';\n inProgress: boolean = false;\n\n onSingleMultiQuestionTypeItemsUpdate(isFormValid: boolean) {\n if (this._question.questionType == this.questionType.MultiSelect ||\n this._question.questionType == this.questionType.SingleSelect) {\n this._formIsvalid = isFormValid;\n }\n }\n onAssetFieldItemsUpdatee(isFormValid: boolean) {\n if (this._question.questionType == this.QuestionType.AssetField) {\n this._formIsvalid = isFormValid;\n this.errorMessage = '';\n }\n }\n formIsvalid() {\n this._formIsvalid = !this.inProgress;\n if (this._question.questionType == this.questionType.MultiSelect ||\n this._question.questionType == this.questionType.SingleSelect) {\n let keys = Object.keys(this._question.questionParametersAsString['itemList'] ?? {});\n if (this._question.questionParametersAsString['itemList'] == undefined ||\n keys == null || keys.length == 0) {\n this._formIsvalid = false;\n this.errorMessage = 'Please Enter question Items';\n }\n }\n\n if (this._question.questionType == this.questionType.MultiSelect) {\n if (this._question.questionParametersAsString['minimumSelectCount'] == undefined ||\n this._question.questionParametersAsString['minimumSelectCount'] == {}\n || isNaN(this._question.questionParametersAsString['minimumSelectCount'])\n || +this._question.questionParametersAsString['minimumSelectCount'] < 0\n || +this._question.questionParametersAsString['minimumSelectCount'] > Object.keys(this._questionMulti[\"itemList\"]).length) {\n this._formIsvalid = false;\n this.errorMessage = 'Required items count must be between 0 and question items count';\n }\n }\n\n if (this._question.questionType == QuestionType.AssetField) {\n if (!this._question.questionParametersAsString[QuestionAssetFieldComponent.globalToolDynamicFieldIdKeynewLocal]) {\n this._formIsvalid = false;\n this.errorMessage = 'Please select one of global asset fields.';\n }\n }\n\n if (this.useRichTextTitle == true && this._question.questionRichText?.length > this.userService.editorMaxLength.value) {\n this._formIsvalid = false;\n this.errorMessage = 'Text field length exceeded the maximum limit. Please reduce the length of your input and try again.';\n }\n }\n\n constructor(private questionService: QuestionService, private userService: UserService) { }\n\n questionProfileSubTypes: QuestionProfileSubTypeViewModel[] = [];\n ngOnInit(): void {\n if (this._question.questionType === QuestionType.RichText) {\n this.displayAskQuestionField = false;\n this.displayQuestionIsSensitive = false;\n }\n this.questionService.getQuestionProfileSubTypes().subscribe((res) => {\n if (res) {\n this.questionProfileSubTypes = res;\n }\n })\n }\n\n getDefaultQuestion(): QuestionViewModel {\n let questionViewModel = new QuestionViewModel();\n //Set default values\n questionViewModel.askPeriodMode = AskQuestionPeriodMode.always;\n questionViewModel.askMode = AskMode.AnyTime;\n questionViewModel.defaultMode = QuestionDefaultMode.Disabled;\n return questionViewModel;\n }\n\n addNewQuestion() {\n\n this.selectChangedParameterObj();\n this.formIsvalid();\n if (!this._formIsvalid) {\n return;\n }\n\n this.inProgress = true;\n this._question.questionParameters = JSON.stringify(this._question.questionParametersAsString);\n if (this.useRichTextTitle == false)\n this._question.questionRichText = '';\n\n if (this._question.questionType != QuestionType.File || this.isGenericDocumentType) {\n this._question.documentTypeId = null;\n this._question.documentTypeIdList = [];\n } else {\n this._question.documentTypeIdList = this.selectedDocumentTypeIdList;\n }\n\n if (this._question.questionType == this.questionType.MultiSelect ||\n this._question.questionType == this.questionType.SingleSelect) {\n let trimmedItems = [...this._question.questionParametersAsString['itemList']];\n trimmedItems.forEach(item => {\n item.title = item.title.trim();\n item.value = item.value.trim();\n delete item._clientRandomId;\n });\n this._question.questionParametersAsString['itemList'] = trimmedItems;\n }\n\n\n if (!this._question.id) {\n (this.withResult ? this.questionService.addWithResultNewQuestion(this._question) : this.questionService.addNewQuestion(this._question))\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(_ => {\n this.result.emit({ isFinished: true, isSucceeded: true, result: _ });\n }, _ => { this.errorMessage = 'We could not save the question.'; });\n }\n else if (this._question.id > 0) {\n this.questionService.updateQuestion(this._question)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(_ => {\n this.result.emit({ isFinished: true, isSucceeded: true });\n }, _ => { this.errorMessage = 'We could not update the question.'; });\n }\n }\n cancel() {\n this.result.emit({ isFinished: true, isSucceeded: false });\n }\n\n\n clearError() {\n this.errorMessage = '';\n }\n\n oldQuestionType: QuestionType;\n questionTypeChanged(selectedValue) {\n this.displayAskQuestionField = true;\n this.displayQuestionIsSensitive = true;\n if (parseInt(selectedValue) === this.questionType.RichText) {\n this.displayAskQuestionField = false;\n this.displayQuestionIsSensitive = false;\n }\n if (this._question.questionType === QuestionType.MultiSelect || this._question.questionType === QuestionType.SingleSelect) {\n if (this.oldQuestionType === QuestionType.MultiSelect) {\n this._questionSingle.itemList = this._questionMulti.itemList;\n } else if (this.oldQuestionType === QuestionType.SingleSelect) {\n this._questionMulti.itemList = this._questionSingle.itemList;\n }\n }\n this.oldQuestionType = selectedValue;\n this._documentTypeModeStateIsValid = parseInt(selectedValue) !== this.questionType.File;\n }\n\n selectChangedParameterObj() {\n switch (this._question.questionType) {\n case this.questionType.MultiSelect: {\n this._question.questionParametersAsString = this._questionMulti;\n break;\n }\n case this.questionType.SingleSelect: {\n this._question.questionParametersAsString = this._questionSingle;\n break;\n }\n case this.questionType.Text: {\n this._question.questionParametersAsString = this._questionText;\n break;\n }\n case this.questionType.Boolean: {\n this._question.questionParametersAsString = this._questionBoolean;\n break;\n }\n case this.questionType.File: {\n this._question.questionParametersAsString = this._questionFile;\n break;\n }\n case this.questionType.RichText: {\n this._question.questionParametersAsString = this._questionRichText;\n break;\n }\n case this.questionType.Date: {\n this._question.questionParametersAsString = this._questionDate;\n break;\n }\n case this.questionType.SignaturePad: {\n this._question.questionParametersAsString = this._questionSignaturePad;\n break;\n }\n case this.questionType.AssetField: {\n this._question.questionParametersAsString = this._questionAssetField;\n break;\n }\n case this.questionType.ProfileInfo: {\n this._question.questionParametersAsString = this._questionProfileInfo;\n break;\n }\n default: {\n break;\n }\n }\n }\n\n onSelectedDocumentTypes(documents: UserDocumentType[]) {\n this.selectedDocumentTypeIdList = documents?.filter((item) => item.id)?.map((item) => item.id);\n this._documentTypeModeStateIsValid = this.selectedDocumentTypeIdList?.length > 0;\n }\n\n onDocumentTypeModeChange(isGenericDocumentType: boolean) {\n this.isGenericDocumentType = isGenericDocumentType;\n this._documentTypeModeStateIsValid = this.isGenericDocumentType;\n // this._documentTypeModeStateIsValid = (!isGenericDocumentType && this.onSelectedDocumentTypes?.length > 0) || isGenericDocumentType;\n }\n\n _datesAreValid = true;\n onDateChange(data: QuestionDateResultViewModel) {\n let limitDateMaxValue = data?.params?.limitForMaximumValue?.compareValue;\n let limitDateMinValue = data?.params?.limitForMinimumValue?.compareValue;\n if (data?.hasMinLimit && data?.params?.limitForMinimumValue?.valueMode == DateQuestionLimitValueMode.Absolute &&\n (!limitDateMinValue || limitDateMinValue == 'Invalid Date')) {\n this._datesAreValid = false;\n return;\n }\n if (data?.hasMaxLimit && data?.params?.limitForMaximumValue?.valueMode == DateQuestionLimitValueMode.Absolute &&\n (!limitDateMaxValue || limitDateMaxValue == 'Invalid Date')) {\n this._datesAreValid = false;\n return;\n }\n if (\n data?.params?.limitForMinimumValue?.valueMode == DateQuestionLimitValueMode.Absolute &&\n data?.params?.limitForMaximumValue?.valueMode == DateQuestionLimitValueMode.Absolute &&\n data?.hasMaxLimit &&\n data?.hasMinLimit &&\n limitDateMaxValue && limitDateMinValue) {\n this._datesAreValid = new Date(Date.parse(limitDateMaxValue)) >= new Date(Date.parse(limitDateMinValue));\n return;\n }\n this._datesAreValid = true;\n }\n\n}\n","export enum TriggerType {\n Flag = 0,\n Reject = 1,\n SubmitForm = 2,\n ApprovalState = 3\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CompanyTagViewModel } from '../models/company-tag';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyTagService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getCompanyTags = (): Observable =>\n this._http.get('/api/companytag/get-company-tags')\n .pipe(catchError(this._errorService.handleError));\n\n}\n","
\n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { ChipModel } from 'src/app/models/chip-model';\nimport { EventEmitter } from '@angular/core';\nimport { Subscription, Observable } from 'rxjs';\n\n@Component({\n selector: 'obc-chip-container',\n templateUrl: './chip-container.component.html',\n styleUrls: ['./chip-container.component.scss']\n})\nexport class ChipContainerComponent implements OnInit {\n @Input() label: string = \"Chip Container\";\n @Output() onChipsChanged = new EventEmitter();\n @Input() chips: ChipModel[] = [];\n @Input() chipLists: ChipModel[] = [];\n newChip: string = \"\";\n constructor() { }\n\n ngOnInit() {\n\n }\n\n onKeyPress($event: KeyboardEvent) {\n $event.stopPropagation();\n if ($event.keyCode == 13) { // press enter \n this.pushNewChip();\n }\n }\n\n onSelectChip($event) {\n this.pushNewChip($event.item);\n }\n\n onRemoveChip(chip: ChipModel) {\n var index = this.chips.indexOf(chip);\n this.chips.splice(index, 1);\n this.onChipsChanged.emit(this.chips);\n }\n\n pushNewChip(selected?: ChipModel) {\n var isNewChipChipAdd = false;\n if (!this.chips)\n this.chips = [];\n if (selected && !this.chips.filter(i => i.label == selected.label).length) {\n this.chips.push(selected);\n this.newChip = \"\";\n isNewChipChipAdd = true;\n } else if (this.newChip && !this.chips.filter(i => i.label.toLowerCase() == this.newChip.toLowerCase()).length) {\n this.chips.push({\n label: this.newChip,\n removable: true,\n tagged: null,\n });\n this.newChip = \"\";\n isNewChipChipAdd = true;\n }\n if (isNewChipChipAdd)\n this.onChipsChanged.emit(this.chips);\n }\n\n\n}\n","export enum TriggerAction {\n Email = 0,\n}\n","export enum CompanySiteSelectedType {\n AllCompanyAndSites = -1,\n Company = 0,\n Site = -2\n};\n","export enum SiteAttendanceApprovalStatus {\n NotRequiredApproval = 0,\n Pending = 1,\n Approved = 2,\n Rejected = 3,\n}\n","export enum FormType {\n Generic = 0,\n Permit = 1,\n SupplierDocumentReview = 2,\n SupplierForm = 3,\n AssetRegistration = 4,\n AssetOperator = 5,\n AssetOperation = 6,\n SiteBriefing = 7,\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { CompanyTriggerActionViewmodel } from '../models/company-trigger-action-viewmodel';\nimport { catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyTriggerActionService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n apiUrl = '/api/CompanyTriggerAction';\n\n getForSite(siteId: any): Observable {\n\n return this._http.get(`${this.apiUrl}/get-for-site/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getForCompany(): Observable {\n return this._http.get(`${this.apiUrl}/get-for-company`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getForAllLocation(): Observable {\n return this._http.get(`${this.apiUrl}/get-for-all-locations/`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n add = (model: CompanyTriggerActionViewmodel): Observable =>\n this._http.post(`${this.apiUrl}/add`, model)\n .pipe(catchError(this._errorService.handleError));\n edit = (model: CompanyTriggerActionViewmodel): Observable =>\n this._http.post(`${this.apiUrl}/edit`, model)\n .pipe(catchError(this._errorService.handleError));\n toggleStatus = (id: number): Observable =>\n this._http.get(`${this.apiUrl}/toggle-status/${id}`)\n .pipe(catchError(this._errorService.handleError));\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { catchError } from 'rxjs/operators';\nimport { FormModel } from '../models/form/form-model';\nimport { FormViewModel, FullFormViewModel } from '../models/form/form-view-model';\nimport { ServerResult, ServerResultData } from '../models/server-result-data';\nimport { ErrorService } from './error.service';\nimport { PagingViewModel } from \"../models/site-list-paging-view-model\";\nimport { FormReportViewModel, FormReportQueryModel } from '../models/form/form-report-models';\nimport { convertObjectToUrlParameters } from \"../helpers/extract-params-from-model\";\nimport { FilledFormInfoViewModel } from \"../models/filled-form-info-view-model\";\nimport { FormDataViewModel } from '../models/form/form-data-view-model';\nimport { FormDataModel } from '../models/form/form-data-model';\nimport { FormDataDetailViewModel, FormDataLogViewModel } from '../models/form/form-data-detail-view-model';\nimport { FormDataPdfQueryModel } from '../models/form/form-data-pdf-query-model';\nimport { GetExternalCompanyFormsQueryModel, GetFormsQueryModel } from '../models/form/get-forms-query-model';\nimport { CloneFormQueryModel } from '../models/induction-viewmodel';\nimport { FilledFormRequestModel } from \"../models/form/filled-form-request-model\";\nimport { Subject } from 'rxjs';\nimport { FormType } from '../enums/form-type';\nimport { UserService } from './user.service';\nimport { ProductPlanFeature } from '../enums/product-plan-feature.enum';\nimport { EnumToArrayPipe } from '../pipes/enum-to-array.pipe';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormService {\n\n apiUrl: string = \"/api/form\";\n constructor(private http: HttpClient, private _errorService: ErrorService, private userService: UserService, private enumToArrayPipe: EnumToArrayPipe) { }\n isFormDirty: Subject = new Subject();\n\n getActiveFormTypes(): FormType[] {\n var isSbActive = this.userService.hasCompanyFeature(ProductPlanFeature.SiteBriefing);\n return this.enumToArrayPipe.transform(FormType).filter(type => isSbActive || FormType[type] != FormType.SiteBriefing).map(type => FormType[type]);\n }\n\n getAllForms(): Observable> {\n return this.http.get>(`${this.apiUrl}/get-all-forms`)\n .pipe(catchError(this._errorService.handleError));\n }\n changeItemsOrder(id: number, questions: number[]): Observable {\n return this.http.post(`${this.apiUrl}/change-order/${id}`, questions)\n .pipe(catchError(this._errorService.handleError));\n }\n\n previewForm(form: FormModel): Observable> {\n return this.http.post(`${this.apiUrl}/get-form-preview`, form)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addForm(form: FormModel): Observable {\n return this.http.post(`${this.apiUrl}/add-form`, form)\n .pipe(catchError(this._errorService.handleError));\n }\n editForm(formId: number, form: FormModel): Observable {\n return this.http.post(`${this.apiUrl}/edit-form/${formId}`, form)\n .pipe(catchError(this._errorService.handleError));\n }\n removeForm(formId: number): Observable {\n return this.http.get(`${this.apiUrl}/remove-form/${formId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getForms(model: GetFormsQueryModel): Observable> {\n return this.http.post(`${this.apiUrl}/get-forms`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getExternalCompanyForms(model: GetExternalCompanyFormsQueryModel): Observable> {\n return this.http.post(`${this.apiUrl}/get-external-company-forms`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getFormGroups(groupName: string): Observable {\n return this.http.get(`${this.apiUrl}/form-groups/${groupName}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n formReport(query: FormReportQueryModel): Observable> {\n return this.http.post[]>(`${this.apiUrl}/form-report`, query)\n .pipe(catchError(this._errorService.handleError));\n }\n\n saveForm(formData: FormDataModel): Observable {\n return this.http.post(`${this.apiUrl}/save-form-response`, formData)\n .pipe(catchError(this._errorService.handleError));\n }\n\n exportFormReportAsCsv(model: FormReportQueryModel) {\n const params = convertObjectToUrlParameters(model);\n return window.open(this.apiUrl + '/export-form-report-csv/?' + params);\n }\n\n getFilledForm(formDataId: number): Observable {\n return this.http.get(`${this.apiUrl}/get-filled-form/${formDataId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getFillFormViewModel(formId: number, siteId: number, toolId: number = null): Observable> {\n return this.http.post>(`${this.apiUrl}/fill-form-view-model`, { formId: formId, siteId: siteId, toolId: toolId })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getFilledFormViewModel(filledFormRequestModel: FilledFormRequestModel): Observable> {\n return this.http.post>(`${this.apiUrl}/get-filled-form-view-model`, filledFormRequestModel)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getFormDataDetails(formDataId: number): Observable> {\n return this.http.get>(`${this.apiUrl}/get-form-data-details/${formDataId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n ExportFormDataAsPdf(model: FormDataPdfQueryModel) {\n const params = convertObjectToUrlParameters(model);\n return window.open(this.apiUrl + '/export-form-data-pdf/?' + params);\n }\n\n cloneForm(data: CloneFormQueryModel): Observable {\n return this.http.post(`${this.apiUrl}/clone-form`, data)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getFormHistory(formDataId: any) {\n return this.http.get(`${this.apiUrl}/${formDataId}/history`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n\n}\n","
\n
\n \n \n \n \n
\n
\n
\n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { CompanySiteSelectedType } from 'src/app/enums/company-site-selected-type';\nimport { CompanySiteSelectorResponseModel } from 'src/app/models/company-site-selector-response-model';\nimport { BaseSiteViewModel, SiteViewModel } from 'src/app/models/site-viewmodel';\n\n@Component({\n selector: 'obc-company-site-selector',\n templateUrl: './company-site-selector.component.html',\n styleUrls: ['./company-site-selector.component.scss'],\n})\nexport class CompanySiteSelectorComponent implements OnInit {\n showSiteList: boolean = true;\n selectedSite: BaseSiteViewModel;\n selectedLocationFormControl = new FormControl(this.companySiteSelectedType.AllCompanyAndSites);\n CompanySiteSelectedType = CompanySiteSelectedType;\n\n public get companySiteSelectedType(): typeof CompanySiteSelectedType {\n return CompanySiteSelectedType;\n }\n\n @Input() set selectedCompanyType(value: CompanySiteSelectedType) {\n if (value != this.selectedLocationFormControl.value) {\n setTimeout(() => {\n this.selectedLocationFormControl.setValue(value);\n }, 100)\n }\n };\n\n _currentSiteId: number;\n @Input() set currentSiteId(value: number) {\n this._currentSiteId = value;\n if (value > 0)\n this.selectedLocationFormControl.setValue(this.companySiteSelectedType.Site);\n }\n\n get currentSiteId(): number {\n return this._currentSiteId;\n }\n\n constructor() { }\n\n ngOnInit(): void {\n this.selectedLocationFormControl.valueChanges.subscribe(res => {\n this.onSelect(res, this.selectedSite?.id)\n });\n }\n\n @Output() onSelectChanged: EventEmitter = new EventEmitter();\n\n onSelect(selectedType: CompanySiteSelectedType, siteId?: number) {\n this.onSelectChanged.emit({ CompanySiteSelectedType: selectedType, siteId: siteId, siteName: this.selectedSite?.name } as CompanySiteSelectorResponseModel);\n }\n onSiteChange() {\n this.selectedLocationFormControl.setValue(this.companySiteSelectedType.Site);\n }\n}\n","
\n
Trigger Type:
\n \n
\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {TriggerType} from \"../../enums/trigger-type.enum\";\nimport {Form, FormControl} from \"@angular/forms\";\n\n@Component({\n selector: 'obc-trigger-selector',\n templateUrl: './trigger-selector.component.html',\n styleUrls: ['./trigger-selector.component.scss']\n})\nexport class TriggerSelectorComponent implements OnInit {\n\n @Output() selectedTrigger = new EventEmitter();\n @Input() inputValue: any = 'All';\n\n triggers = [\n \"All\",\n TriggerType.Flag,\n TriggerType.Reject,\n TriggerType.SubmitForm,\n TriggerType.ApprovalState\n ];\n\n triggersFC: FormControl = new FormControl();\n\n constructor() { }\n\n ngOnInit(): void {\n this.triggersFC.valueChanges.subscribe(trigger => {\n if(typeof trigger != typeof undefined) {\n\n let triggerType: TriggerType;\n if(trigger == TriggerType.Flag)\n triggerType = TriggerType.Flag;\n else if(trigger == TriggerType.Reject)\n triggerType = TriggerType.Reject;\n else if(trigger == TriggerType.SubmitForm)\n triggerType = TriggerType.SubmitForm;\n else if(trigger == TriggerType.ApprovalState)\n triggerType = TriggerType.ApprovalState;\n else\n triggerType = null;\n\n this.selectedTrigger.emit(triggerType);\n }\n });\n this.triggersFC.setValue(this.inputValue);\n }\n\n getTriggerTypeFriendlyName(type): string {\n switch (type) {\n case 'All':\n return 'All';\n case TriggerType.Flag:\n return 'Flag';\n case TriggerType.Reject:\n return 'Rejected';\n case TriggerType.SubmitForm:\n return 'Form';\n case TriggerType.ApprovalState:\n return 'Approval Changed';\n default:\n return TriggerType[type];\n }\n }\n\n ngOnDestroy() {\n if (this.selectedTrigger) {\n this.selectedTrigger.unsubscribe()\n }\n }\n\n}\n","import { ValidatorFn, AbstractControl } from '@angular/forms';\nimport { validateEmail } from './general-functions';\n\nexport function emailArrayValidator(control: AbstractControl): {\n [key: string]: boolean;\n} | null {\n var value = control.value as string[];\n if (value == null || value.length == 0)\n return null;\n var emails = emailArray(value);\n return emails != null ? null : { 'invalidemailList': true };\n}\n\nexport function emailArray(emails: string[]): string[] {\n for (let index = 0; index < emails.length; index++) {\n const element = emails[index];\n if (!validateEmail(element)) {\n return null;\n }\n }\n return emails;\n}\n\n\nexport function emailListValidator(control: AbstractControl): {\n [key: string]: boolean;\n} | null {\n var value = control.value as string;\n if (value == null || value.length == 0)\n return null;\n var emails = emailList(value);\n return emails != null ? null : { 'invalidemailList': true };\n}\n\nexport function emailList(emails: string): string[] {\n var splits = splitEmailList(emails);\n for (let index = 0; index < splits.length; index++) {\n const element = splits[index];\n if (!validateEmail(element)) {\n return null;\n }\n }\n return splits;\n}\n\nexport function splitEmailList(emails: string): string[] {\n return emails.split(' ').join('').replace('\\n', ',').split(',');\n}\n\n","import { ValidatorFn, FormGroup, ValidationErrors } from '@angular/forms';\n\nexport const emailTemplateValidator: ValidatorFn = (control: FormGroup): ValidationErrors | null => {\n const subject = control.get('subject');\n const recipients = control.get('recipients');\n const sendEmailToCompanySupervisor = control.get('sendEmailToCompanySupervisor');\n const sendEmailToSiteSupervisor = control.get('sendEmailToSiteSupervisor');\n\n if(!subject.valid) return { 'subjectIsNotValid': true }\n if(!recipients.valid) return { 'recipientsNotValid': true }\n\n return (sendEmailToCompanySupervisor && sendEmailToCompanySupervisor.value) ||\n (sendEmailToSiteSupervisor && sendEmailToSiteSupervisor.value) ||\n (recipients && recipients.valid && (recipients.value?.length ?? 0) > 0) ? null : { 'emailIsRequired': true };\n};\n","import { Component, OnInit, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, FormControl } from '@angular/forms';\n\n@Component({\n selector: 'obc-array-form-control',\n templateUrl: './array-form-control.component.html',\n styleUrls: ['./array-form-control.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: ArrayFormControlComponent,\n multi: true,\n }\n ]\n})\nexport class ArrayFormControlComponent implements OnInit, ControlValueAccessor {\n\n onChange: Function;\n formControl = new FormControl('');\n @Input() splitter: string = \",\";\n @Input() placeholder: string = \"\";\n constructor() { }\n writeValue(obj: any[]): void {\n if (obj != null && obj.length > 0) {\n var value = obj.join(`${this.splitter} `);\n this.formControl.setValue(value);\n }\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n }\n setDisabledState?(isDisabled: boolean): void {\n }\n\n items: any[] = [];\n ngOnInit() {\n this.formControl.valueChanges.subscribe((res: string) => {\n this.items = res.split(this.splitter).filter(i =>\n i != null && i.length > 0)\n .map(i => {\n return i.trim()\n });\n if (this.onChange)\n this.onChange(this.items);\n });\n }\n}\n","\n\n \n","
\n
\n \n \n
\n
\n \n
\n
\n \n
\n
\n \n \n \n\n
\n \n
\n Select one of supervisor email addresses or enter recipients email address.\n
\n
\n","import { Component, OnInit, Input, Self } from '@angular/core';\nimport { FormControl, FormGroup, Validators, ControlValueAccessor, NgControl } from '@angular/forms';\nimport { EmailTemplateViewmodel } from 'src/app/models/email-template-viewmodel';\nimport { emailArrayValidator } from 'src/app/helpers/email-list-validator';\nimport { emailTemplateValidator } from 'src/app/helpers/email-template-validator';\n\n@Component({\n selector: 'obc-email-template',\n templateUrl: './email-template.component.html',\n styleUrls: ['./email-template.component.css'],\n})\nexport class EmailTemplateComponent implements OnInit, ControlValueAccessor {\n onChange: Function;\n formGroup: FormGroup;\n\n @Input() showSendEmailToSiteSupervisor: boolean = true;\n\n get model(): EmailTemplateViewmodel {\n return {\n subject: this.formGroup.controls['subject'].value,\n recipients: this.formGroup.controls['recipients'].value,\n sendEmailToCompanySupervisor: this.formGroup.controls['sendEmailToCompanySupervisor'].value,\n sendEmailToSiteSupervisor: this.formGroup.controls['sendEmailToSiteSupervisor'].value,\n } as EmailTemplateViewmodel;\n\n };\n\n set model(value: EmailTemplateViewmodel) {\n if (this.formGroup == null) {\n this.formGroup = new FormGroup({\n subject: new FormControl(value?.subject ?? '', [Validators.required]),\n recipients: new FormControl(value?.recipients ?? [], [emailArrayValidator]),\n sendEmailToCompanySupervisor: new FormControl(value?.sendEmailToCompanySupervisor ?? false, []),\n sendEmailToSiteSupervisor: new FormControl(value?.sendEmailToSiteSupervisor ?? false, []),\n }, { validators: emailTemplateValidator });\n\n this.formGroup.valueChanges.subscribe(res => {\n this.onChange(this.model);\n })\n }\n else {\n this.formGroup.controls.subject.setValue(value.subject);\n this.formGroup.controls.recipients.setValue(value.recipients);\n this.formGroup.controls.sendEmailToCompanySupervisor.setValue(value.sendEmailToCompanySupervisor);\n this.formGroup.controls.sendEmailToSiteSupervisor.setValue(value.sendEmailToSiteSupervisor);\n }\n\n }\n\n writeValue(obj: EmailTemplateViewmodel): void {\n this.model = JSON.parse(JSON.stringify(obj));\n }\n\n validate({ value }: FormControl) {\n return this.formGroup.valid ? null : {\n invalid: true\n };\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n }\n setDisabledState?(isDisabled: boolean): void {\n }\n constructor(@Self() private controlDirective: NgControl) {\n controlDirective.valueAccessor = this;\n }\n\n ngOnInit() {\n this.controlDirective.control.setValidators([this.validate.bind(this)]);\n this.controlDirective.control.updateValueAndValidity();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormType } from '../enums/form-type';\n\n@Pipe({\n name: 'formType'\n})\nexport class FormTypePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value == FormType.Generic) return \"Generic\";\n if (value == FormType.Permit) return \"Permit\";\n if (value == FormType.SupplierDocumentReview) return \"Supplier Document Review\";\n if (value == FormType.SupplierForm) return \"Supplier Form\";\n if (value == FormType.AssetRegistration) return \"Asset Registration\";\n if (value == FormType.AssetOperator) return \"Asset Operator\";\n if (value == FormType.AssetOperation) return \"Asset Operation\";\n if (value == FormType.SiteBriefing) return \"Site Briefing\";\n return value?.toString();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {SiteAttendanceApprovalStatus} from \"../enums/site-attendance-approval-status.enum\";\n\n@Pipe({\n name: 'siteAttendanceApprovalStatus'\n})\nexport class SiteAttendanceApprovalStatusPipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === SiteAttendanceApprovalStatus.NotRequiredApproval || value === 0) return \"Not Required\";\n if (value === SiteAttendanceApprovalStatus.Pending || value === 1) return \"Pending\";\n if (value === SiteAttendanceApprovalStatus.Approved || value === 2) return \"Approved\";\n if (value === SiteAttendanceApprovalStatus.Rejected || value === 3) return \"Rejected\";\n return value?.toString();\n }\n\n}\n","
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Location\n \n Trigger\n \n Action\n \n Status\n \n \n
\n \n Company\n \n \n {{ta.siteName}}\n \n \n {{getTriggerTypeFriendlyName(ta.type)}}\n
\n {{getCompanyTagLabel(ta)}}\n ANY TAG\n
\n {{getTriggerActionFriendlyName(ta.action)}}\n

\n {{getTriggerActionSummery(ta)}}\n

\n
\n \n \n

\n \n

\n
\n There is no item available related to the selected trigger filter\n
\n
\n \n
\n
\n
\n\n\n
\n \n
\n \n Edit\n Add New\n \n \n
\n
\n
\n \n
\n Scope:\n \n {{isCompanyWide?'Company':'Site ('+siteName+')'}}\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n -1\"\n id=\"index_{{siteAttendanceApprovalState[index]}}\">\n \n \n\n
\n
\n
\n
\n \n \n
\n
\n

\n \n

\n
\n
\n

\n {{errorMessage}}\n

\n
\n
\n
\n
\n
\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { BehaviorSubject, forkJoin, Subject } from 'rxjs';\nimport { TriggerType } from 'src/app/enums/trigger-type.enum';\nimport { CompanyTriggerActionViewmodel } from 'src/app/models/company-trigger-action-viewmodel';\nimport { CompanyTriggerActionService } from 'src/app/services/company-trigger-action.service';\nimport { TriggerAction } from 'src/app/enums/trigger-action.enum';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { EmailTemplateViewmodel } from 'src/app/models/email-template-viewmodel';\nimport { CompanyTagService } from 'src/app/services/company-tag.service';\nimport { CompanyTagViewModel } from 'src/app/models/company-tag';\nimport { SiteService } from 'src/app/services/site.service';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { UserService } from 'src/app/services/user.service';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { CompanySiteSelectorResponseModel } from 'src/app/models/company-site-selector-response-model';\nimport { CompanySiteSelectedType } from 'src/app/enums/company-site-selected-type';\nimport { FormService } from 'src/app/services/form.service';\nimport { finalize } from 'rxjs/operators';\nimport { FullFormViewModel } from 'src/app/models/form/form-view-model';\nimport { SiteAttendanceApprovalStatus } from \"../../../enums/site-attendance-approval-status.enum\";\nimport { FormType } from 'src/app/enums/form-type';\n\n@Component({\n selector: 'obc-company-trigger-action',\n templateUrl: './company-trigger-action.component.html',\n styleUrls: ['./company-trigger-action.component.css']\n})\nexport class CompanyTriggerActionComponent implements OnInit {\n\n @Input() inProgress$: Subject;\n @Input() siteId: number = -1;\n @Input() siteName: string;\n @Input() triggerDefaultValue: any = 'All';\n\n companyTriggerActions: CompanyTriggerActionViewmodel[] = null;\n companyTags: CompanyTagViewModel[];\n selectedCompanyTriggerAction: CompanyTriggerActionViewmodel;\n triggerType = TriggerType;\n triggerAction = TriggerAction;\n editFormGroup: FormGroup;\n bsModalRef: BsModalRef;\n inAddEditProgress: boolean = false;\n errorMessage: string = \"\";\n sites: SiteViewModel[];\n forms = new BehaviorSubject([]);\n currentCompany: CompanyViewModel;\n filterType: TriggerType;\n filteredItems: number;\n formTypes = FormType;\n siteAttendanceApprovalState = SiteAttendanceApprovalStatus;\n\n get isCompanyWide() {\n return !this.siteId || this.siteId <= 0;\n }\n\n constructor(private companyTriggerActionService: CompanyTriggerActionService,\n private companyTagService: CompanyTagService,\n private formService: FormService,\n private userService: UserService,\n private siteService: SiteService,\n private bsModalService: BsModalService) {\n }\n\n ngOnInit() {\n this.currentCompany = this.userService.currentCompany;\n this.userService.currentCompany$.subscribe(res => this.currentCompany = res);\n this.updateCompanyTags();\n\n this.inProgress$.next(true)\n forkJoin({\n forms: this.formService.getAllForms(),\n sites: this.siteService.getAllActiveSites(),\n })\n .pipe(finalize(() => {\n this.inProgress$.next(false);\n\n }))\n .subscribe(result => {\n this.forms.next(result.forms.data.filter(s => s.isEnable == true));\n this.sites = result.sites;\n setTimeout(() => {\n this.updateTriggerActionList();\n }, 100)\n })\n }\n\n\n private updateCompanyTags() {\n this.companyTagService.getCompanyTags().subscribe(res => this.companyTags = res);\n }\n\n private updateTriggerActionList() {\n if (this.inProgress$)\n this.inProgress$.next(true);\n var method = null;\n switch (this.siteId) {\n case -1:\n method = this.companyTriggerActionService.getForAllLocation();\n break;\n case 0:\n method = this.companyTriggerActionService.getForCompany();\n break;\n default:\n method = this.companyTriggerActionService.getForSite(this.siteId);\n break;\n }\n method.subscribe((res: CompanyTriggerActionViewmodel[]) => {\n this.companyTriggerActions = res;\n this.onSelectedTrigger(this.filterType);\n if (this.inProgress$)\n this.inProgress$.next(false);\n });\n }\n\n onRefresh() {\n this.updateTriggerActionList();\n this.updateCompanyTags();\n }\n\n onSiteIdChange($event: CompanySiteSelectorResponseModel) {\n if ($event != null) {\n if ($event.CompanySiteSelectedType == CompanySiteSelectedType.AllCompanyAndSites)\n this.siteId = CompanySiteSelectedType.AllCompanyAndSites.valueOf();\n else if ($event.CompanySiteSelectedType == CompanySiteSelectedType.Company)\n this.siteId = CompanySiteSelectedType.Company.valueOf();\n else if ($event.CompanySiteSelectedType == CompanySiteSelectedType.Site && $event.siteId) {\n this.siteId = $event.siteId.valueOf();\n this.siteName = $event.siteName;\n }\n }\n this.updateTriggerActionList();\n }\n\n onStatusChanged($event: { value: boolean, tagged: CompanyTriggerActionViewmodel }) {\n if ($event.value != $event.tagged.status) {\n if (this.inProgress$)\n this.inProgress$.next(true);\n this.companyTriggerActionService.toggleStatus($event.tagged.id).subscribe(res => {\n $event.tagged.status = $event.value;\n if (this.inProgress$)\n this.inProgress$.next(false);\n });\n }\n }\n\n onShowEditModal(template, companyTriggerAction: CompanyTriggerActionViewmodel) {\n this.updateCompanyTags();\n this.selectedCompanyTriggerAction = companyTriggerAction;\n this.createFormGroup();\n this.bsModalRef = this.bsModalService.show(template);\n this.onTriggerChange();\n }\n\n onSave() {\n var model = {\n siteId: this.editFormGroup.get(\"siteId\").value,\n id: parseInt(this.editFormGroup.get(\"id\").value),\n action: parseInt(this.editFormGroup.get(\"action\").value),\n approvalStatusList: this.editFormGroup.get(\"approvalStatusList\")?.value ?? [],\n type: parseInt(this.editFormGroup.get(\"type\").value),\n companyTagId: (this.editFormGroup.get(\"type\").value == this.triggerType.Reject || this.editFormGroup.get(\"type\").value == this.triggerType.SubmitForm) ? null : (this.editFormGroup.get(\"tagId\").value == null ? null : parseInt(this.editFormGroup.get(\"tagId\").value)),\n formId: +this.editFormGroup.get(\"formId\").value == 0 ? null : +this.editFormGroup.get(\"formId\").value,\n formType: +this.editFormGroup.get(\"formId\").value == 0 ? +this.editFormGroup.get(\"formType\").value : null,\n parameters: JSON.stringify(this.editFormGroup.get(\"parameters\").value),\n } as CompanyTriggerActionViewmodel;\n\n this.inAddEditProgress = true;\n if (model.id == 0) {\n model.status = true;\n this.companyTriggerActionService.add(model).subscribe(res => {\n model.id = res;\n if (model.siteId) {\n var siteName = this.sites.find(x => x.id == model.siteId).name;\n model.siteName = siteName;\n }\n this.companyTriggerActions.push(model);\n this.inAddEditProgress = false;\n this.bsModalRef.hide();\n this.onRefresh();\n }, err => {\n this.inAddEditProgress = false;\n this.errorMessage = err;\n setTimeout(() => {\n this.errorMessage = null;\n }, 10000);\n });\n } else {\n model.status = this.selectedCompanyTriggerAction.status;\n this.companyTriggerActionService.edit(model).subscribe(res => {\n this.selectedCompanyTriggerAction.action = model.action;\n this.selectedCompanyTriggerAction.type = model.type;\n this.selectedCompanyTriggerAction.parameters = model.parameters;\n this.selectedCompanyTriggerAction.siteId = model.siteId;\n this.selectedCompanyTriggerAction.companyTagId = model.companyTagId;\n this.inAddEditProgress = false;\n this.bsModalRef.hide();\n this.onRefresh();\n }, err => {\n this.inAddEditProgress = false;\n this.errorMessage = err;\n setTimeout(() => {\n this.errorMessage = null;\n }, 10000);\n });\n }\n }\n\n createFormGroup() {\n if (this.selectedCompanyTriggerAction != null) {\n var parameters = JSON.parse(this.selectedCompanyTriggerAction.parameters) as EmailTemplateViewmodel;\n let controls = {\n id: new FormControl(this.selectedCompanyTriggerAction.id),\n siteId: new FormControl(this.selectedCompanyTriggerAction.siteId),\n action: new FormControl(this.selectedCompanyTriggerAction.action, [Validators.required]),\n type: new FormControl(this.selectedCompanyTriggerAction.type, [Validators.required]),\n tagId: new FormControl(this.selectedCompanyTriggerAction.companyTagId),\n formId: new FormControl(this.selectedCompanyTriggerAction.formId),\n formType: new FormControl(this.selectedCompanyTriggerAction.formType ?? FormType.Generic),\n parameters: new FormControl(parameters, [Validators.required]),\n approvalStatusList: new FormControl(this.selectedCompanyTriggerAction.approvalStatusList, [Validators.required, Validators.minLength(1)])\n };\n this.editFormGroup = new FormGroup(controls);\n } else {\n this.editFormGroup = new FormGroup({\n id: new FormControl(0),\n siteId: new FormControl(this.siteId == 0 ? null : this.siteId),\n action: new FormControl(null, [Validators.required]),\n type: new FormControl(this.triggerDefaultValue != 'All' ? this.triggerDefaultValue : null, [Validators.required]),\n tagId: new FormControl(null),\n formId: new FormControl(null),\n formType: new FormControl(FormType.Generic),\n parameters: new FormControl({}, [Validators.required]),\n\n })\n }\n\n }\n\n getTriggerTypeFriendlyName(type: TriggerType): string {\n switch (type) {\n case TriggerType.Flag:\n return 'When a user is tagged';\n case TriggerType.Reject:\n return 'When a user is rejected';\n case TriggerType.SubmitForm:\n return 'When a user submits a form';\n case TriggerType.ApprovalState:\n return 'When check in approval changed';\n default:\n return TriggerType[type];\n }\n }\n\n getTriggerActionFriendlyName(action: TriggerAction): string {\n switch (action) {\n case TriggerAction.Email:\n return 'Send an Email';\n default:\n return TriggerAction[action];\n }\n }\n\n getCompanyTagLabel(model: CompanyTriggerActionViewmodel) {\n if (model.companyTagId && this.companyTags && this.companyTags.length) {\n return this.companyTags.filter((i) => i.id == model.companyTagId)[0].title;\n } else {\n return null;\n }\n }\n\n getTriggerActionSummery(model: CompanyTriggerActionViewmodel) {\n if (model.action == this.triggerAction.Email) {\n try {\n var paramObj = JSON.parse(model.parameters) as EmailTemplateViewmodel;\n return paramObj.recipients.join(\", \");\n\n } catch (error) {\n return null;\n }\n } else {\n return null;\n }\n }\n\n getSelectedSiteName(id: number): string {\n if (this.sites)\n return this.sites.filter((e) => e.id == id)[0]?.name;\n }\n\n onTagChange($event: number) {\n if ($event == null) return;\n var parameters = this.editFormGroup.controls[\"parameters\"].value as EmailTemplateViewmodel;\n //if (parameters.subject == null || parameters.subject.length == 0)\n parameters.subject = this.companyTags.find(i => i.id == $event).title;\n this.editFormGroup.controls[\"parameters\"].setValue(parameters);\n }\n\n approvalStatusItemChanged(value) {\n\n let selectedItems = this.editFormGroup.get('approvalStatusList').value ?? [];\n\n let index = selectedItems.indexOf(value);\n if (index > -1)\n selectedItems.splice(index, 1);\n else\n selectedItems.push(value);\n\n this.editFormGroup.controls[\"approvalStatusList\"].setValue(selectedItems);\n }\n\n onTriggerChange() {\n if (this.editFormGroup.get('type').value == TriggerType.ApprovalState) {\n let states: number[] = [];\n if (this.selectedCompanyTriggerAction != null) {\n states = this.selectedCompanyTriggerAction.approvalStatusList;\n }\n this.editFormGroup.addControl('approvalStatusList', new FormControl(states, [Validators.required, Validators.minLength(1)]),)\n } else {\n this.editFormGroup.removeControl('approvalStatusList');\n }\n this.editFormGroup.updateValueAndValidity();\n }\n\n onSelectedTrigger(value) {\n this.filterType = value;\n if (this.companyTriggerActions) {\n this.filteredItems = 0;\n for (let ta of this.companyTriggerActions) {\n if (this.filterType == null || ta.type == this.filterType) {\n this.filteredItems++;\n }\n }\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ItemTitleValue } from '../models/helper-models';\n\n@Pipe({\n name: 'itemValue'\n})\nexport class ItemValuePipe implements PipeTransform {\n\n transform(list: ItemTitleValue[], val: any[]): unknown {\n try {\n var item = list.filter(c => val.indexOf(c.itemValue) !== -1);\n var titles = item.map(c => c.itemTitle);\n\n if (titles)\n return titles;\n return val;\n }\n catch{\n return val;\n }\n }\n\n}\n","
\n
\n
\n
\n \n
\n

Manage Triggers & Automations

\n

\n {{pagTitle}}\n

\n
\n
\n\n \n \n \n \n
\n
\n
{{_question.questionText}}
\n
{{valueLabel}}
\n
\n
\n \n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
Do...
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {{errorMessage}}\n \n
\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ConditionTag User?Reject User?Reject MessageActions
\n {{trigger.condition.value[0] === '' ? 'Nothing' : trigger.condition.value[0] ==\n Constants.TEXT_IS_ANYTHING_CONDITION_VALUE ? 'Anything': trigger.condition.value[0]}}\n \n
    \n
  • \n {{item}}
  • \n
\n
\n {{trigger.action.flagUser ? 'Yes' : 'No'}}\n
\n \n {{tag?.title}}\n \n \n \n \n NO TAG\n \n \n
{{trigger.action.rejectUser? 'Yes' : 'No'}}{{trigger.action.rejectMessage}}\n \n
\n
\n
\n
\n \n \n \n \n \n \n\n\n
\n \n\n","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { QuestionViewModel } from 'src/app/models/question-viewmodel';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { ItemTitleValue, AsyncResult } from 'src/app/models/helper-models';\nimport { QuestionTrigger } from 'src/app/models/question-trigger';\nimport { QuestionService } from 'src/app/services/question.service';\nimport { CompanyTagService } from 'src/app/services/company-tag.service';\nimport { Subject } from 'rxjs';\nimport { ChipModel } from 'src/app/models/chip-model';\nimport { map } from 'rxjs/operators';\nimport { CompanyTagViewModel } from 'src/app/models/company-tag';\nimport { UserService } from 'src/app/services/user.service';\nimport { TriggerType } from 'src/app/enums/trigger-type.enum';\nimport { Constants } from 'src/app/enums/constants';\n\n\n@Component({\n selector: 'obc-question-triggers',\n templateUrl: './question-triggers.component.html',\n styleUrls: ['./question-triggers.component.scss']\n})\nexport class QuestionTriggersComponent implements OnInit, OnDestroy {\n pagTitle = 'please add trigger(s) and press submit.';\n @Output() public result = new EventEmitter();\n _question: QuestionViewModel = new QuestionViewModel();\n _questionType = QuestionType;\n inProgress: boolean = false;\n inProgress$: Subject = new Subject();\n items: ItemTitleValue[] = [];\n conditionValue: any;\n showLeaveEmptyInTextModeCheckBox: boolean = false;\n textQuestionValueMode: number = 0;\n isCompanyAdmin: boolean = false;\n triggerType = TriggerType;\n trigger: QuestionTrigger = this.newTrigger;\n triggers: QuestionTrigger[] = [];\n Constants = Constants;\n\n @Input() isTemplateCompany: boolean = false;\n\n get valueLabel(): string {\n switch (this._question.questionType) {\n case QuestionType.Text: return 'When a user enters:';\n case QuestionType.SingleSelect:\n case QuestionType.File:\n case QuestionType.SignaturePad:\n case QuestionType.Boolean: return 'When a user selects';\n case QuestionType.MultiSelect: return 'When a user selects all of';\n }\n return '';\n }\n @Input() set question(_question: QuestionViewModel) {\n if (_question) {\n this.pagTitle = 'please edit trigger(s) and press submit.'\n }\n\n this._question = JSON.parse(JSON.stringify(_question ? new QuestionViewModel(_question) : new QuestionViewModel()));\n this.triggers = this._question.questionParametersAsString[\"triggers\"] || [];\n switch (_question.questionType) {\n case QuestionType.Text:\n if (_question.questionParametersAsString?.isRequired === false)\n this.showLeaveEmptyInTextModeCheckBox = true;\n break;\n case QuestionType.Boolean:\n this.items = [{ itemTitle: 'Yes', itemValue: 'Yes' }, { itemTitle: 'No', itemValue: 'No' }]\n if (_question.questionParametersAsString?.isRequired === false)\n this.items.push({ itemTitle: 'No Select', itemValue: null });\n break;\n case QuestionType.File:\n this.items = [{ itemTitle: 'Upload File', itemValue: '1' }, { itemTitle: 'Not Upload File', itemValue: null }]\n break;\n case QuestionType.SignaturePad:\n this.items = [{ itemTitle: 'Sign', itemValue: '1' }, { itemTitle: 'Not Sign', itemValue: null }]\n break;\n case QuestionType.SingleSelect:\n case QuestionType.MultiSelect:\n this.items = QuestionViewModel.getQuestionOptions(this._question, false);\n break;\n }\n }\n\n get newTrigger(): QuestionTrigger {\n return {\n action: { flagUser: false, rejectMessage: '', rejectUser: false, tags: [] },\n condition: { value: [], operators: '=' }\n }\n }\n\n companyTags: ChipModel[] = [];\n constructor(private questionService: QuestionService,\n private companyTagService: CompanyTagService,\n private userService: UserService) {\n ///this.condition.value = [];\n }\n ngOnDestroy(): void {\n this.result.emit({ isFinished: true, isSucceeded: true });\n }\n\n ngOnInit(): void {\n this.isCompanyAdmin = this.userService.isCompanyAdminUser();\n this.userService.info.subscribe(res => this.isCompanyAdmin = res?.userPermissions?.isCompanyAdmin);\n this.companyTagService.getCompanyTags()\n .pipe(\n map(cts => {\n return cts.map((i) => {\n return { label: i.title, tagged: i, removable: true } as ChipModel;\n })\n })\n ).subscribe(res => this.companyTags = res);\n\n this.inProgress$.subscribe(res => {\n setTimeout(() => {\n this.inProgress = res\n }, 1)\n });\n }\n\n addAction() {\n if (!this.isValid) return;\n this.trigger.action.rejectMessage = this.trigger.action.rejectUser ? this.trigger.action.rejectMessage : '';\n this.triggers.push(JSON.parse(JSON.stringify(this.trigger)));\n this.trigger = JSON.parse(JSON.stringify(this.newTrigger));\n setTimeout(() => this.addTriggers(), 100);\n }\n\n setValue(value, event) {\n if (event.srcElement.checked === true)\n this.trigger.condition.value.push(value);\n else {\n let index = this.trigger.condition.value.map(c => c).indexOf(value);\n this.trigger.condition.value.splice(index, 1);\n }\n }\n\n get conditionValueCanBeNull(): boolean {\n switch (this._question.questionType) {\n case QuestionType.Boolean:\n if (this._question.questionParametersAsString?.isRequired === false)\n return true;\n case QuestionType.Text:\n if (this._question.questionParametersAsString?.isRequired === false)\n return true;\n case QuestionType.SingleSelect:\n if (this._question.questionParametersAsString?.isRequired === false)\n return true;\n case QuestionType.File:\n case QuestionType.SignaturePad:\n if (this._question.questionParametersAsString?.isRequired === false)\n return true;\n }\n return false;\n }\n\n errorMessage: string = '';\n get isValid(): boolean {\n setTimeout(() => this.errorMessage = null, 10000);\n\n if (this._question.questionType === this._questionType.Text) {\n if (this.textQuestionValueMode === 1)\n this.conditionValue = '';\n else if (this.textQuestionValueMode === 2) {\n this.conditionValue = Constants.TEXT_IS_ANYTHING_CONDITION_VALUE;\n }\n }\n\n // 1 - Check Selected/Entered Value\n if (this._question.questionType === this._questionType.MultiSelect) {\n if (this.trigger.condition.value === undefined || this.trigger.condition.value.length === 0) {\n this.errorMessage = 'please select a value';\n return false;\n }\n }\n else if (this.conditionValueCanBeNull === false)\n if (this.conditionValue === undefined || this.conditionValue === null || this.conditionValue.trim() === '') {\n this.errorMessage = 'Please select/enter value!';\n return false;\n }\n\n\n // 2 : Check If User Doesn't Select Any Actions\n if (this.trigger.action.flagUser === false && this.trigger.action.rejectUser === false) {\n this.errorMessage = 'please select an action';\n return false;\n }\n\n if (this._question.questionType !== this._questionType.MultiSelect)\n this.trigger.condition.value.push(this.conditionValue);\n\n if (this.triggers.length === 0)\n return true;\n\n if (this.triggers.map(c => this.valuesEqual(c.condition.value, this.trigger.condition.value))\n .find(c => c === true)) {\n this.errorMessage = 'selected value(s) is duplicated';\n this.trigger.condition.value = [];\n return false;\n }\n\n this.errorMessage = '';\n return true;\n }\n\n deleteTrigger(value) {\n let index = this.triggers.map(c => this.valuesEqual(c.condition.value, value)).indexOf(true);\n this.triggers.splice(index, 1);\n setTimeout(() => this.addTriggers(), 100);\n }\n\n addTriggers() {\n this._question.questionParametersAsString[\"triggers\"] = this.triggers;\n this._question.questionParameters = JSON.stringify(this._question.questionParametersAsString);\n this.inProgress = true;\n this.questionService.updateQuestion(this._question)\n .subscribe(res => {\n this.inProgress = false;\n //this.result.emit({ isFinished: true, isSucceeded: true });\n }, err => { this.errorMessage = 'We could not update the question.'; });\n\n }\n\n cancel() {\n this.result.emit({ isFinished: true, isSucceeded: true });\n }\n\n valuesEqual(a, b) {\n if (a == null || b == null) return false;\n if (a.length != b.length) return false;\n if (a === b) return true;\n var arr1 = a.concat().sort();\n var arr2 = b.concat().sort();\n // console.log('a :', arr1);\n // console.log('b :', arr2);\n\n for (var i = 0; i < arr1.length; ++i) {\n if (!arr1[i] && !arr2[i])\n return true;\n\n if (!arr1[i] || !arr2[i])\n return false;\n\n if (arr1[i].trim() !== arr2[i].trim()) return false;\n }\n return true;\n }\n\n onTagChanges(chips: ChipModel[]) {\n this.trigger.action.tags = chips.map((c) => {\n if (c.tagged)\n return c.tagged as CompanyTagViewModel;\n else\n return { title: c.label, id: null };\n })\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { QuestionViewModel } from 'src/app/models/question-viewmodel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { QuestionService } from 'src/app/services/question.service';\n\n@Component({\n selector: 'obc-add-remove-question-all-sites',\n templateUrl: './add-remove-question-all-sites.component.html',\n styleUrls: ['./add-remove-question-all-sites.component.scss']\n})\nexport class AddRemoveQuestionAllSitesComponent implements OnInit {\n @Input() question: QuestionViewModel;\n @Input() addQuestionToAllSites: boolean;\n\n get title() {\n return this.addQuestionToAllSites ? 'Add Question To All Site' : 'Remove Question From All Site';\n }\n get message() {\n return `This question will be ${this.addQuestionToAllSites ? 'added to' : 'removed from'} all sites. Choose one of CheckIn, CheckOut or both to ${this.addQuestionToAllSites ? 'add' : 'remove'}.`;\n }\n\n constructor(private modalService: ModalService, private questionService: QuestionService) { }\n\n ngOnInit(): void {\n }\n addQuestionToAllSite(state: number) {\n // console.log(state);\n // console.log(this.question.questionText);\n // console.log(this.addQuestionToAllSites);\n\n this.questionService.addRemoveQuestionToAllSites(this.question.id, this.addQuestionToAllSites, state)\n .subscribe(result => {\n if (result)\n this.closeAddQuestionToAllSiteModel();\n else\n this.modalService.error('Operation failed!');\n });\n }\n closeAddQuestionToAllSiteModel() {\n this.modalService.hide();\n }\n}\n","
\n
\n
\n \n
\n

{{title}}

\n\n

\n {{question.questionText}}\n

\n
\n
\n
\n {{message}}\n
\n
\n \n \n \n \n
\n
\n
","
\n
\n Show\n \n Questions\n
\n
\n
Question Repository
\n \n
\n \n \n
\n\n
\n \n
\n\n \n
\n {{errorMessage}}\n
\n
\n
\n
    \n
  • \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
  • \n
\n
\n
\n
\n \n
\n
\n
\n\n \n \n\n\n \n\n\n \n\n\n \n\n\n \n \n\n","import {Component, OnInit, TemplateRef} from '@angular/core';\nimport {ModalService} from '../../../services/modal.service';\nimport {AsyncResult} from '../../../models/helper-models';\nimport {QuestionViewModel} from '../../../models/question-viewmodel';\nimport {QuestionService} from '../../../services/question.service';\nimport {debounceTime, finalize} from 'rxjs/operators';\nimport {LayoutService} from 'src/app/services/layout.service';\nimport {QuestionType} from 'src/app/enums/question-type';\nimport {UserService} from 'src/app/services/user.service';\nimport {FormControl} from '@angular/forms';\nimport {pagingModel} from 'src/app/models/paging_model';\nimport {QuestionListQueryModel} from 'src/app/models/question-list-query-model';\nimport {PaginationInfo} from 'src/app/models/pagination-info';\nimport {getPageSizeByUrl} from \"../../../helpers/general-functions\";\n\n@Component({\n selector: 'obc-question-manager',\n templateUrl: './question-manager.component.html',\n styleUrls: ['./question-manager.component.scss']\n})\nexport class QuestionManagerComponent implements OnInit {\n pagingInfo: pagingModel = {\n pageNumber: 0,\n pageSize: getPageSizeByUrl() ?? 30,\n totalCount: 0,\n }\n filterListTerm: string;\n filterFormcontrol = new FormControl();\n\n modalRef: any;\n questionList: QuestionViewModel[];\n errorMessage = '';\n selectedQuestion: QuestionViewModel;\n inProgress: boolean = false;\n _questionType = QuestionType;\n showActiveQuestions: boolean;\n isCompanyAdmin = false;\n isCompanyTemplate = false;\n addQuestionToAllSites: boolean;\n\n constructor(private modalService: ModalService, private userService: UserService, private questionService: QuestionService, private layoutService: LayoutService) {\n this.getQuestionList(true);\n }\n\n ngOnInit(): void {\n this.layoutService.header = \"Questions\";\n this.isCompanyTemplate = this.userService.isTemplateCompany;\n this.userService.currentCompany$.subscribe(res => this.isCompanyTemplate = res.isTemplate);\n this.isCompanyAdmin = this.userService.isCompanyAdminUser();\n this.userService.info.subscribe(res => this.isCompanyAdmin = res?.userPermissions?.isCompanyAdmin);\n\n this.filterFormcontrol.valueChanges.pipe(\n debounceTime(500),\n ).subscribe((searchTerm) => {\n this.filterListTerm = searchTerm;\n if (searchTerm == '' || (searchTerm != null && searchTerm.length > 3)) {\n this.getQuestionList(this.showActiveQuestions, true, 0);\n }\n });\n }\n createQuery(): QuestionListQueryModel {\n var query = {\n pagingInfo: {\n pageNumber: this.pagingInfo.pageNumber,\n pageSize: this.pagingInfo.pageSize,\n },\n searchTerm: this.filterListTerm,\n };\n return query;\n }\n getQuestionList(showActiveQuestions, reload?, pageNumber?: number) {\n if (this.showActiveQuestions == showActiveQuestions && reload != true) return;\n this.showActiveQuestions = showActiveQuestions;\n this.errorMessage = '';\n this.inProgress = true;\n\n if (pageNumber != null && pageNumber != undefined)\n this.pagingInfo.pageNumber = pageNumber;\n var query = this.createQuery();\n\n if (this.showActiveQuestions) {\n this.questionService.getActiveQuestions(query)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.questionList = res.data.map(x => x = new QuestionViewModel(x));\n this.pagingInfo.totalCount = res.totalCount;\n }, error => { this.errorMessage = 'We were not able to retrieve the questions'; }, () => { });\n\n }\n else {\n this.questionService.getInactiveQuestions(query)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.questionList = res.data.map(x => x = new QuestionViewModel(x));\n this.pagingInfo.totalCount = res.totalCount;\n }, error => { this.errorMessage = 'We were not able to retrieve the questions'; }, () => { });\n }\n }\n\n openModal(template, selectedQuestion: QuestionViewModel = null) {\n this.selectedQuestion = selectedQuestion;\n this.modalService.show(template, \"modal-xl\");\n }\n\n closeModal(result: AsyncResult) {\n try {\n this.modalService.hide();\n } catch {\n\n }\n if (result.isSucceeded)\n this.getQuestionList(this.showActiveQuestions, true);\n }\n\n deleteQuestion(questionId) {\n this.modalService.confirm('Are you sure?', 'delete question').subscribe(iamsure => {\n if (iamsure === true) {\n\n this.inProgress = true;\n this.questionService.deleteQuestion(questionId)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => {\n if (result == true)\n this.getQuestionList(this.showActiveQuestions, true);\n else {\n this.modalService.info(\"Cannot delete the question because it has been used before. The question is now deactivated.\")\n .subscribe(modalRes => {\n this.getQuestionList(this.showActiveQuestions, true);\n })\n }\n }, error => {\n if (error.status == 547) {\n this.modalService.error(\"This question is used in Sites, CheckIn/Out or ...\", \"you can't remove this question\");\n }\n\n console.log('error : ', error);\n });\n }\n });\n }\n\n openAddQuestionToAllSitesModal(question: QuestionViewModel, addQuestion: boolean, template: TemplateRef) {\n this.selectedQuestion = question;\n this.addQuestionToAllSites = addQuestion;\n this.modalRef = this.modalService.show(template, 'modal-lg');\n }\n onPageChange(paginationInfo: PaginationInfo) {\n this.pagingInfo.pageSize = paginationInfo.pageSize;\n this.getQuestionList(this.showActiveQuestions, true, paginationInfo.pageNumber);\n }\n}\n","export enum UserAutoCompleteFilterByFields\n{\n All = 0,\n FirstName = 1,\n LastName = 2,\n Mobile = 3\n}\n","export enum SiteActivityReportType {\n SiteActivity = 0,\n ContactTracing = 1,\n ExternalCompanyActivity = 2,\n}\n//TODO:Rename enum\n","export enum FilterType {\n Text = 0,\n User = 1,\n DateTimeRange = 2,\n DateRange = 3,\n Site = 4,\n VisitorType = 5,\n IndustryType = 6,\n Gender = 7,\n Duration = 8,\n Induction = 9,\n Supplier = 10,\n InventoryCategory = 11,\n InventoryToolStatus = 12,\n InventoryLocation = 13,\n SingleText = 14,\n Form = 15,\n FormType = 16,\n InductionId = 17,\n PermitStatus = 18,\n DateTime = 19,\n DocumentType = 20,\n DocumentExpiryStatus = 21,\n Mobile = 22,\n SupplierDocuments = 23,\n Template = 24,\n QuestionAndAnswer = 25,\n PermitForm = 26,\n File = 27,\n AssetCategory = 28,\n AssetStatus = 29,\n AssetCategoryType = 30,\n ApprovalStatus = 31,\n ApproveEntityType = 32,\n Image = 33,\n SiteSupplierDocumentVersionStatus = 34,\n RoleArray = 37,\n MessageType = 38,\n Switch = 39,\n ActionList = 45,\n SiteBriefingForm = 46,\n SiteBriefingStatus = 47,\n SupplierDocumentKind = 48,\n EventLogType = 49,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DatetimePipe } from './datetime.pipe';\nimport { LocaleService } from '../services/locale.service';\nimport { dateFormat } from '../helpers/date-time-format';\n\n@Pipe({\n name: 'date',\n})\nexport class DatePipe extends DatetimePipe {\n constructor(localeService: LocaleService) {\n super(localeService);\n }\n\n transform(value: any, format?: string): string {\n let finalFormat = format ?? dateFormat;\n try { return super.transform(value, finalFormat); }\n catch{ return value; }\n }\n}\n","export enum Table {\n ActivityReport = 0,\n ContactTracingReport = 1,\n InventoryReport = 2,\n InductionReport = 3,\n ExternalCompanyReport = 4,\n CardReport = 5,\n FormReport = 6,\n Approval = 7,\n SiteAsset = 8,\n PermitReport = 9,\n AssetReport = 10,\n SWMSReport = 11,\n ProcoreSyncMonitoringReport = 12,\n Workflow = 13,\n LiveAttendance = 14,\n SupplierAsset = 15,\n SiteBriefingReport = 16,\n SiteBriefingReportSignature = 17,\n SupplierDocumentSignOffReport = 18,\n SiteBriefingSignOffReport = 19,\n WorkerProfileCards = 20,\n WorkerProfileHistory = 21,\n UserDirectory = 22,\n SMSProvider = 23,\n}\n","import { FilterType } from \"src/app/enums/filter-type.enum\";\nimport { Table } from \"src/app/enums/table.enum\";\nimport { ScheduleReportMode } from \"../../enums/schedule-report-mode\";\nimport { ScheduleReportType } from \"../../enums/schedule-report-type\";\n\nexport class GridConfig {\n\n // the api url of the grid system\n apiUrl: string;\n\n // Report Type, this property is used as the key name to save grid-settings inside local storage.\n tableType: Table;\n\n // To display general search input\n displayGeneralSearch?: boolean;\n\n // The text of the placeholder of the general search input\n generalSearchPlaceholder?: string;\n\n // The key-name of the general search in `Payload` of the api request\n generalSearchApiKeyName?: string;\n\n // The minimum character count which the user should type to send request to server\n generalSearchMinimumCharsToSearch?: number;\n\n // display control buttons of the grid\n displayQuestionsFilter?: boolean;\n displayAnnouncementsFilter?: boolean;\n displayDynamicFieldsFilter?: boolean;\n displayDynamicAssignFieldsFilter?: boolean;\n displayEnableMagicLink?: boolean;\n displaySettingsButton?: boolean;\n displayExportsButton?: boolean;\n forceHideAllControlButtons?: boolean;\n\n scheduleReport?: ScheduleReport;\n\n // The url of the CSV Report request. if this property is set to empty,\n // then the csvReport button will not be displayed\n csvReportUrl?: string;\n\n // the title of CSV Report. if this property is set to null,\n // then the type of the Table.toString() will be used\n csvExportSubject?: string;\n\n // To append extra filters to the final `Payload` to send via api request to server\n initialFilters?: InitialFilter[];\n\n loadDataOnInitialFilterChange?: boolean;\n\n // To control the `refresh` button to be disabled or enabled from outside.\n refreshButtonValidity?: boolean;\n\n displayRefreshButton?: boolean;\n\n // By default, the grid system reads data from `data` property of the response\n // this callback method is used when the response data is inside another property-name or nested property\n // example:\n // apiResultCallback: (res) => {\n // return {\n // data: res?.serverResponse?.data,\n // totalCount: res?.serverResponse?.totalCount,\n // }\n // }\n apiResultCallback?: (data) => { totalCount: number, data: T[] };\n\n // append headers to the grid api request\n headers?: { [key: string]: any };\n\n // request object mode\n requestPayloadMode?: RequestPayloadModeEnum;\n includeExternalCompanySites: boolean = false;\n\n cacheKeyPrefix?: string;\n hideEmptyColumns?: boolean;\n\n constructor(config: GridConfigModel) {\n this.apiUrl = config.apiUrl;\n this.tableType = config.tableType;\n this.displayGeneralSearch = config.displayGeneralSearch;\n this.generalSearchPlaceholder = config.generalSearchPlaceholder;\n this.generalSearchApiKeyName = config.generalSearchApiKeyName;\n this.generalSearchMinimumCharsToSearch = config.generalSearchMinimumCharsToSearch;\n this.displayQuestionsFilter = config.displayQuestionsFilter;\n this.displayAnnouncementsFilter = config.displayAnnouncementsFilter;\n this.displayDynamicFieldsFilter = config.displayDynamicFieldsFilter;\n this.displayDynamicAssignFieldsFilter = config.displayDynamicAssignFieldsFilter;\n this.displaySettingsButton = config.displaySettingsButton;\n this.displayExportsButton = config.displayExportsButton;\n this.forceHideAllControlButtons = config.forceHideAllControlButtons;\n this.displayEnableMagicLink = config.displayEnableMagicLink;\n this.scheduleReport = config.scheduleReport;\n this.csvReportUrl = config.csvReportUrl;\n this.initialFilters = config.initialFilters;\n this.loadDataOnInitialFilterChange = config.loadDataOnInitialFilterChange;\n this.refreshButtonValidity = config.refreshButtonValidity;\n this.displayRefreshButton = config.displayRefreshButton;\n this.apiResultCallback = config.apiResultCallback;\n this.headers = config.headers;\n this.requestPayloadMode = config.requestPayloadMode;\n this.csvExportSubject = config.csvExportSubject;\n this.includeExternalCompanySites = config.includeExternalCompanySites;\n this.cacheKeyPrefix = config.cacheKeyPrefix;\n this.hideEmptyColumns = config.hideEmptyColumns;\n }\n\n get exportAsJob() {\n switch (this.tableType) {\n case Table.ActivityReport:\n case Table.ContactTracingReport:\n case Table.Approval:\n case Table.AssetReport:\n case Table.CardReport:\n case Table.FormReport:\n case Table.InductionReport:\n case Table.InventoryReport:\n case Table.PermitReport:\n case Table.SiteAsset:\n case Table.SWMSReport:\n case Table.LiveAttendance:\n case Table.SupplierAsset:\n case Table.SiteBriefingReport:\n return true;\n }\n return false;\n }\n}\n\nexport class GridConfigModel {\n apiUrl: string;\n tableType: Table;\n displayGeneralSearch?: boolean;\n generalSearchPlaceholder?: string;\n generalSearchApiKeyName?: string;\n generalSearchMinimumCharsToSearch?: number;\n displayQuestionsFilter?: boolean;\n displayAnnouncementsFilter?: boolean;\n displayDynamicFieldsFilter?: boolean;\n displayDynamicAssignFieldsFilter?: boolean;\n displayEnableMagicLink?: boolean;\n displaySettingsButton?: boolean;\n displayExportsButton?: boolean;\n displayRefreshButton?: boolean;\n forceHideAllControlButtons?: boolean;\n scheduleReport?: ScheduleReport;\n csvReportUrl?: string;\n initialFilters?: InitialFilter[];\n loadDataOnInitialFilterChange?: boolean;\n refreshButtonValidity?: boolean;\n apiResultCallback?: (data) => { totalCount: number; data: T[] };\n headers?: { [key: string]: any };\n requestPayloadMode?: RequestPayloadModeEnum;\n csvExportSubject?: string;\n companyId?: number;\n includeExternalCompanySites?: boolean = false;\n cacheKeyPrefix?: string = '';\n hideEmptyColumns?: boolean = true;\n}\n\n\nexport class GridColumn {\n // Filter Type\n type?: FilterType;\n order?: number;\n name: string;\n\n // The data key-name of the column in server response. Also a unique identifier to make things work!\n key: string;\n\n // The key-name of sort by in the api request of the grid\n sortBy?: string;\n\n // Whether this column is able to sort the data or not\n enableSort?: boolean;\n\n // Whether this column is able to get filtered or not\n enableFilter?: boolean;\n\n // The key-name of this column in the `Payload` of the request\n propertyNameInQuery?: string;\n\n // To display customized data inside the cell of the column\n displayFunction?: (el: T) => any;\n\n // do some data modification\n populateData?: (el: T) => any;\n\n // if this property is set, then a flag with the key-name of the column `key` property, will append\n // to the `Payload` and will be sent to server.\n // this type of properties has extra data from server if they set to true\n hasIncludeFilter?: boolean;\n\n // if set to true, the column will be displayed as a column, otherwise no column will be displayed\n showAsColumn?: boolean;\n\n // Display or hide the column of this item in the grid table\n visible?: boolean;\n\n // The filter request data.\n // if the data of the filters related to the column is a `list` then this property should be true\n // example:\n //\n // siteIds filter data to send to server\n // siteIds: [ 1, 2, 3 ] => isArray true\n // siteIds: 1 => isArray false\n isArray?: boolean;\n\n // to display the checkbox related to this column inside settings of the grid\n displayInCheckBoxSettings?: boolean;\n\n // if it is needed to send a specific part of the value of this column to the server\n payloadCustomKeyValue?: (el) => any;\n\n // The result of this callback is used to check if the data of the column is empty or not\n // This is mostly used for template columns which involves more than 1 field to display the data\n hideEmptyColumnsEmptinessConditionCallback?: (res) => boolean;\n\n // To display customized data as an ng-template inside the cell of the column or a built-in template in the grid component\n gridTemplate?: GridTemplate;\n filterSettings?: FilterSettings;\n}\n\nexport class ScheduleReport {\n // api: string;\n enabled: boolean;\n mode: ScheduleReportMode;\n type: ScheduleReportType;\n reportColumns?: (string | ScheduleReportColumn)[]\n}\n\nexport class ScheduleReportColumn {\n labelCaption: string;\n key: string;\n}\n\nexport class InitialFilter {\n key: string;\n value: any;\n\n // displays the initial filter beside other generic filters\n displayInFilterRenderer?: boolean;\n usage?: InitialFilterUsage = InitialFilterUsage.Always;\n}\n\nexport enum InitialFilterUsage {\n Always,\n Report,\n CSV,\n}\n\nexport enum RequestPayloadModeEnum {\n Normal,\n SeparateQueryKey,\n}\n\n/*Grid Template Data Injector*/\nexport class GridTemplate {\n private _isComponentTemplateName: boolean;\n get isComponentTemplateName() {\n return this._isComponentTemplateName;\n }\n\n private _templateName: string;\n get templateName() {\n return this._templateName;\n }\n\n private _data: {};\n get data() {\n return this._data;\n }\n\n private _csvFields: string[];\n get csvFields() {\n return this._csvFields;\n }\n\n\n ComponentTemplateName(name: string) {\n this._templateName = name;\n this._isComponentTemplateName = true;\n return this;\n }\n\n FullNameMobile(keys: {\n mobile?: string,\n fullName?: string,\n firstName?: string,\n lastName?: string,\n userId?: string\n }) {\n this._initializeGridScopeTemplate('FullNameMobile', keys)\n return this;\n }\n\n SiteNameReference(keys: {\n siteName: string,\n siteReference?: string,\n }) {\n this._initializeGridScopeTemplate('SiteNameReference', keys)\n return this\n }\n\n FullNameAccompanierCount(keys: {\n accompaniersText: string,\n firstName: string,\n lastName: string,\n accompanierCount: string,\n userId?: string\n }) {\n this._initializeGridScopeTemplate('FullNameAccompanierCount', keys)\n return this;\n }\n\n Inductions(keys: {\n inductions: string,\n }) {\n this._initializeGridScopeTemplate('Inductions', keys)\n return this;\n }\n\n SupplierDocuments(keys: {\n supplierDocuments: string,\n }) {\n this._initializeGridScopeTemplate('SupplierDocuments', keys)\n return this;\n }\n\n\n CsvFields(keys?: string[]) {\n this._csvFields = keys ?? [];\n return this;\n }\n\n private _initializeGridScopeTemplate(templateName: string, keys: { [key: string]: any }) {\n this._templateName = templateName?.toString();\n this._data = keys;\n this._isComponentTemplateName = false;\n }\n}\n\nexport class FilterSettings {\n includeInactiveItems: boolean\n}\n\n/*\nexport enum GridTemplateNames {\n FullNameMobile = 'FullNameMobile',\n SiteNameReference = 'SiteNameReference',\n FullNameAccompanierCount = 'FullNameAccompanierCount',\n SiteInductions = 'SiteInductions',\n}\n*/\n","export class EmergencyContactViewModel {\n public mobile: string\n public relationship: string\n public name: string\n\n constructor(name, mobile, relationship) {\n this.mobile = mobile;\n this.relationship = relationship;\n this.name = name;\n }\n\n static newEmptyAnswer() {\n return {name: '', mobile: '', relationship: ''} as EmergencyContactViewModel;\n }\n static isEmpty(data: EmergencyContactViewModel) {\n return !(data.mobile?.toString().length > 0 ||\n data.name?.toString().length > 0 ||\n data.relationship?.toString().length > 0);\n }\n}\n","export enum ScheduleReportMode {\n ScheduleReport = 0,\n HashCode = 1,\n Export = 2,\n}","export enum ScheduleReportType {\n ActivityReport = 0,\n InventoryReport = 1,\n ApprovalReport = 10,\n}","export class QuestionAnswerInputModel {\n siteAttendanceId: number;\n isCheckInAnswer: boolean;\n hasCheckOutDate? : boolean = false;\n}","export class QuestionParameter {\n static getParameter(parameter: string) {\n return JSON.parse(parameter) as T;\n }\n}","export enum ReportDeliveryType {\n Email = 0,\n}\n\nexport enum ReportPeriodType {\n OneTime = -1,\n Daily = 0,\n Weekly = 1,\n Monthly = 2,\n HalfYearly = 3,\n Yearly = 4,\n}\n\nexport enum MyobPeriodType {\n Weekly = 0,\n Monthly = 1,\n}\n\n","export enum SortOrder {\n ASC = 0,\n DESC = 1\n}","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[obcGridTemplateName]'\n})\nexport class GridTemplateNameDirective {\n\n constructor(public readonly template: TemplateRef) { }\n @Input('obcGridTemplateName') templateName: string;\n}\n","import { Injectable } from '@angular/core';\nimport { ErrorService } from './error.service';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError } from 'rxjs/operators';\nimport { SiteAttendanceReportViewModel } from '../models/site-report-models';\nimport { Observable } from 'rxjs';\nimport { SiteAttendanceViewModel, ManualCheckInAttendanceRequestViewModel, CheckOutAttendanceRequestModel, AnonymousCheckInAttendanceRequestModel, AnonymousCheckOutAttendanceRequestModel } from '../models/attendance-request/attendance-request-viewmodel';\nimport { SiteAttendanceAttachmentsViewModel } from '../models/site-attendance-attachments-viewmodel';\nimport { UserProfileViewmodel } from '../models/user-profile-viewmodel';\nimport { SiteCheckInOutData } from '../models/site-check-in-out-data';\nimport { CheckinServerResult, ServerResultData, CheckServerResult } from '../models/server-result-data';\nimport { SaveScheduledReportViewmodel, ScheduledReportViewModel } from '../models/save-scheduled-report-model';\nimport { AttendanceFieldViewModel } from '../models/attendance-field-model';\nimport { SendPushNotificationModel } from '../models/send-push-notification-model';\nimport { PagingViewModel } from '../models/site-list-paging-view-model';\n\nimport { PreCheckInListQueryModel } from \"../models/pre-check-in/pre-checkin-list-query-model\";\nimport {\n ApprovePreCheckInModel,\n PreAttendanceReportViewModel,\n UserPreAttendanceCheckInsViewModel\n} from \"../models/pre-check-in/user-pre-attendance-check-ins-view-model\";\nimport { PagingRequest } from \"../models/paging-request-model\";\nimport { SendMessageResponseViewModel } from '../models/send-message-response-view-model';\ndeclare var moment: any;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteAttendanceService {\n\n apiUrl: string = \"/api/SiteAttendance\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n getSiteAttendanceAttachments(siteAttendanceId: number): Observable {\n return this.http.get(`${this.apiUrl}/${siteAttendanceId}/attachments-for-host`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n ManualCheckIn(model: ManualCheckInAttendanceRequestViewModel): Observable> {\n return this.http.post>(`${this.apiUrl}/host-manual-checkin`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n ManualCheckOut(mobile: string, model: CheckOutAttendanceRequestModel) {\n return this.http.post>(`${this.apiUrl}/host-manual-checkout?mobileNumber=${mobile}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n AnonyousCheckOut(key: any, model: AnonymousCheckOutAttendanceRequestModel) {\n return this.http.post>(`${this.apiUrl}/anonymous-checkout/${key}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n\n AnonymousCheckIn(model: AnonymousCheckInAttendanceRequestModel) {\n return this.http.post>(`${this.apiUrl}/anonymous-checkin`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n SiteActiveAttendees(siteId: number): Observable {\n return this.http.get(`${this.apiUrl}/site-active-attendees/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getAttendanceContactTracing(siteAttendanceId: number): Observable {\n return this.http.get(`${this.apiUrl}/get-attendance-contact-tracing/${siteAttendanceId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n sendEmergencyAlarm(siteId: number, alarmMessage: string): Observable {\n return this.http.post(`${this.apiUrl}/send-emergency-alarm`, { siteId: siteId, message: alarmMessage })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getTotalCountCheckInSite(siteId: number): Observable {\n return this.http.get(`${this.apiUrl}/${siteId}/total-siteattendance-count/`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getContactInformationByAttendanceId(siteAttendanceId: number): Observable {\n return this.http.get(`${this.apiUrl}/${siteAttendanceId}/contact-information/`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n // getSiteCheckInOutData(model: any): Observable {\n // return this.http.post(`${this.apiUrl}/site-check-in-out-data/`, model)\n // .pipe(catchError(this._errorService.handleError));\n // }\n\n saveScheduledReport(model: SaveScheduledReportViewmodel): Observable {\n return this.http.post(`${this.apiUrl}/save-scheduled-report/`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n\n saveAndGetMagicLinkForPowerBI(model: SaveScheduledReportViewmodel): Observable {\n return this.http.post(`${this.apiUrl}/get-powerbi-magic-link`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n\n getMyScheduledReport(): Observable {\n return this.http.get(`${this.apiUrl}/my-scheduled-reports/`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n deleteMyScheduledReport(reportId: number): Observable {\n return this.http.get(`${this.apiUrl}/delete-my-scheduled-reports/${reportId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n sendHostPushNotification(model: SendPushNotificationModel, siteId?: number) {\n return this.http.post(`${this.apiUrl}/send-site-host-push-notification/${siteId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n //The report we should show in popup\n exportContactsReportAsCsv(siteAttendanceId: number) {\n return window.open(this.apiUrl + '/export-contacts-report-csv/?siteAttendanceId=' + siteAttendanceId);\n }\n\n getHostCheckInData(model: any) {\n return this.http.post(`${this.apiUrl}/host-check-in-data`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getAnonymousCheckInData(model: any) {\n return this.http.post(`${this.apiUrl}/anonymous-check-in-data`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n approveSiteAttentendanceByHost(siteAttendanceId: number) {\n return this.http.get(`${this.apiUrl}/approve-site-attendance/${siteAttendanceId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n rejectSiteAttentendanceByHost(siteAttendanceId: number) {\n return this.http.get(`${this.apiUrl}/reject-site-attendance/${siteAttendanceId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getPreCheckInsList(model: PagingRequest): Observable> {\n return this.http.post>(`${this.apiUrl}/pre-checkin-list`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n approvePreCheckInModel(model: ApprovePreCheckInModel): Observable> {\n return this.http.post>(`${this.apiUrl}/host-approve-pre-checkin`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n cancelPreCheckInModel(preCheckinId: number): Observable> {\n return this.http.get>(`${this.apiUrl}/host-cancel-pre-checkin/${preCheckinId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Table } from '../enums/table.enum';\nimport { TableSetting } from '../models/table-setting';\nimport { StorageService } from './storage.service';\nimport { UserService } from \"./user.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TableSettingService {\n Table = Table;\n private tableSettings: {}\n\n constructor(private storageService: StorageService, private userService: UserService) {\n }\n\n get(key: string): BehaviorSubject {\n if (this.tableSettings[key])\n return this.tableSettings[key];\n }\n\n set(key: string, setting: TableSetting) {\n this.tableSettings[key].next(setting);\n this.setToLocalStorage(key, setting);\n }\n\n private getTableStorageKey(key: string): string {\n return `c_${this.userService?._currentCompany?.id}_report_${key}`;\n }\n\n getTableSettingsFromCache(tableKey: string, defaultConfig: TableSetting) : TableSetting {\n let table;\n if(this.userService?._currentCompany) {\n table = this.storageService.get(this.getTableStorageKey(tableKey));\n if(!table) {\n table = this.storageService.get(`table_${tableKey}`);\n this.setToLocalStorage(tableKey, !!table ? JSON.parse(table) : defaultConfig);\n }\n } else {\n table = this.storageService.get(`table_${tableKey}`);\n }\n return !!table ? JSON.parse(table) : defaultConfig;\n }\n\n setToLocalStorage(key: string, setting: TableSetting) {\n this.storageService.set(this.getTableStorageKey(key), JSON.stringify(setting));\n }\n}\n","export enum TextOperator {\n equals = 0,\n contains = 1,\n isGreaterThan = 2,\n isGreaterThanOrEqualTo = 3,\n isLessThan = 4,\n isLessThanOrEqualTo = 5,\n isNotNull = 6,\n isNull = 7,\n}\n","export enum ToolDynamicFieldType {\n Text = 0,\n Number = 1,\n File = 2,\n Date = 3,\n}\n","
\n
\n {{title}}\n
\n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n
\n Question\n \n Add
\n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n
\n

there is no question to add

\n
\n \n \n \n \n
\n Select\n
\n
\n
\n
\n
\n
\n\n \n\n","import { Component, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { AsyncResult } from 'src/app/models/helper-models';\nimport { QuestionViewModel } from 'src/app/models/question-viewmodel';\n\n@Component({\n selector: 'app-question-selector',\n templateUrl: './question-selector.component.html',\n styleUrls: ['./question-selector.component.scss']\n})\nexport class QuestionSelectorComponent implements OnInit {\n title = \"Select Question(s)\";\n filterQuestionTerm = null;\n @Input() showAll = false;\n @Input() companyQuestions: QuestionViewModel[] = [];\n @Input() addedQuestions: number[] = [];\n @Input() showAddButton: boolean = true;\n @Input() isMultiSelect: boolean = true;\n @Output() addQuestion = new EventEmitter();\n @Output() public hide = new EventEmitter();\n questions: QuestionViewModel[] = []\n\n get companyAvailableQuestions(): QuestionViewModel[] {\n return this.companyQuestions.filter(function (x) { return this.indexOf(x.id) < 0 && (this.showAll || x.isActive) }, this.addedQuestions);\n };\n bsModalRef: BsModalRef\n constructor(private bsModalService: BsModalService) { }\n\n ngOnInit() {\n }\n\n onAddQuestion(id: number) {\n var question = this.companyAvailableQuestions.find(x => x.id == id);\n if (question && this.addQuestion) {\n this.addQuestion.emit(question);\n\n if(!this.isMultiSelect) {\n this.hide.emit();\n }\n } \n }\n onAddNewQuestionClick(template: TemplateRef) {\n this.bsModalRef = this.bsModalService.show(template, { class: 'modal-lg' });\n }\n onResultQuestionAdd(result: AsyncResult) {\n this.bsModalRef.hide();\n if (!result.isSucceeded) return;\n let newQuestion = new QuestionViewModel(result.result);\n this.companyQuestions.push(newQuestion)\n this.onAddQuestion(newQuestion.id);\n this.hide.next();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filterByCondition'\n})\nexport class FilterByConditionPipe implements PipeTransform {\n\n transform(items: any[], condition?: any, parameter1?: any, parameter2?: any, parameter3?: any): any[] {\n return items?.filter(v => condition(v, parameter1, parameter2, parameter3));\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TextOperator } from '../enums/text-operator.enum';\n\n@Pipe({\n name: 'textOperator'\n})\nexport class TextOperatorPipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === TextOperator.equals) return 'Equals';\n if (value === TextOperator.contains) return 'Contains';\n if (value === TextOperator.isGreaterThan) return 'Is Greater Than';\n if (value === TextOperator.isGreaterThanOrEqualTo) return 'Is Greater Than Or Equal To';\n if (value === TextOperator.isLessThan) return 'Is Less Than';\n if (value === TextOperator.isLessThanOrEqualTo) return 'Is Less Than Or Equal To';\n if (value === TextOperator.isNull) return 'No Answer';\n if (value === TextOperator.isNotNull) return 'Has Answer';\n return value?.toString();\n }\n\n}\n","\n\n\n
\n \n
\n
Define Filter
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n \n
{{ _question.questionText }}
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n
\n \n
\n\n \n
\n
\n\n
\n \n\n \n \n This input field is required\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n\n\n \n \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { finalize } from 'rxjs/operators';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { TextOperator } from 'src/app/enums/text-operator.enum';\nimport { uuid4 } from 'src/app/helpers/uuid';\nimport { QuestionViewModel } from 'src/app/models/question-viewmodel';\nimport { QuestionService } from 'src/app/services/question.service';\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\nimport {\n MixedQuestionAndDisplayFilterViewModel,\n QuestionAnswerFilterViewModel\n} from \"../../../models/question-answer-filter-model\";\nimport { DatetimePipe } from \"../../../pipes/datetime.pipe\";\nimport { ItemTitleValue } from 'src/app/models/helper-models';\nimport { InventoryService } from 'src/app/services/inventory.service';\nimport { GlobalToolDynamicFieldViewModel } from 'src/app/models/inventory/global-tool-dynamic-field-view-model';\nimport { ToolDynamicFieldType } from 'src/app/enums/tool-dynamic-field-type.enum';\n\n@Component({\n selector: 'obc-question-answer-filter',\n templateUrl: './question-answer-filter.component.html',\n styleUrls: ['./question-answer-filter.component.scss']\n})\nexport class QuestionAnswerFilterComponent implements OnInit {\n isAllQuestionFilter: boolean = true;\n @Input() set filters(value: MixedQuestionAndDisplayFilterViewModel) {\n this.filterQuestions = [];\n if (value && value.questionFilters?.length > 0)\n this.filterQuestions.push(...value.questionFilters);\n }\n @Output() public onClose = new EventEmitter();\n questions: QuestionViewModel[];\n globalAssetFields: GlobalToolDynamicFieldViewModel[];\n inProgress: boolean;\n selectedQuestion: any = null;\n filterQuestions: QuestionViewModel[] = [];\n _questionType = QuestionType;\n QuestionTypesToShow = [\n QuestionType.Boolean,\n QuestionType.SingleSelect,\n QuestionType.MultiSelect,\n QuestionType.Text,\n QuestionType.Date,\n ];\n TextOperator = TextOperator;\n totalErrors = [];\n questionModalRef: BsModalRef;\n\n mandatoryValueValidators = [Validators.required];\n modalRef: BsModalRef;\n thisComponentInstance: QuestionAnswerFilterComponent;\n\n constructor(\n private questionService: QuestionService,\n private inventoryService: InventoryService,\n private bsModalService: BsModalService,\n private datetimePipe: DatetimePipe,\n ) {\n this.thisComponentInstance = this;\n }\n\n ngOnInit(): void {\n this.getGlobalAssetFields();\n }\n\n onChangeMode(value) {\n this.isAllQuestionFilter = value;\n }\n\n getAssetQuestionType(question: QuestionViewModel): ToolDynamicFieldType {\n return QuestionType.AssetField == question.questionType ?\n this.globalAssetFields?.find(x => x.id == JSON.parse(question.questionParameters)['globalToolDynamicFieldId'])?.type : null;\n }\n\n isTextQuestion(question: QuestionViewModel): boolean {\n return question.questionType === QuestionType.Text ||\n (question.questionType === QuestionType.AssetField && [ToolDynamicFieldType.Text, ToolDynamicFieldType.Number].some(t => t == this.getAssetQuestionType(question)));\n }\n isDateQuestion(question: QuestionViewModel): boolean {\n return question.questionType === QuestionType.Date ||\n (question.questionType === QuestionType.AssetField && this.getAssetQuestionType(question) == ToolDynamicFieldType.Date);\n }\n isTextOrDateQuestion(question: QuestionViewModel): boolean {\n return this.isTextQuestion(question) || this.isDateQuestion(question);\n }\n\n\n openAnswersFilterModal(template) {\n this.modalRef = this.bsModalService.show(template, {\n ignoreBackdropClick: true,\n class: \"modal-lg\",\n });\n this.modalRef?.onHide.subscribe((_) => {\n this.onCloseMethod();\n })\n }\n\n onCloseMethod(ignoreInvalidForm: boolean = false) {\n if (this.canCloseModal()) {\n this.modalRef.hide();\n this.onClose.emit({\n questionFilters: this.filterQuestions,\n displayFilters: this.filterQuestions?.map((item) => {\n return this.getFilterModelItem(item);\n }),\n isAllFilter: this.isAllQuestionFilter\n } as MixedQuestionAndDisplayFilterViewModel);\n }\n }\n canCloseModal() {\n let anyInvalidItemAvailable = this.filterQuestions?.filter((item) => {\n return this.isTextOrDateQuestion(item) &&\n (item.operatorFormControl?.value != TextOperator.isNull && item.operatorFormControl?.value != TextOperator.isNotNull)\n })?.find((item: QuestionViewModel) => {\n return (!item.formControl?.value || item.formControl?.value == 'Invalid Date')\n });\n return !anyInvalidItemAvailable;\n }\n\n getGlobalAssetFields() {\n this.inventoryService.getGlobalToolDynamicFields({})\n .subscribe({\n next: assetFields => {\n this.globalAssetFields = assetFields;\n this.getQuestions();\n }\n });\n }\n\n getQuestions() {\n this.questionService.getActiveQuestions()\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe({\n next: (res) => {\n this.questions = res.data.filter(_question =>\n this.QuestionTypesToShow.some(qt => qt === _question.questionType) ||\n (_question.questionType == QuestionType.AssetField && ((this.getAssetQuestionType(_question) ?? ToolDynamicFieldType.File) != ToolDynamicFieldType.File))\n ).map(x => x = new QuestionViewModel(x));\n }\n });\n }\n\n getQuestionItems(question: QuestionViewModel): ItemTitleValue[] {\n return QuestionViewModel.getQuestionOptions(question, false);\n }\n\n getQuestionTitle(id: number) {\n return this.questions.filter(q => q.id == id)[0].questionText;\n }\n onAddQuestionToFilter() {\n if (!this.selectedQuestion) return;\n var clone = new QuestionViewModel(this.selectedQuestion);\n this.initFilterQuestion(clone);\n clone.uuid = uuid4();\n\n if (this.isTextOrDateQuestion(clone)) {\n clone.formControl?.updateValueAndValidity();\n clone.operatorFormControl?.valueChanges?.subscribe((res) => {\n if (res != TextOperator.isNull && res != TextOperator.isNotNull) {\n clone.formControl?.setValidators(this.mandatoryValueValidators);\n } else {\n clone.formControl?.clearValidators();\n }\n clone.formControl?.updateValueAndValidity();\n })\n }\n this.filterQuestions.push(clone);\n }\n\n onRemoveQuestionFromFilter(question: any) {\n var index = this.filterQuestions.indexOf(question);\n if (index >= 0) {\n this.filterQuestions.splice(index, 1);\n }\n }\n\n filterOperators(operator: string, that: QuestionAnswerFilterComponent, question: QuestionViewModel) {\n return that.isTextQuestion(question) || TextOperator[operator] != TextOperator.contains;\n }\n\n onMultiSelectValueChange(question, value, event) {\n if (value.itemValue == null && event.target.checked)\n question.items.forEach(item => {\n if (item.itemValue != null) {\n item.disabled = true;\n item.formControl.setValue(false);\n }\n });\n else\n question.items.forEach(item => {\n item.disabled = false;\n });\n }\n initFilterQuestion(question: QuestionViewModel) {\n question.items = [];\n\n if (this.isTextQuestion(question)) {\n question.disabled = false;\n question.formControl = new FormControl(null, this.mandatoryValueValidators);\n question.operatorFormControl = new FormControl(TextOperator.contains);\n }\n else if (this.isDateQuestion(question)) {\n question.disabled = false;\n question.formControl = new FormControl(null, this.mandatoryValueValidators);\n question.operatorFormControl = new FormControl(TextOperator.equals);\n }\n else {\n switch (question.questionType) {\n case QuestionType.Boolean:\n var formControl = new FormControl(question.questionParametersAsString?.isRequired === false ? null : \"Yes\");\n question.items = [{ itemTitle: 'Yes', itemValue: 'Yes', formControl: formControl }, { itemTitle: 'No', itemValue: 'No', formControl: formControl }]\n if (question.questionParametersAsString?.isRequired === false)\n question.items.push({ itemTitle: 'No Select', itemValue: null, formControl: formControl });\n break;\n case QuestionType.SingleSelect:\n var formControl = new FormControl();\n question.items = QuestionViewModel.getQuestionOptions(question, false)\n .map(c => {\n return { itemTitle: c.itemTitle, itemValue: c.itemValue, formControl: formControl }\n });\n formControl.setValue(question.items[0].itemValue);\n break;\n case QuestionType.MultiSelect:\n question.items = QuestionViewModel.getQuestionOptions(question, false)\n .map(c => {\n return { itemTitle: c.itemTitle, itemValue: c.itemValue, formControl: new FormControl(false), disabled: false }\n });\n break;\n }\n }\n }\n\n getFilterModelItem(_question: QuestionViewModel, notitle: boolean = false): QuestionAnswerFilterViewModel {\n let answer: { title: any, value: any, operator?: TextOperator };\n if (this.isTextQuestion(_question)) {\n answer = {\n title: _question.formControl.value ?? \"Not Answered\",\n value: _question.formControl.value ?? \"\",\n operator: _question.operatorFormControl.value\n };\n }\n else if (this.isDateQuestion(_question)) {\n answer = {\n title: _question.operatorFormControl.value == TextOperator.isNotNull || _question.operatorFormControl.value == TextOperator.isNull ?\n '' :\n (_question.formControl.value ? this.datetimePipe.transform(_question.formControl.value) : \"Select Date\"),\n value: _question.formControl.value ?? new Date(),\n operator: _question.operatorFormControl.value\n };\n }\n else {\n switch (_question.questionType) {\n case QuestionType.Boolean:\n case QuestionType.SingleSelect:\n const item = _question.items.filter(i => i.itemValue === _question.items[0].formControl.value)[0];\n answer = { title: item.itemTitle, value: item.itemValue ?? \"\" };\n break;\n case QuestionType.MultiSelect:\n const titles = _question.items.filter((item) => item.formControl.value)\n .map((item) => item.itemTitle ?? \"Not Select Item\").join();\n\n const values = _question.items.filter((item) => item.formControl.value)\n .map((item) => item.itemValue ? item.itemValue : \"\").join();\n answer = { title: titles, value: values ?? \"\" };\n break;\n }\n }\n\n let result = {\n questionId: _question.id,\n answers: [answer.value],\n titles: [answer.title],\n operator: answer.operator,\n uuid: _question.uuid,\n text: _question.questionText,\n } as QuestionAnswerFilterViewModel;\n\n if (notitle)\n result.titles = null;\n return result;\n }\n\n onShowAddQuestionsModal(template) {\n this.questionModalRef = this.bsModalService.show(template);\n }\n\n onCloseAddQuestionsModal() {\n this.questionModalRef.hide();\n }\n\n addQuestion(res: QuestionViewModel) {\n if (res != null) {\n this.selectedQuestion = res;\n this.onAddQuestionToFilter();\n }\n }\n\n getAddedQuestions() {\n return this.filterQuestions ? this.filterQuestions.map(q => q.id) : [];\n }\n\n}\n\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport {\n AnnouncementUpdateModel,\n AnnouncementViewModel,\n SiteAnnouncementUpdateModel,\n SiteAnnouncementViewModel,\n SitesOfAnnouncementQueryModel,\n SitesOfAnnouncementViewModel\n} from '../models/announcement-viewmodel';\nimport { ServerResult } from '../models/server-result-data';\nimport { SiteActiveStatus } from '../enums/site-active-status.enum';\nimport { AnnouncementVisitModel } from \"../models/announcement-visit\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AnnouncementService {\n constructor(private http: HttpClient, private errorService: ErrorService) { }\n getAll = (activeStatus: SiteActiveStatus = SiteActiveStatus.Active): Observable =>\n this.http.get(`/api/announcement/get-all/${activeStatus}`)\n .pipe(catchError(this.errorService.handleError));\n\n getSiteAnnouncements = (siteId): Observable =>\n this.http.get(`/api/announcement/get-site-announcement/${siteId}`)\n .pipe(catchError(this.errorService.handleError));\n\n add(model: AnnouncementUpdateModel): Observable {\n return this.http.post('/api/announcement/add', model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n remove(id: number): Observable {\n return this.http.get(`/api/announcement/remove/${id}`)\n .pipe(catchError(this.errorService.handleError));\n }\n\n update(id: number, model: AnnouncementUpdateModel): Observable {\n return this.http.post(`/api/announcement/update/${id}`, model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n updateSiteAnnouncement(id: number, model: SiteAnnouncementUpdateModel) {\n return this.http.post(`/api/announcement/update-site-announcement/${id}`, model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n removeSiteAnnouncement(id: number) {\n return this.http.get(`/api/announcement/remove-site-announcement/${id}`)\n .pipe(catchError(this.errorService.handleError));\n }\n\n\n addSiteAnnouncement(model: SiteAnnouncementUpdateModel) {\n return this.http.post(`/api/announcement/add-site-announcement`, model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n RemoveAnnouncementFromAllSitesOfCompany(id: number): Observable {\n return this.http.post(`/api/announcement/remove-announcement-all-sites/${id}`, {})\n .pipe(catchError(this.errorService.handleError));\n }\n AddAnnouncementToAllSitesOfCompany(model: SiteAnnouncementUpdateModel): Observable {\n return this.http.post(`/api/announcement/add-announcement-all-sites`, model)\n .pipe(catchError(this.errorService.handleError));\n }\n // NotifyAnonymousAnnouncementVisit(model: any): Observable {\n // return this.http.post(`/api/announcement/notify-anonymous-announcement-visit`, model)\n // .pipe(catchError(this.errorService.handleError));\n // }\n getAnnouncementGroups(groupName: string): Observable {\n return this.http.get(`/api/announcement/announcement-groups/${groupName}`)\n .pipe(catchError(this.errorService.handleError));\n }\n\n NotifyAnnouncementVisit(model: AnnouncementVisitModel): Observable {\n return this.http.post(`/api/announcement/notify-announcement-visit`, model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n getSitesOfAnnouncement(model: SitesOfAnnouncementQueryModel): Observable {\n return this.http.post(`/api/announcement/get-all-sites-of-announcement`, model)\n .pipe(catchError(this.errorService.handleError));\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ClientAnnouncementFilterViewModel } from \"../../../models/announcement-viewmodel\";\n\n@Component({\n selector: 'app-filtered-announcement',\n templateUrl: './filtered-announcement.component.html',\n styleUrls: ['./filtered-announcement.component.scss']\n})\nexport class FilteredAnnouncementComponent implements OnInit {\n _announcement: ClientAnnouncementFilterViewModel;\n @Input() set model(value: ClientAnnouncementFilterViewModel) {\n this._announcement = value;\n }\n @Output() remove = new EventEmitter();\n @Output() stateChange = new EventEmitter();\n constructor() { }\n\n ngOnInit() {\n }\n\n onRemove() {\n this.remove.emit(this._announcement);\n }\n\n onChangeState($event) {\n this.stateChange.emit($event);\n }\n}\n","
\n \n
\n
\n \n \n {{_announcement.title}}\n \n
\n
\n \n \n
\n
\n
\n","\n\n\n\n
\n
\n
Define Filter
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { deepCloneJson } from \"../../helpers/general-functions\";\nimport { AnnouncementViewModel, ClientAnnouncementFilterViewModel } from \"../../models/announcement-viewmodel\";\nimport { uuid4 } from \"../../helpers/uuid\";\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\nimport { SiteActiveStatus } from \"../../enums/site-active-status.enum\";\nimport { finalize } from \"rxjs/operators\";\nimport { AnnouncementService } from \"../../services/announcement.service\";\n\n@Component({\n selector: 'obc-announcement-filter',\n templateUrl: './announcement-filter.component.html',\n styleUrls: ['./announcement-filter.component.scss']\n})\nexport class AnnouncementFilterComponent implements OnInit {\n\n @Input() set filters(value: ClientAnnouncementFilterViewModel[]) {\n this.filterAnnouncements = [];\n if (value && value?.length)\n this.filterAnnouncements.push(...value);\n }\n @Output() public onClose = new EventEmitter();\n\n clonedFilterAnnouncements: ClientAnnouncementFilterViewModel[] = [];\n filterAnnouncements: ClientAnnouncementFilterViewModel[] = [];\n clonedSelectedAnnouncement: AnnouncementViewModel = null;\n announcements: AnnouncementViewModel[];\n\n constructor(private bsModalService: BsModalService,\n private announcementService: AnnouncementService,\n ) { }\n\n ngOnInit(): void {\n this.announcementService.getAll(SiteActiveStatus.All)\n .pipe(finalize(() => {\n this.filteredAnnouncementList();\n }))\n .subscribe({\n next: (res) => {\n this.announcements = res;\n }\n });\n }\n\n modalRef: BsModalRef;\n openAnswersFilterModal(template) {\n this.setOriginalToCloneAnnouncementAndDoSearch();\n this.modalRef = this.bsModalService.show(template, {\n ignoreBackdropClick: true,\n class: \"modal-lg\",\n });\n this.modalRef?.onHide.subscribe((_) => {\n this.closeModal();\n })\n }\n\n filteredAnnouncementList(): AnnouncementViewModel[] {\n if (!this.announcements) return [];\n if (!this.filterAnnouncements) return this.announcements;\n return this.announcements.filter(x => !this.clonedFilterAnnouncements.some(y => y.id == x.id));\n }\n\n onAddAnnouncementToFilter() {\n if (!this.clonedSelectedAnnouncement) return;\n if (this.clonedFilterAnnouncements.some(x => x.id == this.clonedSelectedAnnouncement.id)) return;\n let clone = deepCloneJson(this.clonedSelectedAnnouncement) as any;\n clone.uuid = uuid4();\n clone.viewed = true;\n this.clonedFilterAnnouncements.push(clone);\n if (this.filteredAnnouncementList()?.length)\n this.clonedSelectedAnnouncement = this.filteredAnnouncementList()[0];\n else\n this.clonedSelectedAnnouncement = null;\n }\n\n onRemoveAnnouncementFromFilter(announcement: any, isModal: boolean) {\n let list = (isModal == true ? this.clonedFilterAnnouncements : this.filterAnnouncements);\n let oan = list.find(x => x.id == announcement.id);\n if (!oan) return;\n let index = list.indexOf(oan);\n if (index >= 0) {\n list.splice(index, 1);\n }\n }\n\n closeModal() {\n this.onClose.emit(this.clonedFilterAnnouncements)\n }\n\n setOriginalToCloneAnnouncementAndDoSearch() {\n this.clonedFilterAnnouncements = deepCloneJson(this.filterAnnouncements);\n }\n\n setCloneToOriginalAnnouncementAndDoSearch() {\n this.filterAnnouncements = deepCloneJson(this.clonedFilterAnnouncements);\n }\n\n}\n","
\n \n \n
\n\n\n
\n
\n
Define Dynamic Field Filter
\n
\n \n
\n
\n
\n
\n
\n
Only non image fields are filterable
\n
\n \n
\n \n
\n
\n
\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n
{{ _dynamicField.fieldName }}
\n
\n
\n
\n \n
\n \n
\n
\n\n\n
\n \n This input field is required\n
\n
\n
\n
\n\n
\n
\n \n
\n \n
\n\n\n
\n
\n\n
\n \n \n This input field is required\n
\n\n\n \n
\n
\n
\n\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n\n\n
\n
\n
Define Assign Dynamic Field Filter
\n
\n \n
\n
\n
\n
\n
\n
Only non image fields are filterable
\n
\n \n
\n \n
\n
\n
\n
\n
\n \n
\n
\n\n \n
\n \n
\n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n
{{ _assignDynamicField.fieldName }}
\n
\n
\n
\n \n
\n \n
\n
\n
\n \n This input field is required\n
\n\n
\n
\n
\n\n
\n
\n \n
\n \n
\n
\n
\n
\n \n \n This input field is required\n
\n \n
\n
\n
\n\n\n
\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ToolCategoryViewModel } from \"../../../models/inventory/tool-category-model\";\nimport { ToolDynamicFieldViewModel } from \"../../../models/inventory/tool-dynamic-field-model\";\nimport { ToolDynamicFieldType } from \"../../../enums/tool-dynamic-field-type.enum\";\nimport { FormControl, Validators } from \"@angular/forms\";\nimport { TextOperator } from \"../../../enums/text-operator.enum\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { DatetimePickerMode } from \"../../../enums/datetime-picker-mode.enum\";\nimport { InventoryDynamicFieldValues } from \"../../../models/inventory/inventory-dynamic-field-values\";\nimport { finalize } from \"rxjs/operators\";\nimport { InventoryService } from \"../../../services/inventory.service\";\nimport { DynamicFieldFilterWrapperViewModel } from \"../../../models/inventory/dynamic-field-filter-model\";\nimport { QuestionType } from \"../../../enums/question-type\";\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\n\n@Component({\n selector: 'obc-dynamic-fields-filter',\n templateUrl: './dynamic-fields-filter.component.html',\n styleUrls: ['./dynamic-fields-filter.component.scss']\n})\nexport class DynamicFieldsFilterComponent implements OnInit {\n\n @Input() set filters(value: ToolDynamicFieldViewModel[]) {\n if(!this.isAssignMode) {\n this.filterDynamicFields = [];\n if (value?.length)\n this.filterDynamicFields.push(...value);\n }\n if(this.isAssignMode) {\n this.filterAssignDynamicFields = [];\n if (value?.length)\n this.filterAssignDynamicFields.push(...value);\n }\n }\n @Input() isAssignMode: boolean = false;\n\n toolCategories: ToolCategoryViewModel[] = [];\n selectedCategory: ToolCategoryViewModel;\n selectedDynamicField: ToolDynamicFieldViewModel;\n selectedAssignDynamicField: ToolDynamicFieldViewModel;\n filterDynamicFields: ToolDynamicFieldViewModel[] = [];\n filterAssignDynamicFields: ToolDynamicFieldViewModel[] = [];\n DynamicFieldType = ToolDynamicFieldType;\n TextOperator = TextOperator;\n DatetimePickerMode = DatetimePickerMode;\n filterModel: DynamicFieldFilterWrapperViewModel[] = [];\n inProgress: boolean = false;\n\n @Output() public onClose = new EventEmitter();\n @Output('filters') outputFilters = new EventEmitter();\n @Output('refreshGrid') refreshGridEmitter: EventEmitter = new EventEmitter();\n\n constructor(private modalService: ModalService,\n private inventoryService: InventoryService,\n private bsModalService: BsModalService,\n ) { }\n\n ngOnInit(): void {\n this.inventoryService\n .getToolCategories()\n .pipe(\n finalize(() => {\n this.inProgress = false;\n })\n )\n .subscribe({\n next: (res) => {\n this.toolCategories = res.data;\n if (this.toolCategories.length > 0) {\n this.selectedCategory = this.toolCategories[0];\n }\n },\n error: (err) => {\n this.modalService.error(err);\n }\n }\n );\n }\n\n modalRef: BsModalRef;\n openCategoriesFilterModal(template) {\n this.selectFirstFieldsOfSelectedCategory();\n this.modalRef = this.bsModalService.show(template, {\n ignoreBackdropClick: true,\n class: \"modal-lg\",\n }\n );\n this.modalRef?.onHide.subscribe((res) => {\n this.onCloseMethod();\n })\n }\n\n selectFirstFieldsOfSelectedCategory() {\n this.selectedDynamicField = this.selectedCategory?.toolDynamicFields?.find((x: ToolDynamicFieldViewModel) => x.type != ToolDynamicFieldType.File);\n this.selectedAssignDynamicField =\n this.selectedCategory?.toolAssignDynamicFields?.find((x: ToolDynamicFieldViewModel) => x.type != ToolDynamicFieldType.File);\n }\n\n getFilterModel() {\n this.filterModel = [];\n return {\n assetDynamicFieldFilters: this._innerGetFilterModel(),\n assignDynamicFieldFilters: this._innerGetFilterModel(true),\n };\n }\n _innerGetFilterModel(isAssign: boolean = false, pushInFiltermodel: boolean = true): DynamicFieldFilterWrapperViewModel[] {\n let model = [];\n let filterFields;\n if (isAssign) filterFields = this.filterAssignDynamicFields;\n else filterFields = this.filterDynamicFields;\n\n for (let index = 0; index < filterFields.length; index++) {\n const _dynamicField = filterFields[index];\n let obj = {\n dynamicFieldId: _dynamicField.id,\n value: _dynamicField.formControl.value ?? '',\n operator:\n _dynamicField.operatorFormControl.value ?? TextOperator.contains,\n type: _dynamicField.type,\n };\n model.push(obj);\n if (pushInFiltermodel == true)\n this.filterModel.push({ ...obj, dynamicField: _dynamicField });\n }\n return model;\n }\n\n onCategoryChange() {\n this.selectFirstFieldsOfSelectedCategory();\n this.filterDynamicFields = [];\n this.filterAssignDynamicFields = [];\n }\n filterFunction(toolDynamicFieldViewModel: ToolDynamicFieldViewModel[]) {\n return toolDynamicFieldViewModel?.filter(df => df.type != ToolDynamicFieldType.File);\n }\n onAddDynamicFieldToFilters() {\n if (!this.selectedCategory) return;\n if (\n this.filterDynamicFields.some((x) => x.id == this.selectedDynamicField.id || x.type == ToolDynamicFieldType.File)\n )\n return;\n\n if (this.selectedDynamicField?.type == ToolDynamicFieldType.File)\n return;\n\n\n let validators = [Validators.required];\n if(this.selectedDynamicField?.type == ToolDynamicFieldType.Number) {\n validators.push(Validators.pattern(\"^[0-9]*$\"))\n }\n\n this.selectedDynamicField.formControl = new FormControl(null, validators);\n this.selectedDynamicField.operatorFormControl = new FormControl(\n TextOperator.contains\n );\n this.filterDynamicFields.push(this.selectedDynamicField);\n }\n onAddAssignDynamicFieldToFilters() {\n if (!this.selectedCategory) return;\n if (\n this.filterAssignDynamicFields.some(\n (x) => x.id == this.selectedAssignDynamicField.id\n )\n )\n return;\n\n if (this.selectedDynamicField?.type == ToolDynamicFieldType.File)\n return;\n\n this.selectedAssignDynamicField.formControl = new FormControl(null, [Validators.required]);\n this.selectedAssignDynamicField.operatorFormControl = new FormControl(\n TextOperator.contains\n );\n this.filterAssignDynamicFields.push(this.selectedAssignDynamicField);\n }\n onRemoveDynamicFieldFromFilter(dynamicField: any) {\n let index = this.filterAssignDynamicFields.indexOf(dynamicField);\n if (index >= 0) {\n this.filterAssignDynamicFields.splice(index, 1);\n }\n index = this.filterDynamicFields.indexOf(dynamicField);\n if (index >= 0) {\n this.filterDynamicFields.splice(index, 1);\n }\n }\n filterOperators(operator: string, questionType: QuestionType) {\n return questionType == QuestionType.Text || TextOperator[operator] != TextOperator.contains;\n }\n hasOperand(operator: TextOperator): boolean {\n return [TextOperator.isNull, TextOperator.isNotNull].indexOf(\n operator\n ) == -1\n }\n onCloseProcess() {\n this.getFilterModel();\n this.modalRef.hide();\n\n this.outputFilters.emit( this.filterModel );\n this.onClose.emit( this.isAssignMode ? this.filterAssignDynamicFields : this.filterDynamicFields );\n }\n showImages(field: InventoryDynamicFieldValues) {\n return (\n field.value &&\n (field.value?.length ?? 0) > 0 &&\n field.type == ToolDynamicFieldType.File\n );\n }\n showText(field: InventoryDynamicFieldValues) {\n return (\n field.value &&\n (field.value?.length ?? 0) > 0 &&\n (field.type == ToolDynamicFieldType.Number ||\n field.type == ToolDynamicFieldType.Text)\n );\n }\n isImage(field: ToolDynamicFieldViewModel) {\n return field.type == ToolDynamicFieldType.File;\n }\n showDate(field: InventoryDynamicFieldValues) {\n return field.value && (field.value?.length ?? 0) > 0 && field.type == ToolDynamicFieldType.Date;\n }\n\n refreshGrid() {\n this.refreshGridEmitter.emit(true);\n }\n\n isInvalidFormControlValue(assignDynamicField: ToolDynamicFieldViewModel) {\n return !assignDynamicField.formControl?.value || assignDynamicField.formControl?.value == '' || assignDynamicField.formControl?.value == 'Invalid Date';\n }\n\n onCloseMethod(ignoreInvalidForm: boolean = false) {\n if(this.canCloseModal()) {\n this.getFilterModel();\n this.modalRef.hide();\n\n this.outputFilters.emit( this.filterModel );\n this.onClose.emit( this.isAssignMode ? this.filterAssignDynamicFields : this.filterDynamicFields );\n }\n }\n\n canCloseModal() {\n let items = this.isAssignMode ? this.filterAssignDynamicFields : this.filterDynamicFields;\n let anyInvalidItemAvailable = items?.filter((item) => {\n return item.operatorFormControl?.value != TextOperator.isNull && item.operatorFormControl?.value != TextOperator.isNotNull\n })?.find((item: ToolDynamicFieldViewModel) => {\n return (!item.formControl?.value || item.formControl?.value == 'Invalid Date')\n })\n return !anyInvalidItemAvailable;\n }\n\n}\n","
\n \n
\n \n
\n \n
\n
\n {{ item.dynamicField.fieldName }}\n
\n
\n {{ item.operator | textOperator }}\n
\n {{ item.value }}\n
\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { DynamicFieldFilterWrapperViewModel } from \"../../../models/inventory/dynamic-field-filter-model\";\nimport { TextOperator } from \"../../../enums/text-operator.enum\";\n\n@Component({\n selector: 'obc-dynamic-fields-filter-renderer',\n templateUrl: './dynamic-fields-filter-renderer.component.html',\n styleUrls: ['./dynamic-fields-filter-renderer.component.scss']\n})\nexport class DynamicFieldsFilterRendererComponent implements OnInit {\n\n @Input() filters: DynamicFieldFilterWrapperViewModel[] = [];\n @Output() removeDynamicField: EventEmitter = new EventEmitter();\n constructor() { }\n\n ngOnInit(): void {\n }\n\n hasOperand(operator: TextOperator): boolean {\n return [TextOperator.isNull, TextOperator.isNotNull].indexOf(\n operator\n ) == -1\n }\n\n onRemoveDynamicFieldFromFilter(dynamicFieldId: number) {\n this.removeDynamicField.emit(dynamicFieldId)\n }\n}\n","\n
\n \n
\n \n {{ filter.text\n }}
{{getFilterAnswers(filter)}}\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { TextOperator } from 'src/app/enums/text-operator.enum';\nimport { QuestionAnswerFilterViewModel } from 'src/app/models/question-answer-filter-model';\nimport { TextOperatorPipe } from 'src/app/pipes/text-operator.pipe';\n\n@Component({\n selector: 'obc-question-answer-filter-renderer',\n templateUrl: './question-answer-filter-renderer.component.html',\n styleUrls: ['./question-answer-filter-renderer.component.scss']\n})\nexport class QuestionAnswerFilterRendererComponent implements OnInit {\n @Input() filterQuestions: QuestionAnswerFilterViewModel[] = [];\n @Output() onRefreshFilterQuestions = new EventEmitter();\n\n constructor(\n private textOperatorPipe: TextOperatorPipe,\n ) {\n }\n\n ngOnInit(): void {\n }\n\n onRemoveQuestionFromFilterByUUID(uuid: string) {\n const question = this.filterQuestions.find((i) => i.uuid == uuid)\n if(question)\n this.onRemoveQuestionFromFilter(question)\n }\n\n onRemoveQuestionFromFilter(question: any) {\n const index = this.filterQuestions.indexOf(question);\n if (index >= 0) {\n this.filterQuestions.splice(index, 1);\n this.onRefreshFilterQuestions.emit(this.filterQuestions);\n }\n }\n\n getFilterAnswers(filter: QuestionAnswerFilterViewModel) {\n if (!filter.answers || filter.answers.length == 0)\n return '-- N.A.---'\n else {\n if(filter.operator == TextOperator.isNotNull || filter.operator == TextOperator.isNull) {\n return this.textOperatorPipe.transform(filter.operator);\n }\n if (filter.answers.length == 1 && !filter.answers[0]) {\n return \"Not Answered\"\n }\n let titles = filter.titles.join(' OR ');\n return (filter.operator != null ? this.textOperatorPipe.transform(filter.operator) : '') + (titles.length ? \": \" + titles : '');\n }\n }\n}\n","export enum ApproveEntityType {\n Induction = 1,\n SiteSupplierDocument = 2,\n Attendance = 4,\n PermitForms = 5,\n SiteAsset = 6,\n SiteAssetOperator = 7,\n SupplierForms = 8,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ApproveEntityType } from \"../enums/approve-entity-type\";\n\n@Pipe({\n name: 'approveEntityType'\n})\nexport class ApproveEntityTypePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == ApproveEntityType.Induction || value == 1 || value==\"Induction\") return \"Induction\";\n if (value == ApproveEntityType.SiteSupplierDocument || value == 2 || value==\"SiteSupplierDocument\") return \"Supplier Document\";\n if (value == ApproveEntityType.Attendance || value == 4 || value==\"Attendance\") return \"Attendance\";\n if (value == ApproveEntityType.PermitForms || value == 5 || value==\"PermitForms\") return \"Permit\";\n if (value == ApproveEntityType.SiteAsset || value == 6 || value==\"SiteAsset\") return \"Site Asset\";\n if (value == ApproveEntityType.SiteAssetOperator || value == 7 || value==\"SiteAssetOperator\") return \"Asset Operator\";\n if (value == ApproveEntityType.SupplierForms || value == 8 || value==\"SupplierForms\") return \"Supplier Form\"\n return value?.toString() ?? \"\";\n }\n\n}\n","export enum PendingToApproveStatus {\n Pending = 0,\n Approved = 1,\n Rejected = 2,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PendingToApproveStatus } from \"../enums/approve-status\";\n\n@Pipe({\n name: 'approveStatus'\n})\nexport class ApproveStatusPipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == PendingToApproveStatus.Pending || value == 0 || value == \"Pending\") return \"Pending\";\n if (value == PendingToApproveStatus.Approved || value == 1 || value == \"Approved\") return \"Approved\";\n if (value == PendingToApproveStatus.Rejected || value == 1 || value == \"Rejected\") return \"Rejected\";\n return value?.toString() ?? \"\";\n }\n\n}\n","export enum DocumentExpiryStatus {\n Valid = 0,\n Expired = 1,\n ExpireInNext30Day = 2\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DocumentExpiryStatus } from '../enums/document-expiry-status.enum';\n\n@Pipe({\n name: 'documentExpiryStatus'\n})\nexport class DocumentExpiryStatusPipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === DocumentExpiryStatus.Valid || value === 0 || value === \"Valid\") return \"Valid\";\n if (value === DocumentExpiryStatus.Expired || value === 1 || value === \"Expired\") return \"Expired\";\n if (value === DocumentExpiryStatus.ExpireInNext30Day || value === 2 || value === \"ExpireInNext30Day\") return \"Expires In Next 30 Days\";\n return value?.toString();\n }\n\n}\n","export enum AssetCategoryType {\n Inveventory = 0,\n ShortTerm = 1,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AssetCategoryType } from '../enums/asset-category-type-enum';\n\n@Pipe({\n name: 'assetCategoryType'\n})\nexport class AssetCategoryTypePipe implements PipeTransform {\n\n transform(value: unknown): string {\n\n if (value === AssetCategoryType.Inveventory || value === 0 || value === \"Inveventory\") return 'Inventory';\n if (value === AssetCategoryType.ShortTerm || value === 1 || value === \"ShortTerm\") return 'Short Term';\n return value?.toString();\n }\n}\n\n","export enum SiteAssetQueryMode {\n CheckedIn = 0,\n CheckedOut = 1,\n AllApproved = 2,\n PendingApproval = 3,\n RejectedApproval = 4,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SiteAssetQueryMode } from '../enums/site-asset-query-mode.enum';\n\n@Pipe({\n name: 'siteAssetQueryMode'\n})\nexport class SiteAssetQueryModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == SiteAssetQueryMode.CheckedIn || value == 0 || value == \"CheckedIn\") return 'Checked In';\n if (value == SiteAssetQueryMode.CheckedOut || value == 1 || value == \"CheckedOut\") return 'Checked Out';\n if (value == SiteAssetQueryMode.AllApproved || value == 2 || value == \"AllApproved\") return 'All Approved';\n if (value == SiteAssetQueryMode.PendingApproval || value == 3 || value == \"PendingApproval\") return 'Pending Approval';\n if (value == SiteAssetQueryMode.RejectedApproval || value == 4 || value == \"RejectedApproval\") return 'Rejected Approval';\n return value?.toString() ?? '?';\n }\n\n}\n","export enum SiteSupplierDocumentStatus {\n Unrequested = -1,\n Requested = 0,\n Pending = 1,\n Approved = 2,\n Declined = 3,\n Deleted = 4,\n}\n\nexport enum SiteSupplierDocumentVersionStatus {\n Pending = 1,\n Approved = 2,\n Declined = 3,\n Deleted = 4,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SiteSupplierDocumentVersionStatus } from \"../enums/site-supplier-document-status\";\n\n@Pipe({\n name: 'siteSupplierDocumentVersionStatus'\n})\nexport class SiteSupplierDocumentVersionStatusPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (value == SiteSupplierDocumentVersionStatus.Pending || value == 1 || value == \"Pending\") return \"Pending\";\n if (value == SiteSupplierDocumentVersionStatus.Approved || value == 2 || value == \"Approved\") return \"Approved\";\n if (value == SiteSupplierDocumentVersionStatus.Declined || value == 3 || value == \"Declined\") return \"Declined\";\n if (value == SiteSupplierDocumentVersionStatus.Deleted || value == 4 || value == \"Deleted\") return \"Deleted\";\n return value?.toString() ?? \"\";\n }\n\n}\n","export enum SiteBriefingStatus {\n Draft = 0,\n Active = 1,\n Inactive = 2,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormDataStatus } from '../enums/form-data-status';\nimport { SiteBriefingStatus } from '../enums/site-briefing-status';\n\n@Pipe({\n name: 'SiteBriefingStatusPipe'\n})\nexport class SiteBriefingStatusPipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == SiteBriefingStatus.Draft || value == 0) return \"Draft\";\n if (value == SiteBriefingStatus.Active || value == 1) return \"Active\";\n if (value == SiteBriefingStatus.Inactive || value == 2) return \"Inactive\";\n return value;\n }\n}\n","export enum ObcEventLogTypeEnum {\n UserActivity = 0,\n UpdateUserProfile = 1,\n NewCard = 2\n}\nexport enum UserProfileField {\n CompanySupplierId = 0,\n VisitorTypeId = 1,\n FirstName = 2,\n LastName = 3,\n Email = 4,\n ProfileImage = 5,\n DateOfBirth = 6,\n EmergencyContact = 7,\n Gender = 8,\n}\nexport enum UserActivityEventType {\n CheckIn = 100,\n FinaliseCheckIn = 101,\n HostCheckIn = 102,\n CheckOut = 103,\n FinaliseCheckOut = 104,\n HostCheckOut = 105,\n SubmitInduction = 106,\n SignOffSiteBriefing = 107,\n SignOffSupplierDocument = 108,\n PreCheckIn = 109,\n FillForm = 110,\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { ObcEventLogTypeEnum } from '../enums/obc-event-log-type.enum';\n\n@Pipe({\n name: 'workerProfileLogType'\n})\nexport class WorkerProfileLogTypePipe implements PipeTransform {\n\n transform(value: unknown): string {\n\n if (value == ObcEventLogTypeEnum.NewCard) return 'New Card';\n if (value == ObcEventLogTypeEnum.UpdateUserProfile) return 'Update User Profile';\n if (value == ObcEventLogTypeEnum.UserActivity) return 'User Activity';\n return value?.toString() ?? '';\n }\n\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { catchError } from 'rxjs/operators';\nimport { FilledFormInfoViewModel } from '../models/filled-form-info-view-model';\nimport { ServerResult} from '../models/server-result-data';\nimport { ArchiveSiteSupplierDocumentTypeModel, DeleteSiteSupplierDocumentVersion, SiteSupplierDocumentTypeVersionModel } from '../models/supplier-document/site-supplier-document-type-models';\nimport {\n SupplierDocumentHistoryViewModel\n} from '../models/supplier-document/site-supplier-models';\nimport { ErrorService } from './error.service';\nimport { SiteSupplierAccessViewModel } from \"../models/link_to_company_request_model\";\nimport { PagingRequest } from '../models/paging-request-model';\nimport { SupplierDocumentDataModel, SupplierDocumentVersionsQueryModel } from '../models/supplier-document-versions-query-model';\nimport { WorkflowType } from '../enums/workflow/workflow-type';\nimport { WorkflowDefinitionViewModel } from '../models/workflow/workflow-definition-view-model';\nimport { SupplierDocumentVersionCommentModel } from '../models/supplier-document-version-comment-model';\nimport { SupplierDocumentVersionHistoryModel } from '../models/supplier-document-version-history-model';\nimport { SiteSupplierInfo } from '../models/supplier-document/site-supplier-info';\nimport { ChangeSiteSupplierDocumentKindQueryModel } from \"../models/change-site-supplier-document-kind-query-model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteSupplierService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getWorkflowListByHashlink(workflowType: WorkflowType, hashLink: string): Observable {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.post(`api/SiteSupplier/workflow-list/${workflowType}`, null, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getSupplierDocumentTypeInfoByHashLink(hashLink: string): Observable {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.get(`api/SiteSupplier/get-site-supplier-document-type-info`, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getSiteSupplierDocumentTypesByHashlinkModel(model: PagingRequest, hashLink: string): Observable {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.post(`api/SiteSupplier/get-site-supplier-document-types`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getSiteSupplierDocumentTypesByModel(model: PagingRequest): Observable {\n return this._http.post(`api/SupplierDocument/get-site-supplier-documents`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n GetSupplierDocumentHistory(siteSupplierDocumentTypeId: number): Observable {\n return this._http.post(`api/SupplierDocument/get-supplier-document-history/${siteSupplierDocumentTypeId}`, null)\n .pipe(catchError(this._errorService.handleError));\n }\n\n GetSupplierDocumentVersionComment(siteSupplierDocumentVersionId: number): Observable {\n return this._http.post(`api/SupplierDocument/get-supplier-document-version-comment/${siteSupplierDocumentVersionId}`, null)\n .pipe(catchError(this._errorService.handleError));\n }\n // getSiteSupplierDocumentTypes(model: PagingRequest): Observable {\n // return this._http.post(`api/SiteSupplier/get-site-supplier-with-document-types/`, model);\n // }\n\n // getSiteSupplierWithDocumentTypesByModel(model: SiteSupplierWithDocumentTypeQueryModel): Observable {\n // return this._http.post(`api/SiteSupplier/get-site-supplier-with-document-types/`, model);\n // }\n\n // getSiteSupplierWithDocumentTypes(siteSupplierId: number): Observable {\n // return this._http.get(`api/SiteSupplier/get-site-supplier-with-document-types/${siteSupplierId}`);\n // }\n\n // getSiteSupplierWithDocumentTypesByHashlinkModel(siteSupplierHashlink: string, model: SiteSupplierWithDocumentTypeQueryModel): Observable {\n // let headers = new HttpHeaders({ \"hash-link\": siteSupplierHashlink ?? '' });\n // return this._http.post(`api/SiteSupplier/get-site-supplier-with-document-types`, model, { headers: headers });\n // }\n\n // getSiteSupplierWithDocumentTypesByHashlink(siteSupplierHashlink: string): Observable {\n // let headers = new HttpHeaders({ \"hash-link\": siteSupplierHashlink ?? '' });\n // return this._http.get(`api/SiteSupplier/get-site-supplier-with-document-types`, { headers: headers });\n // }\n\n\n\n addSiteSupplierDocumentTypeVersion(model: SiteSupplierDocumentTypeVersionModel, siteSupplierHashlink: string, siteSupplierId: number, siteSupplierDocumentTypeId?: number): Observable {\n let headers = new HttpHeaders({ \"hash-link\": siteSupplierHashlink ?? '' });\n return this._http.post(siteSupplierDocumentTypeId != null ?\n `api/SiteSupplier/add-site-supplier-document-version/${siteSupplierId}/${siteSupplierDocumentTypeId}` :\n `api/SiteSupplier/add-site-supplier-document-version/${siteSupplierId}`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n addSiteSupplierDocumentTypeVersionList(model: SiteSupplierDocumentTypeVersionModel[], siteSupplierHashlink: string, siteSupplierId: number): Observable {\n let headers = new HttpHeaders({ \"hash-link\": siteSupplierHashlink ?? '' });\n return this._http.post(\n `api/SiteSupplier/add-site-supplier-document-version-list/${siteSupplierId}`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getSiteSupplierDocumentVersionList(siteSupplierDocumentTypeId: number, siteSupplierHashlink: string = null): Observable {\n let headers = new HttpHeaders({ \"hash-link\": siteSupplierHashlink ?? '' });\n return this._http.get(`api/SiteSupplier/get-site-supplier-document-version-list/${siteSupplierDocumentTypeId}`, { headers: headers });\n }\n\n getFilledForm(formDataId: number, siteSupplierHashlink: string): Observable {\n let headers = new HttpHeaders({ \"hash-link\": siteSupplierHashlink ?? '' });\n return this._http.get(`api/SiteSupplier/get-filled-form/${formDataId}`, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n validateSiteSupplierWithHashLink(hashLink: string): Observable {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.get(`api/SiteSupplier/validate-site-supplier`, { headers });\n }\n\n deleteSiteSupplierDocumentVersion(request: DeleteSiteSupplierDocumentVersion, hashLink: string) {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.post(`api/SiteSupplier/delete-supplier-document-version`, request, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n archiveSiteSupplierDocumentTypes(model: ArchiveSiteSupplierDocumentTypeModel, hashLink: string) {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.post(`api/SiteSupplier/archive-site-supplier-document-type-list`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n unarchiveSiteSupplierDocumentTypes(model: ArchiveSiteSupplierDocumentTypeModel, hashLink: string) {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.post(`api/SiteSupplier/unarchive-site-supplier-document-type-list`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n // getSiteSupplierDocumentVersionById(siteSupplierDocumentTypeVersionId: number): Observable {\n // let headers = new HttpHeaders({ \"hash-link\": siteSupplierHashlink ?? '' });\n // return this._http.get(`api/SiteSupplier/get-site-supplier-document-version-list/${siteSupplierDocumentTypeId}`, { headers: headers });\n // }\n\n changeSiteSupplierDocumentKind(model: ChangeSiteSupplierDocumentKindQueryModel): Observable {\n return this._http.post(`api/SiteSupplier/change-site-supplier-document-kind`, model);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ContinueWorkflowViewModel } from '../models/workflow/continue-workflow-viewmodel';\nimport { ContinueWorkflowQueryViewModel } from '../models/workflow/continue-workflow-query-viewModel';\nimport { WorkflowInfoViewModel } from '../models/workflow/workflow-info-viewmodel';\nimport { WorkflowHistoryViewModel } from '../models/workflow/workflow-history-view-model';\nimport { WorkflowType } from '../enums/workflow/workflow-type';\nimport { WorkflowDefinitionViewModel } from '../models/workflow/workflow-definition-view-model';\nimport { FormDataDetailViewModel } from '../models/form/form-data-detail-view-model';\nimport { GetWorkflowFilledFormModel } from '../models/supplier-document/get-workflow-filled-form-model ';\nimport { SiteSupplierService } from './site-supplier.service';\nimport { CompanyAuthService } from './company-auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WorkflowService {\n apiUrl: string = \"/api/workflow\";\n\n constructor(private _http: HttpClient,\n private _errorService: ErrorService,\n private siteSupplierService: SiteSupplierService,\n private companyAuthService: CompanyAuthService\n ) { }\n\n continueWorkflow = (workflowInstanceId: string, model: ContinueWorkflowQueryViewModel): Observable =>\n this._http.post(`${this.apiUrl}/continue-workflow/${workflowInstanceId}`, model)\n .pipe(catchError(this._errorService.handleError));\n\n getWorkflowByInstanceId = (workflowInstanceId: string): Observable =>\n this._http.get(`${this.apiUrl}/get-workflow/${workflowInstanceId}`)\n .pipe(catchError(this._errorService.handleError));\n\n getWorkflowInstanceHistory = (workflowInstanceId: string): Observable =>\n this._http.post(`${this.apiUrl}/workflow-instance-history/${workflowInstanceId}`, null)\n .pipe(catchError(this._errorService.handleError));\n\n private internalGetWorkflowList(workflowType: WorkflowType, companyId?: number): Observable {\n return this._http.post(`${this.apiUrl}/workflow-list/${workflowType}/${companyId}`, null)\n .pipe(catchError(this._errorService.handleError));\n }\n\n private WorkflowDefinitionList: Map = new Map();\n\n getCacheKey(workflowType: WorkflowType, companyId?: number, hashLink?: string) {\n return workflowType + '-' + (companyId ?? 'null') + '-' + (hashLink ?? 'null');\n }\n\n clearWorkflowCache() {\n this.WorkflowDefinitionList.clear();\n }\n\n getWorkflowListFull = (workflowType: WorkflowType): Observable => {\n let companyId = this.companyAuthService.getCompanyId();\n let hashLink = this.companyAuthService.getHashLink();\n\n let key = this.getCacheKey(workflowType, companyId, hashLink);\n\n if (this.WorkflowDefinitionList && this.WorkflowDefinitionList.get(key)) {\n return of(this.WorkflowDefinitionList.get(key));\n }\n\n let workflowListService = hashLink ?\n this.siteSupplierService.getWorkflowListByHashlink(workflowType, hashLink) :\n this.internalGetWorkflowList(workflowType, companyId);\n\n return new Observable((subscriber) => {\n workflowListService\n .subscribe({\n next: response => {\n this.WorkflowDefinitionList.set(key, response);\n subscriber.next(response);\n },\n error: error => {\n console.log('had an error');\n },\n complete: () => {\n subscriber.complete();\n }\n });\n });\n }\n\n\n getWorkflow = (workflowType: WorkflowType, documentKindId: number): Observable => {\n return new Observable((subscriber) => {\n this.getWorkflowListFull(workflowType)\n .subscribe({\n next: result => {\n subscriber.next(result.find(p => p.workflowSubtype == documentKindId));\n }\n })\n });\n }\n\n getWorkflowFilledForm = (model: GetWorkflowFilledFormModel): Observable =>\n this._http.post(`${this.apiUrl}/get-workflow-filled-form`, model)\n .pipe(catchError(this._errorService.handleError));\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable, catchError, of } from 'rxjs';\nimport { SupplierDocumentKindViewModel } from '../models/supplier-document/supplier-document-kind-viewmodel';\nimport { CheckListItemViewModel } from '../custom-controls/check-list-form-control/check-list-item';\nimport { CompanyAuthService } from './company-auth.service';\nimport { WorkflowService } from './workflow.service';\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentKindService {\n\n constructor(\n private http: HttpClient,\n private errorService: ErrorService,\n private companyAuthService: CompanyAuthService,\n private workflowService: WorkflowService\n ) { }\n\n _list: SupplierDocumentKindViewModel[];\n _companyId?: number;\n _hashLink?: string;\n listObservable;\n list(companyId?: number): Observable {\n let companyIdToLoadKindList = companyId ?? this.companyAuthService.getCompanyId();\n let hashLink = this.companyAuthService.getHashLink();\n if (\n this._list &&\n (companyIdToLoadKindList === this._companyId || hashLink === this._hashLink)\n ) {\n return of(this._list);\n }\n if (\n this.listObservable &&\n (companyIdToLoadKindList === this._companyId || hashLink === this._hashLink)\n )\n return this.listObservable;\n\n if (hashLink) {\n this.listObservable = new Observable(\n (observer) => {\n let headers = new HttpHeaders({ 'hash-link': hashLink ?? '' });\n this.http\n .get(\n `api/SiteSupplier/supplier-document-kind-list`,\n { headers: headers }\n )\n .subscribe({\n next: (response) => {\n this._list = response;\n this._companyId = undefined;\n this._hashLink = hashLink;\n observer.next(response);\n },\n error: () => { },\n complete() {\n observer.complete();\n },\n });\n }\n );\n } else {\n this.listObservable = new Observable(\n (observer) => {\n this.http\n .get(\n `/api/SupplierDocumentKind/list/${companyIdToLoadKindList?.toString() ?? ''}`\n )\n .subscribe({\n next: (response) => {\n this._list = response;\n this._companyId = companyIdToLoadKindList;\n this._hashLink = undefined;\n observer.next(response);\n },\n error: () => { },\n complete() {\n observer.complete();\n },\n });\n }\n );\n }\n\n return this.listObservable;\n }\n\n get(documentKindId: number): Observable {\n return new Observable(observer => {\n this.list()\n .subscribe(kindList => {\n observer.next(kindList.find(k => k.id == documentKindId));\n observer.complete();\n });\n });\n }\n\n prepareDocumentKindCheckList(kindIdList: number[]): Observable {\n return new Observable(observer => {\n this.list().subscribe(kindList => observer.next(kindList?.map(k => {\n return {\n value: kindList.length == 1 || ((kindIdList && kindIdList?.some(kind => kind == k.id)) ?? false),\n key: +k.id,\n label: k.name,\n validators: [],\n } as CheckListItemViewModel;\n })));\n });\n }\n\n addUpdateDocumentKind(model: SupplierDocumentKindViewModel): Observable {\n this.workflowService.clearWorkflowCache();\n return this.http.post(`/api/SupplierDocumentKind/add-update`, model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n documentKindToManage(companyId: number) {\n return this.http.get(`/api/SupplierDocumentKind/list-to-manage/${companyId?.toString() ?? ''}`)\n .pipe(catchError(this.errorService.handleError));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DocumentKindService } from '../services/document-kind.service';\nimport { Observable } from 'rxjs';\n\n@Pipe({\n name: 'documentKindNameAsyncFilter'\n})\nexport class DocumentKindNamePipe implements PipeTransform {\n constructor(private documentKindService: DocumentKindService) { }\n\n transform(value: any): Observable {\n return new Observable(observer => {\n this.documentKindService.get(+value).subscribe(kind => { observer.next(kind.name); observer.complete(); });\n });\n }\n}\n","
\n
\n
\n \n
\n
{{filter.name}}:
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
","import { ApproveEntityTypePipe } from '../../pipes/approve-entity-type.pipe';\nimport { DatePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { FilterList } from 'src/app/models/filter-list';\nimport { ApproveStatusPipe } from 'src/app/pipes/approve-status.pipe';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { MobilePipe } from 'src/app/pipes/mobile.pipe';\nimport { DocumentExpiryStatusPipe } from \"../../pipes/document-expiry-status.pipe\";\nimport { AssetCategoryTypePipe } from 'src/app/pipes/asset-category-type-pipe';\nimport { SiteAssetQueryModePipe } from 'src/app/pipes/site-asset-query-mode.pipe';\nimport { SiteSupplierDocumentVersionStatusPipe } from 'src/app/pipes/site-supplier-document-version-status.pipe';\nimport { SiteBriefingStatusPipe } from \"../../pipes/site-briefing-status.pipe\";\nimport { Observable, of } from 'rxjs';\nimport { DocumentKindNamePipe } from 'src/app/pipes/document-kind.pipe';\nimport { WorkerProfileLogTypePipe } from 'src/app/pipes/worker-profile-log-type.pipe';\n\n@Component({\n selector: 'app-filter-list-renderer',\n templateUrl: './filter-list-renderer.component.html',\n styleUrls: ['./filter-list-renderer.component.scss'],\n providers: [MobilePipe, DatetimePipe, DatePipe, SiteSupplierDocumentVersionStatusPipe, SiteBriefingStatusPipe, WorkerProfileLogTypePipe]\n})\nexport class FilterListRendererComponent implements OnInit {\n @Input() filters: FilterList[];\n @Output() remove = new EventEmitter<{ item: any, items: any[] }>();\n\n constructor(\n private mobilePipe: MobilePipe,\n private datetimePipe: DatetimePipe,\n private siteSupplierDocumentVersionStatusPipe: SiteSupplierDocumentVersionStatusPipe,\n private datePipe: DatePipe,\n private siteBriefingStatusPipe: SiteBriefingStatusPipe,\n private documentKindNamePipe: DocumentKindNamePipe,\n private workerProfileLogTypePipe: WorkerProfileLogTypePipe\n ) { }\n\n ngOnInit() { }\n\n getFilterData(filter: FilterList) {\n if (Array.isArray(filter.data))\n if (Array.isArray(filter.data))\n return filter.data;\n else\n return [filter.data];\n }\n\n getFilterText(item, type: FilterType, filter: any = null): Observable {\n switch (type) {\n case FilterType.Text: {\n return of(item);\n }\n case FilterType.SingleText: {\n return of(item);\n }\n case FilterType.Site: {\n return of(item.name);\n }\n case FilterType.Form: {\n return of(item.name);\n }\n case FilterType.PermitForm: {\n return of(item.name);\n }\n case FilterType.VisitorType: {\n return of(item.title);\n }\n case FilterType.User: {\n return of(`${item.firstName} ${item.lastName}
(${this.mobilePipe.transform(item.mobile)})`);\n }\n case FilterType.DateRange: {\n return of(`${item.from ? this.datePipe.transform(item.from) : \"-\"} ${item.to ? this.datePipe.transform(item.to) : (filter?.nowDateLabel ? filter.nowDateLabel : \"Now\")}`);\n }\n case FilterType.DateTimeRange: {\n let date = `${item.from ? this.datetimePipe.transform(item.from) : \"-\"} - ${item.to ? this.datetimePipe.transform(item.to) : (filter?.nowDateLabel ? filter.nowDateLabel : \"Now\")}`;\n if (item.label)\n return of(`${item.label}
${date}`);\n else\n return of(date);\n }\n case FilterType.DateTime: {\n let date = `${item.from ? this.datetimePipe.transform(item.from) : \"-\"}`;\n if (item.label)\n return of(`${item.label}
${date}`);\n else\n return of(date);\n }\n case FilterType.Gender: {\n return of(item.label);\n }\n case FilterType.IndustryType: {\n return of(item.type);\n }\n case FilterType.Supplier: {\n return of(item.name);\n }\n case FilterType.Induction: {\n return of(item.label);\n }\n case FilterType.Duration: {\n\n if (!item.from && item.to)\n return of(`Lower than ${this.getHourMinutesString(item.to)}`);\n if (item.from && !item.to)\n return of(`Greater than ${this.getHourMinutesString(item.from)}`);\n if (item.to && item.from)\n return of(`Between ${this.getHourMinutesString(item.from)} to ${this.getHourMinutesString(item.to)}`);\n else\n return of(\"All duration\");\n }\n case FilterType.InventoryCategory: {\n return of(item.title);\n }\n case FilterType.InventoryToolStatus: {\n return of(item.title);\n }\n case FilterType.InventoryLocation: {\n return of(item.name);\n }\n case FilterType.FormType: {\n return of(item.label);\n }\n case FilterType.InductionId: {\n return of(`${item.title}`);\n }\n case FilterType.PermitStatus: {\n return of(item.label);\n }\n case FilterType.DocumentExpiryStatus: {\n return of(new DocumentExpiryStatusPipe().transform(item));\n }\n case FilterType.AssetCategoryType: {\n return of(new AssetCategoryTypePipe().transform(item));\n }\n case FilterType.AssetStatus: {\n return of(new SiteAssetQueryModePipe().transform(item));\n }\n case FilterType.ApprovalStatus: {\n return of(new ApproveStatusPipe().transform(item));\n }\n case FilterType.ApproveEntityType: {\n return of(new ApproveEntityTypePipe().transform(item));\n }\n case FilterType.DocumentType: {\n return of(item.title);\n }\n // case FilterType.SiteSupplierDocumentWorkflow: {\n // return this.siteSupplierDocumentKindTitlePipe.transform(item);\n // }\n case FilterType.SupplierDocumentKind: {\n return this.documentKindNamePipe.transform(item);\n }\n case FilterType.SiteSupplierDocumentVersionStatus: {\n return of(this.siteSupplierDocumentVersionStatusPipe?.transform(item));\n }\n case FilterType.SiteBriefingStatus: {\n return of(this.siteBriefingStatusPipe?.transform(item));\n }\n case FilterType.SiteBriefingForm: {\n return of(item.name);\n }\n case FilterType.EventLogType: {\n return of(this.workerProfileLogTypePipe.transform(item));\n }\n }\n }\n\n onRemoveFromFilter(item: any, items: any[]) {\n this.remove.emit({ item: item, items: items })\n }\n\n getHourMinutesString(totalMinutes: number): String {\n let hour = Math.floor(totalMinutes / 60);\n let minute = (totalMinutes % 60).toString();\n minute = new Array(2 - minute.length + 1).join('0') + minute;\n return `${hour}:${minute}`;\n }\n}\n","
\n \n
\n\n
\n \n
\n
\n \n \n
\n
","import {Component, Input, OnInit} from '@angular/core';\nimport {ActivatedRoute, Params} from \"@angular/router\";\nimport {SiteManagementMode} from \"../../enums/site-management-mode\";\nimport {finalize} from \"rxjs/operators\";\n\n@Component({\n selector: 'obc-pdf-viewer',\n templateUrl: './pdf-viewer.component.html',\n styleUrls: ['./pdf-viewer.component.scss']\n})\nexport class PdfViewerComponent implements OnInit {\n\n @Input() fitToPage: boolean = false;\n @Input() src: string;\n @Input() renderText: boolean = true;\n @Input() zoom: number = 100;\n @Input() rotation: number = 0;\n loading: boolean = true;\n displayIframe: boolean = true;\n\n constructor(private route: ActivatedRoute,) {\n }\n\n ngOnInit(): void {\n this.route.params.subscribe((param: Params) => {\n if(param['src']) {\n this.src = param['src'];\n this.displayIframe = false;\n }\n });\n }\n\n hideLoader() {\n this.loading = false;\n }\n \n getSrc(src) {\n return encodeURIComponent(src);\n }\n}\n","\n \n\n \"Preview\"\n\n\n\n \n\n \n\n\n\n
\n
\n

View Files

\n
\n \n
\n
\n
\n \n \n
\n
\n
\n\n\n\n \n \n
\n \n \n \n \n \n \n \n {{ getFilename(index) }}\n \n \"image\"\n
\n \n
\n
\n \n \n
\n
\n
\n
\n
\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { FileModel, } from 'src/app/models/supplier-document/site-supplier-document-type-view-model.model';\nimport { BsModalService } from \"ngx-bootstrap/modal\";\nimport { detectFileType } from \"../../helpers/general-functions\";\n\n@Component({\n selector: 'obc-file-viewer',\n templateUrl: './file-viewer.component.html',\n styleUrls: ['./file-viewer.component.scss'],\n})\nexport class FileViewerComponent implements OnInit {\n\n @Input() files: FileModel[] = [];\n @Input() urls: string[];\n @Input() prefix: string = null;\n @Input() btnTitle: string;\n @Input() btnClass: string = 'btn btn-sm btn-success';\n @Input() imgClass: string = '';\n @Input() btnIcon: string;\n @Input() btnStyle: string;\n @Input() tooltip: string;\n @Input() previewImage: string;\n @Input() previewImageWidth: number = 100;\n @Input() previewImageHeight: number = 100;\n @Input() showByModal: boolean = true;\n @Input() useOriginalFile: boolean = false;\n\n FileType = FileType;\n\n @Output('onFileViewed') onFileViewed = new EventEmitter();\n\n firstFileViewedAutomatically: boolean = false;\n\n constructor(private bsModalService: BsModalService) { }\n\n ngOnInit() {\n if (this.btnStyle) {\n this.btnStyle = this.btnStyle.trim();\n if (this.btnStyle.slice(this.btnStyle.length - 1) !== ';')\n this.btnStyle = this.btnStyle + ';';\n }\n\n\n if (this.urls) {\n for (let url of this.urls) {\n this.files.push({\n fileUrl: url,\n originalFileUrl: url,\n fileType: this.detectFileType(url)\n } as FileModel);\n }\n }\n }\n\n fileHasContent(file: FileModel) {\n let extension = this.getUrl(file).split(/[#?]/)[0].split('.').pop().trim();\n var binaryFileTypesOpen = ['xls', 'xlsx', 'ppt', 'pptx', 'doc', 'docx'];\n return file.fileType == FileType.Pdf || file.fileType == FileType.Image ||\n ((file.fileType == FileType.Binary || file.fileType == FileType.ExternalLink) && binaryFileTypesOpen.includes(extension));\n }\n\n getFilename(index: number) {\n return this.prefix?.length ? `${this.prefix}${(this.files.length > 1 ? `-file #${index + 1}` : '')}` : `file #${index + 1}`;\n }\n\n detectFileType(url): FileType {\n let result = detectFileType(url);\n if (result != null)\n return result;\n return this.checkYouTubeOrDefault(url);\n }\n\n checkYouTubeOrDefault(url) {\n return url.replace(\"http://\", \"\")\n .replace(\"https://\", \"\")\n .replace(\"www.\", \"\")\n .replace(\"youtu.be/\", \"youtube.com\")\n .slice(0, 11) === \"youtube.com\" ? FileType.Youtube : FileType.ExternalLink;\n }\n\n\n selectedFiles: FileModel[] = [];\n bsModalRef = null;\n onOpenFileViewer(template: any, prefix: string) {\n\n if (this.files && this.files.length > 0 && !this.firstFileViewedAutomatically) {\n this.onFileViewed.emit([...this.files]);\n // this.onFileViewed.emit(this.files[0].fileUrl);\n this.firstFileViewedAutomatically = true;\n }\n\n this.prefix = prefix;\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-xl\",\n ignoreBackdropClick: false,\n })\n }\n\n onFileOpened(fileUrl: string) {\n this.onFileViewed.emit(fileUrl);\n }\n\n closeModal() {\n if (this.bsModalRef)\n this.bsModalRef.hide();\n }\n\n googleDriveUrl(url) {\n var googleUrl = 'https://drive.google.com/viewer?embedded=true&hl=en-US&url=' + encodeURIComponent(url);\n return googleUrl;\n }\n\n getUrl(file: FileModel) {\n return this.useOriginalFile && file.originalFileUrl ? file.originalFileUrl : file.fileUrl;\n }\n}\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\nimport { DocumentExpiryStatus } from '../enums/document-expiry-status.enum';\nimport { DocumentExpiryStatusPipe } from '../pipes/document-expiry-status.pipe';\n\n@Directive({\n selector: '[obcDocumentExpiryStatus]',\n providers: [DocumentExpiryStatusPipe]\n})\nexport class DocumentExpiryStatusDirective implements OnInit {\n @Input() expiryStatus: DocumentExpiryStatus;\n\n constructor(private el: ElementRef,\n private documentExpiryStatusPipe: DocumentExpiryStatusPipe\n ) {\n\n }\n ngOnInit(): void {\n this.el.nativeElement.innerHTML = this.documentExpiryStatusPipe.transform(this.expiryStatus);\n let cssClassType = this.expiryStatus == DocumentExpiryStatus.Valid ? 'success' :\n this.expiryStatus == DocumentExpiryStatus.ExpireInNext30Day ? 'warning' :\n this.expiryStatus == DocumentExpiryStatus.Expired ? 'danger' :\n '';\n\n this.el.nativeElement.className = `p-3 badge obc-badge badge-${cssClassType}`;\n }\n\n}\n","\n \n {{title}}\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n selector: 'app-sortable-title-header',\n templateUrl: './sortable-title-header.component.html',\n styleUrls: ['./sortable-title-header.component.scss']\n})\nexport class SortableTitleHeaderComponent implements OnInit {\n\n @Input() title: string;\n @Input() isDesc: boolean;\n @Input() headerKey: string;\n @Input() sortedHeaderKey: string;\n @Output() sort = new EventEmitter();\n constructor() { }\n\n ngOnInit() {\n }\n\n onSort() {\n this.sort.emit(this.headerKey);\n }\n\n}\n","export enum DefaultDateRange {\n Today = 0,\n Yesterday= 1,\n LastWeek= 2,\n LastMonth= 3,\n ThisMonth= 4,\n ThisWeek = 5,\n}\n","export enum Gender {\n female = 0,\n male = 1,\n other = 2,\n}\n","export enum SiteInductionStatus {\n AutoApproved = 0,\n PendingToApprove = 1,\n ApprovedByHost = 2,\n RejectByHost = 3,\n}\nexport enum InductionReviewMode {\n ApproveReject = 0,\n RequestRevision = 1,\n ReadOnly = 2,\n Hidden = 3,\n}\n","export interface EnumEntry {\n name : any;\n id: any;\n}\nexport function EnumToArray(_enum : any) : EnumEntry[] {\n return Object.entries(_enum).filter(e => !isNaN(e[0]as any)).map(e => ({ name: e[1], id: e[0] })); \n}\n","export enum PermitStatus {\n Open = 0,\n OnHold = 1,\n Close = 2,\n}\n","\n\nexport enum WorkflowType {\n SupplierDocument = 0\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { SiteVisitorTypeAccompanierViewModel, VisitorType } from '../models/site-visitortype-accompanier-viewmodel';\nimport { catchError, finalize, tap } from 'rxjs/operators';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class VisitorTypeService {\n apiUrl: string = '/api/VisitorType';\n constructor(private http: HttpClient, private _errorService: ErrorService) {\n\n }\n\n _cachedVisitorTypes: VisitorType[];\n cacheGetAllVisitorTypes(): Observable {\n if (this._cachedVisitorTypes?.length > 0)\n return of(this._cachedVisitorTypes);\n else\n return this.getAllVisitorTypes();\n }\n\n getAllVisitorTypes = (): Observable =>\n this.http.get(`${this.apiUrl}/get-all-visitor-type`).pipe(\n tap((res) => this._cachedVisitorTypes = res),\n );\n addVisitorType = (model: any): Observable =>\n this.http.post(`${this.apiUrl}/add-visitor-type`, model);\n updateVisitorType = (id: number, model: any): Observable =>\n this.http.post(`${this.apiUrl}/update-visitor-type/${id}`, model);\n removeVisitorType = (id: number): Observable =>\n this.http.get(`${this.apiUrl}/remove-visitor-type/${id}`);\n\n getSiteVisitorTypeAccompaniers(siteId: number): Observable {\n return this.http.get(`${this.apiUrl}/get-site-visitor-type-accompanier/${siteId}`).pipe(catchError(this._errorService.handleError));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { catchError } from 'rxjs/operators';\nimport { IndustryTypeViewModel } from '../models/industry-type/industry-type-view-model';\nimport { IndustryTypeModel } from '../models/industry-type/industry-type-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IndustryTypeService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getActiveIndustryTypes = (): Observable =>\n this._http.get('/api/IndustryType/get-all')\n .pipe(catchError(this._errorService.handleError));\n\n getIndustryTypes = (): Observable =>\n this._http.get('/api/IndustryType/all')\n .pipe(catchError(this._errorService.handleError));\n\n\n addIndustryType = (model: IndustryTypeModel): Observable =>\n this._http.post('/api/IndustryType/add', model)\n .pipe(catchError(this._errorService.handleError));\n\n editIndustryType = (model: IndustryTypeModel): Observable =>\n this._http.post('/api/IndustryType/edit', model)\n .pipe(catchError(this._errorService.handleError));\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { IndustryTypeViewModel } from '../models/industry-type/industry-type-view-model';\nimport { VisitorType } from '../models/site-visitortype-accompanier-viewmodel';\nimport { IndustryTypeService } from './industry-type-service';\nimport { VisitorTypeService } from './visitor-type.service';\nimport { ItemRendererDirtyControlsModel } from \"../models/item-renderer-dirty-controls-model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CacheService {\n\n public formControlDirtySubject: Subject = new Subject();\n private _visitorTypes = new BehaviorSubject(null);\n get visitorTypes(): BehaviorSubject {\n if (this._visitorTypes.value == null) {\n this.visitorTypeService.getAllVisitorTypes().subscribe(res => {\n this._visitorTypes.next(res);\n })\n }\n return this._visitorTypes;\n }\n\n private _industryTypes = new BehaviorSubject(null);\n get industryTypes(): BehaviorSubject {\n if (this._industryTypes.value == null) {\n this.industryTypeService.getActiveIndustryTypes().subscribe(res => {\n this._industryTypes.next(res);\n })\n }\n return this._industryTypes;\n }\n\n constructor(private visitorTypeService: VisitorTypeService,\n private industryTypeService: IndustryTypeService) { }\n\n\n _cache: { [key: string]: any } = {};\n saveInMemoryCache(key: string, data: T) {\n this._cache[key] = data;\n }\n\n getFromMemoryCache(key: string): T {\n return this._cache[key];\n }\n\n clearMemoryCacheObject(key: string) {\n delete this._cache[key];\n }\n\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PermitStatus } from '../enums/permit-status';\n@Pipe({\n name: 'permitStatus'\n})\nexport class PermitStatusPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): unknown {\n if (value === PermitStatus.Close) return \"Close\"\n else if (value === PermitStatus.OnHold) return \"On-Hold\"\n else if (value === PermitStatus.Open) return \"Open\"\n else return \"All\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SiteInductionStatus } from '../enums/site-induction-status';\n\n@Pipe({\n name: 'siteInductionStatus'\n})\nexport class SiteInductionStatusPipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == SiteInductionStatus.ApprovedByHost) return \"Approved\";\n if (value == SiteInductionStatus.AutoApproved) return \"Auto-Approved\";\n if (value == SiteInductionStatus.PendingToApprove) return \"Pending\";\n if (value == SiteInductionStatus.RejectByHost) return \"Rejected\";\n return value?.toString();\n }\n\n}\n","import { ReplaySubject } from \"rxjs\";\nimport { InductionViewModel } from \"../models/induction-viewmodel\";\nimport { Injectable } from \"@angular/core\";\n\n@Injectable({ providedIn: 'root' })\nexport class ReplaySubjectsService {\n public inductionFilterItemsObs: ReplaySubject = new ReplaySubject();\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { PagingViewModel } from '../models/site-list-paging-view-model';\nimport { CompanySupplierModel, CompanySupplierQuery, CompanySupplierQueryTerm, CompanySupplierViewModel } from '../models/supplier-models';\nimport { CompanySupplierBusinessModel, CompanySupplierBusinessViewModel, CompanySupplierDocumentModel, CompanySupplierDocumentViewModel } from '../models/user-business-viewmodel';\nimport { ErrorService } from './error.service';\nimport {\n JoinSupplierInfo,\n JoinSupplierRequestModel,\n LinkToCompanyRequestModel,\n SiteSupplierAccessViewModel,\n UnlinkToCompanyRequestModel\n} from \"../models/link_to_company_request_model\";\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanySupplierService {\n\n constructor(private http: HttpClient, private errorService: ErrorService) { }\n\n getCachedSuppliers(query: CompanySupplierQuery, pagingInfo: any) {\n\n var model = {\n pagingInfo: pagingInfo,\n query: query,\n };\n return this.http.post>(\"/api/CompanySupplier/suppliers/all\", model);\n }\n\n\n getSuppliers(query: CompanySupplierQuery, pagingInfo: any) {\n var model = {\n pagingInfo: pagingInfo,\n query: query,\n };\n return this.http.post>(\"/api/CompanySupplier/suppliers/all\", model);\n }\n getSuppliersBySession(sessionId: string, query: CompanySupplierQueryTerm, pagingInfo: any) {\n var model = {\n pagingInfo: pagingInfo,\n query: query,\n };\n return this.http.post>(`/api/CompanySupplier/suppliers/all/${sessionId}`, model);\n }\n addSupplier(model: CompanySupplierModel) {\n return this.http.put(\"/api/CompanySupplier/suppliers\", model);\n }\n updateSupplier(id: number, model: CompanySupplierModel) {\n return this.http.post(`/api/CompanySupplier/suppliers/${id}`, model);\n }\n deleteSupplier(id: number) {\n return this.http.delete(`/api/CompanySupplier/suppliers/${id}`);\n }\n activateSupplier(id: number) {\n return this.http.post(`/api/CompanySupplier/suppliers/activate/${id}`, null);\n }\n getBusinesses(supplierId: number, query: any) {\n return this.http.post>(`/api/CompanySupplier/supplier/${supplierId}/businesses/all`, query);\n }\n\n addBusiness(supplierId: number, model: CompanySupplierBusinessModel) {\n return this.http.put(`/api/CompanySupplier/supplier/${supplierId}/business`, model);\n }\n\n removeBusiness(supplierId: number, bid: number) {\n return this.http.delete(`/api/CompanySupplier/supplier/${supplierId}/business/${bid}`);\n }\n\n getDocuments(supplierId: number) {\n return this.http.post>(`/api/CompanySupplier/supplier/${supplierId}/documents/all`, null);\n }\n\n addDocument(supplierId: number, model: CompanySupplierDocumentModel) {\n return this.http.put(`/api/CompanySupplier/supplier/${supplierId}/document`, model);\n }\n\n removeDocument(supplierId: number, did: number) {\n return this.http.delete(`/api/CompanySupplier/supplier/${supplierId}/document/${did}`);\n }\n\n\n linkSupplierToCompany(model: LinkToCompanyRequestModel) {\n return this.http.post(`/api/CompanySupplier/link-supplier-to-company`, model);\n }\n\n unlinkSupplierFromCompany(model: UnlinkToCompanyRequestModel) {\n return this.http.post(`/api/CompanySupplier/unlink-supplier`, model);\n }\n\n joinSupplier(model: JoinSupplierRequestModel): Observable {\n return this.http.post(`/api/CompanySupplier/supplier-join`, model);\n }\n\n getjoinInfo(token: string) {\n return this.http.post(`/api/CompanySupplier/supplier-join-info/${token}`, {});\n }\n\n validateJoinLink(token: string, smsToken: string) {\n return this.http.post(`/api/CompanySupplier/validate-supplier-join/${token}/${smsToken}`, {});\n }\n\n resendSupplierLinkingInvitation(id: number) {\n return this.http.post(`/api/CompanySupplier/resend-supplier-join-invitation/${id}`, {});\n }\n\n cancelSupplierLinking(id: number) {\n return this.http.post(`/api/CompanySupplier/cancel-supplier-join/${id}`, {});\n }\n\n validateSiteSupplier(siteSupplierId: number, supplierId: number, siteId: number): Observable {\n return this.http.get(`/api/CompanySupplier/validate-site-supplier/${siteSupplierId}/${siteId}/${supplierId}`);\n }\n\n sendSMSSupplierActivationToken(token: string) {\n return this.http.post(`/api/CompanySupplier/send-sms-supplier-activation-token/${token}`, {});\n }\n\n}\n","
\n \n \n {{item.name}}\n \n \n
\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport {\n CompanySupplierQuery,\n CompanySupplierQueryTerm,\n CompanySupplierViewModel\n} from 'src/app/models/supplier-models';\nimport { CompanySupplierService } from 'src/app/services/company-supplier.service';\nimport { NgSelectComponent } from \"@ng-select/ng-select\";\n\n@Component({\n selector: 'obc-company-supplier-selector',\n templateUrl: './company-supplier-selector.component.html',\n styles: []\n})\nexport class CompanySupplierSelectorComponent implements OnInit {\n @ViewChild('selector') selector: NgSelectComponent;\n\n @Input() excludeList: number[] = [];\n\n _required = false;\n @Input() siteId;\n @Input() set control(value: FormControl) {\n this.formControl = value;\n this.formControl.valueChanges.subscribe(res => {\n this.selectSupplier.emit(this.suppliers?.find(x => x.id == res));\n })\n };\n formControl: FormControl;\n loading: boolean = false;\n $suppliers: Observable;\n suppliers: CompanySupplierViewModel[];\n term$ = new BehaviorSubject(null);\n @Input() sessionId = null;\n @Output() selectSupplier = new EventEmitter();\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl?.setValidators(Validators.required);\n }\n };\n\n clearSelector() {\n this.selector.handleClearClick();\n }\n\n constructor(private companySupplierService: CompanySupplierService) { }\n\n ngOnInit() {\n var method = this.sessionId ?\n this.companySupplierService.getSuppliersBySession(this.sessionId, { term: null } as CompanySupplierQueryTerm, null)\n : this.companySupplierService.getCachedSuppliers({ siteId: this.siteId, term: null } as CompanySupplierQuery, null);\n\n method.subscribe(res => {\n let that = this;\n this.suppliers = res.data.filter((el) => {\n return that.excludeList == null ||\n that.excludeList.length == 0 ||\n !that.excludeList.some((selected_el) => {\n return selected_el == el.id;\n });\n });\n //this.$suppliers = of(this.suppliers);\n this.term$.subscribe(term => {\n if (term) {\n var filteredSites = this.suppliers.filter((x) => {\n return x.name?.toLocaleLowerCase()?.indexOf(term) > -1;\n });\n this.$suppliers = of(filteredSites);\n } else {\n this.$suppliers = of(this.suppliers);\n }\n });\n })\n }\n\n}\n","
\n \n \n {{item.title}}\n \n \n
\n","import { InventoryService } from './../../services/inventory.service';\nimport { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { FormControl, Validators } from '@angular/forms';\nimport { ToolCategoryViewModel } from 'src/app/models/inventory/tool-category-model';\n\n@Component({\n selector: 'obc-filter-asset-category',\n templateUrl: './filter-asset-category.component.html',\n styleUrls: ['./filter-asset-category.component.scss']\n})\nexport class FilterAssetCategoryComponent implements OnInit {\n\n @ViewChild('selector') selector: NgSelectComponent;\n\n @Input() excludeList: number[] = [];\n\n _required = false;\n @Input() siteId;\n @Input() set control(value: FormControl) {\n this.formControl = value;\n this.formControl.valueChanges.subscribe(res => {\n this.selectAssetCategory.emit(this.assetCategories?.find(x => x.id == res));\n })\n };\n formControl: FormControl;\n loading: boolean = false;\n $assetCategories: Observable;\n assetCategories: ToolCategoryViewModel[];\n term$ = new BehaviorSubject(null);\n @Input() sessionId = null;\n @Output() selectAssetCategory = new EventEmitter();\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl?.setValidators(Validators.required);\n }\n };\n\n clearSelector() {\n this.selector.handleClearClick();\n }\n\n constructor(private inventoryService: InventoryService) { }\n\n ngOnInit() {\n var method = this.inventoryService.getToolCategories();\n // var method = this.sessionId ?\n // this.companySupplierService.getSuppliersBySession(this.sessionId, { term: null } as CompanySupplierQueryTerm, null)\n // : this.companySupplierService.getCachedSuppliers({ siteId: this.siteId, term: null } as CompanySupplierQuery, null);\n\n method.subscribe(res => {\n let that = this;\n this.assetCategories = res.data.filter((el) => {\n return that.excludeList == null ||\n that.excludeList.length == 0 ||\n !that.excludeList.some((selected_el) => {\n return selected_el == el.id;\n });\n });\n //this.$suppliers = of(this.suppliers);\n this.term$.subscribe(term => {\n if (term) {\n var filteredSites = this.assetCategories.filter((x) => {\n return x.title?.toLocaleLowerCase()?.indexOf(term) > -1;\n });\n this.$assetCategories = of(filteredSites);\n } else {\n this.$assetCategories = of(this.assetCategories);\n }\n });\n })\n }\n\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { NgSelectComponent } from \"@ng-select/ng-select\";\nimport { UserDocumentTypeService } from 'src/app/services/user-document-type.service';\nimport { UserDocumentType } from 'src/app/models/user-document-type';\n\n@Component({\n selector: 'obc-document-type-selector',\n templateUrl: './document-type-selector.component.html',\n styles: []\n})\nexport class DocumentTypeSelectorComponent implements OnInit {\n @ViewChild('selector') selector: NgSelectComponent;\n\n @Input() excludeList: number[] = [];\n\n _required = false;\n @Input() documentsTypes: number[] =[];\n @Input() set control(value: FormControl) {\n this.formControl = value;\n this.formControl.valueChanges.subscribe(res => {\n this.selectDocument.emit(this.documnets?.find(x => x.id == res));\n })\n };\n formControl: FormControl;\n loading: boolean = false;\n $documents: Observable;\n documnets: UserDocumentType[];\n term$ = new BehaviorSubject(null);\n @Input() sessionId = null;\n @Output() selectDocument = new EventEmitter();\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl?.setValidators(Validators.required);\n }\n };\n\n clearSelector() {\n this.selector.handleClearClick();\n }\n\n constructor(private userDocumentTypeService: UserDocumentTypeService) { }\n\n async ngOnInit() {\n await this.userDocumentTypeService.getAll().subscribe(res => {\n let that = this;\n this.documnets = res.filter((el) => {\n return that.excludeList == null ||\n that.excludeList.length == 0 ||\n !that.excludeList.some((selected_el) => {\n return selected_el == el.id;\n });\n });\n this.term$.subscribe(term => {\n if (term) {\n var filteredSites = this.documnets.filter((x) => {\n return x.title?.toLocaleLowerCase()?.indexOf(term) > -1;\n });\n this.$documents = of(filteredSites);\n } else {\n this.$documents = of(this.documnets);\n }\n });\n })\n }\n\n selectedDocumentTypes: UserDocumentType[] = [];\n onSelectedDocumentTypes(documentTypes: UserDocumentType[] = []) {\n documentTypes.map((item) => {\n this.selectDocument.emit(item);\n })\n }\n\n}\n","
\n \n
\n","export enum FormLoadMode {\n Normal,\n ExternalCompany,\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { ErrorService } from \"./error.service\";\nimport { Observable } from \"rxjs/internal/Observable\";\nimport { ServerResult, ServerResultData } from \"../models/server-result-data\";\nimport { FormViewModel, FormViewModelRequest } from \"../models/form/form-view-model\";\nimport { catchError } from \"rxjs/operators\";\nimport { FormDataViewModel } from \"../models/form/form-data-view-model\";\nimport { SupplierPermitInfo } from \"../models/form/permits-info-model\";\nimport { FormDataModel } from \"../models/form/form-data-model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SupplierPermitsService {\n\n apiUrl: string = \"/api/SupplierPermits\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n getPermitList(hashLink: string, siteSupplierId: number): Observable {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this.http.get(`${this.apiUrl}/permits` + (siteSupplierId ? '/' + siteSupplierId : ''), { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n getPermitForms(hashLink: string, siteSupplierId?: number): Observable> {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this.http.get>(`${this.apiUrl}/permit-forms${siteSupplierId == null ? '' : '/' + siteSupplierId}`, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n getFormInformation(formId: number, siteId: number, hashLink: string, siteSupplierId: number, toolId: number = null): Observable> {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this.http.post>(`${this.apiUrl}/form`,\n {\n formId: formId,\n siteId: siteId,\n siteSupplierId: siteSupplierId,\n toolId: toolId,\n } as FormViewModelRequest, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n submitFormData(data: FormDataModel, hashLink: string, siteSupplierId: number): Observable {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n data.endDate = data.endDate == null ? null :\n new Date(data.endDate.getFullYear()\n , data.endDate.getMonth()\n , data.endDate.getDate()\n , 23, 59, 59);\n return this.http.post(`${this.apiUrl}/fill-form` + (siteSupplierId ? '/' + siteSupplierId : ''), data, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","
\n \n \n {{item.name}}\n \n \n
\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl, Validators } from \"@angular/forms\";\nimport { BehaviorSubject, Observable, of } from \"rxjs\";\nimport { FormViewModel } from \"../../../models/form/form-view-model\";\nimport { FormService } from \"../../../services/form.service\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { NgSelectComponent } from \"@ng-select/ng-select\";\nimport { FormScope } from 'src/app/enums/form-scope';\nimport { GetFormsQueryModel } from 'src/app/models/form/get-forms-query-model';\nimport { FormType } from \"../../../enums/form-type\";\nimport { SupplierPermitsService } from \"../../../services/supplier-permits.service\";\nimport { FormApplyFor } from \"../../../enums/form-apply-for\";\nimport { FormLoadMode } from 'src/app/enums/form-load-mode.enum';\n\n@Component({\n selector: 'obc-form-selector',\n templateUrl: './form-selector.component.html',\n})\nexport class FormSelectorComponent implements OnInit {\n @Input() queryScope: FormScope;\n @Input() formType: FormType;\n @Input() selectFirstItemOfOneItemArray: boolean;\n @Input() hashLink: string;\n @Input() siteSupplierId: number;\n @Input() applyForList: FormApplyFor[];\n @Input() excludeFormIds: number[];\n @Input() placeholder: string;\n @Input() mode: FormLoadMode = FormLoadMode.Normal;\n @Input() companyId: number;\n @Input() documentKindId: number;\n @Input() workflowForms: FormViewModel[];\n @Input() includeInactiveForms: boolean = false;\n\n _required = false;\n _formId: number = null;\n @Input() set formId(value: number,) {\n if (value === undefined || value === null)\n return;\n this._formId = value;\n };\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl?.setValidators(Validators.required);\n }\n };\n\n @ViewChild('selector') selector: NgSelectComponent;\n\n constructor(private formService: FormService,\n private supplierPermitService: SupplierPermitsService,\n private modalService: ModalService,) {\n }\n\n\n forms$: Observable;\n term$ = new BehaviorSubject(null)\n formControl = new FormControl(null);\n @Output() selectedFormId = new EventEmitter();\n @Output() selectedForm = new EventEmitter();\n forms: FormViewModel[] = [];\n inProgress = false;\n\n ngOnInit() {\n this.getForms();\n\n this.formControl.valueChanges.subscribe(res => {\n if (this.forms) {\n if (res == null || res == 0) {\n this.selectedFormId.emit(null);\n this.selectedForm.emit(null);\n } else {\n let form = this.forms.find(x => x.id == res);\n if (form == null) {\n } else {\n this.selectedForm.emit(form);\n this.selectedFormId.emit(form.id);\n }\n }\n }\n });\n }\n\n private getForms() {\n if (this.workflowForms) {\n this.forms = this.workflowForms;\n this.setFormControls(this.forms);\n }\n else {\n this.inProgress = true;\n const model = {\n formScope: this.queryScope,\n formType: this.formType,\n formApplyFor: this.applyForList,\n documentKindIdList: this.documentKindId ? [this.documentKindId] : null,\n includeInactiveForms: this.includeInactiveForms,\n } as GetFormsQueryModel;\n\n (\n this.mode == FormLoadMode.ExternalCompany ?\n this.formService.getExternalCompanyForms({ ...{ companyId: this.companyId }, ...model }) :\n (this.formType == FormType.Permit && ((this.hashLink != null && this.hashLink.length > 0) || this.siteSupplierId != null) ?\n this.supplierPermitService.getPermitForms(this.hashLink, this.siteSupplierId) :\n this.formService.getForms(model)))\n .subscribe(\n res => {\n if (res.success) {\n this.setFormControls(res?.data);\n } else {\n this.modalService.error(res.message);\n }\n }, _ => {\n this.modalService.error(\"Request Failed\");\n }, () => {\n this.inProgress = false;\n }\n )\n }\n }\n\n setFormControls(formList: FormViewModel[]) {\n this.forms = this.filterForms(formList)?.map(form => {\n form.name = form.buttonTitle && form.buttonTitle.length > 0 ? form.buttonTitle : form.name;\n return form;\n });\n\n this.forms$ = of(this.filterForms(formList));\n if (this._formId !== undefined && this._formId !== null)\n this.formControl.setValue(this._formId);\n else if (this.selectFirstItemOfOneItemArray == true && this.forms?.length == 1) {\n this.formControl.setValue(this.forms[0].id);\n }\n }\n\n reachToEnd = false;\n reachToEndTerm = \"\";\n\n onScrollToEnd() {\n this.reachToEnd = true;\n this.reachToEndTerm = this.term$.value;\n this.term$.next(this.term$.value)\n }\n\n public clearInput() {\n this.selector.handleClearClick();\n }\n\n filterForms(formList: FormViewModel[]) {\n return formList?.filter((form) => {\n if (!this.excludeFormIds?.length || this.excludeFormIds.indexOf(form.id) == -1) {\n return form;\n }\n }).sort((a, b) => a.name.localeCompare(b.name));\n }\n}\n","export class UserBasicInfoViewModel {\n public countryRegion?: string;\n public id: number;\n public firstName: string;\n public lastName: string;\n public mobile: string;\n constructor(value?: UserBasicInfoViewModel) {\n if (value == null) return;\n\n var keys = Object.keys(value);\n keys.forEach(element => {\n if (element == 'isIncompleteRegister')\n return;\n this[element] = value[element];\n });\n }\n public get isIncompleteRegister(): boolean {\n return (this.firstName == undefined || this.lastName == undefined) ? true : false\n };\n\n\n}\nexport interface UserBasicInfoModel {\n id?: number;\n firstName?: string;\n lastName?: string;\n mobile?: string;\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { FormViewModel, FormViewModelRequest } from '../models/form/form-view-model';\nimport { ServerResultData } from '../models/server-result-data';\nimport { SiteAssetCheckInOutModel } from '../models/site-asset/site-asset-check-in-out-model';\nimport { SiteAssetCheckInViewModel } from '../models/site-asset/site-asset-checkin-view-model';\nimport { SiteAssetRegistrationModel } from '../models/site-asset/site-asset-registration-model';\nimport {\n CompanyAssetConfiguration, CompanyAssetConfigurationQueryViewModel,\n NicknameModel,\n SiteAssetConfigurationQueryViewModel,\n SiteAssetOperatorModel,\n} from '../models/site-asset/site-asset-view-model';\nimport { ErrorService } from './error.service';\nimport { AssetCheckInHistoryModel } from \"../models/site-asset/asset-check-in-history-model\";\nimport { FormDataDetailViewModel } from '../models/form/form-data-detail-view-model';\nimport { SearchAssetToRegisterModel } from '../models/inventory/search-tools-query-model';\nimport { GlobalViewModel } from '../models/global-viewmodel';\nimport { SiteAssetOperationModel } from \"../models/site-asset/site-asset-operation-model\";\nimport { UserSearchModel } from '../models/user-search-model';\nimport { UserBasicInfoViewModel } from '../models/user-basic-info-viewmodel';\nimport { CheckSiteTempAssetExistenceModel } from \"../models/site-asset/check-site-temp-asset-existence-model\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteAssetService {\n\n apiUrl: string = \"/api/SiteAsset\";\n anonymousApiUrl: string = \"/api/AnonymousSiteAsset\";\n constructor(private http: HttpClient, private _errorService: ErrorService) {\n }\n\n getSiteAssetsConfiguration(model: SiteAssetConfigurationQueryViewModel): Observable {\n return this.http.post(`${this.apiUrl}/site-assets-configuration`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getCompanyAssetsConfiguration(model: CompanyAssetConfigurationQueryViewModel): Observable {\n return this.http.post(`${this.apiUrl}/company-assets-configuration`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n checkSiteTempAssetExistence(model: CheckSiteTempAssetExistenceModel, hashLink: string = \"\"): Observable {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this.http.post(`${hashLink?.length ? this.anonymousApiUrl : this.apiUrl}/check-site-temp-asset-existence`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n registerSiteAsset(model: SiteAssetRegistrationModel, hashLink: string = \"\"): Observable> {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this.http.post(`${hashLink?.length ? this.anonymousApiUrl : this.apiUrl}/register-site-asset`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n registerAssetOperator(model: SiteAssetOperatorModel, hashLink: string = null) {\n if (hashLink) {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this.http\n .post(`${this.anonymousApiUrl}/register-asset-operator`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n else {\n return this.http.post(`${this.apiUrl}/register-asset-operator`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n }\n\n submitAssetOperation(model: SiteAssetOperationModel, siteAssetId: number) {\n return this.http.post(`${this.apiUrl}/submit-asset-operation/${siteAssetId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n checkInAsset(siteAssetId: number, model: SiteAssetCheckInOutModel): Observable {\n return this.http.post(`${this.apiUrl}/check-in-asset/${siteAssetId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n checkOutAsset(siteAssetId: number, model: SiteAssetCheckInOutModel): Observable {\n return this.http.post(`${this.apiUrl}/check-out-asset/${siteAssetId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getAssetCheckinHistory(model: AssetCheckInHistoryModel): Observable {\n return this.http.post(`${this.apiUrl}/get-asset-check-in-history`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getAssetRegistrationForms(siteId: number, hashLink: string = null) {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this.http.get>(`${this.apiUrl}/asset-registration-forms/${siteId}`, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getFormViewmodel(formId: number, hashLink: string = null, toolId: number, siteId: number = null) {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this.http.post>(`${this.anonymousApiUrl}/form`, { formId: formId, siteId: siteId, toolId: toolId } as FormViewModelRequest, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getAnonymousFilledForm(formId: number, hashLink: string): Observable> {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this.http.get>(`${this.anonymousApiUrl}/get-filled-form/${formId}`, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n searchToolsToRegister(model: SearchAssetToRegisterModel) {\n return this.http.post(`${this.apiUrl}/search-assets-to-register`, model)\n .pipe(catchError(this._errorService.handleError));\n\n }\n\n setNickname(model: NicknameModel): Observable {\n return this.http.post(`${this.apiUrl}/set-nickname`, model);\n }\n\n searchUser(model: UserSearchModel): Observable {\n let headers = new HttpHeaders({ \"hash-link\": model.hashLink ?? '' });\n return this.http.post(`${this.anonymousApiUrl}/seacrh-company-users`, model, { headers: headers });\n }\n}\n","
\n \n
\n
\n Loading...\n
\n
\n
\n{{notFoundMessage}}\n\n {{model.firstName}} - {{model.lastName}} - {{model.mobile | mobile}}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { noop, Observable, Observer, of } from 'rxjs';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { debounceTime, filter, finalize, map, switchMap, tap } from 'rxjs/operators';\nimport { UserService } from 'src/app/services/user.service';\nimport { TypeaheadMatch } from 'ngx-bootstrap/typeahead/public_api';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { MobilePipe } from 'src/app/pipes/mobile.pipe';\nimport { UserSearchModel } from 'src/app/models/user-search-model';\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\n\n@Component({\n selector: 'obc-user-autocomplete',\n templateUrl: './user-autocomplete.component.html',\n styleUrls: ['./user-autocomplete.component.scss'],\n providers: [MobilePipe]\n})\nexport class UserAutocompleteComponent implements OnInit {\n inProgress: boolean = false;\n suggestions$: Observable;\n loader: boolean = false;\n _currentUser: UserBasicInfoViewModel;\n @Input() isValid: boolean = true;\n @Input() container: string = \"body\";\n @Input() placeholder: string = '';\n @Input() display: string = null;\n @Input() disabled: boolean = false;\n @Input() displayNoResult: boolean = true;\n @Input() filterBy: UserAutoCompleteFilterByFields;\n @Input() required: boolean = false;\n @Input() loadForExternalCompany: boolean = false;\n @Input() notFoundMessage: string = 'user not found'\n @Input() hashLink: string;\n @Input() set currentUser(model: UserBasicInfoViewModel) {\n this._currentUser = model;\n if (model != null) {\n if (model.id) {\n this._selectedUserForValidator = model;\n }\n this.resetSearchTerm();\n this.noResult = false;\n }\n };\n\n @Input() filterByCurrentUserRegion?: boolean = false;\n\n get currentUser(): UserBasicInfoViewModel {\n return this._currentUser;\n }\n\n _selectedUserForValidator: UserBasicInfoViewModel;\n @Output()\n selectedUser: EventEmitter = new EventEmitter();\n @Output() inputChange: EventEmitter<{ field: string, value: string }> = new EventEmitter();\n searchTerm: string = '';\n\n constructor(\n private userService: UserService,\n private mobilePipe: MobilePipe,\n private siteAssetService: SiteAssetService) { }\n\n ngOnInit(): void {\n this.getUserList();\n\n this.selectedUser.asObservable().subscribe((res) => {\n this._selectedUserForValidator = res?.id ? res : null;\n });\n }\n\n get isEnabled(): boolean {\n return this.hashLink?.length > 0 || this.userService.currentCompanyId > 0;\n }\n\n get isInvalid(): boolean {\n return !this.isValid || (this.required && !this._selectedUserForValidator && !this.searchTerm?.length);\n }\n\n getUserList() {\n this.suggestions$ = new Observable((observer: Observer) => {\n observer.next(this.searchTerm);\n }).pipe(\n filter(x => this.searchTerm != null && this.searchTerm.length > 3 && this.isEnabled),\n debounceTime(500),\n switchMap((query: string) => {\n if (query) {\n this.loader = true;\n var model = {\n searchterm: query,\n targetField: this.filterBy,\n filterByCurrentUserRegion: this.filterByCurrentUserRegion,\n isSupplierMode: this.loadForExternalCompany ?? false,\n hashLink: this.hashLink\n } as UserSearchModel;\n\n return (this.hashLink?.length ? this.siteAssetService : this.userService)\n .searchUser(model)\n .pipe(\n map((data: UserBasicInfoViewModel[]) => data && data || []),\n tap(() => noop, err => {\n var rrr = err && err.message || 'Something goes wrong';\n }),\n finalize(() => { this.loader = false })\n );\n }\n\n return of([]);\n })\n );\n }\n\n onSelectUser(event: TypeaheadMatch): void {\n this.currentUser = event.item;\n this.currentUser.mobile = \"+\" + this.currentUser.mobile;\n this.resetSearchTerm();\n this.selectedUser.emit(event.item);\n }\n\n getSearchTerm() {\n if (this.currentUser)\n return (this.currentUser?.firstName ?? \" \") + ' ' + (this.currentUser?.lastName ?? \" \") + ' ' + ((this.currentUser?.mobile ? this.mobilePipe.transform(this.currentUser?.mobile) : ''));\n return '';\n }\n\n resetSearchTerm() {\n if (this.display)\n this.searchTerm = this.currentUser[this.display];\n else\n this.searchTerm = this.getSearchTerm();\n this.inputChange.emit({ field: this.display, value: this.searchTerm });\n }\n\n reset() {\n this.searchTerm = null;\n this.currentUser = new UserBasicInfoViewModel();\n this.onChange(null);\n }\n\n onChange($event) {\n if (this._currentUser && this._currentUser?.id != undefined && this.getSearchTerm() != this.searchTerm) {\n this.selectedUser.emit(this.noUserData());\n }\n\n if (this.searchTerm != '[object Object]')\n this.inputChange.emit({ field: this.display, value: this.searchTerm });\n }\n\n noResult: boolean = false;\n typeaheadNoResults(event: boolean): void {\n this.noResult = event;\n this.selectedUser.emit(this.noUserData());\n }\n\n noUserData() {\n return { id: null, firstName: '', lastName: '', mobile: '', isIncompleteRegister: false };\n }\n}\n","import { Self } from '@angular/core';\nimport { Component, OnInit } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NgControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\nimport { toInteger } from 'lodash';\n\n@Component({\n selector: 'app-duration-form-control',\n templateUrl: './duration-form-control.component.html',\n // providers: [\n // {\n // provide: NG_VALUE_ACCESSOR,\n // useExisting: DurationFormControlComponent,\n // multi: true,\n // }\n // ],\n styleUrls: ['./duration-form-control.component.scss']\n})\nexport class DurationFormControlComponent implements ControlValueAccessor, OnInit {\n formGroup = new FormGroup({\n hours: new FormControl(null, [Validators.min(0)]),\n minutes: new FormControl(null, [Validators.min(0), Validators.max(59)])\n });\n onChange: Function;\n constructor(@Self() private controlDirective: NgControl) {\n controlDirective.valueAccessor = this;\n }\n ngOnInit(): void {\n this.controlDirective.control.setValidators([this.validate.bind(this)]);\n this.controlDirective.control.updateValueAndValidity();\n this.formGroup.statusChanges.subscribe(res => {\n if (this.onChange)\n this.onChange(this.totalMinutes)\n });\n }\n writeValue(totalMinutes: number): void {\n var minutes = toInteger((totalMinutes % 60));\n var hours = toInteger((totalMinutes - minutes) / 60);\n this.formGroup.controls.hours.setValue(hours ? hours : null);\n this.formGroup.controls.minutes.setValue(minutes? minutes : null);\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n }\n setDisabledState?(isDisabled: boolean): void {\n if (isDisabled) {\n this.formGroup.controls.hours.disable();\n this.formGroup.controls.minutes.disable();\n } else {\n this.formGroup.controls.hours.enable();\n this.formGroup.controls.minutes.enable();\n }\n }\n\n get totalMinutes(): number {\n return +(this.formGroup.controls.hours.value * 60) +\n (+this.formGroup.controls.minutes.value);\n }\n\n validate({ value }: FormControl) {\n if (!this.formGroup.valid)\n return { invalid: true }\n }\n}\n","
\n    \n
","\n
\n \n
\n
\n \n {{parentSelectedSite.name}}\n
\n
\n
\n\n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { finalize } from 'rxjs/internal/operators/finalize';\nimport {\n BaseInventoryLocationViewModel,\n InventoryLocationViewModel\n} from 'src/app/models/inventory/inventory-location-model';\nimport { InventorySiteLocationsViewModel } from 'src/app/models/inventory/inventory-site-locations-view-model';\nimport { BaseSiteViewModel } from 'src/app/models/site-viewmodel';\nimport { InventoryService } from 'src/app/services/inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserService } from 'src/app/services/user.service';\nimport {InventoryLocationSelectorModel} from \"../../../models/inventory/inventory-location-selector-model\";\nimport {FormControl} from \"@angular/forms\";\n\n@Component({\n selector: 'obc-inventory-location-selector',\n templateUrl: './inventory-location-selector.component.html',\n styleUrls: ['./inventory-location-selector.component.scss']\n})\n\nexport class InventoryLocationSelectorComponent implements OnInit {\n @Input() parentSelectedSite: BaseSiteViewModel;\n @Input() externalSiteSupplierId: number;\n @Input() canAddNewLocation: boolean;\n @Output() onSelectLocation: EventEmitter = new EventEmitter();\n @Output() onAddNewLocation: EventEmitter = new EventEmitter();\n loading: boolean = false;\n siteLocations: InventorySiteLocationsViewModel[];\n selectedSite: InventorySiteLocationsViewModel = null;\n selectedLocation: FormControl = new FormControl(); //BaseInventoryLocationViewModel = null;\n selectedLocationModel: BaseInventoryLocationViewModel; //BaseInventoryLocationViewModel = null;\n isNewLocationRequested: boolean = false;\n\n ngOnInit(): void {\n this.getInventorySiteLocations();\n this.selectedLocation.valueChanges.subscribe(_ => this.emitSelectedLocation());\n\n this.canAddNewLocation = this.canAddNewLocation ?? this.userService.canAddNewLocation;\n\n }\n constructor(private inventoryService: InventoryService,\n public userService: UserService,) { }\n\n getInventorySiteLocations() {\n this.loading = true;\n if (this.parentSelectedSite == null || this.parentSelectedSite.id == null) {\n this.inventoryService.inventorySiteLocations\n .subscribe(data => {\n this.siteLocations = data;\n if(data && data.length > 0) {\n this.selectedSite = data[0];\n this.siteChanged();\n }\n this.loading = false;\n });\n }\n else if (this.externalSiteSupplierId == null) {\n this.inventoryService.getInventoryLocationsBySiteId(this.parentSelectedSite.id)\n .pipe(finalize(() => { this.loading = false; }))\n .subscribe(res => {\n this.selectedSite = res.data;\n this.siteChanged();\n });\n } else {\n this.inventoryService.getInventoryLocationsBySiteSupplierId(this.externalSiteSupplierId)\n .pipe(finalize(() => { this.loading = false; }))\n .subscribe(res => {\n this.selectedSite = res.data;\n this.siteChanged();\n });\n }\n }\n selectFirstLocation(site: InventorySiteLocationsViewModel) {\n setTimeout(() => {\n if(site?.locations?.length == 0) {\n this.selectedLocation.setValue(null);\n } else {\n this.selectedLocation.setValue(site?.locations[0]?.id);\n }\n this.emitSelectedLocation();\n }, 100)\n }\n\n emitSelectedLocation() {\n this.selectedLocationModel = this.selectedSite?.locations?.find((e) => e.id == this.selectedLocation.value);\n this.onSelectLocation.emit({selectedLocation: this.selectedLocationModel, selectedSite: this.selectedSite} as InventoryLocationSelectorModel)\n }\n\n siteChanged() {\n this.selectFirstLocation(this.selectedSite);\n }\n onRequestToAddNewLocation() {\n this.isNewLocationRequested = true;\n this.onSelectLocation.emit(null);\n this.onAddNewLocation.emit(null);\n }\n onAddLocation(newLocation: string) {\n this.onAddNewLocation.emit({newLocationTitle: newLocation, selectedSite: this.selectedSite} as InventoryLocationSelectorModel);\n }\n onRequestToSelectLocation() {\n this.isNewLocationRequested = false;\n this.selectFirstLocation(this.selectedSite);\n this.onAddNewLocation.emit(null);\n }\n\n}\n","export enum InductionMode {\n Disable = 0,\n HostApprove = 1,\n Auto = 2,\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { catchError, tap } from 'rxjs/operators';\nimport {\n CloneInductionQueryModel,\n InductionModel,\n InductionViewModel,\n SiteRequiredInductionViewModel\n} from '../models/induction-viewmodel';\nimport { CompanySiteScope } from '../enums/company-site-scope';\nimport { ServerResultData } from '../models/server-result-data';\nimport { SiteInductionFullInfoViewModel } from '../models/induction/site-induction-full-info-view-model';\nimport { PagingViewModel } from '../models/site-list-paging-view-model';\nimport { InductionReportRequestModel } from '../models/induction/induction-report-request-model';\nimport { SiteInductionFilledInfoViewModel } from '../models/induction/site-induction-filled-info-view-model';\nimport { Orderable } from \"../models/orderable-model\";\nimport { convertObjectToUrlParameters } from '../helpers/extract-params-from-model';\nimport { InductionMode } from '../enums/site-induction-mode.enum';\nimport { ResetEntityStatusQueryModel } from '../models/approve/reset-entity-status-query-model';\nimport { SiteAttendanceInductionViewModel } from '../models/site-attendance-induction-view-model';\nimport {\n SiteInductionHistoryLogModel,\n SiteInductionHistoryLogViewModel\n} from \"../models/induction/site-induction-history-log-model\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InductionService {\n\n private inductionApiRoot = '/api/Induction'\n cachedInductions: InductionViewModel[] = null;\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getInductions = (scope?: CompanySiteScope, ...mode: InductionMode[]): Observable =>\n this._http.get(`${this.inductionApiRoot}/get-all?scope=${scope ? (+scope) : ''}${mode && mode.length>0? `&${mode.map(m=>`mode=${m}`).join('&')}`:''}`)\n .pipe(catchError(this._errorService.handleError));\n\n getCachedInductions(): Observable {\n if (this.cachedInductions)\n return of(this.cachedInductions);\n else\n return this.getInductions().pipe(tap((res) => this.cachedInductions = res))\n }\n\n addInduction = (model: InductionModel): Observable =>\n this._http.post(`${this.inductionApiRoot}/add`, model)\n .pipe(catchError(this._errorService.handleError));\n\n previewInduction = (model: InductionModel): Observable> =>\n this._http.post(`${this.inductionApiRoot}/preview`, model)\n .pipe(catchError(this._errorService.handleError));\n\n editInduction(inductionId: number, induction: InductionModel): Observable> {\n return this._http.post>(`${this.inductionApiRoot}/edit/${inductionId}`, induction)\n .pipe(catchError(this._errorService.handleError));\n }\n\n cloneInduction = (model: CloneInductionQueryModel): Observable =>\n this._http.post(`${this.inductionApiRoot}/clone`, model)\n .pipe(catchError(this._errorService.handleError));\n\n removeInduction(induction: InductionViewModel): Observable> {\n return this._http.post>(`${this.inductionApiRoot}/remove`, induction)\n .pipe(catchError(this._errorService.handleError));\n }\n\n changeItemsOrder = (id: any, items: Orderable[]) =>\n this._http.post(`/api/Induction/change-order/${id}`, items);\n\n getSiteInductionsReport(model: InductionReportRequestModel): Observable>> {\n return this._http.post>>(`/api/Induction/site-induction-report`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n getSiteInductionFilledInfo(siteInductionId: number): Observable> {\n return this._http.get>(`/api/Induction/site-induction-filled-info/${siteInductionId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n exportSiteInductionsReportAsCsv(model: InductionReportRequestModel) {\n const params = convertObjectToUrlParameters(model);\n return window.open(`/api/Induction/site-induction-report-csv/?` + params);\n }\n\n inductionHistoryLog(model: SiteInductionHistoryLogModel): Observable>> {\n return this._http.post>>(`/api/Induction/site-induction-history-log`, model);\n }\n\n}\n","
\n \n \n {{item.title}}\n \n \n
\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { BehaviorSubject } from 'rxjs';\nimport { InductionViewModel } from 'src/app/models/induction-viewmodel';\nimport { InductionService } from 'src/app/services/induction-service';\nimport { ReplaySubjectsService } from \"../../services/replay-subjects\";\nimport { InductionMode } from 'src/app/enums/site-induction-mode.enum';\n\n@Component({\n selector: 'obc-company-induction-selector',\n templateUrl: './company-induction-selector.component.html',\n styleUrls: ['./company-induction-selector.component.scss']\n})\n\nexport class CompanyInductionSelectorComponent implements OnInit {\n @ViewChild('selector') selector: NgSelectComponent;\n\n allSelectedItems: number[] = [];\n @Input() selectedInductions: InductionViewModel[];\n @Input() includeInactiveInductions: boolean = false;\n\n _required = false;\n @Input() siteId;\n @Input() set control(value: FormControl) {\n this.formControl = value;\n this.formControl.valueChanges.subscribe(res => {\n this.allSelectedItems.push(res);\n this.onSelectInduction.emit(this.inductions?.find(x => x.id == res));\n this.filteredInductions = this.inductions?.filter((item) => !this.allSelectedItems.includes(item.id))\n })\n };\n formControl: FormControl;\n loading: boolean = false;\n filteredInductions: InductionViewModel[];\n inductions: InductionViewModel[];\n term$ = new BehaviorSubject(null);\n @Input() sessionId = null;\n @Output() onSelectInduction = new EventEmitter();\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl.setValidators(Validators.required);\n }\n };\n\n clearSelector() {\n this.selector.handleClearClick();\n }\n\n constructor(private inductionService: InductionService,\n private replaySubjectsService: ReplaySubjectsService) { }\n\n ngOnInit() {\n this.replaySubjectsService.inductionFilterItemsObs.asObservable().subscribe((res) => {\n this.allSelectedItems = res.map((item) => item.id);\n this.filteredInductions = this.inductions?.filter((item) => !this.allSelectedItems.includes(item.id))\n });\n\n this.inductionService.getCachedInductions()\n .subscribe(res => {\n this.inductions = res.filter(x => this.includeInactiveInductions == true || x.mode != InductionMode.Disable);\n this.term$.subscribe(term => {\n if (term) {\n this.filteredInductions = this.inductions.filter((x) => {\n return x.inductionKey?.toLocaleLowerCase()?.indexOf(term.toLocaleLowerCase()) > -1 ||\n x.title?.toLocaleLowerCase()?.indexOf(term.toLocaleLowerCase()) > -1;\n });\n } else {\n this.filteredInductions = [...this.inductions];\n }\n });\n\n this.allSelectedItems = this.selectedInductions.map((item) => item.id);\n this.filteredInductions = [...this.inductions?.filter((item) => !this.allSelectedItems.includes(item.id)) ?? []]\n\n })\n\n }\n\n}\n","
\n \n \n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n \n
\n
\n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n\n \n
\n
\n \n
\n
\n
\n\n\n \n
\n
\n \n
\n
\n
\n\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n
\n \n
\n \n {{ getFilterText(item,type) }} \n \n \n
\n
\n
\n
\n\n \n
\n \n
\n \n {{ getFilterText(item,type) }} \n \n \n
\n
\n
\n\n
\n\n \n \n \n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n \n \n
\n
\n
\n \n \n \n \n\n \n \n \n \n \n \n \n \n \n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n\n \n \n \n\n \n
\n \n \n
\n
\n \n
\n
\n \n \n \n \n
\n
\n \n \n \n \n
\n \n `From` date should be less than `To` date\n \n \n
\n
\n \n
\n
\n \n \n \n \n
\n \n
\n
\n \n
\n
\n \n \n \n \n
\n
\n \n \n \n \n
\n \n `From` date should be less than `To` date\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n \n \n
\n\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n\n \n \n \n \n\n
\n\n
","import { ApproveEntityType } from './../../../enums/approve-entity-type';\nimport { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { FilterDateRangeModel } from 'src/app/models/filter-models/filter-date-range-model';\nimport * as moment from 'moment';\nimport { DefaultDateRange } from 'src/app/enums/default-date-range.enum';\nimport { CacheService } from 'src/app/services/cache.service';\nimport { UserAutocompleteComponent } from '../../user-autocomplete/user-autocomplete.component';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { Gender } from 'src/app/enums/gender.enum';\nimport { FilteGenderModel } from 'src/app/models/filter-models/filte-gender-model';\nimport { DatePipe } from '@angular/common';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { MobilePipe } from 'src/app/pipes/mobile.pipe';\nimport { DurationRange } from 'src/app/models/filter-models/duration-range';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { InputDateTimePickerComponent } from '../../input-date-time-picker/input-date-time-picker.component';\nimport { SiteInductionStatus } from 'src/app/enums/site-induction-status';\nimport { InventoryService } from 'src/app/services/inventory.service';\nimport { VisitorType } from 'src/app/models/visitor-type';\nimport { ToolCategoryViewModel } from 'src/app/models/inventory/tool-category-model';\nimport { IndustryTypeViewModel } from 'src/app/models/industry-type/industry-type-view-model';\nimport { ToolStatusViewModel } from 'src/app/models/inventory/tool-status-model';\nimport { FormSelectorComponent } from 'src/app/components/form-manage/form-selector/form-selector.component';\nimport { FormType } from 'src/app/enums/form-type';\nimport { SiteSelectorComponent } from 'src/app/components/site-selector/site-selector.component';\nimport { EnumToArray } from 'src/app/helpers/enum-to-array';\nimport { FormTypePipe } from 'src/app/pipes/form-type.pipe';\nimport { SiteInductionStatusPipe } from 'src/app/pipes/site-induction-status.pipe';\nimport { PermitStatus } from 'src/app/enums/permit-status';\nimport { PermitStatusPipe } from 'src/app/pipes/permit-status.pipe';\nimport { UserDocumentType } from 'src/app/models/user-document-type';\nimport { DocumentExpiryStatus } from 'src/app/enums/document-expiry-status.enum';\nimport { SiteAssetQueryMode } from 'src/app/enums/site-asset-query-mode.enum';\nimport { AssetCategoryType } from 'src/app/enums/asset-category-type-enum';\nimport { PendingToApproveStatus } from 'src/app/enums/approve-status';\nimport { ReplaySubjectsService } from \"../../../services/replay-subjects\";\nimport { InventoryLocationViewModel } from \"../../../models/inventory/inventory-location-model\";\nimport { SiteSupplierDocumentVersionStatus } from \"../../../enums/site-supplier-document-status\";\nimport { SiteSupplierDocumentVersionStatusPipe } from 'src/app/pipes/site-supplier-document-version-status.pipe';\nimport { SiteBriefingStatus } from 'src/app/enums/site-briefing-status';\nimport { FormService } from 'src/app/services/form.service';\nimport { WorkflowType } from 'src/app/enums/workflow/workflow-type';\nimport { WorkflowService } from 'src/app/services/workflow.service';\nimport { DocumentKindService } from 'src/app/services/document-kind.service';\nimport { SupplierDocumentKindViewModel } from 'src/app/models/supplier-document/supplier-document-kind-viewmodel';\nimport { FilterSettings } from 'src/app/models/grid/grid.config';\nimport { ObcEventLogTypeEnum } from 'src/app/enums/obc-event-log-type.enum';\nimport { WorkerProfileLogTypePipe } from 'src/app/pipes/worker-profile-log-type.pipe';\n\n@Component({\n selector: 'app-popover-filter-simple',\n templateUrl: './popover-filter-simple.component.html',\n providers: [MobilePipe, DatetimePipe, DatePipe, SiteSupplierDocumentVersionStatusPipe, WorkerProfileLogTypePipe],\n styleUrls: ['./popover-filter-simple.component.scss']\n})\nexport class PopoverFilterSimpleComponent implements OnInit, AfterViewInit {\n id: number;\n DatetimePickerMode = DatetimePickerMode;\n FilterType = FilterType;\n @Input() public items = [];\n @Input() type: FilterType;\n @Input() Ref: any;\n @Input() addButtonLabel: string = 'Add To Filter(s)';\n @Input() inventoryLocationSelectorCanAddNewLocation: boolean;\n @Input() formType: FormType;\n SiteActiveStatus = SiteActiveStatus;\n @Input() SiteViewPermissions: UserPermission = UserPermission.ViewReports;\n @Input() loadForExternalCompany: boolean = false;\n @Input() includeExternalCompanySites: boolean = false;\n @Input() fromDate: Date | undefined = null;\n @Input() toDate: Date | undefined = null;\n @Input() siteId: number | undefined = null;\n @Input() filterSettings?: FilterSettings;\n\n @ViewChild(\"refUserAutocomplete\") public refUserAutocomplete: any;\n @ViewChild(\"dt1\") public dt1: InputDateTimePickerComponent;\n @ViewChild(\"dt2\") public dt2: InputDateTimePickerComponent;\n @ViewChild(\"dt3\") public dt3: InputDateTimePickerComponent;\n @ViewChild(\"dt4\") public dt4: InputDateTimePickerComponent;\n\n @ViewChild(\"formSelector\") public formSelector: FormSelectorComponent;\n @ViewChild('sl') siteSelector: SiteSelectorComponent\n @ViewChild('user') userSelector: UserAutocompleteComponent\n @Output() self = new EventEmitter();\n\n visitorTypes: VisitorType[];\n industryTypes: IndustryTypeViewModel[];\n inventoryCategories: ToolCategoryViewModel[];\n inventoryToolStatuses: ToolStatusViewModel[];\n userDocumentTypes: UserDocumentType[];\n supplierFormControl = new FormControl();\n assetCategoryFormControl = new FormControl();\n documentTypeFormControl = new FormControl();\n inductionFormControl = new FormControl();\n showDateTime: boolean = false;\n documentExpiryStatusEnum = DocumentExpiryStatus;\n approvalStatusEnum = PendingToApproveStatus;\n SiteSupplierDocumentVersionStatus = SiteSupplierDocumentVersionStatus;\n approveEntityTypeEnum = ApproveEntityType;\n siteAssetQueryModeEnum = SiteAssetQueryMode;\n assetCategoryTypeEnum = AssetCategoryType;\n SiteBriefingStatus = SiteBriefingStatus;\n WorkflowType = WorkflowType;\n hashlink: string = null;\n localCompanyId: number = null;\n documentKindList: SupplierDocumentKindViewModel[];\n obcEventLogTypeEnum = ObcEventLogTypeEnum;\n\n defaultDateRanges: FilterDateRangeModel[] = [\n { \n label: 'Today',\n from: moment().startOf('day').toDate(),\n to: moment().toDate(),\n key: DefaultDateRange.Today\n },\n {\n label: 'Yesterday',\n from: moment().add(-1, 'day').startOf('day').toDate(),\n to: moment().startOf('day').toDate(),\n key: DefaultDateRange.Yesterday\n },\n {\n label: 'Last Week',\n from: moment().add(-1, 'week').startOf('day').toDate(),\n to: moment().toDate(),\n key: DefaultDateRange.LastWeek\n },\n {\n label: 'This Week',\n from: moment().startOf('week').toDate(),\n to: moment().toDate(),\n key: DefaultDateRange.ThisWeek\n },\n {\n label: 'Last Month',\n from: moment().add(-1, 'month').toDate(),\n to: moment().toDate(),\n key: DefaultDateRange.LastMonth\n },\n {\n label: 'This Month',\n from: moment().startOf('month').toDate(),\n to: moment().toDate(),\n key: DefaultDateRange.ThisMonth\n },\n ];\n\n defaultGenders: FilteGenderModel[] = [\n { label: \"Male\", key: Gender.male },\n { label: \"Female\", key: Gender.female },\n { label: \"Other\", key: Gender.other },\n ]\n\n defaultInductionStatuses: any[];\n\n defaultFormType: any[];\n permitStatusTypes: any[];\n\n filterUserBy = UserAutoCompleteFilterByFields;\n formControl = new FormControl();\n dateFormGroup = new FormGroup({\n from: new FormControl(null, []),\n to: new FormControl(null, []),\n })\n @Output() update = new EventEmitter();\n\n constructor(\n public cacheService: CacheService,\n private mobilePipe: MobilePipe,\n private datetimePipe: DatetimePipe,\n private datePipe: DatePipe,\n public inventoryService: InventoryService,\n private formTypePipe: FormTypePipe,\n private statusPipe: PermitStatusPipe,\n private siteInductionStatus: SiteInductionStatusPipe,\n private replaySubjectsService: ReplaySubjectsService,\n private formService: FormService,\n private workflowService: WorkflowService,\n private documentKindService: DocumentKindService,\n private workerProfileLogTypePipe: WorkerProfileLogTypePipe) {\n this.id = Math.round(Math.random() * 1000);\n }\n\n ngAfterViewInit(): void {\n this.self.emit(this);\n if (this.fromDate) {\n this.dateFormGroup.controls['from'].setValue(this.fromDate);\n }\n if (this.toDate) {\n this.dateFormGroup.controls['to'].setValue(this.toDate);\n }\n }\n\n ngOnInit() {\n if (this.type == FilterType.VisitorType)\n this.cacheService.visitorTypes.subscribe(data => {\n this.visitorTypes = data;\n });\n else if (this.type == FilterType.IndustryType)\n this.cacheService.industryTypes.subscribe(data => {\n this.industryTypes = data;\n });\n else if (this.type == FilterType.InventoryCategory)\n this.inventoryService.inventoryCategories.subscribe(data => {\n this.inventoryCategories = data;\n });\n else if (this.type == FilterType.InventoryToolStatus)\n this.inventoryService.inventoryToolStatuses.subscribe(data => {\n this.inventoryToolStatuses = data;\n });\n else if (this.type == FilterType.DateTime) {\n this.defaultDateRanges = [];\n this.defaultDateRanges = [{ label: 'Now', from: moment().toDate(), to: moment().toDate(), key: DefaultDateRange.Today }];\n }\n else if (this.type == FilterType.Site) {\n this.siteId = this.items ? this.items[0] : this.siteId;\n }\n else if (this.type == FilterType.SingleText)\n this.formControl.setValue(this.items?.length > 0 ? this.items[0] : null);\n\n this.defaultFormType = this.formService.getActiveFormTypes().map(e => { return { label: this.formTypePipe.transform(e), key: e, type: FilterType.FormType }; });\n this.permitStatusTypes = EnumToArray(PermitStatus).map(e => { return { label: this.statusPipe.transform(+e.id), key: e.id, type: FilterType.PermitStatus }; });\n this.defaultInductionStatuses = EnumToArray(SiteInductionStatus).map(e => { return { label: this.siteInductionStatus.transform(e.id), key: e.id, type: FilterType.Induction }; });\n\n this.getDocumentKindList();\n }\n\n handleAddOrRemove(item, replace: boolean = false, byKey: boolean = false) {\n if (this.contain(item)) byKey ? this.onRemoveByKey(item) : this.onRemove(item)\n else this.onAdd(item, replace)\n }\n handleAddOrRemoveDateTime(item, replace: boolean = false, byKey: boolean = false) {\n if (this.contain(item)) byKey ? this.onRemoveByKey(item) : this.onRemove(item)\n else this.onAdd(item, replace)\n this.showDateTime = true;\n }\n handleAddOrRemoveDocType(item) {\n let indexOfItem = this.items.indexOf(item);\n if (indexOfItem == -1) {\n this.items.push(item);\n this.update.emit(this.items);\n }\n else {\n this.items.splice(indexOfItem, 1);\n this.update.emit(this.items);\n }\n }\n onAdd(item, replace: boolean = false) {\n if (this.type == FilterType.Induction) {\n item.key = +item.key;\n }\n this.showDateTime = false;\n if (item == undefined) return;\n if (this.type == FilterType.User && !item.id) return;\n if (this.type == FilterType.Site && this.items.find(x => x.id == item.id)) return;\n if (this.type == FilterType.Form && this.items.find(x => x.id == item.id)) return;\n if (this.type == FilterType.Text && this.items.find(x => x == item)) return;\n if (this.type == FilterType.SingleText && this.items.find(x => x == item)) return;\n if (this.type == FilterType.InventoryLocation && this.items.find(x => x.id == item.id)) return;\n if (this.type == FilterType.DocumentType && this.items.find(x => x.id == item.id)) return;\n if (this.type == FilterType.Induction && this.items.find(x => x.key == item.key)) return;\n if (this.type == FilterType.InductionId && this.items.find(x => x.id == item.id)) return;\n // if (this.type == FilterType.ApprovalStatus && this.items.find(x => x == item)) return;\n // if (this.type == FilterType.ApproveEntityType && this.items.find(x => x == item)) return;\n\n if (this.type == FilterType.DateRange || this.type == FilterType.DateTimeRange || this.type == FilterType.DateTime) {\n if (this.invalidDate(item.from, item.to))\n return;\n }\n\n\n if (replace)\n this.items = [item];\n else if (!replace)\n this.items.push(item);\n\n this.update.emit(this.items);\n\n if (this.type == FilterType.User) this.refUserAutocomplete.searchTerm = null;\n if (this.type == FilterType.Text) this.formControl.setValue(null);\n\n if (this.type == FilterType.Form) {\n this.formSelector.clearInput();\n }\n if (this.type == FilterType.Site) {\n this.siteSelector.clearInput();\n }\n if (this.type == FilterType.DateRange || this.type == FilterType.DateTimeRange || this.type == FilterType.DateTime) {\n this.dateFormGroup.controls['from'].setValue(null)\n this.dateFormGroup.controls['to'].setValue(null)\n }\n if (this.type == FilterType.User) {\n this.userSelector.reset();\n }\n }\n\n invalidDate(from, to, checkEmptiness: boolean = true,) {\n if (checkEmptiness)\n if ((!from && !to) || (from == 'Invalid Date' || to == 'Invalid Date'))\n return true;\n if (from && to) {\n return from > to;\n }\n return false;\n }\n\n onRemove(item, type?: FilterType) {\n var index = this.items.indexOf(item);\n this.items.splice(index, 1);\n if (type === FilterType.DateTimeRange) {\n this.fromDate = null;\n this.dateFormGroup.controls['from'].setValue(this.fromDate);\n this.toDate = null;\n this.dateFormGroup.controls['to'].setValue(this.fromDate);\n }\n\n if (type == FilterType.InductionId) {\n this.replaySubjectsService.inductionFilterItemsObs?.next(this.items)\n }\n\n this.update.emit(this.items);\n }\n\n onRemoveByKey(item) {\n var oitem = this.items.find((x) => x.key == item.key);\n var index = this.items.indexOf(oitem);\n this.items.splice(index, 1);\n this.update.emit(this.items);\n }\n\n getFilterDurationRange(from: number, to: number) {\n return { from: from, to: to } as DurationRange;\n }\n\n getFilterDateRange(from: Date, to?: Date, label?: string, key?: number) {\n return { from: from, to: to, label: label, key: key } as FilterDateRangeModel;\n }\n\n contain(item) {\n if (this.type == FilterType.VisitorType ||\n this.type == FilterType.IndustryType ||\n this.type == FilterType.User ||\n this.type == FilterType.Site ||\n this.type == FilterType.Form ||\n this.type == FilterType.InventoryCategory ||\n this.type == FilterType.InventoryToolStatus ||\n this.type == FilterType.InventoryLocation\n ) {\n return this.items.find(x => x.id == item.id);\n } else if (this.type == FilterType.DateTimeRange ||\n this.type == FilterType.DateRange ||\n this.type == FilterType.Gender ||\n this.type == FilterType.FormType ||\n this.type == FilterType.PermitStatus ||\n this.type == FilterType.DateTime) {\n let res = this.items?.find(x => x.key === item.key);\n return res;\n }\n else if (this.type == FilterType.Induction) {\n let res = this.items?.find(x => x.key === +item.key);\n return res;\n }\n return this.items?.indexOf(item) != -1;\n }\n\n getFilterText(item, type: FilterType) {\n switch (type) {\n case FilterType.Text: {\n return item;\n }\n case FilterType.SingleText: {\n return item;\n }\n case FilterType.Site: {\n return item.name;\n }\n case FilterType.Form: {\n return item.name;\n }\n case FilterType.VisitorType: {\n return item.title;\n }\n case FilterType.User: {\n return `${item.firstName} ${item.lastName} (${this.mobilePipe.transform(item.mobile)})`;\n }\n case FilterType.DateRange: {\n return `${item.from ? this.datePipe.transform(item.from) : \"-\"} - ${item.to ? this.datePipe.transform(item.to) : \"Now\"}`;\n }\n case FilterType.DateTimeRange: {\n if (item.label)\n return item.label;\n else\n return `${item.from ? this.datetimePipe.transform(item.from) : \"-\"} - ${item.to ? this.datetimePipe.transform(item.to) : \"Now\"}`;\n }\n case FilterType.DateTime: {\n return `${item.from ? this.datetimePipe.transform(item.from) : \"-\"}`;\n }\n case FilterType.Supplier: {\n return item.name;\n }\n case FilterType.AssetCategory: {\n return item.name;\n }\n case FilterType.Induction: {\n return item.label;\n }\n case FilterType.Gender: {\n return item.label;\n }\n case FilterType.IndustryType: {\n return item.type;\n }\n\n case FilterType.Duration: {\n\n if (!item.from && item.to)\n return `Lower than ${this.getHourMinutesString(item.to)}`;\n if (item.from && !item.to)\n return `Greater than ${this.getHourMinutesString(item.from)}`;\n if (item.to && item.from)\n return `Between ${this.getHourMinutesString(item.from)} to ${this.getHourMinutesString(item.to)}`;\n else\n return \"All duration\";\n }\n case FilterType.InventoryCategory: {\n return item.title;\n }\n case FilterType.InventoryToolStatus: {\n return item.title;\n }\n case FilterType.InventoryLocation: {\n return item.name;\n }\n case FilterType.FormType: {\n return item.label;\n }\n case this.FilterType.InductionId: {\n return `${item.title}`;\n }\n case FilterType.PermitStatus: {\n return item.label;\n }\n case FilterType.EventLogType: {\n return this.workerProfileLogTypePipe.transform(item);\n }\n }\n return item;\n }\n\n isRenderableAsSelectedItem(item, type: FilterType) {\n if (type == FilterType.DateTimeRange || type == FilterType.DateTime) {\n if (this.defaultDateRanges.some(x => x == item)) return false;\n } else if (type == FilterType.Gender ||\n type == FilterType.VisitorType ||\n type == FilterType.IndustryType ||\n type == FilterType.Induction ||\n type == FilterType.InventoryCategory ||\n type == FilterType.InventoryToolStatus ||\n type == FilterType.InventoryLocation ||\n type == FilterType.FormType) {\n return false;\n }\n return true;\n }\n\n getHourMinutesString(totalMinutes: number): String {\n let hour = Math.floor(totalMinutes / 60);\n let minute = (totalMinutes % 60).toString();\n minute = new Array(2 - minute.length + 1).join('0') + minute;\n return `${hour}:${minute}`;\n }\n\n selectedLocationToAdd: InventoryLocationViewModel;\n saveSelectedLocation(value) {\n this.selectedLocationToAdd = value;\n }\n\n enabledWorkflows(workflowType: WorkflowType) {\n return this.workflowService.getWorkflowListFull(workflowType);\n }\n\n getDocumentKindList() {\n return this.documentKindService.list()\n .subscribe(res => this.documentKindList = res);\n }\n\n NotShowRemovableItemsTypes = [FilterType.SupplierDocumentKind, FilterType.SiteSupplierDocumentVersionStatus, FilterType.SingleText, FilterType.DocumentExpiryStatus, FilterType.ApprovalStatus, FilterType.ApproveEntityType, FilterType.AssetStatus, FilterType.AssetCategoryType, FilterType.SiteBriefingStatus, FilterType.EventLogType];\n showRemovableItems(type: FilterType) {\n return this.NotShowRemovableItemsTypes.indexOf(type) == -1;\n }\n}\n","
\n \n \n\n \n \n \n
","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { FormType } from 'src/app/enums/form-type';\nimport { PopoverFilterSimpleComponent } from '../popover-filter-simple.component';\nimport { FilterSettings } from 'src/app/models/grid/grid.config';\n\n@Component({\n selector: 'obc-filter-header',\n templateUrl: './filter-header.component.html',\n styleUrls: ['./filter-header.component.scss']\n})\nexport class FilterHeaderComponent implements OnInit {\n @Input() outsideClick: Boolean = false;\n @Input() placement: string = \"auto\";\n @Input() items: any[];\n @Input() filterType: FilterType;\n @Input() popoverTitle: string;\n @Input() addButtonLabel: string = 'Add To Filter(s)';\n @Input() loadForExternalCompany: boolean = false;\n @Input() includeExternalCompanySites: boolean = false;\n @Input() inventoryLocationSelectorCanAddNewLocation: boolean;\n @Input() fromDate: any | undefined = null;\n @Input() toDate: Date | undefined = null;\n @Input() formType: FormType;\n @Input() filterSettings?: FilterSettings;\n\n @Output() update = new EventEmitter();\n @ViewChild('popDivTemplate') popDivTemplate: any;\n @ViewChild('pop') pop;\n popoverFilter: PopoverFilterSimpleComponent;\n\n constructor() {\n }\n\n ngOnInit() {\n document.addEventListener('mousedown', this.closePopoverOnClickOutside.bind(this));\n }\n\n onUpdate($event) {\n this.update.emit($event);\n }\n\n findAncestor(el, cls) {\n while ((el = el.parentElement) && !el.classList.contains(cls));\n return el;\n }\n\n closePopoverOnClickOutside(event: any) {\n let bool = this.popDivTemplate.nativeElement!.contains(event.target);\n if (this.popoverFilter) {\n if (this.popoverFilter?.refUserAutocomplete?.nativeElement)\n bool = bool || this.popoverFilter.refUserAutocomplete.nativeElement!.contains(event.target);\n let datePickerElements = document.querySelector(\"obc-date-time-picker\");\n bool = bool || datePickerElements;\n }\n if (!bool) {\n this.pop.hide();\n }\n }\n}\n","
\n \n
\n
\n

Export as CSV configuration

\n
\n \n \n
\n
\n \n \n
\n \n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {FormControl, FormGroup, Validators} from \"@angular/forms\";\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport {dateTimeFormatWithSeconds, formatDate} from \"../../helpers/date-time-format\";\nimport {ExportCsvOutputModel} from \"../../models/export-csv-output-model\";\nimport {UserInfoViewModel} from \"../../models/user-info-viewmodel\";\nimport { UserService } from \"../../services/user.service\";\n\n@Component({\n selector: 'obc-export-csv-popup',\n templateUrl: './export-csv-popup.component.html',\n styleUrls: ['./export-csv-popup.component.scss'],\n})\nexport class ExportCsvPopupComponent implements OnInit {\n\n id: string;\n @Input() disabled: boolean = true;\n @Input() isDropUp: boolean = false;\n @Input() displayColumnFilterRadios: boolean = true;\n @Input() set userInfo(data: UserInfoViewModel) {\n this.csvFormGroup.addControl('title', new FormControl(this._csvFileName(), [Validators.required]));\n this.csvFormGroup.addControl('email', new FormControl(data.isEmailVerified ? data.email : \"\", [Validators.email]));\n this.csvFormGroup.addControl('csvExportOnlyVisible', new FormControl(true, [Validators.required]));\n }\n @Input() title: string;\n @Output() onExport: EventEmitter = new EventEmitter();\n csvFormGroup: FormGroup = new FormGroup({});\n\n constructor(private userService: UserService) { }\n ngOnInit(): void {\n this.id = Math.random().toString();\n }\n\n updateCsvReportTitle() {\n this.csvFormGroup.controls.title.setValue(this._csvFileName());\n this.csvFormGroup.controls.csvExportOnlyVisible.setValue(true);\n }\n onCsvPopoverClick($event) {\n if($event.target.id != 'cancel') {\n $event.stopPropagation()\n }\n }\n _csvFileName() {\n let formattedDate = formatDate(new Date(), dateTimeFormatWithSeconds);\n return this.title + \" - \" + formattedDate;\n }\n\n exportCsv() {\n if(this.csvFormGroup.invalid) {\n return;\n }\n this.onExport.emit({\n exportOnlyVisible: this.csvFormGroup.controls.csvExportOnlyVisible.value,\n title: this.csvFormGroup.controls.title.value,\n email: this.csvFormGroup.controls.email.value,\n } as ExportCsvOutputModel)\n }\n hasExportFeatureOnCompany() {\n return this.userService.hasCompanyFeature(ProductPlanFeature.Export);\n }\n}\n","
\n
\n
Column Visibility
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n \n \n
\n 0\"\n >Report Fields:
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n\n\n\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CacheCsvModel, ColumnSetting, TableSetting } from 'src/app/models/table-setting';\nimport { FormBuilder, FormControl } from '@angular/forms';\nimport { GridColumn } from \"../../../models/grid/grid.config\";\nimport { TableSettingService } from \"../../../services/table-setting.service\";\n\n@Component({\n selector: 'obc-table-setting',\n templateUrl: './table-setting.component.html',\n styleUrls: ['./table-setting.component.scss']\n})\nexport class TableSettingComponent implements OnInit {\n\n @Input() modalRef;\n @Input() cacheKey: string;\n @Input() allColumns: GridColumn[];\n @Input() visibleColumns: GridColumn[];\n @Output() saveChanges = new EventEmitter();\n @Output() isReorderingMode: EventEmitter = new EventEmitter();\n @Input() tableSetting: TableSetting;\n formControl = new FormControl()\n hideEmptyColumns: boolean = false;\n localScopeTableSettings: TableSetting;\n\n form = this.formBuilder.array([])\n\n constructor(private formBuilder: FormBuilder,\n private tableSettingService: TableSettingService,\n ) {\n }\n\n data: ColumnSetting[] = [];\n\n ngOnInit() {\n this.localScopeTableSettings = Object.assign({}, this.tableSetting);\n this.hideEmptyColumns = this.localScopeTableSettings?.hideEmptyColumns ?? false;\n\n this.allColumns?.filter((res: GridColumn) => res.displayInCheckBoxSettings != false).map((col: GridColumn) => {\n let matchedVisibleColumn = this.visibleColumns?.find((item: GridColumn) => item.key == col.key);\n\n let csvFields = [];\n if (col.gridTemplate?.csvFields) {\n let matchedColumnFromCache = this.localScopeTableSettings.columnSettings?.find((item) => item.key == col.key);\n col.gridTemplate?.csvFields?.map((csvFieldString) => {\n let matchedCsvFieldFromCache = matchedColumnFromCache?.csvFields?.find((csvCacheField) => csvCacheField.key == csvFieldString)\n csvFields.push({\n value: matchedCsvFieldFromCache?.value ?? true,\n key: csvFieldString,\n title: this.toTitleCase(csvFieldString),\n } as CacheCsvModel\n )\n })\n }\n\n this.data.push({\n visible: matchedVisibleColumn?.visible ?? false,\n key: col.key,\n title: col.name,\n order: col.order,\n csvFields,\n } as ColumnSetting,\n )\n });\n }\n\n onSaveChanges() {\n this.localScopeTableSettings.columnSettings = this.data;\n this.localScopeTableSettings.hideEmptyColumns = this.hideEmptyColumns\n this.tableSettingService.setToLocalStorage(this.cacheKey, this.localScopeTableSettings);\n this.saveChanges.emit(this.allColumns);\n }\n onReorderClicked() {\n this.isReorderingMode.emit(true);\n }\n\n toTitleCase(str) {\n const result = str.replace(/([A-Z])/g, \" $1\");\n return result.charAt(0).toUpperCase() + result.slice(1)\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ServerResult, ServerResultData } from '../models/server-result-data';\nimport { AnnonymousAcceptSupplierDocument } from '../models/supplier-document/accept-supplier-document';\nimport {\n ApproveDeclineSiteSupplierDocumentVersion,\n ArchiveSiteSupplierDocumentTypeModel,\n DeleteSiteSupplierDocumentVersion\n} from '../models/supplier-document/site-supplier-document-type-models';\nimport {\n SupplierDocumentTypeModel,\n SupplierDocumentTypeViewModel\n} from '../models/supplier-document/supplier-document-models';\nimport { ErrorService } from './error.service';\nimport {\n SiteSupplierDocumentTypeModel,\n SupplierDocumentModel\n} from \"../models/supplier-document/site-supplier-document-type-view-model.model\";\nimport { SiteSupplierHashLinkModel } from \"../models/supplier-document/site-supplier-hash-link-model.model\";\nimport { BaseSiteSupplierDocTypeFormsViewModel, SiteSupplierRequestModel } from '../models/supplier-document/site-supplier-doc-type-forms-view-model';\nimport { SiteSupplierVersionFormReviewModel } from '../models/supplier-document/site-supplier-version-form-review-model';\nimport { ExternalSitePermission } from '../enums/external-site-permission';\nimport {\n SiteSupplierDocumentVersionCommentModel,\n SiteSupplierDocumentVersionCommentViewModel\n} from \"../models/supplier-document/site-supplier-document-version-comment-model\";\nimport { SiteSupplierViewModel } from '../models/supplier-document/site-supplier-view-model.model';\nimport { InfoPagingViewModel } from '../models/site-list-paging-view-model';\nimport { PagingRequest } from '../models/paging-request-model';\nimport { SiteSupplierWithDocumentTypesViewModel } from '../models/supplier-document/site-supplier-models';\nimport { SiteSupplierInfoFull } from '../models/supplier-document/site-supplier-info';\nimport {ChangeSiteSupplierDocumentKindQueryModel} from \"../models/change-site-supplier-document-kind-query-model\";\nimport { SupplierDocumentSignOff, SupplierDocumentSignOffRequest } from '../models/supplier-document/supplier-document-signoff';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SupplierDocumentService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getSupplierDocumentTypes = (): Observable> =>\n this._http.get>(`api/SupplierDocument/get-supplier-document-types`)\n .pipe(catchError(this._errorService.handleError));\n\n addSupplierDocumentTypes = (model: SupplierDocumentTypeModel): Observable =>\n this._http.post(`api/SupplierDocument/add-supplier-document-type`, model)\n .pipe(catchError(this._errorService.handleError));\n\n updateSupplierDocumentTypes = (id: number, model: SupplierDocumentTypeModel): Observable =>\n this._http.post(`api/SupplierDocument/update-supplier-document-type/${id}`, model)\n .pipe(catchError(this._errorService.handleError));\n\n removeSupplierDocumentTypes = (id: number) =>\n this._http.get(`api/SupplierDocument/remove-supplier-document-type/${id}`)\n .pipe(catchError(this._errorService.handleError));\n\n acceptAnonymousSupplierDocument = (model: AnnonymousAcceptSupplierDocument): Observable =>\n this._http.post(`api/SiteSupplierDocument/anonymous-accept-supplier-document`, model)\n .pipe(catchError(this._errorService.handleError));\n\n\n addSiteSupplierDocumentTypes(model: SiteSupplierDocumentTypeModel): Observable {\n return this._http.post(`api/SupplierDocument/add-site-supplier-document-types`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n editSiteSupplierDocumentTypes(siteSupplierId: number, model: SiteSupplierDocumentTypeModel): Observable {\n return this._http.post(`api/SupplierDocument/edit-site-supplier-document-types/${siteSupplierId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeSiteSupplierDocumentTypes(siteSupplierId: number): Observable> {\n return this._http.get>(`api/SupplierDocument/remove-site-supplier-document-types/${siteSupplierId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getSiteSupplierDocumentTypes(request: PagingRequest): Observable> {\n return this._http.post>(`api/SupplierDocument/site-supplier-document-types/`, request)\n .pipe(catchError(this._errorService.handleError));\n }\n\n // getSiteSupplierDocumentTypesBySite(siteId?: number): Observable {\n // return this._http.get(`api/SupplierDocument/get-site-supplier-document-types-by-site/${siteId ?? ''}`)\n // .pipe(catchError(this._errorService.handleError));\n // }\n\n getSiteSupplierDocumentTypesBySiteWithStatistics(request: PagingRequest): Observable> {\n return this._http.post>(`api/SupplierDocument/site-supplier-document-types-by-site-with-statistics/`, request)\n .pipe(catchError(this._errorService.handleError));\n }\n\n\n editSiteSupplierDocumentTypeEnableStatus(siteSupplierId: number, value: boolean): Observable> {\n return this._http.get>(`api/SupplierDocument/edit-site-supplier-document-type-enable-status/${siteSupplierId}/${value}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n sendEmail(model: SiteSupplierHashLinkModel): Observable {\n return this._http.post(`api/SiteSupplierDocument/send-site-supplier-hash-link`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n approveDeclineSiteSupplierVersion(model: ApproveDeclineSiteSupplierDocumentVersion): Observable {\n return this._http.post(`api/SupplierDocument/approve-decline-site-supplier-version`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n renameSiteSupplierDocumentType(model: any) {\n return this._http.post(`api/SiteSupplierDocument/rename-site-supplier-document-type`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n siteSupplierVersionFormReview(model: SiteSupplierVersionFormReviewModel): Observable {\n return this._http.post(`api/SupplierDocument/site-supplier-version-form-review`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateExternalSitePermissions(siteSupplierId: number, externalSitePermissions: ExternalSitePermission): Observable {\n return this._http.post(\n `api/SiteSupplierDocument/update-external-site-permissions/${siteSupplierId}/${externalSitePermissions}`, {})\n .pipe(catchError(this._errorService.handleError));\n }\n\n requestNewSiteSupplierDocumentType(siteSupplierId: number, model: SupplierDocumentModel) {\n return this._http.post(`api/SiteSupplierDocument/request-new-site-supplier-document-type/${siteSupplierId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n deleteSiteSupplierDocumentVersion(request: DeleteSiteSupplierDocumentVersion) {\n return this._http.post(`api/SiteSupplierDocument/delete-supplier-document-version`, request)\n .pipe(catchError(this._errorService.handleError));\n }\n\n archiveSiteSupplierDocumentTypes(model: ArchiveSiteSupplierDocumentTypeModel) {\n return this._http.post(`api/SiteSupplierDocument/archive-site-supplier-document-type-list`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n unarchiveSiteSupplierDocumentTypes(model: ArchiveSiteSupplierDocumentTypeModel) {\n return this._http.post(`api/SiteSupplierDocument/unarchive-site-supplier-document-type-list`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addSiteSupplierDocumentVersionComment(model: SiteSupplierDocumentVersionCommentModel, siteSupplierHashlink?: string): Observable> {\n let headers = new HttpHeaders({ \"hash-link\": siteSupplierHashlink ?? '' });\n return this._http.post>(\n `api/SiteSupplierDocument/add-supplier-document-version-comment`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n deleteAllSupplierDocuments(supplierDocumentTypeId: number) {\n return this._http.post(`api/SiteSupplierDocument/delete-all-supplier-documents`, supplierDocumentTypeId)\n .pipe(catchError(this._errorService.handleError));\n }\n\n exportDataAsPdf(siteSupplierDocumentVersionId: number) {\n return window.open(`api/SupplierDocument/site-supplier-document-pdf/${siteSupplierDocumentVersionId}`);\n }\n\n getSiteSupplierDocumentVersionByWorkflowInstanceId(workflowInstanceId: string): Observable {\n return this._http.get(`api/SiteSupplierDocument/site-supplier-document-version/${workflowInstanceId}`);\n }\n\n getSiteSuppliersBySiteId(siteId: number): Observable> {\n return this._http.get>(`api/SupplierDocument/get-site-suppliers-by-siteId/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","
0\">\n
\n \n
\n
\n {{doc.supplierDocumentTypeName}} {{doc.version}}\n \n \n {{doc.signOffDate | datetime}}\n \n
\n
\n
\n Description: {{ doc.description }}\n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n
\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { LoaderComponent } from 'src/app/custom-controls/loader/loader.component';\nimport { AnnonymousAcceptSupplierDocument } from 'src/app/models/supplier-document/accept-supplier-document';\nimport { SupplierDocumentViewModel } from 'src/app/models/supplier-document/site-supplier-document-version-signoff-viewModel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SupplierDocumentService } from 'src/app/services/supplier-document.service';\n\n@Component({\n selector: 'obc-supplier-document-sign-off-viewer',\n templateUrl: './supplier-document-sign-off-viewer.component.html',\n styleUrls: ['./supplier-document-sign-off-viewer.component.scss']\n})\nexport class SupplierDocumentSignOffViewerComponent implements OnInit {\n\n @Input() list: SupplierDocumentViewModel[];\n @Input() canApprove: boolean;\n @Input() compactMode: boolean = false;\n @Input() AnonymousCheckInKey: any;\n @Output() onAccept: EventEmitter = new EventEmitter();\n\n constructor(private supplierDocumentService: SupplierDocumentService, private modalService: ModalService) { }\n\n ngOnInit(): void {\n }\n\n onAcceptSupplier(siteSupplierDocumentVersionId: number, loader: LoaderComponent) {\n loader.show = true;\n var model = {\n supplierDocumentVersionId: siteSupplierDocumentVersionId,\n AnonymousCheckInKey: this.AnonymousCheckInKey\n } as AnnonymousAcceptSupplierDocument;\n this.supplierDocumentService.acceptAnonymousSupplierDocument(model)\n .pipe(finalize(() => loader.show = false))\n .subscribe(res => {\n if (res == true) {\n this.onAccept.emit(true);\n } else this.modalService.error('Request Failed');\n }, err => this.modalService.error('Request Failed'));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from \"rxjs\";\nimport { catchError } from \"rxjs/operators\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { ErrorService } from \"./error.service\";\nimport { ApproveRejectQueryModel } from '../models/approve/approve-reject-query-model';\nimport { ResetEntityStatusQueryModel } from '../models/approve/reset-entity-status-query-model';\nimport { SaveScheduledReportViewmodel } from '../models/save-scheduled-report-model';\nimport { SiteCheckInOutData } from '../models/site-check-in-out-data';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApproveService {\n\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n baseUrl = '/api/approve';\n approveRejectEntity(model: ApproveRejectQueryModel): Observable {\n return this.http.post(`${this.baseUrl}/approve-reject-entity`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n resetEntityStatus(model: ResetEntityStatusQueryModel): Observable {\n return this.http.post(`${this.baseUrl}/reset-status`, model).pipe(catchError(this._errorService.handleError));\n }\n saveScheduledReport(model: SaveScheduledReportViewmodel): Observable {\n return this.http.post(`${this.baseUrl}/save-scheduled-report/`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n askAi(siteInductionId: any) {\n return this.http.get(`${this.baseUrl}/predicate-approval-by-ai/${siteInductionId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","
\n
\n
Review
\n
\n \n
\n
\n
\n \n
\n
\n End Date:\n \n
\n \n \n
\n
\n
\n
\n
\n
\n \n Review comments:\n \n
\n
\n
\n
\n \n \n\n \n
\n
\n
\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { finalize } from 'rxjs/operators';\nimport { ApproveEntityType } from 'src/app/enums/approve-entity-type';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { ApproveRejectQueryModel } from 'src/app/models/approve/approve-reject-query-model';\nimport { ApproveService } from 'src/app/services/approve-service';\nimport { CacheService } from 'src/app/services/cache.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-approve-reject',\n templateUrl: './approve-reject.component.html',\n styleUrls: ['./approve-reject.component.scss']\n})\nexport class ApproveRejectComponent implements OnInit {\n\n @Output() onRefresh = new EventEmitter();\n @Input() entityType: ApproveEntityType;\n @Input() entityId: number;\n @Input() showEndDate: boolean;\n @Input('endDate') inputEndDate: Date;\n @Input() isRequestRevision: boolean = false;\n @Input() showCloseButton: boolean = true;\n inProgress: boolean;\n description: string;\n endDate: Date;\n datetimePickerMode = DatetimePickerMode;\n\n constructor(private approveService: ApproveService,\n private modalService: ModalService,\n private toastr: ToastrService,\n private cacheService: CacheService) { }\n\n ngOnInit(): void {\n if (this.inputEndDate != null)\n this.endDate = this.inputEndDate;\n\n this.description = this.cacheService.getFromMemoryCache(this.getCacheKey) ?? '';\n }\n approveReject(isApprove: boolean) {\n this.inProgress = true;\n var model = {\n approveEntityType: this.entityType,\n entityId: this.entityId,\n isApprove: isApprove,\n description: this.description,\n newEndDate: this.showEndDate == true ? this.endDate : null,\n } as ApproveRejectQueryModel;\n this.approveService.approveRejectEntity(model)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res == true) {\n this.cacheService.clearMemoryCacheObject(this.getCacheKey);\n\n if (isApprove == true)\n this.toastr.success('Approved Successfully.');\n else if (this.isRequestRevision)\n this.toastr.success('Revision Requested.');\n else\n this.toastr.success('Rejected Successfully.');\n this.onRefresh.emit(res);\n } else\n this.modalService.error(`${isApprove == true ? 'Approve' : 'Reject'} Failed.`);\n }, err => {\n this.modalService.error(err)\n })\n }\n\n closeModal() {\n this.cacheService.clearMemoryCacheObject(this.getCacheKey);\n this.modalService.hide();\n }\n\n get getCacheKey() {\n return `CommentContent-${this.entityType}-${this.entityId}`;\n }\n onReviewCommentChange() {\n this.cacheService.saveInMemoryCache(this.getCacheKey, this.description);\n }\n\n}\n","\n \n \n {{siteInduction.title}}\n \n ({{siteInduction.inductionKey}})\n \n \n \n \n \n Approved\n \n \n \n \n Pending Approval\n \n \n \n \n \n Rejected \n \n \n \n \n Approved\n \n \n \n\n \n (Auto - \n {{siteInduction.inductionApproverFullName}}\n - \n {{siteInduction.processDateTime | datetime}})\n \n \n (Expiry: {{siteInduction.expiredDateTime | date}})\n \n \n\n\n\n \n ","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ApproveEntityType } from 'src/app/enums/approve-entity-type';\nimport { SiteInductionStatus } from 'src/app/enums/site-induction-status';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { SiteInductionViewModel } from 'src/app/models/site-induction-view-model';\nimport { InductionService } from 'src/app/services/induction-service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-induction-status',\n templateUrl: './induction-status.component.html',\n styleUrls: ['./induction-status.component.scss']\n})\nexport class InductionStatusComponent implements OnInit {\n\n constructor(private inductionService: InductionService, private userService: UserService, private modalService: ModalService) { }\n\n @Input() siteInduction: SiteInductionViewModel;\n @Input() readOnly: boolean = true;\n @Output() onApproveOrReject: EventEmitter = new EventEmitter();\n\n siteInductionStatusEnum = SiteInductionStatus;\n hasApprovePermiossion: boolean = false;\n approveEntityType = ApproveEntityType.Induction;\n\n ngOnInit(): void {\n this.hasApprovePermiossion = this.userService.hasUserPermissionForCompany(UserPermission.ApproveRejectSiteInduction, this.siteInduction.siteId);\n }\n showApproveRejectButtons(): boolean {\n return !this.readOnly && this.hasApprovePermiossion;\n }\n closeModal() {\n this.modalService.hide();\n }\n onOpenApproveRejectTemplate(template: any) {\n this.modalService.show(template, \"modal-lg\")\n }\n\n fetchinduction(){\n this.inductionService.getSiteInductionFilledInfo(this.siteInduction.siteInductionId)\n .subscribe(response => {\n if (response.success == false)\n this.modalService.error(`Request failed!`);\n\n if (this.onApproveOrReject)\n this.onApproveOrReject.emit(response.data);\n });\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-user-detail-card',\n templateUrl: './user-detail-card.component.html'\n})\nexport class UserDetailCardComponent implements OnInit {\n\n constructor(\n public modalService: ModalService\n ) { }\n\n @Input() userId: string | undefined;\n\n ngOnInit(): void {\n }\n\n}\n","
\n
\n
User Details
\n
\n \n
\n
\n\n
\n \n
\n\n
","import { Pipe, PipeTransform } from '@angular/core';\nimport { Gender } from '../enums/gender.enum';\nimport { isNumber } from '../helpers/general-functions';\n\n@Pipe({\n name: 'gender',\n})\nexport class GenderPipe implements PipeTransform {\n transform(value: unknown): string {\n if (isNumber(value)) {\n switch (value) {\n case Gender.female:\n return 'Female';\n case Gender.male:\n return 'Male';\n case Gender.other:\n return 'Other';\n default:\n return '?';\n }\n }\n return value?.toString();\n }\n}\n","export enum FormRegisterFor {\n MySelf = 0,\n Supplier = 1,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormRegisterFor } from \"../enums/form-register-for\";\n\n@Pipe({\n name: 'formRegisterFor'\n})\nexport class FormRegisterForPipe implements PipeTransform {\n\n transform(value: unknown, ...args: any[]): unknown {\n if (value === FormRegisterFor.Supplier) return args?.length > 0 ? args[0].supplierName ?? '' : \"Supplier\";\n if (value === FormRegisterFor.MySelf) return args?.length > 0 ? args[0].userName ?? '' : \"Self\";\n return value?.toString();\n }\n\n}\n","
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
0 || filterAnnouncements?.length\">\n \n \n
\n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n \n {{ pagingInfo.totalCount }} Record(s)\n \n - Total Duration: {{ totalDuration }}\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n 0\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\">\n \n \n \n \n
\n \n
\n
\n
\n You can drag and drop headers to reorder the columns\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n \n \n \n \n \n
\n
\n \n {{getRecordData(record, col) | mobile}}\n \n \n {{getRecordData(record, col) | datetime}}\n \n \n {{getRecordData(record, col) | date}}\n \n \n {{getRecordData(record, col) | datetime}}\n \n \n {{getRecordData(record, col) | gender }}\n \n \n \n \n \n \n \"image-preview\"\n \n \n \n\n \n \n {{getRecordData(record, col) | formType }}\n \n \n {{getRecordData(record, col) | siteSupplierDocumentVersionStatus }}\n \n \n \n {{getRecordData(record, col)}}\n \n \n \n \n \n {{getRecordData(record, col)}}\n \n \n \n \n {{ getRecordData(record, col) }}\n \n \n {{ getRecordData(record, col) }}\n \n
\n
\n
No records found.
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n\n\n \n \n
\n\n \n
\n
\n {{ col.name }}\n
\n \n
\n
\n \n \n {{col.name}}\n \n \n \n \n \n \n \n \n
\n \n
\n
\n\n\n \n \n \n \n \n
\n \n
    \n
  • \n \n
  • \n
  • \n \n
  • \n
\n
\n
\n \n
\n\n\n
\n
\n
\n
\n Name:\n {{permitForm.name}}\n
\n
\n
\n
\n Start Date:\n {{permitForm.startDate | date}}\n
\n
\n
\n
\n End Date:\n {{permitForm.endDate | date}}\n
\n
\n
\n
\n For:\n {{permitForm.registerFor | formRegisterFor}}\n
\n
\n
\n
\n
\n\n
\n
\n Create Magic Link\n Create Scheduled Report\n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n\n \n\n\n\n\n \n \n \n\n\n\n \n
\n \n
\n
\n
\n\n\n \n {{ data[col?.gridTemplate?.data?.siteName] }}\n \n \n Ref: {{ data[col?.gridTemplate?.data?.siteReference] }}\n \n\n\n\n \n \n \n\n \n \n {{ data[col?.gridTemplate?.data?.firstName] }}\n \n \n {{ data[col?.gridTemplate?.data?.lastName] }}\n \n (+{{\n data[col?.gridTemplate?.data?.accompanierCount] }})\n \n \n\n\n\n \n \n \n \n \n {{ data[col?.gridTemplate?.data?.fullName] ?? ((data[col?.gridTemplate?.data?.firstName] ?? '') + ' ' +\n (data[col?.gridTemplate?.data?.lastName] ?? ''))\n }}\n \n \n ({{ data[col?.gridTemplate?.data?.mobile] | mobile }})\n \n \n\n\n\n
\n {{item.firstName}} {{item.lastName}} {{item.mobile != null? \"(\" + item.mobile + \")\" : \"\"}}\n
\n
\n\n\n \n","import { DatePipe } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, ContentChildren, Input, OnInit, QueryList } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { catchError, debounceTime, finalize } from 'rxjs/operators';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { ReportDeliveryType, ReportPeriodType } from 'src/app/enums/report-type.enum';\nimport { SiteAttendanceApprovalStatus } from 'src/app/enums/site-attendance-approval-status.enum';\nimport { SortOrder } from 'src/app/enums/sort-order-enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { formGroupToModel, getPageSizeByUrl, isEqual } from 'src/app/helpers/general-functions';\nimport { AnnouncementFilterModel } from 'src/app/models/announcement-filter-model';\nimport { AnnouncementViewModel, ClientAnnouncementFilterViewModel } from 'src/app/models/announcement-viewmodel';\nimport { FilterList } from 'src/app/models/filter-list';\nimport { GridColumn, GridConfig, InitialFilterUsage, RequestPayloadModeEnum, ScheduleReportColumn } from 'src/app/models/grid/grid.config';\nimport { PaginationInfo } from 'src/app/models/pagination-info';\nimport { pagingSortingModel } from 'src/app/models/paging_model';\nimport {\n MixedQuestionAndDisplayFilterViewModel,\n QuestionAnswerFilterModel,\n QuestionAnswerFilterViewModel\n} from 'src/app/models/question-answer-filter-model';\nimport { QuestionAnswerInputModel } from 'src/app/models/question-answer-inputmodel';\nimport { SaveScheduledReportViewmodel } from 'src/app/models/save-scheduled-report-model';\nimport { ColumnSetting, TableSetting } from 'src/app/models/table-setting';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { EnumToArrayPipe } from 'src/app/pipes/enum-to-array.pipe';\nimport { MobilePipe } from 'src/app/pipes/mobile.pipe';\nimport { ErrorService } from 'src/app/services/error.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\nimport { TableSettingService } from 'src/app/services/table-setting.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { GridTemplateNameDirective } from \"../../directive/grid-template-name.directive\";\nimport { convertObjectToUrlParameters } from \"../../helpers/extract-params-from-model\";\nimport { FormType } from \"../../enums/form-type\";\nimport { ToolDynamicFieldViewModel } from \"../../models/inventory/tool-dynamic-field-model\";\nimport {\n DynamicFieldFilterWrapperModel,\n DynamicFieldFilterWrapperViewModel\n} from 'src/app/models/inventory/dynamic-field-filter-model';\nimport Sortable from 'sortablejs';\nimport { QuestionDefaultMode } from \"../../enums/question-default-mode\";\nimport { AskMode } from \"../../enums/ask-mode\";\nimport { AskQuestionPeriodMode } from \"../../enums/ask-period-mode\";\nimport { QuestionType } from \"../../enums/question-type\";\nimport { UserInfoViewModel } from \"../../models/user-info-viewmodel\";\nimport { SignalRService } from \"../../services/signal-r.service\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { CsvReportRequestModel } from \"../../models/csv-report-request-model\";\nimport { ExportCsvOutputModel } from \"../../models/export-csv-output-model\";\n\n@Component({\n selector: 'app-base-grid',\n templateUrl: './base-grid.component.html',\n styleUrls: ['./base-grid.component.scss'],\n providers: [MobilePipe, DatetimePipe, DatePipe],\n})\nexport class BaseGridComponent implements OnInit {\n _gridColumns: GridColumn[] = [];\n @Input('columns') set gridColumns(columns: GridColumn[]) {\n this._gridColumns = columns;\n this.fillDefaultValuesOfColumns();\n }\n\n get gridColumns() {\n return this._gridColumns;\n }\n\n _gridConfig: GridConfig;\n @Input('configs') set gridConfig(config: GridConfig) {\n this._gridConfig = config;\n\n this._gridConfig.displayRefreshButton ??= true;\n this._gridConfig.displaySettingsButton ??= true;\n this._gridConfig.displayExportsButton ??= true;\n this.initFilter();\n\n if (this._gridConfig?.loadDataOnInitialFilterChange) {\n this.loadData(0);\n }\n }\n\n get gridConfig(): GridConfig {\n return this._gridConfig;\n }\n\n data: {};\n totalRecords: number = 0;\n records: any[] = [];\n inProgress: boolean = false;\n filter: any | undefined = {};\n allFilters: FilterList[] = [];\n SortOrder = SortOrder;\n\n _visibilityCheckedColumns: GridColumn[];\n _tableColumns: GridColumn[];\n\n public accompaniersViewData: any;\n\n isReordering: boolean = false;\n selectedUserId: number | null;\n\n prepareVisibleColumns() {\n this._visibilityCheckedColumns = this.gridColumns?.filter((col) => {\n if (col.displayInCheckBoxSettings == false) {\n return true;\n }\n\n let matchedVisibleColumn = this.reportTableSettings?.columnSettings?.find((item) => item.key == col.key);\n if (matchedVisibleColumn) {\n if (matchedVisibleColumn.visible) {\n col.visible = true;\n\n return true;\n }\n } else {\n if (col.visible) {\n return true;\n }\n }\n return false;\n });\n this.prepareViewColumns();\n }\n\n get visibilityCheckedColumns() {\n return this._visibilityCheckedColumns ?? [];\n }\n\n prepareViewColumns() {\n this._tableColumns = this.visibilityCheckedColumns?.filter((col) => {\n if (col.showAsColumn == false) {\n return false;\n }\n\n /*region Check For Emptiness Data*/\n if (this.reportTableSettings?.hideEmptyColumns && col.hideEmptyColumnsEmptinessConditionCallback) {\n return !col.hideEmptyColumnsEmptinessConditionCallback(this.records);\n }\n if (col.gridTemplate)\n return true;\n if (this.reportTableSettings?.hideEmptyColumns\n && this.query?.pagingInfo?.sortBy != this.getColumnSortByKeyName(col)\n && !this.allFilters?.find((item) => item.key == col.key && item.data?.length > 0)\n ) {\n return this.records?.some(item => {\n if (col.isArray || Array.isArray(item[col.key])) {\n return item[col.key]?.length > 0;\n } else {\n return item[col.key] != undefined && item[col.key]?.toString()?.trim() != '';\n }\n });\n }\n /*endregion*/\n\n return true;\n });\n }\n\n get tableColumns() {\n return this._tableColumns;\n }\n\n isShowTemplateColumns(mainColumn, detailColumn) {\n if (this.reportTableSettings?.isDetailsMode)\n return this.reportTableSettings?.columnSettings?.find(item => item.key == mainColumn)?.csvFields?.find(item => item.key == detailColumn)?.value ?? true;\n return true;\n }\n\n getColumnSortByKeyName(col: GridColumn) {\n return col.sortBy ?? col.key;\n }\n\n FilterType = FilterType;\n query: any = {};\n generalSearchControl = new FormControl();\n generalSearchTerm: string;\n oldFilterData: any[] = [];\n searchQueryForm: FormGroup = null;\n Table = Table;\n\n get gridIncludeColumns(): GridColumn[] {\n return this.gridColumns?.filter(d => d.hasIncludeFilter);\n };\n\n // Activity report\n filterAnnouncements: ClientAnnouncementFilterViewModel[] = [];\n mixedFilterQuestions: MixedQuestionAndDisplayFilterViewModel;\n filterDynamicFields: ToolDynamicFieldViewModel[] = [];\n filterAssignDynamicFields: ToolDynamicFieldViewModel[] = []\n dynamicFieldsFilters: DynamicFieldFilterWrapperViewModel[] = []\n saveReportMode: (\"schedule\" | \"magiclink\") = \"schedule\";\n reportScheduledReport: FormGroup;\n createScheduleReportModalRef: any;\n filterUserBy = UserAutoCompleteFilterByFields;\n selectedUser: any;\n tableSettingModalRef: any = null;\n ProductPlanFeature = ProductPlanFeature;\n questionAnswerInputModel: QuestionAnswerInputModel = new QuestionAnswerInputModel();\n ReportTypes = ReportPeriodType;\n totalDuration: string;\n SiteAttendanceApprovalStatus = SiteAttendanceApprovalStatus;\n FormType = FormType;\n templates: any[];\n reportTableSettings: TableSetting;\n sortableOptions = {\n ghostClass: 'ghost-class',\n fallbackClass: \"ghost-class\",\n dragoverBubble: true,\n forceFallback: true,\n onEnd: (event: any) => {\n for (let column of this._gridColumns) {\n column.order = -1;\n }\n let order = 0;\n for (let child of event.target.children) {\n let matchedColumn = this._gridColumns?.find((item) => item.key == child?.dataset?.key);\n matchedColumn = {\n ...matchedColumn,\n order: order,\n }\n this._gridColumns = [\n ...this._gridColumns?.filter((item) => item.key != matchedColumn.key),\n matchedColumn,\n ]\n order++;\n }\n for (let column of this._gridColumns) {\n if (column.order == -1) {\n column.order = order;\n }\n order++;\n }\n\n this.reOrderColumns();\n\n for (let col of this._gridColumns) {\n let indexInCache = this.reportTableSettings?.columnSettings?.findIndex(c => c.key === (col as any).key);\n if (indexInCache > -1) {\n this.reportTableSettings.columnSettings[indexInCache].order = (col as any).order;\n this.reportTableSettings.columnSettings[indexInCache].visible = (col as any).visible;\n } else {\n this.reportTableSettings?.columnSettings?.push({\n title: (col as any).title,\n key: (col as any).key,\n visible: (col as any).visible,\n order: (col as any).order,\n } as ColumnSetting);\n }\n }\n this.saveTableInCache();\n this.reSetGridColumnsDataFromCache();\n this.prepareVisibleColumns();\n }\n };\n\n ngOnInit() {\n this.initialize();\n }\n\n @ContentChildren(GridTemplateNameDirective) columnList: QueryList;\n\n announcements: AnnouncementViewModel[];\n pagingInfo: pagingSortingModel = {\n pageNumber: 0,\n pageSize: getPageSizeByUrl() ?? 30,\n sortBy: null,\n sortOrder: null,\n totalCount: 0,\n }\n _daysOfMonth: any[];\n get daysOfMonth() {\n if (this._daysOfMonth == null) {\n let days = [];\n days.push({\n value: 1,\n label: \"First day of month\"\n });\n days.push({\n value: 31,\n label: \"Last day of month\"\n });\n for (let index = 1; index < 32; index++) {\n days.push({\n value: index,\n label: index.toString(),\n });\n }\n\n this._daysOfMonth = days;\n }\n return this._daysOfMonth;\n }\n\n daysOfWeek = [\n { value: 0, label: \"Sunday\" },\n { value: 1, label: \"Monday\" },\n { value: 2, label: \"Tuesday\" },\n { value: 3, label: \"Wednesday\" },\n { value: 4, label: \"Thursday\" },\n { value: 5, label: \"Friday\" },\n { value: 6, label: \"Saturday\" }\n ];\n\n constructor(private http: HttpClient,\n private _errorService: ErrorService,\n private bsModalService: BsModalService,\n private siteAttendanceService: SiteAttendanceService,\n private enumToArrayPipe: EnumToArrayPipe,\n private modalService: ModalService,\n public userService: UserService,\n private tableSettingService: TableSettingService,\n private signalRService: SignalRService,\n private toastr: ToastrService,\n ) {\n }\n\n getRelatedColumnForReport(reportColumn: string | ScheduleReportColumn): GridColumn {\n let reportColumnKey = '';\n if (typeof (reportColumn) == 'object')\n reportColumnKey = reportColumn?.key;\n else\n reportColumnKey = reportColumn;\n return this.gridColumns?.find((item) => item.propertyNameInQuery == reportColumnKey);\n }\n\n getRelatedCaption(reportColumn: string | ScheduleReportColumn): string {\n if (typeof (reportColumn) == 'object')\n return reportColumn?.labelCaption;\n return this.getRelatedColumnForReport(reportColumn)?.name ?? 'Unknown';\n }\n\n getReportSelectItemsCaption(reportColumn: string | ScheduleReportColumn): string {\n let relatedColumn = this.getRelatedColumnForReport(reportColumn);\n if (this.searchQuery[relatedColumn.propertyNameInQuery]?.length > 0) {\n return `Selected ${this.getRelatedCaption(reportColumn)}(s)`;\n }\n return `All ${this.getRelatedCaption(reportColumn)}s`;\n }\n\n userInfo: UserInfoViewModel;\n initialize() {\n if (!this.gridConfig?.generalSearchPlaceholder)\n this._gridConfig.generalSearchPlaceholder = 'No Search Placeholder';\n\n this.initControls();\n this.initFilter();\n this.getColumns();\n this.loadData();\n this.generalSearchControl.valueChanges.pipe(\n debounceTime(500),\n ).subscribe((searchTerm) => {\n this.generalSearchTerm = searchTerm;\n if (searchTerm == '' || (searchTerm != null && searchTerm.length > (this.gridConfig?.generalSearchMinimumCharsToSearch ?? 2))) {\n this.loadData(0);\n }\n });\n this.userService.info.subscribe(res => {\n this.userInfo = res;\n });\n }\n\n initControls() {\n if (this._gridConfig.forceHideAllControlButtons) {\n this._gridConfig.displayQuestionsFilter = false;\n this._gridConfig.displayAnnouncementsFilter = false;\n this._gridConfig.displayDynamicFieldsFilter = false;\n this._gridConfig.displayDynamicAssignFieldsFilter = false;\n this._gridConfig.displayEnableMagicLink = false;\n this._gridConfig.displaySettingsButton = false;\n this._gridConfig.displayExportsButton = false;\n this._gridConfig.displayRefreshButton = false;\n }\n }\n\n fillDefaultValuesOfColumns() {\n if (this.gridColumns) {\n let index = 0;\n for (let column of this.gridColumns) {\n if (column.enableSort == undefined) {\n column.enableSort = true;\n }\n if (column.enableFilter == undefined) {\n column.enableFilter = true;\n }\n if (column.visible == undefined) {\n column.visible = true;\n }\n column.order = index;\n index++;\n }\n }\n }\n\n filterHasAnyData(): boolean {\n for (let index = 0; index < this.allFilters.length; index++) {\n const element = this.allFilters[index];\n if (element?.data?.length > 0) return true;\n }\n return false;\n }\n\n onRemoveFromFilter($event) {\n let item = $event.item;\n let items = $event.items;\n let index = items.indexOf(item);\n\n let oldF = this.oldFilterData.find(x => x.item == item);\n if (oldF) {\n let oldFIndex = this.oldFilterData.indexOf(oldF);\n this.oldFilterData.splice(oldFIndex, 1);\n }\n\n if (index > -1) {\n items.splice(index, 1);\n this.loadData(0);\n }\n }\n\n get cacheKey(): string {\n return `${this.gridConfig?.cacheKeyPrefix ?? ''}${this.gridConfig?.tableType}`;\n }\n\n getTableSettingsFromCache() {\n this.reportTableSettings = this.tableSettingService.getTableSettingsFromCache(this.cacheKey, {\n hideEmptyColumns: this.gridConfig.hideEmptyColumns,\n isDetailsMode: false,\n columnSettings: []\n } as TableSetting);\n }\n\n getColumns() {\n this.getTableSettingsFromCache();\n this._gridColumns?.map((item) => {\n let fil = this.reportTableSettings?.columnSettings?.find((filter) => filter.key == item.key);\n if (fil) {\n item.order = fil.order;\n item.visible = fil.visible;\n }\n });\n this.reOrderColumns();\n this.prepareVisibleColumns();\n }\n\n reOrderColumns() {\n this._gridColumns.sort((a, b) => a.order > b.order ? 1 : a.order < b.order ? -1 : 0);\n }\n\n getRecordData(record: any, col) {\n if (col.displayFunction) {\n return col.displayFunction(record);\n } else {\n return record[`${col.key}`];\n }\n }\n\n onUpdateFilter(col: GridColumn, newItems: any[]) {\n let filterCurrentItems = this.filter[col.propertyNameInQuery];\n if (filterCurrentItems) {\n if (Array.isArray(filterCurrentItems)) {\n filterCurrentItems?.splice(0, filterCurrentItems?.length, ...newItems);\n } else {\n this.filter[col.propertyNameInQuery] = newItems;\n }\n } else {\n this.filter[col.propertyNameInQuery] = newItems;\n }\n this.initFilter();\n this.loadData(0);\n }\n\n sortBy(column: string) {\n let sortOrder = this.pagingInfo.sortOrder;\n if (sortOrder == SortOrder.ASC) {\n sortOrder = SortOrder.DESC;\n } else if (sortOrder == SortOrder.DESC) {\n sortOrder = null;\n } else {\n sortOrder = SortOrder.ASC;\n }\n\n if (column == this.pagingInfo.sortBy) {\n this.pagingInfo.sortOrder = sortOrder;\n if (sortOrder == null) {\n this.pagingInfo.sortBy = null;\n }\n } else {\n this.pagingInfo.sortBy = column;\n this.pagingInfo.sortOrder = SortOrder.ASC;\n }\n this.loadData(0)\n }\n\n saveTableInCache() {\n this.tableSettingService.setToLocalStorage(this.cacheKey, this.reportTableSettings);\n }\n\n reloadData() {\n this.loadData(0);\n }\n\n loadData(pageNumber?: number) {\n if (this.gridConfig?.refreshButtonValidity != undefined && !this.gridConfig?.refreshButtonValidity)\n return false;\n\n this.inProgress = true;\n\n this.pagingInfo.pageNumber = pageNumber ?? this.pagingInfo.pageNumber;\n\n this.createQuery();\n\n let payloadObject = this.query;\n if (this.gridConfig?.requestPayloadMode == RequestPayloadModeEnum.SeparateQueryKey) {\n let pagingInfo = this.query.pagingInfo;\n delete this.query.pagingInfo;\n payloadObject = {\n pagingInfo: pagingInfo,\n query: this.query,\n }\n }\n\n this.http.post(`${this.gridConfig?.apiUrl}`, payloadObject, {\n headers: { ...this.gridConfig?.headers }\n })\n .pipe(catchError(this._errorService.handleError))\n .subscribe({\n next: (res) => {\n\n let totalCount = res.totalCount;\n let data = res.data;\n if (this.gridConfig?.apiResultCallback) {\n let callbackRes = this.gridConfig?.apiResultCallback(res);\n totalCount = callbackRes?.totalCount;\n data = callbackRes?.data;\n }\n\n this.totalRecords = totalCount;\n this.pagingInfo.totalCount = totalCount;\n this.totalDuration = res?.totalDuration;\n this.records = data;\n this.prepareVisibleColumns();\n\n this.inProgress = false;\n },\n error: (_) => {\n this.inProgress = false;\n },\n complete: () => {\n this.inProgress = false;\n }\n }\n );\n }\n\n onPageChange(paginationInfo: PaginationInfo) {\n this.pagingInfo.pageSize = paginationInfo.pageSize;\n this.loadData(paginationInfo.pageNumber);\n }\n\n initFilter() {\n for (let col of this.gridColumns) {\n if (col.enableFilter) {\n let initialFilter = this.gridConfig?.initialFilters?.find((item) => item?.key == col?.key);\n if (initialFilter && initialFilter.displayInFilterRenderer) {\n if (!Array.isArray(initialFilter.value)) {\n initialFilter.value = [initialFilter.value];\n }\n\n if (this.filter[`${col.propertyNameInQuery}`]) {\n initialFilter.value?.map((initialValue) => {\n let foundMatchedValue = false;\n for (let filter of this.filter[`${col.propertyNameInQuery}`]) {\n if (isEqual(filter, initialValue)) {\n foundMatchedValue = true;\n break;\n }\n }\n if (!foundMatchedValue) {\n this.filter[`${col.propertyNameInQuery}`].push(\n initialValue\n );\n }\n });\n } else {\n this.filter[`${col.propertyNameInQuery}`] = initialFilter.value;\n }\n }\n let matchedRenderFilters = this.allFilters.find((item) => item.key == col.key);\n if (matchedRenderFilters) {\n matchedRenderFilters.data = this.filter[`${col.propertyNameInQuery}`];\n } else {\n this.allFilters.push({\n data: this.filter[`${col.propertyNameInQuery}`],\n name: col.name,\n type: col.type === FilterType.Mobile ? FilterType.User : col.type,\n key: col.key,\n } as FilterList);\n }\n }\n }\n }\n\n _getSearchTermKey() {\n return this.gridConfig?.generalSearchApiKeyName ?? 'searchTerm';\n }\n\n createQuery(isReportQuery: boolean = true) {\n this.query = {};\n\n let matchedColumnToSortBy = this.tableColumns?.find((item) => item.key == this.pagingInfo.sortBy || item.sortBy == this.pagingInfo.sortBy);\n\n this.query.pagingInfo = {\n pageNumber: this.pagingInfo.pageNumber,\n pageSize: this.pagingInfo.pageSize,\n sortBy:\n matchedColumnToSortBy ?\n this.pagingInfo.sortBy : null,\n sortOrder: matchedColumnToSortBy ? this.pagingInfo.sortOrder : null,\n };\n\n this.query[this._getSearchTermKey()] = this.generalSearchTerm;\n this.query.isAllFilter = this.mixedFilterQuestions && this.mixedFilterQuestions.hasOwnProperty('isAllFilter') ? this.mixedFilterQuestions.isAllFilter : true\n\n let qFilters = this.getQuestionFilters();\n if (qFilters.length > 0) {\n this.query.filters = qFilters;\n\n }\n let announcementFilters = this.getAnnouncementFilters();\n if (announcementFilters.length > 0) {\n this.query.announcementFilters = announcementFilters;\n }\n\n let assetDynamicFieldsFilters = this.getDynamicFieldsFilters();\n if (assetDynamicFieldsFilters?.length) {\n this.query.assetDynamicFieldFilters = assetDynamicFieldsFilters;\n }\n\n let assignDynamicFieldsFilters = this.getDynamicFieldsFilters(true);\n if (assignDynamicFieldsFilters?.length) {\n this.query.assignDynamicFieldFilters = assignDynamicFieldsFilters;\n }\n\n if (this.gridConfig?.initialFilters) {\n // add initial filters that are not inside columns\n for (let initialFilter of this.gridConfig?.initialFilters) {\n let matchedColumn = this.gridColumns?.find((item) => item.key == initialFilter.key);\n if (!matchedColumn) {\n if (initialFilter.usage == null ||\n initialFilter.usage == InitialFilterUsage.Always ||\n (!isReportQuery && initialFilter.usage == InitialFilterUsage.CSV) ||\n (isReportQuery && initialFilter.usage == InitialFilterUsage.Report)) {\n this.query[initialFilter.key] = initialFilter.value;\n }\n }\n }\n }\n\n\n for (let col of this.gridColumns) {\n this._setQueryValue(\n col,\n this.gridConfig?.initialFilters?.find((item) => item.key == col.key)?.value\n );\n\n this._setQueryValue(\n col,\n this.filter[`${col.propertyNameInQuery}`]\n );\n }\n if (this.gridIncludeColumns) {\n for (let col of this.gridIncludeColumns) {\n this.query[`${col.propertyNameInQuery}`] = this.visibilityCheckedColumns.find(c => c.key == col.key) != null;\n }\n }\n return this.query;\n }\n\n _setQueryValue(col, value) {\n if (!value)\n return;\n\n if (col.payloadCustomKeyValue) {\n let result = col.payloadCustomKeyValue(value);\n if (result) {\n if (!Array.isArray(result)) {\n result = [result];\n }\n result.map((item) =>\n this.query = { ...item, ...this.query }\n )\n }\n return;\n }\n\n let mapProperty = this.getMapPropertyForFilter(col.type);\n let filterValue = mapProperty != null ?\n col.isArray == false ?\n value[0][mapProperty] :\n value?.map(c => c[mapProperty]) :\n col?.isArray == false ? value[0] :\n value;\n\n if (this.query[`${col.propertyNameInQuery}`]) {\n if (col.isArray == false) {\n this.query[`${col.propertyNameInQuery}`] = filterValue;\n } else {\n if (filterValue) {\n filterValue?.map((fv) => {\n let foundMatchedValue = false;\n for (let filter of this.query[`${col.propertyNameInQuery}`]) {\n if (isEqual(filter, fv)) {\n foundMatchedValue = true;\n break;\n }\n }\n if (!foundMatchedValue) {\n this.query[`${col.propertyNameInQuery}`].push(\n fv\n );\n }\n });\n }\n }\n } else {\n this.query[`${col.propertyNameInQuery}`] = filterValue;\n }\n }\n\n getMapPropertyForFilter(type: FilterType): string {\n switch (type) {\n case FilterType.Site:\n case FilterType.Mobile:\n case FilterType.Supplier:\n case FilterType.VisitorType:\n case FilterType.InductionId:\n case FilterType.IndustryType:\n case FilterType.PermitForm:\n case FilterType.InventoryCategory:\n case FilterType.InventoryLocation:\n case FilterType.User:\n case FilterType.InventoryToolStatus:\n case FilterType.DocumentType:\n case FilterType.Form:\n case FilterType.SiteBriefingForm:\n return 'id';\n case FilterType.Gender:\n case FilterType.Induction:\n case FilterType.PermitStatus:\n case FilterType.FormType:\n return 'key';\n default:\n return null;\n }\n }\n\n onFillSearchFilterBeforeSearch() {\n this.loadData(0);\n }\n\n //#endregion\n\n onUpdateFilterAnnouncements(filterAnnouncements: ClientAnnouncementFilterViewModel[]) {\n if (!isEqual(this.filterAnnouncements, filterAnnouncements)) {\n this.filterAnnouncements = filterAnnouncements;\n this.loadData(0);\n }\n }\n\n onUpdateFilterQuestions(filterQuestions: MixedQuestionAndDisplayFilterViewModel) {\n if (!isEqual(filterQuestions?.displayFilters, this.mixedFilterQuestions?.displayFilters)\n || !isEqual(filterQuestions?.isAllFilter, this.mixedFilterQuestions.isAllFilter)) {\n this.mixedFilterQuestions = filterQuestions;\n this.loadData(0);\n }\n }\n\n filterMode() {\n return this.mixedFilterQuestions?.isAllFilter\n ? \"Is All Of\"\n : \"Is Any Of\";\n }\n\n onUpdateFilterQuestionsFromRenderer(filteredQuestions: QuestionAnswerFilterViewModel[]) {\n let filteredQuestionsUuids = filteredQuestions?.map((item) => item.uuid);\n this.mixedFilterQuestions = {\n questionFilters: this.mixedFilterQuestions?.questionFilters?.filter((item) => filteredQuestionsUuids?.includes(item.uuid)),\n displayFilters: filteredQuestions,\n isAllFilter: this.mixedFilterQuestions.isAllFilter\n }\n this.loadData(0);\n }\n\n oldDynamicFieldsCompareHash: string;\n\n onUpdateFilterDynamicFields(fields: ToolDynamicFieldViewModel[]) {\n let newDynamicFieldsCompareHash = fields?.map((item) =>\n item.id + '-' + item.formControl?.value + '-' + item.operatorFormControl?.value)?.join(\"_\");\n if (!isEqual(this.oldDynamicFieldsCompareHash, newDynamicFieldsCompareHash)) {\n this.filterDynamicFields = fields;\n this.loadData(0);\n }\n this.oldDynamicFieldsCompareHash = newDynamicFieldsCompareHash;\n }\n\n oldAssignDynamicFieldsCompareHash: string;\n\n onUpdateFilterAssignDynamicFields(fields: ToolDynamicFieldViewModel[]) {\n let newAssignDynamicFieldsCompareHash = fields?.map((item) =>\n item.id + '-' + item.formControl?.value + '-' + item.operatorFormControl?.value)?.join(\"_\");\n if (!isEqual(this.oldAssignDynamicFieldsCompareHash, newAssignDynamicFieldsCompareHash)) {\n this.filterAssignDynamicFields = fields;\n this.loadData(0);\n }\n this.oldAssignDynamicFieldsCompareHash = newAssignDynamicFieldsCompareHash;\n }\n\n updateDynamicFieldsFilters(filters: DynamicFieldFilterWrapperViewModel[], isAssign: boolean) {\n let oldDynamicFilters = isAssign ?\n this.dynamicFieldsFilters?.filter((item) => item.dynamicField?.usage == 0) : [];\n\n let oldAssignDynamicFilters = !isAssign ?\n this.dynamicFieldsFilters?.filter((item) => item.dynamicField?.usage == 1) : [];\n\n this.dynamicFieldsFilters = [\n ...oldDynamicFilters,\n ...oldAssignDynamicFilters,\n ...filters\n ];\n }\n\n removeDynamicField(id: number) {\n this.dynamicFieldsFilters = this.dynamicFieldsFilters?.filter((item) => item.dynamicFieldId != id) ?? []\n this.filterDynamicFields = this.filterDynamicFields?.filter((item) => item.id != id) ?? [];\n this.filterAssignDynamicFields = this.filterAssignDynamicFields?.filter((item) => item.id != id) ?? [];\n this.loadData(0);\n }\n\n onRemoveAnnouncementFromFilter(announcement: ClientAnnouncementFilterViewModel) {\n this.filterAnnouncements = this.filterAnnouncements.filter((item) => item.id != announcement.id)\n this.loadData(0);\n }\n\n openCreateScheduleReportModal(template, mode: (\"schedule\" | \"magiclink\")) {\n this.saveReportMode = mode;\n let required = [Validators.required];\n this.reportScheduledReport = new FormGroup({\n email: new FormControl({}, this.saveReportMode == \"schedule\" ? required : []),\n period: new FormControl(0, required),\n timeSpan: new FormControl('23:59', this.saveReportMode == \"schedule\" ? required : []),\n daysOfMonth: new FormControl([1], []),\n daysOfWeek: new FormControl([0], []),\n });\n this.createScheduleReportModalRef = this.bsModalService.show(template);\n }\n\n onOpenTableSettingModal(template) {\n this.tableSettingModalRef = this.bsModalService.show(template, {\n ignoreBackdropClick: true,\n });\n }\n\n onTableSettingSaveChanges() {\n\n if (!this.reportTableSettings?.columnSettings)\n this.reportTableSettings.columnSettings = [];\n\n let oldTableSettings = Object.assign({}, this.reportTableSettings);\n this.getTableSettingsFromCache();\n let needToReloadData: boolean = false;\n for (let col of this._gridColumns) {\n if (col.hasIncludeFilter) {\n let relatedOldItem = oldTableSettings?.columnSettings?.find((item) => item.key == col.key);\n let relatedNewItem = this.reportTableSettings?.columnSettings?.find((item) => item.key == col.key);\n if (relatedOldItem && !relatedOldItem.visible && relatedNewItem && relatedNewItem.visible) {\n needToReloadData = true;\n break;\n }\n }\n }\n\n this.reSetGridColumnsDataFromCache();\n\n this.tableSettingModalRef?.hide();\n this.prepareVisibleColumns();\n if (needToReloadData)\n this.loadData(0);\n }\n\n reSetGridColumnsDataFromCache() {\n this._gridColumns = this._gridColumns?.map((item) => {\n let itemInCache = this.reportTableSettings?.columnSettings?.find(c => c.key === item.key);\n if (itemInCache) {\n item.order = itemInCache.order;\n item.visible = itemInCache.visible;\n }\n return item;\n })\n }\n\n get periodType() {\n return this.reportScheduledReport.controls.period.value;\n }\n\n get isReportScheduledReportValid() {\n if (!this.reportScheduledReport.valid) return false;\n else {\n if (this.periodType == this.ReportTypes.Weekly &&\n !(this.reportScheduledReport.controls.daysOfWeek.value?.length > 0))\n return false;\n if (this.periodType == this.ReportTypes.Monthly &&\n !(this.reportScheduledReport.controls.daysOfMonth.value?.length > 0))\n return false;\n }\n\n return true;\n }\n\n SaveScheduledReport(saveReportType) {\n let model = {\n parameters: JSON.stringify(formGroupToModel(this.reportScheduledReport)),\n queryString: JSON.stringify(this.createQuery(false)),\n type: ReportDeliveryType.Email,\n scheduleReportMode: this.gridConfig?.scheduleReport?.mode,\n scheduleReportType: this.gridConfig?.scheduleReport?.type,\n } as SaveScheduledReportViewmodel;\n this.inProgress = true;\n if (saveReportType == 'schedule') {\n this.siteAttendanceService.saveScheduledReport(model)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(_ => {\n this.toastr.info(\"Scheduled Report Submitted Successfully\");\n this.createScheduleReportModalRef.hide();\n });\n } else if (saveReportType == 'magiclink') {\n this.siteAttendanceService.saveAndGetMagicLinkForPowerBI(model)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.modalService.info(`${window.origin}/general/activity-report-by-hash-code/${res.hash}`, \"Magic Link\").subscribe(_ => {\n this.createScheduleReportModalRef.hide();\n })\n });\n }\n }\n\n get searchQuery() {\n return this.createQuery();\n }\n\n getDynamicFieldsFilters(getAssignFields: boolean = false) {\n let fields: DynamicFieldFilterWrapperModel[] = [];\n this.dynamicFieldsFilters?.filter((filter) => getAssignFields ? filter?.dynamicField?.usage == 1 : filter?.dynamicField?.usage == 0)?.map((filter) => {\n fields.push({\n dynamicFieldId: filter.dynamicFieldId,\n value: filter.value,\n type: filter.type,\n operator: filter.operator,\n })\n })\n return fields;\n }\n\n getQuestionFilters(noTitle: boolean = false): QuestionAnswerFilterModel[] {\n let model = [];\n if (this.mixedFilterQuestions?.displayFilters) {\n for (let _question of this.mixedFilterQuestions?.displayFilters) {\n model.push({\n questionId: _question.questionId,\n answers: _question.answers,\n operator: _question.operator,\n titles: _question.titles,\n } as QuestionAnswerFilterModel,);\n }\n if (noTitle)\n model.forEach(element => {\n element.titles = null;\n });\n }\n\n return model;\n }\n\n getAnnouncementFilters(): AnnouncementFilterModel[] {\n return this.filterAnnouncements?.map((announcementFilter) => {\n return { announcementId: announcementFilter.id, viewState: announcementFilter.viewed };\n })\n }\n\n GetReportTypes() {\n return this.enumToArrayPipe.transform(this.ReportTypes)\n .filter(v => this.saveReportMode == 'magiclink' || (this.ReportTypes[v] != this.ReportTypes.OneTime && this.ReportTypes[v] != this.ReportTypes.HalfYearly && this.ReportTypes[v] != this.ReportTypes.Yearly));\n }\n\n exportAll() {\n this.exportCsv({\n exportOnlyVisible: false,\n } as ExportCsvOutputModel);\n }\n exportCurrentView() {\n this.exportCsv({\n exportOnlyVisible: true,\n } as ExportCsvOutputModel);\n }\n\n getCsvTitle() {\n return this.gridConfig?.csvExportSubject ?? Table[this.gridConfig.tableType]\n .split(/(?=[A-Z])/)\n .join(\" \");\n }\n exportCsv(exportInfo: ExportCsvOutputModel) {\n let query = this.createQuery(false);\n delete query.pagingInfo.pageNumber;\n delete query.pagingInfo.pageSize;\n if (exportInfo.exportOnlyVisible) {\n query.csvColumns = [];\n for (let csvCol of this._visibilityCheckedColumns) {\n if (!csvCol.gridTemplate) {\n query.csvColumns.push(csvCol.key);\n } else {\n let csvFieldsToSendToServer = [];\n if (this.reportTableSettings?.isDetailsMode) {\n let relatedCachedCol = this.reportTableSettings?.columnSettings?.find((item) => item.key == csvCol.key);\n if (relatedCachedCol) {\n let csvFields = relatedCachedCol?.csvFields?.filter((item) => item.value == true).map((item) => item.key);\n if (csvFields.length == 0) csvFields = [csvCol.key];\n csvFieldsToSendToServer = csvFields;\n }\n } else {\n csvFieldsToSendToServer = csvCol?.gridTemplate?.csvFields ?? [csvCol.key];\n }\n if (csvFieldsToSendToServer?.length > 0) {\n query.csvColumns = [\n ...query.csvColumns,\n ...csvFieldsToSendToServer\n ]\n }\n }\n }\n query.csvColumns = query.csvColumns?.join(',');\n } else {\n this.gridColumns?.map((item) => {\n if (item.hasIncludeFilter == true) {\n query[item.propertyNameInQuery] = true;\n }\n })\n }\n\n if (typeof query[this._getSearchTermKey()] == \"undefined\" || query[this._getSearchTermKey()] == null)\n delete query[this._getSearchTermKey()];\n\n this.exportCSVReport(query, exportInfo);\n }\n\n isExportingAsJobTask(): boolean {\n return this.gridConfig?.exportAsJob;\n }\n\n exportCSVReport(model, exportInfo: ExportCsvOutputModel) {\n const params = convertObjectToUrlParameters(model);\n if (this.isExportingAsJobTask()) {\n this.http.post(this.gridConfig?.csvReportUrl, {\n csvEmail: exportInfo.email,\n csvTitle: exportInfo.title,\n requestParams: model,\n } as CsvReportRequestModel)\n .pipe(catchError(this._errorService.handleError))\n .subscribe({\n next: (res) => {\n if (res && res.success) {\n this.toastr.info(res.message);\n }\n },\n })\n } else {\n window.open(this.gridConfig?.csvReportUrl + '/?' + params)\n }\n }\n\n setAccompaniersTooltipData(view: any) {\n this.accompaniersViewData = view;\n }\n\n get reorderingClass() {\n return this.isReordering ? 'reordering' : '';\n }\n\n sortable;\n enableReorder() {\n this.tableSettingModalRef?.hide();\n this.isReordering = true;\n\n let el = document.getElementById(`sortableItems_${this.cacheKey}`);\n this.sortable = Sortable.create(el, this.sortableOptions);\n }\n saveOrder() {\n this.sortable.destroy();\n this.isReordering = false;\n }\n\n protected readonly QuestionDefaultMode = QuestionDefaultMode;\n protected readonly AskMode = AskMode;\n protected readonly AskQuestionPeriodMode = AskQuestionPeriodMode;\n protected readonly QuestionType = QuestionType;\n\n onImageRenderError(target: HTMLImageElement) {\n target.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAaRQTFRF9fb6AAAAr92FkcZ22dzjODo3MzMz+teDksh2Ojo6NTU0dXV2PDw8o9R/qamrNDQ0bm5x8fL2kMV15bVp7O7zqteCrduEjI2OPD46hLFsYXNSlsp4QEBAgoKESktLZIBWcHFy0dLVxcbK6uvvQUo9m8577e7xptSAvr/BREw+Q0REVGZKwMHFW2xOaHtXjsFzX3hSe6Nm09bc6Ont4+TnT09QdpxjkbNyzc7RR0dIgqhq+NaCkpOUfn5/aVpD7MBxmJmaP0I7oqKl09PTYWJjc5dgQkJC5rZqPz8/aWprXl5e9tF+pIdXTlxGh4eIlZWVnp+gSUlJw5xf3d3dVFRV7MZ4R0I5VlZW6bxu1aplzMzMzadleHh4U1NTbm5u17dyQEBAY2NjOjo6ODg4UlJRTk5OS0U8S0tLiKxtNzc2upZdT09PSUlJT09Ps5BaQ0RDWlpaX19fUVFRb29viIiISkpKbmRLWVlZwalrTExM4L1zWFhYrplkYmJiSUlJr41Zvb2/RUVFQEBAs7S1WltdQ0NFnp6eampqPDw8S0tLc3NzdnZ2QXfmOAAAAIx0Uk5T/wD/////////////kv//7f///////////////////////////////////////////////////////////////////wT//87/7P8m/////wr/wP8E////Yv//BP8PWiP/3jP37ouu/5H/+P8lo2L/kkpfejgQgP81/3H/ff9A7///4Pb///8lXuXWFSzo6alrAAAETUlEQVR4nO3Z+VfaWBQH8JeEXOU5zogZJVSkFXVEikMVcBAVLCjuuNWt1n0b7b63p3urM53OPz0JEEyCSV5oMmfOHL78SMKHm5u8y+Eh6l8IqiJVpIpUkSryn0Ay754vvPc6LUnw0+Hrp5kyZO71ewDfaJ01uTYaBPhrc06JPJqA2JADWZh47hyyuzJk6QAHf7RSyCeSc56sLknI7UOYjFhuoJ8doRh+c7uIHMOw9YSIONrO8GoBeQwNdhgi4miLneyKyLN93y+2IY4Qn30mIMcQssUoIA43bFJobu/MHqOI9A1k59AqfLQVcbTil2jB6bIXCeEnaGLUJkNC+gYWEM7ZjDjOviJI241M7iOwftFSIQ0/GSCRj+mRdKDdTiTq9mEQXjF31DbEH8Mv3m5vb8wk4ZbfJsTvPXo1WCNkeu3DStC8QoJEfUfbNYUMri2uxEw3hgRx41c1Uqa5D+C2AWnnX9RcZI1LDhgsP64vqulKgITgrQxJcTOg3xXXMFbNcAIkDcuKShZh3sCYVSkEyLwcGRznNmBIz8jhnvBV3CCfsUSVbA+WkGVOvxKhjp4w06hUCJAAzKQkZXqc0+2Jq1U0GJVCcnexSS41nb9Wy4LBJYOad5dg/NrCMGqF5DnJ4VNufC2VSokEdwqac0c0mprLFaIn3nu0zknZWBnQ+o2ZN2i6XCFau0Ls0WLROF1xanWkaFyikK3CIS+bfLC+vv4giTXXx5JRrpDOk1YeWJ4Fb05rnsiMMoV4MkYD80PpgObIUhhqhRjRj8pQKdYgZYZSsQS5xFAoEQsQlxtfKTMulBu4ru+7EQ1Drlzr+05E06DpJpVSMaJjSEqtpFSK6BqCUiuvpULEwFAplSGGhlKpCCEwJCXfl8kKECJDXgs2jxAackUfid8KVGzQdD1TUGZ1kbgXO1WKCYPuKiDMdT0k7uX7O5SKGYMIafPxvYynwyv7U8Q1wvZ0kRokSN5gRCVQmUGAFA25YtKQGq+NtPluJorHSIpryJxBdxoggvFbc6dCcQ2BOYNu0UdEQ5g+csW80cTIkBENQ1awoAxDD/G9SytOZmb3kbNO05ArMGvSkNrOMN076HNM25BfMf53U0ZXrWSE+UO0gKOahqIWpwmlub5kMP1wHz1WNkVlyBU+QUo0lfohtuRkC03tBB2RdilxH5+oV0b6Tp7usrcuT2eLjGA87L0ldHcV3A4pfh/by2jF0+3s13xTM9dPXlLobibLhiQjqGNUpozhexkKTVFbe+fxktGod4angx0zZ/SyO98oCv1BUY9Yn180ztmEriHWYk7p5z9PiRsC4gbHn6w3LdaRMDxLUMivWONVduLpxU7Qu68wqt8P80rjWDdkp+TbTXeOWbh5ozfM1BpFVAwPYsJjVzpg78kd1e7c1sEEALDGwYCNDxI+6tObb+VbgFRm9/7Bwx8sycPnm39f7AD+L3dMq0gVqSJVxJL8A+cN4y9Kl6o8AAAAAElFTkSuQmCC'\n }\n\n getFilterType = (col: GridColumn): FormType | FilterType => {\n return col.type === FilterType.Mobile\n ? FilterType.User\n : col.type === FilterType.PermitForm || col.type === FilterType.SiteBriefingForm\n ? FilterType.Form\n : col.type\n }\n\n getFormType = (col: GridColumn): FormType => {\n return col.type === FilterType.PermitForm\n ? FormType.Permit\n : col.type === FilterType.SiteBriefingForm\n ? FormType.SiteBriefing\n : null;\n }\n\n getUserId(data: any, col: any): number | null {\n if (data.userId) return data.userId;\n var userIdColName = col?.gridTemplate?.data?.userId;\n if (data[userIdColName]) return data[userIdColName];\n if (col.populateData) return col.populateData(data)[userIdColName];\n return null;\n }\n\n openModal(template, userId: number, modalSize?: string) {\n this.selectedUserId = userId;\n this.modalService.show(template, modalSize ?? \"modal-lg\");\n }\n}\n","export enum AnswerMode {\n Normal = 0,\n DelayedAnswer = 1,\n NoAnswer = 2,\n PendingAnswer = 3,\n AnswerExpired = 4,\n}","export enum DocumentProvider {\n User = 0,\n Supplier = 1,\n}\n","export enum SiteAttendanceDisputeType {\n CheckInDate = 0,\n CheckOutDate = 1\n}\n","import { EmergencyContactViewModel } from \"../emergency-contact-view-model\";\nimport {WorkerProfileField} from \"../../enums/worker-profile-field.enum\";\n\nexport class WorkerProfileViewModel {\n userId: number;\n companyId: number;\n visitorTypeId: number;\n companySupplierId: number;\n visitorTypeTitle: string;\n companySupplierTitle: string;\n lastName: string;\n firstName: string;\n email: string;\n profileImageUrl: string;\n dateOfBirth: Date;\n emergencyContact: string;\n gender: number;\n mobile: string;\n editableFields: WorkerProfileField[];\n}\nexport class UserProfileCardViewModel {\n cardId: number;\n userDocumentId: number;\n documentTypeId: number;\n documentTypeTitle: string;\n documentTitle: string;\n saveDateTime: Date;\n expireDate: Date;\n fileUrls: string[];\n}\nexport class ObcEventLogViewModel {\n dateTime: Date;\n dataAsJson: string;\n eventTypeString: string;\n message: string;\n}\n\nexport type UserInformationField = {\n title: string;\n key: string;\n icon: string;\n type?: undefined | string;\n \n}\n\nexport type UserInformation = UserInformationField & {\n isEmailVerified?: undefined | boolean;\n isDisputedCheckOutDate?: undefined | boolean\n isDisputedCheckInDate?: undefined | boolean\n checkOutDistanceTitle?: string\n checkInDistanceTitle?: string \n}\n\nexport const userInformationFields: UserInformationField[] = [\n { title: 'Site', key: 'siteName', icon: 'map-marker-alt' },\n { title: 'Supplier', key: 'companySupplier', icon: 'industry' },\n { title: 'CheckIn', key: 'checkInDate', icon: 'calendar', type: 'datetime' },\n { title: 'CheckOut', key: 'checkOutDate', icon: 'calendar', type: 'datetime' },\n { title: 'First Name', key: 'firstName', icon: 'user' },\n { title: 'Last Name', key: 'lastName', icon: 'user' },\n { title: 'Mobile', key: 'mobile', icon: 'phone', type: 'mobile' },\n { title: 'Date of Birth',key: 'birthDay', icon: 'calendar', type: 'date'},\n { title: 'Gender', key: 'gender', icon: 'male', type: 'gender' },\n { title: 'Industry Type', key: 'industryTypeText', icon: 'industry' },\n { title: 'Emergency Contact', key: 'emergencyContactAsJson', icon: 'phone-square', type: 'emergencyContact' },\n { title: 'Business Name', key: 'businessName', icon: 'id-card' },\n { title: 'Email', key: 'email', icon: 'envelope', type: 'email' },\n { title: 'Visitor Type', key: 'visitorTypeTitle', icon: 'user-circle' },\n // { title: 'Induction', key: 'induction', type: 'induction', icon: 'id-card' },\n];\n\nexport const cleanAndGetField = (profile: WorkerProfileViewModel) => {\n return userInformationFields.filter((f) =>\n (profile[f.key] != null &&\n (f.key != 'emergencyContactAsJson' || !EmergencyContactViewModel.isEmpty(JSON.parse(profile[f.key])))));\n}\n","
\n
\n
\n

Approval Not Required

\n
\n
\n
\n
\n

\n \n Pending Approval\n

\n
\n
\n \n \n
\n
\n
\n
\n
\n

Rejected By {{status.changeBy}} at\n {{status.dateTimeOffset | datetime}}

\n
\n
\n
\n
\n

Approved By {{status.changeBy}} at\n {{status.dateTimeOffset | datetime}}

\n
\n
\n
\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { SiteAttendanceApprovalStatus } from 'src/app/enums/site-attendance-approval-status.enum';\nimport { SiteAttendanceApprovalStatusViewModel } from 'src/app/models/site-attendance-approval-status';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\n\n@Component({\n selector: 'obc-site-attendance-approval-status',\n templateUrl: './site-attendance-approval-status.component.html',\n styleUrls: ['./site-attendance-approval-status.component.scss']\n})\nexport class SiteAttendanceApprovalStatusComponent implements OnInit {\n @Input() status : SiteAttendanceApprovalStatusViewModel = null;\n @Output() statusChange = new EventEmitter();\n SiteAttendanceApprovalStatus = SiteAttendanceApprovalStatus;\n constructor(private siteAttendanceService : SiteAttendanceService, private modalService : ModalService) { }\n\n ngOnInit() {\n }\n\n onStatusChange(isApprove : boolean) {\n var subs = isApprove ? this.siteAttendanceService.approveSiteAttentendanceByHost(this.status.siteAttendanceId) : this.siteAttendanceService.rejectSiteAttentendanceByHost(this.status.siteAttendanceId);\n subs.subscribe(res=> {\n this.statusChange.emit();\n }, err => {\n this.modalService.error(err);\n });\n }\n\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n\n\n
Name {{ displayDots ? ':' : ''}}
\n
{{ dataObject?.name }}
\n
\n\n
Mobile {{ displayDots ? ':' : ''}}
\n
{{ dataObject?.mobile | mobile }}
\n
\n\n
Relationship {{ displayDots ? ':' : ''}}
\n
{{ dataObject?.relationship }}
\n
\n\n
\n N/A\n
\n\n\n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { EmergencyContactViewModel } from 'src/app/models/emergency-contact-view-model';\n\n@Component({\n selector: 'obc-emergency-contact-viewer',\n templateUrl: './emergency-contact-viewer.component.html',\n styleUrls: ['./emergency-contact-viewer.component.scss']\n})\nexport class EmergencyContactViewerComponent implements OnInit {\n\n @Input() data: string;\n @Input() displayInRow: boolean = false;\n @Input() labelStyle: string;\n @Input() displayDots: boolean = true;\n dataObject: EmergencyContactViewModel;\n constructor() { }\n\n ngOnInit(): void {\n if(this.data != null) {\n try {\n this.dataObject = JSON.parse(this.data);\n } catch(_) {\n this.dataObject = EmergencyContactViewModel.newEmptyAnswer();\n }\n }\n }\n\n isNullOrEmptyEmergencyContact(): boolean {\n return !this.dataObject ||\n (!this.dataObject.mobile && !this.dataObject.name && !this.dataObject.relationship) ||\n (\n this.dataObject.mobile?.trim() == '' &&\n this.dataObject.name?.trim() == '' &&\n this.dataObject.relationship?.trim() == ''\n );\n }\n\n isNameValid(): boolean {\n return this.dataObject?.name && this.dataObject?.name != '';\n }\n isMobileValid(): boolean {\n return this.dataObject?.mobile && this.dataObject?.mobile != '';\n }\n isRelationshipValid(): boolean {\n return this.dataObject?.mobile && this.dataObject?.mobile != '';\n }\n\n}\n","
\n
\n \n
    \n
  • \n
    \n \n {{ fld.title }}:\n \n \n {{ userInformation[fld.key] | date }}\n \n \n {{ userInformation[fld.key] | datetime }}\n ({{userInformation.checkInDistanceTitle}})\n ({{userInformation.checkOutDistanceTitle}})\n\n \n\n \n \n \n
    \n \n
    \n
    \n \n {{ userInformation[fld.key] | gender }}\n \n \n {{ userInformation[fld.key] }}\n \n \n {{ userInformation[fld.key] }}\n \n \n {{ userInformation[fld.key] | mobile }}\n \n \n {{ userInformation[fld.key] }}\n \n \n {{\n userInformation[fld.key] == null\n ? \"Not collected\"\n : userInformation[fld.key] == true\n ? \"Yes\"\n : \"No\"\n }}\n \n \n {{ userInformation[fld.key] }}\n \n \n \n \n {{ userInformation[fld.key] }}\n
    \n
    \n
  • \n
\n
\n
","import { Component, Input } from '@angular/core';\nimport { UserInformation, UserInformationField } from 'src/app/models/userProfile/worker-profile-view-model';\n\n@Component({\n selector: 'obc-user-information',\n templateUrl: './user-information.component.html'\n})\nexport class UserInformationComponent {\n @Input() isDisputable!: boolean;\n @Input() userInformationFields!: UserInformationField[];\n\n @Input() userInformation: UserInformation;\n\n @Input() onShowDisputeModal!: () => void\n @Input() showDisputHistory!: (isShow: boolean) => void;\n}\n","\n \n\n\n \n
\n \n \n \n
\n
\n \n
\n
\n
\n Review\n
\n
\n
\n
\n Comment:\n \n
\n
\n
\n
\n \n
\n
\n\n\n \n \n\n\n\n
\n There is no question answer or document.\n
\n
\n
\n
\n Question Answers\n
\n
\n \n \n
\n
\n
\n
\n Document Answers\n
\n
\n
    \n
  • \n
    \n
    \n \n
    \n \n \n {{ document.documentTypeTitle }} \n \n
    \n
    \n
    \n {{ document.documentTitle }}\n \n Expire In :\n {{ document.expireDate | datetime }}\n EXPIRED\n \n
    \n
    \n
    \n \n \n
    \n
  • \n
\n
\n
\n
\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { DocumentProvider } from 'src/app/enums/document-provider.enum';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { ReasonToReject } from 'src/app/models/ai/ai-response';\nimport { SiteInductionFilledInfoViewModel } from 'src/app/models/induction/site-induction-filled-info-view-model';\nimport { QuestionAnswerInputModel } from 'src/app/models/question-answer-inputmodel';\nimport { SiteAttendanceDocumentViewModel } from 'src/app/models/site-attendance-document-viewmodel';\nimport { SiteInductionViewModel } from 'src/app/models/site-induction-view-model';\nimport { SiteQuestionAnswerViewModel } from 'src/app/models/site_question_answer_view_model';\nimport { UserContactInformation } from 'src/app/models/user-profile-viewmodel';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-induction-filled-info',\n templateUrl: './induction-filled-info.component.html',\n styleUrls: ['./induction-filled-info.component.scss']\n})\nexport class InductionFilledInfoComponent implements OnInit {\n @Input() siteInductionFilledInfo: SiteInductionFilledInfoViewModel;\n @Input() expandInduction: boolean = false;\n @Input() showCheckInDetailsButton: boolean = false;\n @Output() onApproveOrReject: EventEmitter = new EventEmitter();\n @Input() onlyDisplayFilledInfo: boolean = false;\n @Input() highlightQuestionData: ReasonToReject[];\n\n questionAnswerInputModel: QuestionAnswerInputModel;\n checkInAnswerResult: SiteQuestionAnswerViewModel[];\n siteAttendanceDocuments: SiteAttendanceDocumentViewModel[];\n userInformation: UserContactInformation;\n questionType = QuestionType;\n DocumentProvider = DocumentProvider;\n\n constructor(private modalService: ModalService) { }\n\n ngOnInit(): void {\n }\n\n callFatherOnApproveOrReject($event: SiteInductionViewModel) {\n this.onApproveOrReject.emit($event);\n }\n\n answerResultOfInduction() {\n return this.siteInductionFilledInfo?.siteInductionQuestionAnswers;\n }\n documentResultOfInduction() {\n return this.siteInductionFilledInfo?.siteInductionDocuments;\n }\n isExpiredDocument(doc: SiteAttendanceDocumentViewModel): boolean {\n return doc.expireDate != null && new Date(doc.expireDate) < new Date();\n }\n openCheckInetailsPopup(template) {\n this.questionAnswerInputModel = {\n siteAttendanceId: this.siteInductionFilledInfo.siteAttendanceId,\n isCheckInAnswer: true,\n } as QuestionAnswerInputModel;\n this.modalService.show(template, \"modal-lg\");\n }\n}\n","
\n
\n
\n \n
\n \n \n {{ document.documentTypeTitle }}\n \n \n
\n
\n
\n
{{ document.documentTitle }}
\n \n Expire In :\n {{ document.expireDate | datetime }}\n EXPIRED\n \n
\n
\n
\n \n
\n
\n","import { Component, Input, OnInit } from '@angular/core';\nimport { DocumentProvider } from 'src/app/enums/document-provider.enum';\nimport { SiteAttendanceDocumentViewModel } from 'src/app/models/site-attendance-document-viewmodel';\nimport { SiteQuestionAnswerViewModel } from 'src/app/models/site_question_answer_view_model';\n\n@Component({\n selector: 'obc-document-answer-renderer',\n templateUrl: './document-answer-renderer.component.html',\n styleUrls: ['./document-answer-renderer.component.scss']\n})\nexport class DocumentAnswerRendererComponent implements OnInit {\n DocumentProvider = DocumentProvider;\n @Input() document: SiteAttendanceDocumentViewModel;\n @Input() set questionAnswer(value: SiteQuestionAnswerViewModel) {\n this.document = {\n fileUrl: value.fileUrls?.length > 0 ? value.fileUrls[0] : '',\n additionalFileUrls: value.fileUrls?.length > 1 ? value.fileUrls.slice(1, value.fileUrls.length) : [],\n documentTitle: value.documentTitle,\n userDocumentId: value.userDocumentId,\n expireDate: value.documentExpireDate,\n siteInductionId: value.siteInductionId,\n documentTypeTitle: value.documentTypeTitle,\n };\n }\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n isExpiredDocument(doc: SiteAttendanceDocumentViewModel): boolean {\n return doc.expireDate != null && new Date(doc.expireDate) < new Date();\n }\n\n}\n","export enum TextRenderMode {\n SingleLine = 0,\n MultiLine = 1,\n RichText = 2,\n}\n","{{model?.questionText}}\n
\n
\n
\n
\n
\n
\n
","import { Component, OnInit, Input, AfterViewInit } from '@angular/core';\nimport { SiteQuestionViewModel } from 'src/app/models/site-question-viewmodel';\nimport Viewer from '@toast-ui/editor/dist/toastui-editor-viewer';\nimport { uuid4 } from 'src/app/helpers/uuid';\n\n@Component({\n selector: 'obc-question-title-renderer',\n templateUrl: './question-title-renderer.component.html',\n styleUrls: ['./question-title-renderer.component.scss']\n})\nexport class QuestionTitleRendererComponent implements OnInit, AfterViewInit {\n\n id: any;\n model: SiteQuestionViewModel;\n get isRichTextQuestion() {\n return (this.model?.questionRichText?.trim()?.length ?? 0) > 0;\n }\n\n @Input() set question(model: SiteQuestionViewModel) {\n this.model = model;\n }\n\n constructor() {\n }\n\n ngOnInit() {\n this.id = 'a' + uuid4();\n }\n\n ngAfterViewInit(): void {\n\n if (this.isRichTextQuestion) {\n let content = this.model.questionRichText;\n\n new Viewer({\n el: document.querySelector(`#${this.id}`),\n initialValue: content,\n\n });\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport Viewer from '@toast-ui/editor/dist/toastui-editor-viewer';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { uuid4 } from 'src/app/helpers/uuid';\nimport { QuestionParameter } from 'src/app/models/questionParameters/question-parameter';\nimport { TextRenderMode } from 'src/app/models/questionParameters/text-render-mode-type';\nimport { TextQuestionParameter } from 'src/app/models/questionParameters/textQuestionParameter';\nimport { SiteQuestionAnswerViewModel } from 'src/app/models/site_question_answer_view_model';\n\n@Component({\n selector: 'obc-rich-text-renderer',\n templateUrl: './rich-text-renderer.component.html',\n styleUrls: ['./rich-text-renderer.component.scss']\n})\nexport class RichTextRendererComponent implements OnInit {\n id: any;\n constructor() { }\n @Input() answer: SiteQuestionAnswerViewModel;\n ngOnInit() {\n this.id = 'a' + uuid4();\n }\n ngAfterViewInit(): void {\n var parameter = QuestionParameter.getParameter(\n this.answer.questionParameters\n );\n if (\n parameter.textRenderMode == TextRenderMode.RichText &&\n this.answer.questionType == QuestionType.Text\n ) {\n new Viewer({\n el: document.querySelector(`#${this.id}`),\n initialValue: this.answer.answer,\n });\n }\n }\n\n}\n","
\n","
    \n \n
  • \n
    \n \n \n  ({{ item.answerDate | datetime }})\n  \n
    \n \n \n \n \n \n \n \n \n \n \n \n {{isQuestionTimeIncluded(item.questionParameters) == true\n ? (item.answer | datetime)\n : (item.answer | date)}}\n \n \n \n \n \n
    {{ item.answer }}
    \n \n
    \n
    \n
    \n \n {{ getHighlightItem(item).reason }}\n
    \n
    \n
  • \n
    \n
","import { Component, Input, OnInit } from '@angular/core';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { ReasonToReject } from 'src/app/models/ai/ai-response';\nimport { EmergencyContactViewModel } from 'src/app/models/emergency-contact-view-model';\nimport { DateQuestionParameter } from 'src/app/models/questionParameters/date-question-parameter';\nimport { QuestionParameter } from 'src/app/models/questionParameters/question-parameter';\nimport { TextRenderMode } from 'src/app/models/questionParameters/text-render-mode-type';\nimport { TextQuestionParameter } from 'src/app/models/questionParameters/textQuestionParameter';\nimport { SiteQuestionAnswerViewModel } from 'src/app/models/site_question_answer_view_model';\n\n@Component({\n selector: 'obc-question-list-answer-renderer',\n templateUrl: './question-list-answer-renderer.component.html',\n styleUrls: ['./question-list-answer-renderer.component.scss']\n})\nexport class QuestionListAnswerRendererComponent implements OnInit {\n\n QuestionType = QuestionType;\n\n @Input() answers: SiteQuestionAnswerViewModel[];\n @Input() highlightQuestionData: ReasonToReject[];\n\n constructor() { }\n\n ngOnInit(): void { }\n\n isRichTextQuestion(answer: SiteQuestionAnswerViewModel): boolean {\n var parameter = QuestionParameter.getParameter(\n answer.questionParameters\n );\n return parameter.textRenderMode == TextRenderMode.RichText && answer.questionType == QuestionType.Text;\n }\n\n isQuestionTimeIncluded(questionParameters: string): boolean {\n var parameter = QuestionParameter.getParameter(questionParameters);\n return parameter.includeTime;\n }\n emergencyContactAnswerIsNotEmpty(answer) {\n try {\n let res = JSON.parse(answer) as EmergencyContactViewModel;\n return !EmergencyContactViewModel.isEmpty(res);\n } catch (_) {\n return false;\n }\n }\n\n getHighlightItem(item: SiteQuestionAnswerViewModel): any {\n if (!this.highlightQuestionData) return false;\n return this.highlightQuestionData.find(\n (x) => x.questionId == item.questionId\n );\n }\n\n}\n","export enum SiteAnnouncementForceViewMode {\n Disable = 0,\n MandatoryView = 1,\n MandatoryViewAndSignOff = 2,\n SetPlaythroughToMandatory = 3\n}\n","
\n \n \n \n \n \n \n {{ann.title}}\n \n \n \n \n \n \n {{ann.title}}\n \n \n \n \n \n \n {{ann.title}}\n \n \n \n \n \n \n {{ann.title}}\n \n \n \n \n \n \n \n \n \n
\n \n \n
\n
\n\n\n
\n
\n

View Files

\n
\n \n
\n
\n
\n \n \n
\n
\n
\n\n\n \n \n \n \n\n \"image\"\n \n
\n \n \n
\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { SiteAnnouncementDisplayTime } from 'src/app/enums/site-announcement-display-time.enum';\nimport { SiteAnnouncementForceViewMode } from 'src/app/enums/site-announcement-force-view-mode';\nimport { OptionalMandatoryState } from 'src/app/enums/site-document-state.enum';\nimport { BaseSiteAnnouncementViewModel } from 'src/app/models/announcement-viewmodel';\nimport { AnonymousAnnouncementVisitModel, VisitStatus } from 'src/app/models/announcement-visit';\nimport { AnnouncementService } from 'src/app/services/announcement.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-checkin-announcement-renderer',\n templateUrl: './checkin-announcement-renderer.component.html',\n styleUrls: ['./checkin-announcement-renderer.component.scss']\n})\nexport class CheckinAnnouncementRendererComponent implements OnInit {\n @Input() ann: BaseSiteAnnouncementViewModel;\n @Input() notifyVisits = true;\n @Input() anonymousAttendanceKey: string = null;\n @Input() largeButton: boolean = true;\n @Input() validateComponent: boolean = false;\n @Output() onAnnouncementVisit = new EventEmitter();\n @Output() onCheckedMandatorySignOff = new EventEmitter();\n bsModalRef = null;\n\n AnnouncementType = FileType;\n optionalMandatoryState = OptionalMandatoryState;\n forceViewMode = SiteAnnouncementForceViewMode;\n constructor(private announcementSertvice: AnnouncementService,\n private modalService: ModalService,\n private bsModalService: BsModalService\n ) { }\n ngOnInit() {\n }\n\n @Output('onFileViewed') onFileViewed = new EventEmitter();\n FileType = FileType;\n\n fileHasContent(url, type) {\n let extension = url.split(/[#?]/)[0].split('.').pop().trim();\n var binaryFileTypesOpen = ['xls', 'xlsx', 'ppt', 'pptx', 'doc', 'docx'];\n this.onFileOpened(url);\n\n return type == FileType.Pdf || type == FileType.Image ||\n (type == FileType.Binary && binaryFileTypesOpen.includes(extension));\n }\n\n onOpenFileViewer(template: any) {\n //\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-xl modal-full-width\",\n ignoreBackdropClick: false,\n })\n }\n\n onFileOpened(fileUrl: string) {\n this.onFileViewed.emit(fileUrl);\n this.ann.isVisited = true;\n this.onAnnouncementVisit.emit(this.ann.announcementId);\n }\n\n closeModal() {\n if (this.bsModalRef)\n this.bsModalRef.hide();\n }\n\n onClickAnnouncement() {\n this.ann.isVisited = true;\n this.onAnnouncementVisit.emit(this.ann.announcementId);\n\n // TODO display text annoncement\n if (this.ann.type == FileType.Text)\n this.modalService.info(this.ann.data);\n\n // if (this.notifyVisits) {\n // var model = {\n // announcementId: this.ann.announcementId,\n // anonymousAttendanceKey: this.anonymousAttendanceKey,\n // visitStatus: VisitStatus.Full,\n // } as AnonymousAnnouncementVisitModel;\n\n // this.announcementSertvice.NotifyAnonymousAnnouncementVisit(model)\n // .subscribe(res => {\n // if (!res) // expired key\n // {\n // this.modalService.error(\"your session key is expired, reloading page ...\");\n // setTimeout(() => {\n // window.location.reload();\n // }, 5000);\n // }\n // });\n // }\n }\n onCheckSignOff() {\n this.ann.isCheckedMandatorySignOff = true;\n this.onCheckedMandatorySignOff.emit(this.ann.announcementId);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { DisputeHistoryRequest, SiteAttendanceDisputeModel, SiteAttendanceDisputeViewModel } from '../models/site-attendance-dispute-model';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DisputeSiteAttendanceService {\n\n constructor(private http: HttpClient, private errorService: ErrorService) { }\n\n dispute(model: SiteAttendanceDisputeModel) {\n return this.http.post(\"/api/DisputeSiteAttendance/dispute-site-attendance\", model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n getDisputeHistory(request: DisputeHistoryRequest): Observable {\n return this.http.post(\"/api/DisputeSiteAttendance/dispute-history\", request)\n .pipe(catchError(this.errorService.handleError));\n }\n\n}\n","
\n
\n \n
\n \n
\n
\n \n {{userInformation.checkInDate | datetime}} \n
\n
\n
\n
\n \n {{returnModel.newCheckInDateValue | datetime}} \n
\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n
\n
\n \n {{userInformation.checkOutDate | datetime}} \n
\n
\n
\n
\n \n {{returnModel.newCheckOutDateValue | datetime}} \n
\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n
\n
\n\n
","import { EventEmitter } from '@angular/core';\nimport { Component, Input, OnInit, Output } from '@angular/core';\n\nimport { SiteAttendanceDisputeType } from 'src/app/enums/site-attendance-dispute-type.enum';\nimport { SiteAttendanceDisputeModel } from 'src/app/models/site-attendance-dispute-model';\nimport { UserContactInformation } from 'src/app/models/user-profile-viewmodel';\nimport { DisputeSiteAttendanceService } from 'src/app/services/dispute-site-attendance.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'app-dispute-attendance',\n templateUrl: './dispute-attendance.component.html',\n styleUrls: ['./dispute-attendance.component.scss']\n})\nexport class DisputeAttendanceComponent implements OnInit {\n SiteAttendanceDisputeType = SiteAttendanceDisputeType;\n selectedType: SiteAttendanceDisputeType;\n _userInformation: UserContactInformation;\n _siteAttendanceId: number = null;\n returnModel: SiteAttendanceDisputeModel = {};\n\n @Input() set userInformation(value: UserContactInformation) {\n this._userInformation = value;\n };\n get userInformation(): UserContactInformation {\n return this._userInformation;\n };\n\n @Input() set siteAttendanceId(value: number) {\n this._siteAttendanceId = value;\n this.returnModel.siteAttendanceId = value;\n };\n\n @Output() updateAttachment = new EventEmitter();\n\n constructor(\n private disputeSiteAttendanceService: DisputeSiteAttendanceService,\n private modalService: ModalService,\n ) { }\n\n ngOnInit() {\n }\n\n get hasCheckOutDate() {\n return this.userInformation?.checkOutDate != null;\n }\n\n onDispute() {\n // TODO: VALIDATE!!!\n\n this.disputeSiteAttendanceService.dispute(this.returnModel).subscribe(res => {\n this.updateAttachment.emit(res);\n }, err => {\n this.modalService.error(err)\n })\n }\n\n datePickerValueChage($event: Date, isCheckInDate: boolean) {\n if (isCheckInDate)\n this.returnModel.newCheckInDateValue = $event;\n else\n this.returnModel.newCheckOutDateValue = $event;\n }\n\n isFormValid() {\n return this.returnModel.siteAttendanceId &&\n (\n (this.returnModel.newCheckInDateValue &&\n !this.isInvalidOrEqualDate(this.returnModel.newCheckInDateValue, this.userInformation.checkInDate)) ||\n (this.returnModel.newCheckOutDateValue &&\n !this.isInvalidOrEqualDate(this.returnModel.newCheckOutDateValue, this.userInformation.checkOutDate)));\n }\n\n onChangeMode(isCheckIn) {\n if (isCheckIn) {\n if (!this.returnModel.newCheckInDateValue)\n this.returnModel.newCheckInDateValue = this.userInformation.checkInDate;\n if (this.isInvalidOrEqualDate(this.returnModel.newCheckOutDateValue, this.userInformation.checkOutDate))\n this.returnModel.newCheckOutDateValue = null;\n }\n else {\n if (!this.returnModel.newCheckOutDateValue)\n this.returnModel.newCheckOutDateValue = this.userInformation.checkOutDate;\n if (this.isInvalidOrEqualDate(this.returnModel.newCheckInDateValue, this.userInformation.checkInDate))\n this.returnModel.newCheckInDateValue = null;\n }\n }\n\n isInvalidOrEqualDate(date1, date2): boolean {\n if (date1 == null || date2 == null || date1 == \"Invalid Date\" || date2 == \"Invalid Date\")\n return true;\n\n if (typeof date1 === 'string')\n date1 = new Date(Date.parse(date1));\n\n if (typeof date2 === 'string')\n date2 = new Date(Date.parse(date2));\n\n return Math.floor(date1.setSeconds(0) / 1000) == Math.floor(date2.setSeconds(0) / 1000);\n\n }\n\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DateFromToBy
{{h.disputeDateTime | datetime}}{{h.oldValue | datetime}}{{h.newValue | datetime}}{{h.disputerUserFullName}}
","import { Component, Input, OnInit } from '@angular/core';\nimport { SiteAttendanceDisputeType } from 'src/app/enums/site-attendance-dispute-type.enum';\nimport { DisputeHistoryRequest, SiteAttendanceDisputeViewModel } from 'src/app/models/site-attendance-dispute-model';\nimport { DisputeSiteAttendanceService } from 'src/app/services/dispute-site-attendance.service';\n\n@Component({\n selector: 'obc-dispute-history',\n templateUrl: './dispute-history.component.html',\n styleUrls: ['./dispute-history.component.scss']\n})\nexport class DisputeHistoryComponent implements OnInit {\n\n constructor(private disputeSiteAttendanceService: DisputeSiteAttendanceService) { }\n @Input() siteAttendanceId: number;\n @Input() type: SiteAttendanceDisputeType;\n\n history: SiteAttendanceDisputeViewModel[];\n\n ngOnInit(): void {\n this.disputeSiteAttendanceService.getDisputeHistory({ siteAttendanceId: this.siteAttendanceId, type: this.type } as DisputeHistoryRequest)\n .subscribe(res => this.history = res);\n }\n\n}\n","export enum FormDataStatus {\n NotRequired = 0,\n PendingApproval = 1,\n Approved = 2,\n Rejected = 3,\n}\n","export enum SiteAssetRequestApproveStatus {\n AutoApproved = 0,\n Pending = 1,\n Approved = 2,\n Rejected = 3,\n}\n","export enum FillFormMode {\n Permit,\n General,\n AssetRegistration,\n AssetOperation,\n AssetOperator,\n SupplierDocument,\n}\n","export enum FormApplyFor {\n AnyPerson = 0,\n Individual = 1,\n Supplier = 2,\n}\n","export enum VisitStatus {\n Full = 0,\n Start = 1,\n}\n\nexport interface BaseAnnouncementVisit {\n announcementId: number;\n visitStatus: VisitStatus;\n isCheckedMandatorySignOff: boolean;\n isSupplierAnnouncement: boolean;\n inductionId?: number;\n}\n\nexport interface AnonymousAnnouncementVisitModel extends BaseAnnouncementVisit {\n anonymousAttendanceKey: any;\n}\n\nexport interface AnnouncementVisitModel extends BaseAnnouncementVisit {\n siteAttendanceId: number;\n formId: number;\n isPreCheckIn: boolean;\n isCheckedMandatorySignOff: boolean;\n}\n","\nexport interface VariableDefinition {\n key: string;\n title: string;\n type: VariableDefinitionType;\n mode: VariableDefinitionMode;\n}\nexport interface VariableValueDefinition extends VariableDefinition {\n value: string;\n\n}\nexport enum VariableDefinitionType {\n Unknown = 0,\n Date = 1,\n}\nexport enum VariableDefinitionMode {\n Mandatory = 0,\n Optional = 1,\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ErrorService } from './error.service';\nimport {\n SupplierFormHistoryViewModel,\n SupplierFormViewModel,\n SupplierViewModel\n} from \"../models/supplier-form/supplier-forms-view-mode\";\nimport { AddSupplierFormModel } from \"../models/supplier-form/add-supplier-form-model\";\nimport { ServerResult, ServerResultData } from \"../models/server-result-data\";\nimport { FormDataViewModel } from \"../models/form/form-data-view-model\";\nimport { FormDataModel } from \"../models/form/form-data-model\";\nimport { SendSupplierFormsRequestModel } from \"../models/email-content/site-supplier-hash-link-email-view-model\";\nimport { FormDataDetailViewModel } from \"../models/form/form-data-detail-view-model\";\nimport { FormViewModelRequest } from '../models/form/form-view-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SupplierFormService {\n apiUrl: string = \"/api/SupplierForms\";\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) {\n }\n\n getFormList(supplierId: number): Observable {\n return this._http.get(`${this.apiUrl}/forms/${supplierId}`);\n }\n\n addNewForm = (model: AddSupplierFormModel): Observable =>\n this._http.post(`${this.apiUrl}/add-form`, model)\n .pipe(catchError(this._errorService.handleError));\n\n removeForm = (model: AddSupplierFormModel): Observable =>\n this._http.post(`${this.apiUrl}/remove-form`, model)\n .pipe(catchError(this._errorService.handleError));\n\n getFormHistory(supplierId: number, formId: number): Observable {\n return this._http.get(`${this.apiUrl}/supplier-form-history/${supplierId}/${formId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n sendEmail = (model: SendSupplierFormsRequestModel) =>\n this._http.post(`${this.apiUrl}/send-supplier-forms-email`, model)\n .pipe(catchError(this._errorService.handleError));\n\n\n getAnonymousForms(hashLink: string): Observable {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.get(`/api/AnonymousSupplierForms/forms`, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getSupplierForms(): Observable {\n return this._http.get(`/api/supplierforms/supplier-forms`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getFormsDetailsToFill(formId: number, hashLink: string, toolId: number): Observable> {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.post>(`/api/AnonymousSupplierForms/form`, { formId: formId, toolId: toolId } as FormViewModelRequest, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n saveForm(model: FormDataModel, hashLink: string): Observable> {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.post>(`/api/AnonymousSupplierForms/fill-form`, model, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getAnonymousFilledForm(formId: number, hashLink: string): Observable> {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.get>(`/api/AnonymousSupplierForms/get-filled-form/${formId}`, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getAnonymousFormHistory(formId: number, hashLink: string): Observable {\n let headers = new HttpHeaders({ \"hash-link\": hashLink ?? '' });\n return this._http.get(`/api/AnonymousSupplierForms/supplier-form-history/${formId}`, { headers: headers })\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","import { QuestionType } from \"../enums/question-type\";\nimport { RequiredDocumentViewModel } from \"./user-document-type\";\nimport { CustomFormControl } from \"./custom-formcontrol\";\n\nexport class SiteQuestionsViewModel {\n public id: number;\n public siteId: number;\n public siteName: string;\n public isCheckInQuestion: boolean;\n public questionId: number;\n public questionText: string;\n public questionType: QuestionType;\n public displayOrder: number;\n public questionParameters: string;\n public parameters: any; // TODO take it after merge QuestionParameter;\n public document: RequiredDocumentViewModel;\n public documentFormControl?: CustomFormControl;\n}\n\nexport interface SiteQuestionWithVisitorTypeViewModel extends SiteQuestionsViewModel {\n visitorTypeIds: number[];\n}\n","import { QuestionType } from '../enums/question-type';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { QuestionConditionViewModel } from './question-condition-models';\nimport { RequiredDocumentViewModel } from \"./user-document-type\";\nimport { CustomFormControl } from \"./custom-formcontrol\";\nimport { AskQuestionPeriodMode } from \"../enums/ask-period-mode\";\nimport { SiteQuestionAnswerViewModel } from \"./site_question_answer_view_model\";\nimport { EmergencyContactEmitResponse } from './emergency-contact-emit-response';\nimport { EmergencyContactViewModel } from './emergency-contact-view-model';\nimport { QuestionListItem } from './questionParameters/question-list-tem';\nimport { SelectableQuestionParameter } from './questionParameters/selectable-question-parameter';\nimport { UploadFileInfo } from \"./requiredDocumentAnswer\";\n\nexport class SiteQuestionViewModel {\n public id: Number;\n public questionText: string;\n public questionRichText: string;\n public questionType: QuestionType;\n public companyId: number;\n public questionId: number;\n questionParameters: string;\n public isActive: boolean;\n public isRequired: boolean;\n public conditions: QuestionConditionViewModel[];\n questionParametersAsString: any = {};\n companyName: string;\n public document: RequiredDocumentViewModel;\n public documentTypeId?: number;\n public documentFormControl?: CustomFormControl;\n uniqueKey: string;\n\n constructor(model?: any) {\n this.loadAllProperties(model);\n }\n\n loadAllProperties(model) {\n if (!model) return;\n for (const key of Object.keys(model)) {\n if (model.hasOwnProperty(key)) {\n this[key] = model[key];\n }\n }\n this.questionParametersAsString = this.questionParameters ? JSON.parse(this.questionParameters) : {};\n }\n\n _item = null;\n\n get items(): QuestionListItem[] {\n try {\n if (this._item == null) {\n this._item = this.questionParametersAsString.itemList;\n }\n return this._item;\n } catch (error) {\n return null;\n }\n }\n\n get renderMode(): number {\n try {\n return this.questionParametersAsString[\"renderMode\"];\n } catch (error) {\n return null;\n }\n }\n\n get questionTypeValue(): number {\n try {\n return this.questionParametersAsString[\"questionType\"];\n } catch (error) {\n return null;\n }\n }\n\n get minimumSelectCount(): number {\n try {\n return this.questionParametersAsString[\"minimumSelectCount\"];\n } catch (error) {\n return null;\n }\n }\n\n get regex(): string {\n try {\n return this.questionParametersAsString[\"regex\"];\n } catch (error) {\n return null;\n }\n }\n}\n\nexport class SiteQuestionRendererViewModel {\n showFlagLastState: boolean = true;\n\n constructor() {\n\n }\n\n lastStateInitialFileAnswers: UploadFileInfo[];\n initialAnswers: SiteQuestionAnswerViewModel[];\n formGroup?: FormGroup;\n question: SiteQuestionViewModel;\n\n resetAnswers() {\n if (this.controls == null || this.controls.length == 0) return;\n this.controls.forEach(x => x.reset());\n return null;\n };\n\n set answers(answers) {\n if (this.controls && this.controls.length > 0) {\n if (this.question.questionType == QuestionType.MultiSelect) {\n answers.map((i, index) => {\n this.controls[index].setValue(i)\n });\n } else {\n this.controls[0].setValue(answers[0]);\n }\n }\n }\n\n get answers(): any {\n if (this.controls == null || this.controls.length == 0) return null;\n if (this.question.questionType == QuestionType.MultiSelect) {\n var ans = this.selectedControls.map(i => i.item.value);\n return ans;\n } else if (this.question.questionType == QuestionType.Boolean || this.question.questionType == QuestionType.SingleSelect || this.question.questionType == QuestionType.SignaturePad) {\n return this.controls[0].value;\n } else if (this.question.questionType == QuestionType.Date) {\n if (this.controls[0].value == null || this.controls[0].value.length == 0)\n return null;\n else\n return this.controls[0].value;\n } else if (this.question.questionType == QuestionType.Text || this.question.questionType == QuestionType.File) {\n if (this.controls[0].value == null || this.controls[0].value.length == 0)\n return null;\n else\n return this.controls[0].value;\n } else if (this.question.questionType == QuestionType.EmergencyContact) {\n let qValue = this.controls[0].value as EmergencyContactEmitResponse;\n if (!qValue?.isValid)\n return null;\n else\n return new EmergencyContactViewModel(\n qValue?.value.name,\n qValue?.value.mobile,\n qValue?.value.relationship,\n );\n }\n return null;\n };\n\n get fileType(): string {\n if (this.question.questionType == QuestionType.File) {\n if (this.controls[1] === null || this.controls[1].value == null || this.controls[1].value.length == 0)\n return null;\n else\n return this.controls[1].value;\n }\n\n return null;\n }\n\n get isNotModified(): boolean {\n if (this.question.questionType == QuestionType.File) {\n if (this.controls[2] === null || this.controls[2].value == null || this.controls[2].value.length == 0)\n return false;\n else\n return this.controls[2].value;\n }\n\n return false;\n }\n\n getSelectedInvalidItem(): QuestionListItem[] {\n if ((this.question.questionType == QuestionType.MultiSelect || this.question.questionType == QuestionType.SingleSelect) && this.answers) {\n if (this.question.questionType == QuestionType.MultiSelect)\n return (this.question.questionParametersAsString as SelectableQuestionParameter)?.itemList.filter(item => item.isInvalid && this.answers?.some(c => item.value == c)) ?? [];\n else\n return (this.question.questionParametersAsString as SelectableQuestionParameter)?.itemList.filter(item => item.isInvalid && this.answers == item.value) ?? [];\n }\n return [];\n }\n\n\n get valid(): boolean {\n if (this.question.questionType == QuestionType.RichText) {\n return true\n }\n\n if (this.getSelectedInvalidItem()?.length)\n return false;\n\n if (\n this.question.questionType == QuestionType.MultiSelect ||\n this.question.questionType == QuestionType.Boolean ||\n this.question.questionType == QuestionType.SingleSelect ||\n this.question.questionType == QuestionType.EmergencyContact ||\n this.question.questionType == QuestionType.File ||\n this.question.questionType == QuestionType.Text\n ) {\n if (this.controls == null || this.controls.length == 0) return false;\n }\n\n if (this.question.questionType == QuestionType.MultiSelect) {\n if (this.selectedControls.length >= this.question.minimumSelectCount)\n return true;\n else\n return false\n } else if (this.question.questionType == QuestionType.Boolean\n || this.question.questionType == QuestionType.SingleSelect\n || this.question.questionType == QuestionType.File\n || this.question.questionType == QuestionType.SignaturePad) {\n if (this.question.isRequired && this.answers == null)\n return false;\n else\n return true;\n } else if (this.question.questionType == QuestionType.Text) {\n if (this.question.regex && this.answers) {\n let re = new RegExp(this.question.regex);\n return re.test(this.answers);\n }\n if (this.question.isRequired && (this.answers == null || this.answers.trim() == ''))\n return false;\n\n return true;\n } else if (this.question.questionType == QuestionType.EmergencyContact) {\n return (this.controls[0].value as EmergencyContactEmitResponse)?.isValid;\n } else if (this.question.questionType == QuestionType.Date) {\n if (this.question.isRequired && this.answers == null)\n return false;\n }\n return true;\n };\n\n get controls(): SiteQuestionItemFormControl[] {\n if (this.formGroup?.controls == null) return null;\n return Object.values(this.formGroup.controls) as SiteQuestionItemFormControl[];\n }\n\n get selectedControls(): any[] {\n return this.controls?.filter(e => e.value);\n }\n}\n\nexport interface SiteQuestionChangeEvent {\n tagged: any;\n anwsers: string;\n}\n\nexport class SiteQuestionItemFormControl extends FormControl {\n constructor(state, public item) {\n super(state);\n }\n}\n\n\nexport class SiteOneTimeQuestionsViewModel extends SiteQuestionViewModel {\n companyId: number;\n askPeriodMode: AskQuestionPeriodMode;\n document: RequiredDocumentViewModel;\n}\n","import { Input, Output, EventEmitter, Component } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SiteQuestionRendererViewModel, SiteQuestionChangeEvent, SiteQuestionItemFormControl } from 'src/app/models/site-question-viewmodel';\nimport { CacheService } from \"../../../../services/cache.service\";\n\n@Component({\n selector: 'obc-question-renderer',\n template: '',\n styles: []\n})\nexport class QuestionRendererComponent {\n get formGroup(): FormGroup {\n return this.model?.formGroup;\n };\n\n set formGroup(fg) {\n this.model.formGroup = fg;\n this.model.formGroup.valueChanges.subscribe(res=>{\n this.valueChanges.emit({tagged : this.tagged, anwsers: this.model.answers});\n });\n setTimeout(()=>{\n this.valueChanges.emit({tagged : this.tagged, anwsers: this.model?.answers});\n }, 1000);\n }\n model : SiteQuestionRendererViewModel;\n @Input() tagged: any;\n @Output() valueChanges: EventEmitter = new EventEmitter();\n\n constructor(public cacheService: CacheService) { }\n\n ngOnInit() {\n this.formGroup.valueChanges.subscribe((_)=> {\n this.cacheService.formControlDirtySubject.next({questionId: this.model.question?.questionId})\n })\n }\n\n get controls(): SiteQuestionItemFormControl[] {\n return this.model?.controls;\n }\n\n get valid() : boolean {\n return this.model?.valid ?? false;\n }\n\n}\n","
\n
\n
\n
\n \n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n
","import { Component, OnInit, Input } from '@angular/core';\nimport { QuestionRendererComponent } from '../question-renderer/question-renderer.component';\nimport { FormBuilder } from '@angular/forms';\nimport { SiteQuestionRendererViewModel, SiteQuestionItemFormControl } from 'src/app/models/site-question-viewmodel';\nimport { CacheService } from \"../../../../services/cache.service\";\n\n@Component({\n selector: 'obc-boolean-question-renderer',\n templateUrl: './boolean-question-renderer.component.html',\n styleUrls: ['./boolean-question-renderer.component.scss']\n})\nexport class BooleanQuestionRendererComponent extends QuestionRendererComponent implements OnInit {\n\n @Input() set question (model: SiteQuestionRendererViewModel){\n this.model = model;\n let answer = model.initialAnswers && model.initialAnswers.length > 0 ? model.initialAnswers[0]?.answer : null;\n this.formGroup = this.fb.group({\n value : new SiteQuestionItemFormControl(answer != null ? answer == 'Yes' : null, null)\n });\n };\n\n constructor(private fb : FormBuilder, public cacheService: CacheService) {\n super(cacheService);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DisplayStyle } from '../enums/display-style';\nimport { QuestionType } from '../enums/question-type';\nimport { SingleSelectRenderMode } from '../models/questionParameters/single-select-render-type';\nimport { MultiSelectRenderMode } from '../models/questionParameters/multi-select-render-type';\n\n@Pipe({\n name: 'displayStyleCssClass'\n})\nexport class DisplayStyleCssClassPipe implements PipeTransform {\n\n transform(value: any, questionType?: QuestionType, renderMode?: MultiSelectRenderMode | SingleSelectRenderMode): string {\n\n if (!questionType && !renderMode) {\n var result = '';\n if (value === DisplayStyle.Success) result = 'text-success';\n if (value === DisplayStyle.Warning) result = 'text-warning';\n if (value === DisplayStyle.Error) result = 'text-danger';\n if (value === DisplayStyle.Default) result = '';\n return `${result}`;\n }\n\n let customCss = this.getCssClass(value, questionType, renderMode);\n return customCss?.trim()?.length ? ` ${customCss}` : '';\n }\n\n getCssClass(value: any, questionType: QuestionType, renderMode: MultiSelectRenderMode | SingleSelectRenderMode): string {\n if (questionType == QuestionType.SingleSelect) {\n switch (renderMode) {\n\n case SingleSelectRenderMode.Button:\n case SingleSelectRenderMode.RadioButton:\n if (value === DisplayStyle.Success) return 'custom-style btn btn-success';\n if (value === DisplayStyle.Warning) return 'custom-style btn btn-warning';\n if (value === DisplayStyle.Error) return 'custom-style btn btn-danger';\n if (value === DisplayStyle.Default) return 'custom-style btn btn-primary';\n return 'btn btn-primary';\n case SingleSelectRenderMode.DropDown:\n if (value === DisplayStyle.Success) return 'custom-style text-success';\n if (value === DisplayStyle.Warning) return 'custom-style text-warning';\n if (value === DisplayStyle.Error) return 'custom-style text-danger';\n if (value === DisplayStyle.Default) return 'custom-style text-primary';\n return '';\n\n default:\n break;\n }\n }\n else if (questionType == QuestionType.MultiSelect) {\n switch (renderMode) {\n case MultiSelectRenderMode.Button:\n if (value === DisplayStyle.Success) return 'custom-style btn btn-success';\n if (value === DisplayStyle.Warning) return 'custom-style btn btn-warning';\n if (value === DisplayStyle.Error) return 'custom-style btn btn-danger';\n if (value === DisplayStyle.Default) return 'custom-style btn btn-primary';\n return 'btn btn-primary';//value?.toString() ?? '?';\n case MultiSelectRenderMode.CheckBoxList:\n if (value === DisplayStyle.Success) return 'custom-style text-success';\n if (value === DisplayStyle.Warning) return 'custom-style text-warning';\n if (value === DisplayStyle.Error) return 'custom-style text-danger';\n if (value === DisplayStyle.Default) return 'custom-style text-primary';\n return '';//value?.toString() ?? '?';\n default:\n break;\n }\n }\n return '';\n }\n\n}\n","
\n
\n
\n
\n \n \n \n
\n {{selectedItemHint}}\n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
","import { Component, OnInit, Input } from '@angular/core';\nimport { QuestionRendererComponent } from '../question-renderer/question-renderer.component';\nimport { FormBuilder } from '@angular/forms';\nimport { SiteQuestionItemFormControl, SiteQuestionRendererViewModel } from 'src/app/models/site-question-viewmodel';\nimport { CacheService } from \"../../../../services/cache.service\";\n\n@Component({\n selector: 'obc-single-select-question-renderer',\n templateUrl: './single-select-question-renderer.component.html',\n styleUrls: ['./single-select-question-renderer.component.scss']\n})\nexport class SingleSelectQuestionRendererComponent extends QuestionRendererComponent implements OnInit {\n selectedItemHint: string;\n @Input() set question(model: SiteQuestionRendererViewModel) {\n this.model = model;\n if (this.model.question.renderMode == 0) {\n if (!this.model.question.items.some(x => x.value == null))\n this.model.question.items.splice(0, 0, { title: \"Not Selected\", value: null })\n }\n let answer: string = null;\n if(model.initialAnswers && model.initialAnswers.length) {\n answer = model.initialAnswers[0]?.answer;\n this.updateHintAndStyle(answer);\n }\n this.formGroup = this.fb.group({\n value: new SiteQuestionItemFormControl(answer, null)\n });\n\n };\n\n get items(): any[] {\n return this.model.question.items;\n }\n\n constructor(private fb: FormBuilder, public cacheService: CacheService) {\n super(cacheService)\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n onItemChange($event?) {\n if ($event == null) return;\n\n let value = this.formGroup.controls[\"value\"].value as string;\n this.updateHintAndStyle(value);\n }\n\n updateHintAndStyle(answer) {\n let questionItem = this.model.question.items.find(p => p.value == answer);\n if (questionItem?.hint)\n this.selectedItemHint = questionItem.hint;\n this.model.question.items.map(p => {\n (p.selectedDisplayStyle) = \"\";\n })\n questionItem.selectedDisplayStyle = questionItem.displayStyle;\n }\n\n onCheckChange(item: any) {\n if (item == null) return;\n\n if (item?.hint)\n this.selectedItemHint = item.hint;\n\n this.model.question.items.map(p => {\n (p.selectedDisplayStyle) = \"\";\n })\n item.selectedDisplayStyle = item.displayStyle;\n\n }\n}\n","
\n
\n
\n
\n \n \n \n \n \n \n
\n {{hint}}\n
\n
\n
\n
\n
\n
\n
\n \n
\n\n
\n \n
\n \n \n \n {{ctrl.item.title}}\n \n
\n
\n
\n\n \n
\n\n
\n
\n
","import { Component, OnInit, Input } from '@angular/core';\nimport { QuestionRendererComponent } from '../question-renderer/question-renderer.component';\nimport { FormBuilder } from '@angular/forms';\nimport { SiteQuestionRendererViewModel, SiteQuestionItemFormControl } from 'src/app/models/site-question-viewmodel';\nimport { CacheService } from \"../../../../services/cache.service\";\n\n@Component({\n selector: 'obc-multi-select-question-renderer',\n templateUrl: './multi-select-question-renderer.component.html',\n styleUrls: ['./multi-select-question-renderer.component.scss']\n})\nexport class MultiSelectQuestionRendererComponent extends QuestionRendererComponent implements OnInit {\n selectedItemHint: string[] = [];\n formControls: SiteQuestionItemFormControl[] = null;\n @Input() set question(model: SiteQuestionRendererViewModel) {\n this.model = model;\n\n let initialAnswers = [];\n if (model.initialAnswers && model.initialAnswers.length > 0) {\n initialAnswers = model.initialAnswers[0]?.answer?.split(\",\");\n }\n try {\n this.formControls = this.model.question.items.map((e, _) => {\n let checked = initialAnswers.find(answer => answer == e.value);\n return new SiteQuestionItemFormControl(checked != null, { title: e.title, value: e.value, hint: e.hint, displayStyle: e.displayStyle });\n });\n } catch {\n throw (\"unknown item list\");\n }\n\n var fg = this.fb.group({});\n for (let index = 0; index < this.formControls.length; index++) {\n const element = this.formControls[index];\n fg.addControl(element.item.title, element);\n let checked = initialAnswers.find(answer => answer == element.item.value);\n if(checked) {\n this.selectedItemHint.push(element.item.hint);\n element.item.selectedDisplayStyle = element.item.displayStyle;\n }\n }\n this.formGroup = fg;\n };\n\n constructor(private fb: FormBuilder, public cacheService: CacheService) {\n super(cacheService)\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n onClick(item: any) {\n if (item == null) return;\n\n let value = this.formGroup.controls[item.title].value;\n if (!value && this.selectedItemHint.length > 0) {\n let itemIndex = this.selectedItemHint.findIndex(p => p == item.hint);\n if (itemIndex > -1)\n this.selectedItemHint.splice(itemIndex, 1);\n }\n if (value && item?.hint)\n this.selectedItemHint.push(item.hint);\n\n item.selectedDisplayStyle = (value && item?.displayStyle != undefined) ? item.displayStyle : \"\";\n }\n\n onCheckChange(item: any) {\n if (item == null) return;\n\n let value = this.formGroup.controls[item.title].value;\n if (value && this.selectedItemHint.length > 0) {\n let itemIndex = this.selectedItemHint.findIndex(p => p == item.hint);\n if (itemIndex > -1)\n this.selectedItemHint.splice(itemIndex, 1);\n }\n if (!value && item?.hint)\n this.selectedItemHint.push(item.hint);\n\n item.selectedDisplayStyle = (!value && item?.displayStyle != undefined) ? item.displayStyle : \"\";\n }\n}\n","
\n
\n
\n
\n \n \n \n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n","import { Component, OnInit, Input } from '@angular/core';\nimport { QuestionRendererComponent } from '../question-renderer/question-renderer.component';\nimport { FormBuilder } from '@angular/forms';\nimport { SiteQuestionRendererViewModel, SiteQuestionItemFormControl } from 'src/app/models/site-question-viewmodel';\nimport { CacheService } from \"../../../../services/cache.service\";\nimport { QuestionParameter } from 'src/app/models/questionParameters/question-parameter';\nimport { TextQuestionParameter } from 'src/app/models/questionParameters/textQuestionParameter';\nimport { TextRenderMode } from 'src/app/models/questionParameters/text-render-mode-type';\nimport { uuid4 } from 'src/app/helpers/uuid';\n\n@Component({\n selector: 'obc-text-question-renderer',\n templateUrl: './text-question-renderer.component.html',\n styleUrls: ['./text-question-renderer.component.scss']\n})\nexport class TextQuestionRendererComponent extends QuestionRendererComponent implements OnInit {\n isRichTextQuestion: boolean;\n id:string;\n @Input() set question (model: SiteQuestionRendererViewModel){\n let answer = model.initialAnswers && model.initialAnswers.length > 0 ? model.initialAnswers[0]?.answer : null;\n this.model = model;\n this.formGroup = this.fb.group({\n value : new SiteQuestionItemFormControl(answer, null)\n });\n this.isRichTextQuestion = QuestionParameter.getParameter(\n model.question.questionParameters\n ).textRenderMode == TextRenderMode.RichText;\n this.id = 'a' + uuid4();\n };\n\n constructor(private fb : FormBuilder, public cacheService: CacheService) {\n super(cacheService);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n\n}\n","
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n\n\n \n
Name {{ displayDots ? ':' : ''}}
\n \n
\n
\n\n \n
Mobile {{ displayDots ? ':' : ''}}
\n \n
\n
\n\n \n
Relationship {{ displayDots ? ':' : ''}}
\n \n
\n
\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { e168ValidatorNullable } from \"../../../helpers/mobile-format-validator\";\nimport { EmergencyContactEmitResponse } from \"../../../models/emergency-contact-emit-response\";\nimport { EmergencyContactViewModel } from 'src/app/models/emergency-contact-view-model';\n\n@Component({\n selector: 'obc-emergency-contact',\n templateUrl: './emergency-contact.component.html',\n styleUrls: [ './emergency-contact.component.scss' ]\n})\nexport class EmergencyContactComponent implements OnInit {\n\n form = this.formBuilder.group({\n name: new FormControl(''),\n mobile: new FormControl('', [e168ValidatorNullable]),\n relationship: new FormControl(''),\n })\n\n @Output() onUpdate: EventEmitter = new EventEmitter()\n @Output() isValid: EventEmitter = new EventEmitter()\n\n @Input() data: string;\n @Input() displayInRow: boolean = false;\n @Input() labelStyle: string;\n @Input() displayDots: boolean = true;\n @Input() required: boolean;\n @Input() jsonData: string;\n\n constructor(private formBuilder: FormBuilder,) {\n }\n\n ngOnInit(): void {\n\n let jsonObject: EmergencyContactViewModel = EmergencyContactViewModel.newEmptyAnswer();\n if(this.jsonData) {\n try {\n jsonObject = JSON.parse(this.jsonData) as EmergencyContactViewModel;\n } catch(_) {}\n }\n\n this.form.controls.name.setValue(jsonObject?.name ?? '');\n this.form.controls.mobile.setValue(jsonObject?.mobile ?? '');\n this.form.controls.relationship.setValue(jsonObject?.relationship ?? '');\n if(this.required) {\n this.addValidators();\n }\n this.form.valueChanges.subscribe((res) => {\n this.emitData(res);\n })\n\n this.emitData(jsonObject);\n }\n\n addValidators() {\n this.form.controls.name.addValidators(Validators.required);\n this.form.controls.mobile.addValidators(Validators.required);\n\n this.form.controls.name.updateValueAndValidity({emitEvent: false});\n this.form.controls.mobile.updateValueAndValidity({emitEvent: false});\n }\n\n emitData(res) {\n if(this.form.valid) {\n this.onUpdate.emit({value: res, isValid: this.form.valid});\n } else {\n this.onUpdate.emit({value: null, isValid: this.form.valid});\n }\n }\n\n}\n","
\n
\n
\n
\n \n \n \n
\n
\n \n
\n
\n
\n
","import { Component, Input, OnInit } from '@angular/core';\nimport { SiteQuestionItemFormControl, SiteQuestionRendererViewModel } from 'src/app/models/site-question-viewmodel';\nimport { QuestionRendererComponent } from '../question-renderer/question-renderer.component';\nimport { FormBuilder } from '@angular/forms';\nimport { EmergencyContactEmitResponse } from 'src/app/models/emergency-contact-emit-response';\nimport { CacheService } from \"../../../../services/cache.service\";\n\n@Component({\n selector: 'obc-emergency-contact-question-renderer',\n templateUrl: './emergency-contact-question-renderer.component.html',\n styleUrls: ['./emergency-contact-question-renderer.component.scss']\n})\nexport class EmergencyContactQuestionRendererComponent extends QuestionRendererComponent implements OnInit {\n\n defaultAnswerStringify: string;\n @Input() set question (model: SiteQuestionRendererViewModel){\n this.defaultAnswerStringify = model.initialAnswers && model.initialAnswers.length > 0 ? \n model.initialAnswers[0]?.answer : null;\n\n this.model = model;\n this.formGroup = this.fb.group({\n answer : new SiteQuestionItemFormControl(null, null)\n });\n };\n\n constructor(private fb : FormBuilder, public cacheService: CacheService) {\n super(cacheService);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n onUpdateEmergencyContact(ecValue: EmergencyContactEmitResponse) {\n this.formGroup.controls.answer.setValue(ecValue);\n this.model.valid;\n }\n}","
\n
\n
\n
\n \n \n \n
\n
\n \n \n \n\n
\n
\n
\n
\n
\n
","import { Component, Input, OnInit } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { DateComparisonMode, DateQuestionLimit, DateQuestionLimitValueMode, DateQuestionParameter } from 'src/app/models/questionParameters/date-question-parameter';\nimport { SiteQuestionItemFormControl, SiteQuestionRendererViewModel } from 'src/app/models/site-question-viewmodel';\nimport { QuestionRendererComponent } from '../question-renderer/question-renderer.component';\nimport { CacheService } from \"../../../../services/cache.service\";\n\n@Component({\n selector: 'obc-date-question-renderer',\n templateUrl: './date-question-renderer.component.html',\n styleUrls: ['./date-question-renderer.component.scss']\n})\nexport class DateQuestionRendererComponent extends QuestionRendererComponent implements OnInit {\n DatetimePickerMode = DatetimePickerMode;\n formControl: SiteQuestionItemFormControl;\n\n @Input() set question(model: SiteQuestionRendererViewModel) {\n let answer = model.initialAnswers && model.initialAnswers.length > 0 ? model.initialAnswers[0]?.answer : null;\n this.model = model;\n let dateValue = answer != null ? new Date(answer) : null;\n this.formControl = new SiteQuestionItemFormControl(dateValue, null);\n this.config = JSON.parse(this.model.question.questionParameters) as DateQuestionParameter;\n this.minDate = this.getLimitDate(this.config?.limitForMinimumValue);\n this.maxDate = this.getLimitDate(this.config?.limitForMaximumValue);\n\n this.formGroup = this.fb.group({\n value: this.formControl\n });\n };\n\n config: DateQuestionParameter;\n minDate: Date;\n maxDate: Date;\n\n get mode(): DatetimePickerMode {\n return this.config.includeTime ? DatetimePickerMode.DateTimePicker : DatetimePickerMode.Calender;\n }\n\n constructor(private fb: FormBuilder, public cacheService: CacheService) {\n super(cacheService);\n }\n\n\n getLimitDate(limit: DateQuestionLimit): Date {\n\n if (limit?.valueMode == null)\n return null;\n if (limit.valueMode == DateQuestionLimitValueMode.Absolute)\n return new Date(Date.parse(limit.compareValue));\n var date = new Date();\n var numberOfDaysToAdd = (limit.dayCount ?? 0) * (limit.dateComparisonMode == DateComparisonMode.Before ? -1 : 1);\n date.setDate(date.getDate() + numberOfDaysToAdd);\n return date;\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n\n}\n","export enum DropzoneSourceType {\n File = 0,\n URL = 1,\n Base64 = 2,\n}\n","
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
{{source.name}}
\n {{ getReadableSize(source.size) }}\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
{{source.fileName}}
\n {{ getReadableSize(source.fileSize) }}\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n\n\n \n \n \"file\"\n \n \"file\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { DropzoneSourceType } from 'src/app/enums/dropzone-source-type';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport {\n detectFileType,\n fileSize,\n getFileInputTypeByMimeType,\n getFileNameFromUrl,\n getFileTypeFromExtension\n} from \"../../../../helpers/general-functions\";\nimport { UploadFileInfo } from \"../../../../models/requiredDocumentAnswer\";\nimport { SafePipe } from \"../../../../pipes/safe-pipe\";\n\n@Component({\n selector: 'obc-dropzone-file',\n templateUrl: './dropzone-file.component.html',\n styleUrls: ['./dropzone-file.component.scss']\n})\nexport class DropzoneFileComponent implements OnInit {\n\n\n DropzoneSourceType = DropzoneSourceType;\n @Input() source: any;\n @Input() sourceType: DropzoneSourceType;\n @Output() removeItem: EventEmitter = new EventEmitter();\n\n constructor(private safePipe: SafePipe,) { }\n\n ngOnInit(): void {\n }\n\n displayFile(source, type: DropzoneSourceType) {\n if(type == this.DropzoneSourceType.Base64) {\n return 'data:image/' + source.fileExtension.toLowerCase() + ';base64,'+source.fileAsBase64;\n } else if(type == this.DropzoneSourceType.File) {\n return this.safePipe.transform(URL.createObjectURL(source), 'url');\n } else {\n return source;\n }\n }\n\n FileType = FileType;\n\n getFileTypeAny(source: UploadFileInfo|string|any, type: DropzoneSourceType) {\n if(type == this.DropzoneSourceType.Base64) { // UploadFileInfo\n return getFileTypeFromExtension(source.fileExtension);\n } else if(type == this.DropzoneSourceType.File) { // file\n return getFileInputTypeByMimeType(source.type);\n } else { // string\n return detectFileType(source);\n }\n }\n\n getNameFromUrl(url) {\n return getFileNameFromUrl(url);\n }\n getReadableSize(size) {\n return fileSize(size);\n }\n}\n","
\n
\n
\n
\n \n \n \n
\n
\n\n \n \n \n\n \n \n \n
0\" class=\"mt-3 font-weight-bold d-flex justify-content-end\">\n Selected Files Total Size: {{ getTotalBase64FileSize(parsedInitialBase64AnswersJson) }}\n
\n\n
\n
\n
\n New Selected Files:\n
\n\n \n \n \n
1\" class=\"mt-2 font-weight-bold d-flex justify-content-end\">\n Selected Files ({{ this.files?.length }}), Total Size: {{ getTotalSize(files) }}\n
\n
\n\n
\n
\n \n
\n
\n
\n The type of the selected file is invalid\n
\n
\n
\n
\n","import { MaxFileSize } from '../../../../enums/constants';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { QuestionRendererComponent } from '../question-renderer/question-renderer.component';\nimport { FormBuilder } from '@angular/forms';\nimport { SiteQuestionItemFormControl, SiteQuestionRendererViewModel } from 'src/app/models/site-question-viewmodel';\nimport {\n fileSize,\n getFileExtenstion,\n isValidImageFile,\n isValidPDFFile,\n toBase64\n} from 'src/app/helpers/general-functions';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { FileType } from \"../../../../enums/file-type.enum\";\nimport { UploadFileInfo } from \"../../../../models/requiredDocumentAnswer\";\nimport { QuestionAnswerFileFormat } from 'src/app/models/questionParameters/question-answer-file-format';\nimport { SafePipe } from 'src/app/pipes/safe-pipe';\nimport { DropzoneSourceType } from 'src/app/enums/dropzone-source-type';\nimport { CacheService } from \"../../../../services/cache.service\";\n\n@Component({\n selector: 'obc-file-question-renderer',\n templateUrl: './file-question-renderer.component.html',\n styleUrls: [ './file-question-renderer.component.scss' ],\n providers: [\n SafePipe\n ]\n})\nexport class FileQuestionRendererComponent extends QuestionRendererComponent implements OnInit {\n\n @Input() isEditMode: boolean = false;\n files: File[] = [];\n // displayInitialValues = false;\n @Output('removeItem') removeItemEmitter = new EventEmitter();\n\n DropzoneSourceType = DropzoneSourceType;\n displayMimeTypeError: boolean = false;\n parsedInitialBase64AnswersJson: UploadFileInfo[];\n\n validImageExtentions = [\n '.png', '.jpg', '.jpeg'\n ];\n pdfMimeTypes = [\n 'application/pdf'\n ]\n\n @Input() set question(model: SiteQuestionRendererViewModel) {\n this.model = model;\n\n let initialAnswer = model.initialAnswers ? model.initialAnswers[0] : null;\n this.parsedInitialBase64AnswersJson = model.lastStateInitialFileAnswers ?? [];\n\n let initialAnswerValue: string;\n let initialAnswerFileType: string;\n let isNotModified: boolean;\n if(initialAnswer?.isBase64Answer) {\n let parsedAnswer = [];\n try {\n parsedAnswer = JSON.parse(initialAnswer.answer)\n } catch(e){}\n this.parsedInitialBase64AnswersJson = [\n ...parsedAnswer ?? [],\n ...this.parsedInitialBase64AnswersJson,\n ];\n }\n\n if(this.parsedInitialBase64AnswersJson?.length) {\n let initialAnswerValues: string[] = [];\n let initialAnswerFileTypes: string[] = [];\n this.parsedInitialBase64AnswersJson?.map((item) => {\n initialAnswerValues.push(item.fileAsBase64);\n initialAnswerFileTypes.push(item.fileExtension);\n });\n initialAnswerValue = initialAnswerValues.join('|');\n initialAnswerFileType = initialAnswerFileTypes.join('|');\n isNotModified = false;\n } else {\n initialAnswerValue = initialAnswer?.answer;\n initialAnswerFileType = null;\n isNotModified = this.isEditMode == true;\n\n if(this.model?.initialAnswers?.length > 0 && (this.model?.initialAnswers[0]?.fileStorageKeyList == null || this.model?.initialAnswers[0]?.fileStorageKeyList == undefined ||\n this.model?.initialAnswers[0]?.fileStorageKeyList?.length == 0)) {\n this.model.initialAnswers[0].fileStorageKeyList = initialAnswer?.answer?.split('|');\n }\n }\n this.formGroup = this.fb.group({\n value: new SiteQuestionItemFormControl(initialAnswerValue, null),\n fileType: new SiteQuestionItemFormControl(initialAnswerFileType, null),\n isNotModified: new SiteQuestionItemFormControl(isNotModified, null),\n });\n this.update().then();\n };\n\n constructor(private fb: FormBuilder, private modalService: ModalService, public cacheService: CacheService) {\n super(cacheService);\n }\n\n ngOnInit() {\n }\n\n removeItem(key: string) {\n this.modalService.confirm('Are you sure you want to delete?').subscribe((res) => {\n if(res == true) {\n\n // this is only for storage keys in answer\n if(this.model?.initialAnswers?.length > 0) {\n let storageKeyIndex = this.model?.initialAnswers[0]?.fileStorageKeyList?.findIndex((item) => item == key);\n if(storageKeyIndex > -1) {\n this.model?.initialAnswers[0]?.fileUrls?.splice(storageKeyIndex, 1);\n this.model?.initialAnswers[0]?.fileStorageKeyList?.splice(storageKeyIndex, 1);\n\n let newAnswers = [];\n this.formGroup.controls['value'].value?.split('|').map((item) => {\n let matchedAnswer = item.split(':').find((iS) => iS == key);\n if(!matchedAnswer) {\n newAnswers.push(item);\n }\n });\n this.formGroup.controls['value'].setValue(newAnswers?.length > 0 ? newAnswers?.join(\"|\") : null);\n }\n\n try {\n window.atob(key);\n this.parsedInitialBase64AnswersJson = this.parsedInitialBase64AnswersJson.filter((bFile) => bFile.fileAsBase64 != key);\n this.formGroup.controls['value'].setValue(this.parsedInitialBase64AnswersJson?.length > 0 ? this.parsedInitialBase64AnswersJson.map((item) => item.fileAsBase64).join(\"|\") : null);\n } catch(e){}\n }\n\n this.parsedInitialBase64AnswersJson =\n this.parsedInitialBase64AnswersJson?.filter((item) => item.fileAsBase64 != key);\n\n if(!this.isEditMode) {\n let filteredOldValue = this.formGroup.controls['value'].value\n ?.split('|')?.filter((item) => item != key)?.join('|');\n this.formGroup.controls['value'].setValue(\n filteredOldValue != '' ? filteredOldValue : null,\n )\n }\n\n this.formGroup.controls['isNotModified'].setValue(false);\n\n this.cacheService.formControlDirtySubject.next({questionId: this.model?.question?.questionId});\n }\n });\n }\n\n onSelectFile(input, $event) {\n this.displayMimeTypeError = false;\n let sizeLimitInMB = this.model?.question.questionParametersAsString?.sizeLimitInMB;\n for (let index = 0; index < $event.target.files.length; index++) {\n const file = $event.target.files[index];\n\n switch(this.model?.question?.questionParametersAsString?.fileType) {\n case QuestionAnswerFileFormat.Image:\n if(!isValidImageFile(file.type)) {\n this.displayMimeTypeError = true;\n continue;\n }\n break;\n case QuestionAnswerFileFormat.PDF:\n if(!isValidPDFFile(file.type)) {\n this.displayMimeTypeError = true;\n continue;\n }\n break;\n }\n\n if (file.size > (sizeLimitInMB ?? MaxFileSize) * 1024000) {\n this.modalService.error(`Maximum File Size is ${sizeLimitInMB ?? MaxFileSize}mb`, \"\").subscribe(_ => {\n });\n $event.target.value = null;\n continue;\n }\n this.files.push(file);\n }\n\n this.update().then(_ => {});\n setTimeout(() => {\n this.clearForm(input);\n }, 100)\n this.cacheService.formControlDirtySubject.next({questionId: this.model?.question?.questionId});\n }\n\n remove(index) {\n this.files.splice(index, 1);\n this.update().then(_ => {});\n this.cacheService.formControlDirtySubject.next({questionId: this.model?.question?.questionId});\n }\n\n async update() {\n let fileBase64s = [];\n let extensions = [];\n for (let index = 0; index < this.files.length; index++) {\n const file = this.files[index];\n if (file == null) continue;\n let base64 = (await toBase64(file)) as string;\n base64 = base64.split(';base64,')[1];\n fileBase64s.push(base64);\n let ext = getFileExtenstion(file.name);\n extensions.push(ext);\n }\n if(this.model?.initialAnswers?.length > 0) {\n if(this.model?.initialAnswers[0]?.fileStorageKeyList?.length > 0)\n fileBase64s = [\n ...fileBase64s,\n ...this.model?.initialAnswers[0].answer.split(\"|\"), //?.fileStorageKeyList,\n ];\n }\n let uniqueBase64s = this.parsedInitialBase64AnswersJson.filter((item) => {\n for (const base64String of fileBase64s) {\n if(base64String == item.fileAsBase64) {\n return false;\n }\n }\n return true;\n });\n if(uniqueBase64s.length > 0) {\n fileBase64s = [\n ...fileBase64s,\n ...uniqueBase64s.map((item) => item.fileAsBase64)\n ]\n extensions = [\n ...extensions,\n ...uniqueBase64s.map((item) => item.fileExtension)\n ]\n }\n\n this.formGroup?.get('value').setValue(fileBase64s?.length > 0 ? fileBase64s.join(\"|\") : null);\n this.formGroup?.get('fileType').setValue(extensions.join(\"|\"));\n this.formGroup?.get('isNotModified').setValue(false);\n }\n\n clearForm(element) {\n element.value = \"\";\n }\n\n getAccept() {\n switch(this.model?.question?.questionParametersAsString?.fileType) {\n case QuestionAnswerFileFormat.Image:\n return this.validImageExtentions.join(\", \");\n case QuestionAnswerFileFormat.AnyFile:\n return '*/*';\n case QuestionAnswerFileFormat.PDF:\n return this.pdfMimeTypes.join(\", \");\n }\n return '*/*';\n }\n\n FileType = FileType;\n totalSize = 0;\n getTotalSize(files) {\n this.totalSize = 0;\n files.map((item) => this.totalSize += item.size);\n return fileSize(this.totalSize);\n }\n\n base64TotalSize = 0;\n getTotalBase64FileSize(files: UploadFileInfo[]) {\n this.base64TotalSize = 0;\n files?.map((item) => this.base64TotalSize += item.fileSize);\n return fileSize(this.base64TotalSize);\n }\n}\n","import { WHITE_ON_BLACK_CSS_CLASS } from '@angular/cdk/a11y/high-contrast-mode/high-contrast-mode-detector';\nimport { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport SignaturePad from 'signature_pad';\n\n@Component({\n selector: 'obc-signature-pad',\n templateUrl: './signature-pad.component.html',\n styleUrls: ['./signature-pad.component.scss']\n})\nexport class SignaturePadComponent implements OnInit {\n signaturePad: SignaturePad;\n\n @Output() onSave = new EventEmitter();\n\n constructor() { }\n\n ngOnInit(): void {\n var canvas = document.getElementById('signaturePad') as HTMLCanvasElement;\n this.signaturePad = new SignaturePad(canvas, {\n minWidth: 5,\n maxWidth: 10,\n //backgroundColor: 'white',\n //penColor: \"rgb(66, 133, 244)\"\n });\n canvas.width = canvas.offsetWidth;\n }\n\n clearPad() {\n this.signaturePad.clear();\n }\n savePad() {\n if (this.onSave)\n this.onSave.emit({ signatureAsPng: this.signaturePad.toDataURL().split(\",\")[1], signatureAsSvg: this.signaturePad.toDataURL(\"image/svg+xml\").split(\",\")[1] });\n }\n\n}\n\nexport class SignatureData {\n signatureAsPng: any;\n signatureAsSvg: any;\n}","
\n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n
","
\n
\n
\n
\n \n \n \n
\n\n
\n
\n\n \n \n
\n \n \n
\n
\n
\n
\n
\n
\n
\n\n\n \n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { SiteQuestionItemFormControl, SiteQuestionRendererViewModel } from \"../../../../models/site-question-viewmodel\";\nimport { FormBuilder, FormControl } from \"@angular/forms\";\nimport { ModalService } from \"../../../../services/modal.service\";\nimport { SignatureData } from \"../../../../custom-controls/signature-pad/signature-pad.component\";\nimport { QuestionRendererComponent } from '../question-renderer/question-renderer.component';\nimport { UploadFileInfo } from \"../../../../models/requiredDocumentAnswer\";\nimport { CacheService } from \"../../../../services/cache.service\";\n\n@Component({\n selector: 'obc-signature-pad-question-renderer',\n templateUrl: './signature-pad-question-renderer.component.html',\n styleUrls: ['./signature-pad-question-renderer.component.scss']\n})\nexport class SignaturePadQuestionRendererComponent extends QuestionRendererComponent implements OnInit {\n\n answer: string;\n base64FileExtension: string;\n isBase64Answer: boolean;\n parsedInitialBase64AnswersJson: UploadFileInfo[];\n \n files : File[]= [];\n @Input() set question(model: SiteQuestionRendererViewModel) {\n\n let initialAnswerValue: string;\n this.parsedInitialBase64AnswersJson = model.lastStateInitialFileAnswers ?? [];\n this.isBase64Answer = false;\n let initialAnswer = model.initialAnswers ? model.initialAnswers[0] : null;\n \n if(initialAnswer?.isBase64Answer) {\n this.parsedInitialBase64AnswersJson = [\n ...JSON.parse(initialAnswer.answer),\n ...this.parsedInitialBase64AnswersJson,\n ];\n }\n\n if(this.parsedInitialBase64AnswersJson?.length) {\n let initialAnswerValues: string[] = [];\n let initialAnswerFileTypes: string[] = [];\n this.parsedInitialBase64AnswersJson?.map((item) => {\n initialAnswerValues.push(item.fileAsBase64);\n initialAnswerFileTypes.push(item.fileExtension);\n });\n initialAnswerValue = initialAnswerValues[0];\n this.base64FileExtension = initialAnswerFileTypes[0];\n this.isBase64Answer = true;\n } else {\n initialAnswerValue = model.initialAnswers && model.initialAnswers?.length > 0 && model.initialAnswers[0]?.fileUrls?.length > 0 ? model.initialAnswers[0]?.fileUrls[0] : null;\n }\n this.answer = initialAnswerValue;\n this.model = model;\n this.formGroup = this.fb.group({\n value: new SiteQuestionItemFormControl(initialAnswerValue, null)\n });\n };\n\n constructor(private fb: FormBuilder, private modalService: ModalService, public cacheService: CacheService) {\n super(cacheService);\n }\n\n ngOnInit() {\n this.signaturePadController.setValue(this.answer);\n super.ngOnInit();\n }\n\n signaturePadController: FormControl = new FormControl(null);\n\n sign(signTemplate, formControl: FormControl) {\n this.signaturePadController = formControl;\n this.modalService.show(signTemplate);\n }\n\n removeSign() {\n this.signaturePadController.setValue(null);\n this.formGroup.get('value').setValue(null);\n }\n\n saveSign(signature: SignatureData) {\n this.signaturePadController.setValue('data:image/png;base64,'+ signature.signatureAsPng);\n this.signaturePadController.updateValueAndValidity();\n this.signaturePadController.setErrors(null);\n this.formGroup.get('value').setValue(signature.signatureAsPng);\n this.modalService?.hide();\n }\n\n displayBase64() {\n return 'data:image/' + this.base64FileExtension + ';base64,'+this.formGroup.controls.value.value;\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { SiteQuestionRendererViewModel } from \"../../../../models/site-question-viewmodel\";\n\n@Component({\n selector: 'obc-single-question-renderer',\n templateUrl: './single-question-renderer.component.html',\n styleUrls: ['./single-question-renderer.component.scss']\n})\nexport class SingleQuestionRendererComponent implements OnInit {\n\n QuestionType = QuestionType;\n\n @Output('onValueChanges') public valueChange = new EventEmitter();\n @Input() question: SiteQuestionRendererViewModel;\n @Input() tagged: number;\n @Input() isEditMode: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {}\n\n onValueChanges(value) {\n this.valueChange.emit(value);\n }\n}\n","
\n \n \n \n \n \n \n {{ann.title}} {{ ann.isActive ==\n true\n || ann.isActive == null ? '' :\n ' - disabled'}}\n \n \n \n \n \n \n {{ann.title}} {{ ann.isActive ==\n true\n || ann.isActive == null ? '' :\n ' - disabled'}}\n \n \n \n \n \n \n {{ann.title}} {{ ann.isActive ==\n true\n || ann.isActive == null ? '' :\n ' - disabled'}}\n \n \n \n \n \n \n {{ann.title}} {{ ann.isActive ==\n true\n || ann.isActive == null ? '' :\n ' - disabled'}}\n \n \n \n \n \n \n \n \n \n
\n\n\n
\n
\n

View Files

\n
\n \n
\n
\n
\n \n \n
\n
\n
\n\n\n \n \n \n \n\n \"image\"\n \n
\n \n \n
\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { OptionalMandatoryState } from 'src/app/enums/site-document-state.enum';\nimport { InternalAnnouncementVisitViewModel } from 'src/app/models/announcement-viewmodel';\nimport { AnonymousAnnouncementVisitModel, VisitStatus } from 'src/app/models/announcement-visit';\nimport { AnnouncementService } from 'src/app/services/announcement.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAnnouncementForceViewMode } from \"../../../enums/site-announcement-force-view-mode\";\n\n@Component({\n selector: 'obc-announcement-item-renderer',\n templateUrl: './announcement-item-renderer.component.html',\n styleUrls: ['./announcement-item-renderer.component.scss']\n})\nexport class AnnouncementItemRendererComponent implements OnInit {\n @Input() ann: InternalAnnouncementVisitViewModel;\n @Input() notifyVisits = true;\n @Input() anonymousAttendanceKey: string = null;\n @Input() largeButton: boolean = true;\n @Input() validateComponent: boolean = false;\n @Input() isSupplierAnnouncement: boolean = false;\n @Output() onAnnouncementVisit = new EventEmitter();\n AnnouncementType = FileType;\n optionalMandatoryState = OptionalMandatoryState;\n constructor(private announcementSertvice: AnnouncementService,\n private modalService: ModalService,\n private bsModalService: BsModalService\n ) { }\n ngOnInit() {\n }\n\n bsModalRef = null;\n @Output('onFileViewed') onFileViewed = new EventEmitter();\n FileType = FileType;\n\n fileHasContent(url, type) {\n let extension = url.split(/[#?]/)[0].split('.').pop().trim();\n var binaryFileTypesOpen = ['xls', 'xlsx', 'ppt', 'pptx', 'doc', 'docx'];\n return type == FileType.Pdf || type == FileType.Image ||\n (type == FileType.Binary && binaryFileTypesOpen.includes(extension));\n }\n\n onOpenFileViewer(template: any) {\n this.ann.viewed = true;\n this.onAnnouncementVisit.emit(this.ann.announcementId);\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-xl modal-full-width\",\n ignoreBackdropClick: false,\n })\n }\n\n onFileOpened(fileUrl: string) {\n this.onFileViewed.emit(fileUrl);\n }\n\n closeModal() {\n if (this.bsModalRef)\n this.bsModalRef.hide();\n }\n\n onClickAnnouncement() {\n this.ann.viewed = true;\n this.onAnnouncementVisit.emit(this.ann.announcementId);\n\n // TODO display text annoncement\n if (this.ann.type == FileType.Text)\n this.modalService.info(this.ann.data);\n\n // if (this.notifyVisits) {\n // var model = {\n // announcementId: this.ann.announcementId,\n // anonymousAttendanceKey: this.anonymousAttendanceKey,\n // visitStatus: VisitStatus.Full,\n // isSupplierAnnouncement: this.isSupplierAnnouncement ?? false,\n // } as AnonymousAnnouncementVisitModel;\n\n // this.announcementSertvice.NotifyAnonymousAnnouncementVisit(model)\n // .subscribe(res => {\n // if (!res) // expired key\n // {\n // this.modalService.error(\"your session key is expired, reloading page ...\");\n // setTimeout(() => {\n // window.location.reload();\n // }, 5000);\n // }\n // });\n // }\n }\n\n isAnnouncementMandatory(announcement) {\n return (announcement.state == SiteAnnouncementForceViewMode.MandatoryView ||\n announcement.state == SiteAnnouncementForceViewMode.SetPlaythroughToMandatory ||\n announcement.state == SiteAnnouncementForceViewMode.MandatoryViewAndSignOff\n )\n }\n}\n\n","export enum DocumentMultiImageMode {\n SingleImage = 0,\n FrontBack = 1,\n MultiImage = 2,\n}\n","
\n
\n
\n
\n
\n
\n
\n \n \n\n \n \n \n \n\n {{rdc.item?.documentType?.title}} \n (Front/Back)\n (Multi)\n\n \n
\n\n
1\">\n
\n Document Types:\n \n
\n
\n\n
\n \n
\n
\n
\n \n \"primitive\n \n \n \"primitive\n \n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n Title: \n {{ answer?.title ? answer?.title : '' }}\n
\n
\n Expire Date: \n {{ answer?.expireDate }}\n
\n
\n
\n
\n
0\">\n
\n
\n
\n \n \"primitive\n \n
\n
\n
\n
\n
\n
\n
0\">\n
\n \n \n
\n
\n
\n \"primitive\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n The type of the selected file is invalid\n
\n
\n
\n \n \n \n
\n
\n
\n \n
\n\n \n \n \n\n \n \n \n\n
\n
\n
Title
\n
\n \n
\n
\n
\n
Expire Date
\n
\n \n \n
\n
\n
\n
\n\n
\n
\n
\n\n\n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { MaxFileSize } from '../../../../enums/constants';\nimport { FormControl, Validators } from '@angular/forms';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { getFileExtenstion, isValidImageFile, toBase64 } from 'src/app/helpers/general-functions';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserDocumentType } from 'src/app/models/user-document-type';\nimport { DocumentMultiImageMode } from 'src/app/enums/document-multi-image-mode-enum';\nimport { RequiredDocumentAnswer, UploadFileInfo } from 'src/app/models/requiredDocumentAnswer';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { CacheService } from \"../../../../services/cache.service\";\nimport { FormService } from 'src/app/services/form.service';\nimport { ItemRendererDirtyControlsModel } from \"../../../../models/item-renderer-dirty-controls-model\";\n\n@Component({\n selector: 'obc-required-document-renderer',\n templateUrl: './required-document-renderer.component.html',\n styleUrls: ['./required-document-renderer.component.css'],\n})\nexport class RequiredDocumentRendererComponent implements OnInit {\n DatetimePickerMode = DatetimePickerMode;\n\n rdc: CustomFormControl;\n answer: RequiredDocumentAnswer;\n validImageExtentions = [\n '.png', '.jpg', '.jpeg'\n ];\n displayMimeTypeError: boolean = false;\n\n @Output() removeDocumentType = new EventEmitter();\n\n isRequiredDocument() {\n return this.rdc?.hasValidator(Validators.required)\n }\n\n @Input() set control(model: CustomFormControl) {\n this.rdc = model;\n if (this.rdc?.item?.documentType)\n this.rdc.item.documentType.minExpiryDate = new Date(this.rdc?.item?.documentType?.minExpiryDate);\n this.answer = {\n documentTypeId: model.item?.documentType?.id,\n filaAsBase64: model.item?.initialAnswer?.filaAsBase64,\n fileType: model.item?.initialAnswer?.fileType,\n additionalFiles: model.item?.initialAnswer?.additionalFiles ?? [],\n additionalFileUrls: model.item?.initialAnswer?.additionalFileUrls ?? [],\n expireDate: model.item?.initialAnswer?.expireDate,\n title: model.item?.initialAnswer?.title,\n inductionId: model.item?.inductionId,\n questionId: model.item?.questionId,\n minExpiryDate: model.item?.documentType?.minExpiryDate,\n }\n // if (this.type.multiImageMode == DocumentMultiImageMode.FrontBack) {\n // this.addAditionalFile();\n // }\n }\n\n documentMultiImageModes = DocumentMultiImageMode;\n\n get type(): UserDocumentType {\n return this.rdc?.item?.documentType as UserDocumentType;\n };\n\n constructor(private modalService: ModalService, private formService: FormService, private cacheService: CacheService) {\n }\n\n documentTypeSelectorOldId: number;\n ngOnInit() {\n if (this.rdc?.item?.question?.documentTypeId) {\n this.documentTypesSelector.setValue(this.answer.documentTypeId);\n this.documentTypeSelectorOldId = this.answer.documentTypeId;\n }\n }\n\n async onSelectRequiredDocumentFile($event, formControl: FormControl, isAdditionalFile: boolean = false) {\n this.confirmChanges(async () => {\n this.displayMimeTypeError = false;\n\n let file = $event.target.files[0];\n if (!isValidImageFile(file.type)) {\n this.displayMimeTypeError = true;\n this.answer.filaAsBase64 = null;\n this.answer.fileType = null;\n this.rdc.setValue(this.validateAnswer() ? this.answer : null);\n return;\n }\n\n let fileInfo = await this.getFileInfo(file);\n if (fileInfo == null) {\n $event.target.value = null;\n return;\n } else {\n if (!isAdditionalFile) {\n this.answer.filaAsBase64 = fileInfo.base64;\n this.answer.fileType = fileInfo.fileType;\n } else {\n let additionalFile = {\n fileAsBase64: fileInfo.base64,\n fileExtension: fileInfo.fileType,\n fileSize: file.size,\n } as UploadFileInfo;\n\n this.answer.additionalFiles.push(additionalFile);\n $event.target.value = \"\";\n }\n // validate files\n if (await this.validateAnswer()) {\n this.rdc.setValue(this.answer);\n this.formService.isFormDirty.next(true);\n this.rdc.item.isDirty = true;\n }\n else\n this.rdc.setValue(null);\n }\n this.triggerDirtyListener();\n })\n }\n\n updateAnswerTitle(event: any) {\n this.confirmChanges(() => {\n this.answer.title = event.target.value;\n this.rdc.setValue(this.answer);\n this.triggerDirtyListener();\n })\n }\n\n updateAnswerExpireDate(event: any) {\n this.confirmChanges(() => {\n this.answer.expireDate = event;\n this.rdc.setValue(this.answer);\n this.triggerDirtyListener();\n })\n }\n\n get isDocumentComponentValid(): boolean {\n if (this.rdc.item?.initialAnswer != null && this.rdc.item?.isDirty != true) return true;\n let valid = this.rdc.valid && this.isAdditionalFilesAreValid;\n if (valid === false) return false;\n\n if (this.answer?.additionalFiles?.find(i => i.fileAsBase64 != null))\n return this.rdc.value != null;\n return true;\n }\n\n get isAdditionalFilesAreValid() {\n if (this.answer?.additionalFiles == null || this.answer?.additionalFiles?.length == 0) return true;\n return this.answer?.additionalFiles?.find(i => i.fileAsBase64 == null) == null;\n }\n\n private validateAnswer() {\n if (!this.answer?.filaAsBase64)\n return false;\n\n if (!this.answer?.documentTypeId)\n return false;\n\n if (this.answer?.additionalFiles?.length)\n for (let index = 0; index < this.answer?.additionalFiles?.length; index++) {\n const element = this.answer?.additionalFiles[index];\n if (!element.fileAsBase64)\n return false;\n }\n return true;\n }\n\n private async getFileInfo(file) {\n if (file.size > MaxFileSize * 1024000) {\n this.modalService.error(`Maximum File Size is ${MaxFileSize}mb`, \"\").subscribe(_ => {\n //alert('Maximum File Size is 5mb');\n });\n\n return null;\n }\n let base64 = (await toBase64(file)) as string;\n base64 = base64.split(';base64,')[1];\n\n let fileType = getFileExtenstion(file.name);\n return { base64: base64, fileType: fileType };\n }\n\n clearWithConfirm(additionalFile?: UploadFileInfo) {\n this.modalService.confirm(\"Are you sure you want to delete the file?\").subscribe((res) => {\n if (res) {\n this.clearForm(additionalFile);\n }\n });\n }\n\n clearForm(additionalFile?: UploadFileInfo) {\n if (additionalFile == null) {\n this.answer.filaAsBase64 = null;\n this.answer.fileType = null;\n } else {\n this.removeAdditionalFile(additionalFile);\n }\n\n this.rdc.setValue(this.validateAnswer() ? this.answer : null);\n this.triggerDirtyListener();\n }\n\n removeAdditionalFile(additionalFile: UploadFileInfo) {\n this.answer.additionalFiles.splice(this.answer.additionalFiles.indexOf(additionalFile), 1);\n this.triggerDirtyListener();\n }\n\n onRemoveDocumentType(documentType: UserDocumentType) {\n this.modalService.confirm(\"Are You Sure?\", `Delete ${documentType.title}`).subscribe(result => {\n if (result) {\n this.removeDocumentType.emit(documentType);\n this.triggerDirtyListener();\n }\n })\n }\n\n confirmChanges(fn, cancelFn?) {\n if (this.rdc?.item?.initialAnswer) {\n if (this.rdc.item.isDirty != true) {\n this.modalService.confirm(\"Are you sure you want to upload a new document?\").subscribe((res) => {\n if (res === true) {\n this.rdc.item.isDirty = true;\n this.rdc.item.initialAnswer = null;\n this.answer = this.emptyAnswer();\n fn();\n } else if (res === false) {\n if (cancelFn)\n cancelFn();\n }\n });\n } else {\n fn();\n }\n } else {\n fn();\n }\n }\n\n documentTypesSelector: FormControl = new FormControl();\n onSelectedDocumentType(event) {\n this.confirmChanges(() => {\n this.answer = this.emptyAnswer();\n this.answer.documentTypeId = parseInt(event.target.value);\n this.rdc.item.documentType = this.rdc.item?.documentTypes.find(x => x.id == this.answer.documentTypeId);\n this.rdc.item.documentType.minExpiryDate = this.rdc?.item?.documentType?.minExpiryDate ? new Date(this.rdc?.item?.documentType?.minExpiryDate) : null;\n this.rdc.setValue(this.answer);\n this.rdc.item.initialAnswer = null;\n this.clearForm(null)\n }, () => {\n this.documentTypesSelector.setValue(this.documentTypeSelectorOldId, { emitEvent: false });\n })\n }\n\n displayInitialAnswerSrc() {\n if (this.answer?.filaAsBase64) {\n return 'data:image/' + this.answer?.fileType + ';base64,' + this.answer?.filaAsBase64;\n } else if (this.rdc?.item?.initialAnswer?.fileUrl) {\n return this.rdc?.item?.initialAnswer?.fileUrl;\n }\n return null;\n }\n displayAdditionalFile(file: UploadFileInfo) {\n if (file.fileAsBase64) {\n return 'data:image/' + file.fileExtension + ';base64,' + file.fileAsBase64;\n }\n }\n\n emptyAnswer() {\n return {\n documentTypeId: this.answer.documentTypeId,\n filaAsBase64: null,\n fileType: null,\n additionalFiles: [],\n additionalFileUrls: [],\n minExpiryDate: null,\n userDocumentId: null,\n inductionId: this.answer.inductionId,\n questionId: this.answer.questionId,\n } as RequiredDocumentAnswer;\n }\n\n triggerDirtyListener() {\n this.cacheService.formControlDirtySubject.next({\n questionId: this.answer.questionId,\n documentTypeId: this.answer.documentTypeId\n } as ItemRendererDirtyControlsModel);\n }\n}\n","
\n
\n \n \n
\n\n
\n
\n
\n {{item.groupName == null ? \"Announcement\" : item.groupName}}\n
\n
0\">\n \n
\n \n \n
\n
\n
\n
0\">\n \n
\n \n \n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n\n
\n
0\" class=\"mt-2 mb-4\">\n \n
\n
\n\n
\n\n\n\n\n
\n
\n Additional Document\n
\n
\n
0\" class=\"d-flex flex-column\">\n \n \n \n
\n
\n There is no document type available to add\n
\n
\n
\n
","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {SiteQuestionsViewModel} from \"../../models/sitequestion-viewmodel\";\nimport {CustomFormControl} from \"../../models/custom-formcontrol\";\nimport {BehaviorSubject} from \"rxjs\";\nimport {SiteAttendanceQuestionAnswer} from \"../../models/attendance-request/site-attendance-question-answer\";\nimport {SiteQuestionRendererViewModel, SiteQuestionViewModel} from \"../../models/site-question-viewmodel\";\nimport {QuestionType} from \"../../enums/question-type\";\nimport {\n approximateFileSizeFromBase64String,\n getMimeTypeFromExtension,\n isQuestionIsVisibleByCheckingConditions\n} from 'src/app/helpers/general-functions';\nimport {\n BaseSiteAnnouncementViewModel,\n InternalAnnouncementVisitViewModel\n} from 'src/app/models/announcement-viewmodel';\nimport { UserDocumentType } from \"../../models/user-document-type\";\nimport { AdditionalDocumentConfig } from \"../../models/induction-viewmodel\";\nimport { ModalService } from \"../../services/modal.service\";\nimport { FormService } from 'src/app/services/form.service';\nimport {SiteAttendanceInductionViewModel} from \"../../models/site-attendance-induction-view-model\";\nimport {FormArray} from \"@angular/forms\";\nimport {FilledFormInfoViewModel} from \"../../models/filled-form-info-view-model\";\nimport {DocumentViewModel} from \"../../models/document-viewmodel\";\nimport {EmergencyContactViewModel} from 'src/app/models/emergency-contact-view-model';\nimport {UploadFileInfo} from \"../../models/requiredDocumentAnswer\";\nimport {SiteQuestionAnswerViewModel} from \"../../models/site_question_answer_view_model\";\nimport {CacheService} from \"../../services/cache.service\";\nimport {ItemRendererDirtyControlsModel} from \"../../models/item-renderer-dirty-controls-model\";\n\n@Component({\n selector: 'obc-items-renderer',\n templateUrl: './items-renderer.component.html',\n styleUrls: [ './items-renderer.component.scss' ]\n})\nexport class ItemsRendererComponent implements OnInit {\n\n SiteQuestionsViewModel = SiteQuestionsViewModel;\n\n additionalDocumentConfig: AdditionalDocumentConfig;\n availableDocumentTypes: UserDocumentType[] = [];\n allUserDocumentTypes: UserDocumentType[] = [];\n\n announcements: InternalAnnouncementVisitViewModel[] = [];\n checkinAnnouncements: BaseSiteAnnouncementViewModel[] = [];\n documents: CustomFormControl[] = [];\n questions: SiteQuestionRendererViewModel[] = [];\n\n /*Induction Inputs*/\n notifyVisits = false;\n anonymousAttendanceKey = null;\n @Input() largeButton = true;\n @Output() onAnnouncementVisit = new EventEmitter();\n @Output() onCheckedMandatorySignOff = new EventEmitter();\n @Output() removeDocumentType = new EventEmitter();\n @Output() addAdditionalDocumentToDocumentTypesOutput = new EventEmitter();\n\n\n // any means following types:\n // Questions: SiteQuestionRendererViewModel\n // Documents: item.item => UserDocumentType\n items: any[] = [];\n\n induction: SiteAttendanceInductionViewModel;\n constructor(private modalService: ModalService, private formService: FormService, private cacheService: CacheService) {\n }\n\n cacheServiceDirtyItemsListener;\n rendererDirtyItems: ItemRendererDirtyControlsModel[] = [];\n ngOnInit(): void {\n this.cacheServiceDirtyItemsListener = this.cacheService.formControlDirtySubject?.asObservable().subscribe(item => {\n if(!this.isInDirtyRendererItems(item))\n this.rendererDirtyItems.push(item);\n })\n }\n ngOnDestroy() {\n this.cacheServiceDirtyItemsListener?.unsubscribe();\n }\n\n init() {\n\n if (this.availableDocumentTypes?.length > 0)\n this.selectedDocumentTypeId = this.availableDocumentTypes[0].id;\n\n let tmpArrayItems: any[] = [ ...this.questions, ...this.announcements, ...this.checkinAnnouncements, ...this.documents ];\n if (this.additionalDocumentConfig)\n tmpArrayItems.push(this.additionalDocumentConfig);\n\n tmpArrayItems.sort(function (a, b) {\n let a_order, b_order;\n if (a.question) a_order = a.question.displayOrder;\n if (a.allowUsersToAttachAdditionalDocuments) a_order = a.order;\n if (a.announcementId) a_order = a.order;\n else if (a.item) a_order = a.item.displayOrder;\n\n if (b.question) b_order = b.question.displayOrder;\n if (b.allowUsersToAttachAdditionalDocuments) b_order = b.order;\n if (b.announcementId) b_order = b.order;\n else if (b.item) b_order = b.item.displayOrder;\n\n return a_order > b_order ? 1 : a_order < b_order ? -1 : 0\n });\n\n let groupList = {announcements: [], groupName: null, isAnnouncementGroup: true};\n\n this.items = tmpArrayItems.map(function (item, index) {\n if (item.question || item.item || item.allowUsersToAttachAdditionalDocuments) {\n return item;\n } else if (item.announcementId) {\n if (groupList.announcements.includes(item))\n return null;\n\n groupList.groupName = item.groupName;\n groupList.announcements = [];\n for (let i = index; i <= tmpArrayItems.length - 1; i++) {\n let innerItem = tmpArrayItems[i];\n if (innerItem.announcementId && innerItem.groupName == item.groupName)\n groupList.announcements.push(innerItem);\n else\n break;\n }\n return Object.assign({}, groupList);\n }\n }).filter(item => item != null);\n }\n\n _validation$ = new BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[], isUpdatingByUser?: boolean }>({\n valid: false,\n answers: []\n });\n\n isEditMode: boolean = false;\n\n @Input() set questionsData(model: {\n induction: SiteAttendanceInductionViewModel,\n questions: SiteQuestionViewModel[],\n draftFilledForm: FilledFormInfoViewModel,\n documents: CustomFormControl[],\n documentsFormArray: FormArray,\n announcements: InternalAnnouncementVisitViewModel[],\n checkinAnnouncements: BaseSiteAnnouncementViewModel[],\n notifyVisits: boolean,\n anonymousAttendanceKey: string,\n validator$: BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[] }>,\n additionalDocumentConfig: AdditionalDocumentConfig,\n availableDocumentTypes: UserDocumentType[],\n allUserDocumentTypes: UserDocumentType[],\n }) {\n if(model.draftFilledForm != null) {\n this.isEditMode = model.draftFilledForm?.formDataId && model.draftFilledForm?.formDataId > 0;\n }\n\n if (model.questions) {\n let qs = model.questions.map(x => {\n let qm = new SiteQuestionRendererViewModel();\n qm.formGroup = null;\n qm.question = new SiteQuestionViewModel(x);\n\n let answers = model.draftFilledForm?.questionAnswers?.filter(e => e.questionId == qm.question?.questionId\n && e.documentTypeId == qm.question?.document?.documentType?.id,\n );\n \n let lastStateAnswer = model?.validator$?.value?.answers?.find((item) => item.questionId == qm.question?.questionId);\n if(model.induction) {\n lastStateAnswer = model.induction?.answers?.answers?.questions?.find((item) => item.questionId == qm.question?.questionId);\n }\n if(lastStateAnswer && lastStateAnswer.answer?.length > 0) {\n let finalAnswer = {\n questionId: qm.question?.questionId,\n inductionId: model.induction?.induction?.id,\n documentTypeId: qm.question?.documentTypeId,\n answer: \"\",\n isBase64Answer: false\n } as SiteQuestionAnswerViewModel;\n if(answers) {\n finalAnswer = { ...answers[0] };\n }\n finalAnswer.isBase64Answer = false;\n finalAnswer.answer = lastStateAnswer.answer;\n \n let pipeSplitAnswer = lastStateAnswer?.answer?.split(\"|\");\n let pipeSplitExtensions = lastStateAnswer?.fileType?.split(\"|\");\n if(pipeSplitAnswer && pipeSplitAnswer.length > 0) {\n let base64Answers = [];\n for (let i = 0; i < pipeSplitAnswer.length; i++) {\n try {\n window.atob(pipeSplitAnswer[i]);\n let mimeType = getMimeTypeFromExtension(pipeSplitExtensions[i]);\n if(pipeSplitExtensions[i] && pipeSplitAnswer[i]) {\n base64Answers.push({\n fileExtension: pipeSplitExtensions[i],\n fileAsBase64: pipeSplitAnswer[i],\n fileSize: approximateFileSizeFromBase64String(`data:${mimeType};base64,${pipeSplitAnswer[i]}`)\n } as UploadFileInfo);\n }\n } catch(e) {}\n }\n if(base64Answers.length) {\n qm.lastStateInitialFileAnswers = base64Answers;\n }\n }\n answers = [finalAnswer];\n if (answers.length > 0)\n qm.initialAnswers = [ ...answers ];\n } else {\n if(!this.isInDirtyRendererItems({questionId: qm.question?.questionId})) {\n if (answers && answers.length > 0)\n qm.initialAnswers = [ ...answers ];\n }\n }\n return qm;\n });\n\n this.updateQuestionShowFlags(qs, []);\n this.questions = qs;\n this._validation$ = model.validator$;\n this.onValueChanges();\n }\n\n if (model.documents) {\n model.documents.map(docController => {\n let answer: DocumentViewModel;\n if(!this.isInDirtyRendererItems({documentTypeId: docController.item?.documentType?.id})) {\n answer = model.draftFilledForm?.documents?.find(e => e.documentTypeId == docController.item?.documentType?.id);\n }\n if (answer)\n docController.item.initialAnswer = answer;\n \n let sourceDocuments = this.documents;\n if(model.induction) {\n sourceDocuments = model.induction?.answers?.answers?.documents;\n }\n let lastStateAnswer = sourceDocuments?.find((control) => {\n return (control as CustomFormControl).item?.documentType?.id == docController.item?.documentType?.id });\n \n if(lastStateAnswer && lastStateAnswer.value) {\n docController.item.initialAnswer = lastStateAnswer.value;\n docController.setValue(lastStateAnswer?.value);\n }\n });\n\n // attach initial answer to document form control field of question documents.\n model.questions?.map(questionDocument => {\n let answer: DocumentViewModel;\n \n let sourceDocuments = model.documentsFormArray?.controls;\n if(model.induction) {\n if(questionDocument.documentFormControl)\n sourceDocuments = [questionDocument.documentFormControl];\n else\n sourceDocuments = [];\n }\n let lastStateAnswer = sourceDocuments?.find((control) => {\n let relatedDoc = (control as CustomFormControl).item.documentTypes?.find((controlDoc) => \n controlDoc.id == questionDocument.documentFormControl?.item?.documentType?.id);\n if(relatedDoc && (control as CustomFormControl).item?.questionId == questionDocument.questionId)\n return control;\n return null;\n });\n\n if(lastStateAnswer?.value) {\n answer = lastStateAnswer?.value;\n } else {\n if (!this.isInDirtyRendererItems({\n questionId: questionDocument.questionId,\n documentTypeId: questionDocument.documentFormControl?.item?.documentType?.id\n })) {\n let result = model.draftFilledForm?.questionAnswers?.find(e => e.documentTypeId == questionDocument.documentFormControl?.item?.documentType?.id\n && e.questionId == questionDocument.documentFormControl?.item?.question?.questionId,\n );\n\n if (result) {\n let cloneFileUrls = [...result.fileUrls];\n cloneFileUrls.shift();\n answer = {\n additionalFileUrls: cloneFileUrls,\n documentTypeId: result.documentTypeId,\n userDocumentId: result.userDocumentId,\n expireDate: result.documentExpireDate,\n documentTitle: result.documentTitle,\n documentTypeTitle: result.documentTypeTitle,\n fileUrl: result.fileUrls != null && result.fileUrls.length > 0 ? result.fileUrls[0] : null,\n } as DocumentViewModel;\n }\n }\n }\n if (answer && questionDocument.documentFormControl)\n questionDocument.documentFormControl.item.initialAnswer = answer;\n });\n }\n\n this.induction = model.induction ?? null;\n this.documents = model.documents ?? [];\n this.announcements = model.announcements ?? [];\n this.checkinAnnouncements = model.checkinAnnouncements ?? [];\n this.notifyVisits = model.notifyVisits ?? false;\n this.anonymousAttendanceKey = model.anonymousAttendanceKey ?? null;\n this.additionalDocumentConfig = model.additionalDocumentConfig ?? null;\n this.availableDocumentTypes = model.availableDocumentTypes ?? [];\n this.allUserDocumentTypes = model.allUserDocumentTypes ?? [];\n\n model.documentsFormArray?.valueChanges?.subscribe(_ => {\n this.onValueChanges(1);\n });\n\n this.init();\n }\n\n\n _clearDocumentQuestionsByFlag() {\n this.questions?.forEach(question => {\n if (!question.showFlagLastState) {\n question?.question?.documentFormControl?.setValue(null);\n }\n });\n }\n isInDirtyRendererItems(newItem: ItemRendererDirtyControlsModel) {\n return this.rendererDirtyItems?.find((dirtyItem) => dirtyItem.questionId == newItem.questionId && dirtyItem.documentTypeId == newItem.documentTypeId)\n }\n \n onValueChanges(isRefresh = 0) {\n if (this.questions == null) return;\n if (this._validation$ != null) {\n\n let answers: SiteAttendanceQuestionAnswer[] = [];\n for (let i = 0; i < this.questions.length; i++) {\n let initialAnswers = this.questions[i]?.initialAnswers;\n let storageKeyList = initialAnswers != null && initialAnswers.length > 0 ? initialAnswers[0]?.fileStorageKeyList : [];\n let isNotModified = false;\n\n if (this.questions[i].showFlagLastState &&\n (this.questions[i].answers != null && this.questions[i].answers.length) > 0 || \n (this.questions[i].answers === true || this.questions[i].answers === false) || \n this.questions[i].answers instanceof Date ||\n this.questions[i].answers instanceof EmergencyContactViewModel) {\n let answer = \"\";\n let fileType = \"\";\n if (this.questions[i].question.questionType == QuestionType.SingleSelect || this.questions[i].question.questionType == QuestionType.Text)\n answer = this.questions[i].answers;\n else if (this.questions[i].question.questionType == QuestionType.File) {\n answer = this.questions[i].answers;\n fileType = this.questions[i].fileType;\n isNotModified = this.questions[i]?.isNotModified;\n } else if (this.questions[i].question.questionType == QuestionType.SignaturePad) {\n answer = this.questions[i].answers;\n fileType = 'png';\n } else if (this.questions[i].question.questionType == QuestionType.Boolean) {\n answer = this.questions[i].answers ? \"Yes\" : \"No\";\n } else if (this.questions[i].question.questionType == QuestionType.Date) {\n try {\n answer = this.questions[i].answers ? this.questions[i]?.answers?.toISOString() : null;\n } catch(e) {\n answer = null;\n }\n } else if (this.questions[i].question.questionType == QuestionType.MultiSelect) {\n answer = (this.questions[i].answers as []).join(',')\n } else {\n answer = JSON.stringify(this.questions[i].answers);\n }\n\n if (this.questions[i].question?.questionType == QuestionType.SignaturePad) {\n try {\n // check if answer is base64 or not. if base64, empty storage key list\n window.atob(answer);\n storageKeyList = [];\n } catch (e) {\n if (storageKeyList.length > 1)\n storageKeyList = [ storageKeyList[0] ];\n }\n }\n\n answers.push({\n questionId: this.questions[i].question.questionId,\n isNotModified: isNotModified,\n answer: answer, fileType: fileType,\n notModifiedStorageKeyList: storageKeyList,\n });\n this.formService.isFormDirty.next(true);\n }\n }\n\n let finalAnswers = this.updateQuestionShowFlags(this.questions, answers);\n let valid = this.validate();\n \n // isUpdatingByUser is only used for inductions. to detect auto emits and keep induction answers when induction is reset. \n // by additional document or remove document\n this._validation$.next({valid: valid, answers: finalAnswers, isUpdatingByUser: true});\n\n if (!isRefresh) {\n setTimeout(() => {\n this.onValueChanges(1);\n this._clearDocumentQuestionsByFlag();\n }, 500);\n }\n }\n\n }\n\n // private getQuestion(questionId: number): SiteQuestionRendererViewModel {\n // if (this.questions)\n // return this.questions.find(x => x.question.questionId == questionId);\n // }\n\n\n updateQuestionShowFlags(questions: SiteQuestionRendererViewModel[], answers: SiteAttendanceQuestionAnswer[]): SiteAttendanceQuestionAnswer[] {\n if (!questions?.length) return;\n if (!answers) answers = [];\n let exit = true;\n do {\n exit = true;\n for (let i = 0; i < questions.length; i++) {\n let ret = this.getQuestionShowFlag(questions[i], answers);\n questions[i].showFlagLastState = ret;\n if (!ret) {\n let ans = answers.find(x => x.questionId == questions[i].question.questionId);\n if (ans) {\n let index = answers.indexOf(ans);\n answers.splice(index, 1);\n exit = false;\n break;\n }\n }\n }\n } while (!exit);\n return answers;\n }\n\n getQuestionShowFlag(question: SiteQuestionRendererViewModel, answers: SiteAttendanceQuestionAnswer[]): boolean {\n return isQuestionIsVisibleByCheckingConditions(question.question,\n this.questions?.map(q => q.question),\n answers);\n }\n\n private validate(): boolean {\n for (let index = 0; index < this.questions?.length; index++) {\n if (this.questions[index]?.showFlagLastState && (\n (this.questions[index]?.question?.document == null && this.questions[index]?.valid != true) ||\n (this.questions[index]?.question?.document != null &&\n (\n (!this.isEditMode && this.questions[index]?.question?.documentFormControl?.valid != true) ||\n (this.isEditMode && !this.questions[index]?.initialAnswers && this.questions[index]?.question?.documentFormControl?.valid != true) ||\n (this.isEditMode && this.questions[index]?.initialAnswers && this.questions[index]?.question?.documentFormControl?.item?.isDirty == true && this.questions[index]?.question?.documentFormControl?.valid != true)\n )\n )\n ))\n return false;\n }\n return true;\n }\n\n callOnAnnouncementVisitEvent(announcementId: number) {\n this.onAnnouncementVisit.emit(announcementId);\n }\n\n callOnAnnouncementCheckedMandatorySignOffEvent(announcementId: number) {\n this.onCheckedMandatorySignOff.emit(announcementId);\n }\n\n onClickAdditionalDocumentButton(template: any) {\n this.modalService.show(template);\n }\n\n\n selectedDocumentTypeId: number;\n\n onAddAdditionalDocumentToDocuments() {\n if (this.selectedDocumentTypeId) {\n let selectedDocument = this.allUserDocumentTypes?.find(item => item.id == this.selectedDocumentTypeId);\n if (selectedDocument) {\n this.formService.isFormDirty.next(true);\n this.addAdditionalDocumentToDocumentTypesOutput.emit(selectedDocument);\n }\n this.selectedDocumentTypeId = null;\n }\n this.modalService.hide();\n }\n\n onRemoveAdditionalDocumentType(documentType: UserDocumentType) {\n this.removeDocumentType.emit(documentType);\n }\n\n}\n","
\n
\n
\n
\n \n \n \n \n
\n \n \n
\n
\n \n
\n
\n

Selected date is in the past.

\n
\n
\n
\n
\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { VariableDefinitionMode, VariableDefinitionType, VariableValueDefinition } from 'src/app/models/workflow/variable-difinition';\nimport { WorkflowInfoViewModel } from 'src/app/models/workflow/workflow-info-viewmodel';\n\n@Component({\n selector: 'obc-workflow-form-renderer',\n templateUrl: './workflow-form-renderer.component.html',\n styleUrls: ['./workflow-form-renderer.component.scss']\n})\nexport class WorkflowFormRendererComponent implements OnInit {\n @Input() workflowModel: WorkflowInfoViewModel;\n currentDate: Date = new Date();\n selectedDate: Date;\n isPastDate: boolean = false;\n\n workflowVariables: VariableValueDefinition[];\n\n VariableDefinitionType = VariableDefinitionType;\n DatetimePickerMode = DatetimePickerMode;\n\n constructor() { }\n\n ngOnInit(): void {\n\n if (this.workflowModel?.currentActivity?.variableList?.length) {\n this.workflowVariables = this.workflowModel?.currentActivity?.variableList;\n for (let variable of this.workflowVariables) {\n this.workflowModel.variableFormGroup.registerControl(variable.key, new FormControl(variable.value, variable.mode == VariableDefinitionMode.Mandatory ? [Validators.required] : []));\n\n this.workflowModel.variableFormGroup.controls[variable.key].valueChanges.subscribe(_ => {\n var dateValue = this.workflowModel.variableFormGroup.controls[variable.key].value;\n this.selectedDate = (dateValue?.length ?? 0) ? null : new Date(dateValue);\n this.isPastDate = this.selectedDate && this.selectedDate < this.currentDate;\n });\n }\n }\n }\n checkVariableDateValueIsPast(variable: VariableValueDefinition) {\n return variable?.type == VariableDefinitionType.Date &&\n this.workflowModel?.variableFormGroup?.controls[variable.key]?.value &&\n this.isPastDate\n }\n}\n","export enum PermitScheduleType {\n Date = 0,\n WeekDay = 1\n}\n","\nexport enum DayOfWeek {\n Sunday = 0,\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3,\n Thursday = 4,\n Friday = 5,\n Saturday = 6,\n}\n","import { WeekDay } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberToWeekday'\n})\nexport class NumberToWeekdayPipe implements PipeTransform {\n\n transform(value: number): string {\n if (value == WeekDay.Sunday) return 'Sunday';\n if (value == WeekDay.Monday) return 'Monday';\n if (value == WeekDay.Tuesday) return 'Tuesday';\n if (value == WeekDay.Wednesday) return 'Wednesday';\n if (value == WeekDay.Thursday) return 'Thursday';\n if (value == WeekDay.Friday) return 'Friday';\n if (value == WeekDay.Saturday) return 'Saturday';\n return value?.toString() ?? '?';\n }\n}\n","
\n
\n
\n
\n {{ permitSchedule?.dateTime | date }}\n
\n
\n {{ permitSchedule?.weekDay | numberToWeekday }}\n
\n
\n
\n
\n \n From: {{ permitSchedule?.fromHour }} - To: {{ permitSchedule?.toHour }}\n
\n
\n
\n \n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { DayOfWeek } from '../../../enums/DaysOfWeek';\nimport { PermitScheduleModel } from \"../../../models/form/permits-info-model\";\n\n@Component({\n selector: 'obc-permit-schedule-item',\n templateUrl: './permit-schedule-item.component.html',\n styleUrls: ['./permit-schedule-item.component.scss'],\n})\nexport class PermitScheduleItemComponent implements OnInit {\n @Input() permitSchedule: PermitScheduleModel;\n @Output() remove = new EventEmitter();\n\n daysOfWeek = DayOfWeek;\n\n constructor() {}\n\n ngOnInit(): void {\n }\n\n onRemove() {\n this.remove.emit(this.permitSchedule);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DayOfWeek } from \"../enums/DaysOfWeek\";\n\n@Pipe({\n name: 'daysOfWeek'\n})\nexport class DaysOfWeekPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): unknown {\n if (value === DayOfWeek.Sunday) return \"Sunday\";\n if (value === DayOfWeek.Monday) return \"Monday\";\n if (value === DayOfWeek.Tuesday) return \"Tuesday\";\n if (value === DayOfWeek.Wednesday) return \"Wednesday\";\n if (value === DayOfWeek.Thursday) return \"Thursday\";\n if (value === DayOfWeek.Friday) return \"Friday\";\n if (value === DayOfWeek.Saturday) return \"Saturday\";\n return value?.toString();\n }\n\n}\n","\n
\n
\n \n \n
\n
\n
\n
\n \n
\n\n\n
\n
\n
\n
\n\n
\n
\n \n Day of Week\n Date\n
\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n\n
\n
\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from \"@angular/forms\";\nimport { PermitScheduleModel } from \"../../models/form/permits-info-model\";\nimport { PermitScheduleType } from \"../../enums/permit-schedule-type\";\nimport { DayOfWeek } from \"../../enums/DaysOfWeek\";\nimport { FormDataViewModel } from \"../../models/form/form-data-view-model\";\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\nimport { ModalService } from \"../../services/modal.service\";\nimport { prependZero } from \"../../helpers/general-functions\";\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\n\n@Component({\n selector: 'obc-permit-schedule-selector',\n templateUrl: './permit-schedule-selector.component.html',\n styleUrls: ['./permit-schedule-selector.component.scss']\n})\nexport class PermitScheduleSelectorComponent implements OnInit {\n datetimePickerMode = DatetimePickerMode;\n formGroup: FormGroup = new FormGroup({\n weekDay: new FormControl(1, [Validators.required]),\n dateTime: new FormControl(new Date()),\n fromHour: new FormControl(null),\n toHour: new FormControl(null),\n });\n\n @Input() form: FormDataViewModel;\n\n @Output() validateRes = new EventEmitter();\n @Output() permitSchedulesOutput = new EventEmitter();\n\n\n _permitSchedules: PermitScheduleModel[] = [];\n\n @Input() set permitSchedules(value: PermitScheduleModel[]) {\n if (value != null)\n this._permitSchedules = value;\n }\n get permitSchedules() {\n return this._permitSchedules;\n }\n\n permitScheduleType: PermitScheduleType = PermitScheduleType.WeekDay;\n PermitScheduleTypeEnum = PermitScheduleType;\n\n daysOfWeek = DayOfWeek;\n\n constructor(private bsModalService: BsModalService, private modalService: ModalService,) {\n }\n\n ngOnInit(): void {\n this.formGroup?.controls['fromHour']?.valueChanges?.subscribe((_) => {\n this.updateFromTime();\n });\n this.formGroup?.controls['toHour']?.valueChanges?.subscribe((_) => {\n this.updateToTime();\n });\n }\n\n bsAddScheduleModalRef: BsModalRef;\n\n addSchedule(template) {\n this.bsAddScheduleModalRef = this.bsModalService.show(template);\n }\n\n /*Selector*/\n changeScheduleMode(value) {\n this.permitScheduleType = value;\n if (\n this.permitScheduleType == PermitScheduleType.Date\n ) {\n this.formGroup?.controls['weekDay']?.clearValidators();\n this.formGroup?.controls['dateTime']?.setValidators(Validators.required);\n\n this.formGroup?.controls['weekDay']?.setValue(null);\n this.formGroup?.controls['dateTime']?.setValue(new Date());\n } else {\n this.formGroup?.controls['dateTime']?.clearValidators();\n this.formGroup?.controls['weekDay']?.setValidators(Validators.required);\n\n this.formGroup?.controls['weekDay']?.setValue(1);\n this.formGroup?.controls['dateTime']?.setValue(null);\n }\n this.formGroup?.controls['dateTime']?.updateValueAndValidity();\n this.formGroup?.controls['weekDay']?.updateValueAndValidity();\n }\n\n updateFromTime() {\n\n if (\n this.formGroup?.controls['toHour']?.value == null &&\n this.formGroup?.controls['fromHour']?.value != null\n )\n this.formGroup?.controls['toHour']?.setValue(\n this.formGroup?.controls['fromHour']?.value,\n { emitEvent: false }\n );\n\n if (\n this.formGroup?.controls['toHour']?.value <\n this.formGroup?.controls['fromHour']?.value\n )\n this.formGroup?.controls['toHour']?.setValue(\n this.formGroup?.controls['fromHour']?.value,\n { emitEvent: false }\n );\n\n }\n\n updateToTime() {\n\n if (\n this.formGroup?.controls['fromHour']?.value == null &&\n this.formGroup?.controls['toHour']?.value != null\n )\n this.formGroup?.controls['fromHour']?.setValue(\n this.formGroup?.controls['toHour']?.value,\n { emitEvent: false }\n );\n\n if (\n this.formGroup?.controls['toHour']?.value <\n this.formGroup?.controls['fromHour']?.value\n )\n this.formGroup?.controls['toHour']?.setValue(\n this.formGroup?.controls['fromHour']?.value,\n { emitEvent: false }\n );\n\n }\n\n clearTimes() {\n this.formGroup?.controls['fromHour']?.setValue(null);\n this.formGroup?.controls['toHour']?.setValue(null);\n }\n\n saveSchedule() {\n if (this.validateSchedule()) {\n let fromHour = this.formGroup?.controls['fromHour']?.value;\n let toHour = this.formGroup?.controls['toHour']?.value;\n\n this.permitSchedules?.push(\n {\n weekDay: this.permitScheduleType == PermitScheduleType.WeekDay ?\n this.formGroup?.controls['weekDay']?.value : null,\n dateTime: this.permitScheduleType == PermitScheduleType.Date ?\n this.formGroup?.controls['dateTime']?.value : null,\n fromHour: fromHour ? prependZero(fromHour.getHours()) + ':' + prependZero(fromHour.getMinutes()) : null,\n toHour: toHour ? prependZero(toHour.getHours()) + ':' + prependZero(toHour.getMinutes()) : null,\n } as PermitScheduleModel\n );\n this.permitSchedulesOutput.emit(this.permitSchedules);\n this.changeScheduleMode(PermitScheduleType.WeekDay);\n this.bsAddScheduleModalRef.hide()\n }\n\n }\n\n removeSchedule(schedule) {\n this.modalService.confirm(\"Are You Sure?\", `Remove Schedule`).subscribe(result => {\n if (result) {\n this.permitSchedules = this.permitSchedules?.filter(item => item != schedule);\n this.permitSchedulesOutput.emit(this.permitSchedules);\n }\n });\n }\n\n validateSchedule() {\n let resArray: boolean[] = []\n if (this.permitScheduleType == PermitScheduleType.Date)\n resArray.push(this.formGroup?.controls['dateTime']?.value != null && this.formGroup?.controls['dateTime']?.value != 'Invalid Date');\n else\n resArray.push(this.formGroup?.controls['weekDay']?.valid);\n resArray.push(this.formGroup?.controls['fromHour']?.valid && this.formGroup?.controls['toHour']?.valid);\n return this._validateBooleanArray(resArray);\n }\n\n _validateBooleanArray(arr) {\n return arr != null && arr.indexOf(false) == -1\n }\n}\n","export enum AssetOperatorMode {\n Nobody = 0,\n AssetCompanyHosts = 2,\n SiteCompanyHosts = 4,\n AssetOperators = 8,\n}\n","export enum ManageSiteAssetMode {\n MainCompany = 0,\n ExternalCompany = 1,\n}\n","
\n
\n
\n \n
\n \n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AssetOperatorMode } from \"../../../enums/asset-operator-mode.enum\";\nimport { ManageSiteAssetMode } from \"../../../enums/manage-site-asset-mode.enum\";\nimport { UserService } from \"../../../services/user.service\";\n\n@Component({\n selector: 'obc-asset-operator-mode-selector',\n templateUrl: './asset-operator-mode-selector.component.html',\n styleUrls: [ './asset-operator-mode-selector.component.scss' ]\n})\nexport class AssetOperatorModeSelectorComponent implements OnInit {\n\n assetOperatorMode: AssetOperatorMode[] = [];\n @Input() operatorRegistrationMode: number = 0;\n @Input() onlyTempAsset: boolean = false;\n @Input() manageSiteAssetMode: ManageSiteAssetMode;\n @Input() supplierHashLink: string;\n @Input() siteCompanyTitle: string;\n\n @Output('operatorMode') operatorModeOutput: EventEmitter = new EventEmitter();\n\n constructor(\n private userService: UserService) {\n }\n\n ngOnInit(): void {\n if (this.operatorRegistrationMode > 0) {\n this.operatorRegistrationModeNumberToEnum();\n } else {\n if (this.onlyTempAsset == true) {\n this.assetOperatorMode = [ AssetOperatorMode.SiteCompanyHosts ];\n } else if (this.manageSiteAssetMode == ManageSiteAssetMode.ExternalCompany)\n this.assetOperatorMode = [ AssetOperatorMode.AssetCompanyHosts ];\n else\n this.assetOperatorMode = [ AssetOperatorMode.SiteCompanyHosts ];\n }\n\n this.emitOperatorMode();\n }\n\n operatorRegistrationModeNumberToEnum() {\n this.assetOperatorMode = [];\n for (let item in AssetOperatorMode) {\n if((Number(item) & this.operatorRegistrationMode) > 0) {\n this.assetOperatorMode.push(Number(item));\n }\n }\n }\n\n isModeSelected(mode) {\n return this.assetOperatorMode?.includes(mode);\n }\n\n get assetOperatorModeToShow() {\n return this.manageSiteAssetMode == ManageSiteAssetMode.ExternalCompany ?\n (this.supplierHashLink?.length ?\n [ AssetOperatorMode.SiteCompanyHosts, AssetOperatorMode.AssetOperators ] :\n [ AssetOperatorMode.AssetCompanyHosts, AssetOperatorMode.SiteCompanyHosts, AssetOperatorMode.AssetOperators ]) :\n [ AssetOperatorMode.SiteCompanyHosts, AssetOperatorMode.AssetOperators ];\n }\n\n isDisableOperatorMode(mode: AssetOperatorMode): boolean {\n return ((this.manageSiteAssetMode == ManageSiteAssetMode.MainCompany || this.supplierHashLink?.length) && mode == AssetOperatorMode.SiteCompanyHosts) ||\n mode == AssetOperatorMode.AssetCompanyHosts;\n\n }\n\n getOperatorModeTitle(mode: AssetOperatorMode): string {\n if (mode == AssetOperatorMode.AssetCompanyHosts)\n return `${ this.userService.companyName } Employees`;\n if (mode == AssetOperatorMode.SiteCompanyHosts)\n return `${ this.manageSiteAssetMode == ManageSiteAssetMode.MainCompany ?\n (this.userService.companyName + ' Employees') :\n ((this.siteCompanyTitle ?? 'Site') + ' Hosts') }`;\n if (mode == AssetOperatorMode.AssetOperators)\n return 'Operators';\n return mode?.toString();\n }\n\n onChangeOperatorMode(mode: AssetOperatorMode, e) {\n if (e.target.checked)\n this.assetOperatorMode.push(mode);\n else\n this.assetOperatorMode = this.assetOperatorMode.filter(d => d != mode);\n\n this.emitOperatorMode();\n }\n\n emitOperatorMode() {\n let operatorMode = 0;\n this.assetOperatorMode.forEach(d => operatorMode |= d);\n this.operatorModeOutput.emit(operatorMode);\n }\n}\n","
\n \n
\n
\n
\n
\n {{formName}}\n
\n
\n \n
\n
\n
\n \n\n
\n
\n Operator: \n
\n {{ operatorFullName }}\n {{ form?.draftFilledForm?.operatorMobile | mobile }}\n
\n
\n
\n\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n\n
\n \n \n
\n\n \n\n
\n
\n \n \n
\n
\n
\n\n\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n \n
\n
\n\n \n\n
\n \n
\n\n
\n
\n \n
\n
\n\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Form, FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { SiteAttendanceQuestionAnswer } from 'src/app/models/attendance-request/site-attendance-question-answer';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { FormDataViewModel } from 'src/app/models/form/form-data-view-model';\nimport { FormDataModel } from 'src/app/models/form/form-data-model';\nimport { RequiredDocumentAnswer } from 'src/app/models/requiredDocumentAnswer';\nimport { FormService } from 'src/app/services/form.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { FormType } from \"../../../enums/form-type\";\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { SupplierPermitsService } from \"../../../services/supplier-permits.service\";\nimport { RequiredDocumentViewModel, UserDocumentType } from \"../../../models/user-document-type\";\nimport {\n convertDocumentToFormControl, detectExtension,\n isDateValid,\n isQuestionIsVisibleByCheckingConditions,\n setDocumentFormControlForQuestions\n} from 'src/app/helpers/general-functions';\nimport { PermitFormInfoModel, PermitScheduleModel } from \"../../../models/form/permits-info-model\";\nimport { SupplierFormService } from \"../../../services/supplier-form.service\";\nimport { InternalAnnouncementVisitViewModel } from 'src/app/models/announcement-viewmodel';\nimport { finalize, pairwise } from \"rxjs/operators\";\nimport { UserDocumentTypeService } from \"../../../services/user-document-type.service\";\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\nimport { UniqueGeneralAnswerModel } from 'src/app/models/form/general-answer-model';\nimport { SiteQuestionAnswerViewModel } from 'src/app/models/site_question_answer_view_model';\nimport { FilledFormRequestModel } from \"../../../models/form/filled-form-request-model\";\nimport { FormApplyFor } from \"../../../enums/form-apply-for\";\nimport { FormRegisterFor } from \"../../../enums/form-register-for\";\nimport { FillFormMode } from \"../../../enums/fill-form-mode\";\nimport { AssetOperatorMode } from \"../../../enums/asset-operator-mode.enum\";\nimport { EditFormInformationModel } from \"../../../models/form/edit-form-information-model\";\nimport { AnnouncementService } from \"../../../services/announcement.service\";\nimport { AnnouncementVisitModel, VisitStatus } from \"../../../models/announcement-visit\";\nimport { DocumentViewModel } from \"../../../models/document-viewmodel\";\nimport { ObcTime } from \"../../../models/obc-time\";\nimport { parseUTCDateTimeToLocalDateTime } from 'src/app/helpers/date-time-format';\nimport { SiteAnnouncementForceViewMode } from \"../../../enums/site-announcement-force-view-mode\";\nimport { VariableDefinitionType, VariableValueDefinition } from 'src/app/models/workflow/variable-difinition';\nimport { WorkflowInfoViewModel } from 'src/app/models/workflow/workflow-info-viewmodel';\n\n@Component({\n selector: 'obc-form-data-renderer',\n templateUrl: './form-data-renderer.component.html',\n styleUrls: ['./form-data-renderer.component.scss']\n})\nexport class FormDataRendererComponent implements OnInit {\n @Input() workflowModel: WorkflowInfoViewModel;\n\n @Input() innerSubmitButton: boolean = false;\n @Input() innerSubmitButtonText: string = 'Submit';\n @Output() innerSubmitButtonCallback = new EventEmitter();\n @Output() editFormInformationModel = new EventEmitter();\n\n VariableDefinitionType = VariableDefinitionType;\n\n endTime: ObcTime;\n startTime: ObcTime;\n\n innerSubmitButtonMethod() {\n this.validateAnswers();\n if (this.isFormValid) {\n this.innerSubmitButtonCallback.emit(this.getFormResponse());\n }\n }\n\n @Output() public validate = new EventEmitter();\n getFormsTimeoutHandler: any;\n toolId: number;\n\n\n _formId: number;\n @Input() set formId(value: number) {\n if (this._formId != value) {\n this._formId = value;\n if (this.getFormsTimeoutHandler)\n clearTimeout(this.getFormsTimeoutHandler);\n\n //Timeout to ensure site id has been set\n this.getFormsTimeoutHandler = setTimeout(() => {\n this.getForm();\n }, 500);\n }\n };\n\n get formId() {\n return this._formId;\n }\n\n _siteId: number;\n @Input() set siteId(value: number) {\n this._siteId = value;\n if (this._formId) {\n if (this.getFormsTimeoutHandler)\n clearTimeout(this.getFormsTimeoutHandler);\n this.getForm();\n }\n }\n\n get siteId() {\n return this._siteId;\n }\n\n _filledFormDataId: number;\n @Input() set filledFormDataId(value: number) {\n this._filledFormDataId = value;\n if (this._filledFormDataId) {\n if (this.getFormsTimeoutHandler)\n clearTimeout(this.getFormsTimeoutHandler);\n this.getForm();\n }\n }\n\n get filledFormDataId() {\n return this._filledFormDataId;\n }\n\n get isEditMode() {\n return this.filledFormDataId;\n }\n\n get validFormRegisterForValues() {\n let validFormRegisterForValues = [];\n if ((this.form?.applyFor == FormApplyFor.AnyPerson ||\n this.form?.applyFor == FormApplyFor.Supplier) &&\n this.form?.draftFilledForm?.supplierId != null\n )\n validFormRegisterForValues.push(FormRegisterFor.Supplier);\n\n if ((this.form?.applyFor == FormApplyFor.AnyPerson ||\n this.form?.applyFor == FormApplyFor.Individual) &&\n this.form?.draftFilledForm?.siteAttendanceId &&\n this.form?.draftFilledForm?.userId\n )\n validFormRegisterForValues.push(FormRegisterFor.MySelf);\n\n return validFormRegisterForValues;\n }\n\n setFormRegisterFor() {\n this.registerFor?.setValue(this.form?.draftFilledForm?.registerFor != null &&\n this.validFormRegisterForValues?.includes(this.form?.draftFilledForm?.registerFor)\n ? this.form?.draftFilledForm?.registerFor\n : this.validFormRegisterForValues[0] ?? null);\n }\n\n\n @Input() set allParameters(value: { formId: number, siteId: number, hashLink?: string, toolId?: number }) {\n this._formId = value.formId ?? this._formId;\n this._siteId = value.siteId ?? this.siteId;\n this.hashLink = value.hashLink ?? this.hashLink;\n this.toolId = value.toolId ?? this.toolId;\n if (this.getFormsTimeoutHandler)\n clearTimeout(this.getFormsTimeoutHandler);\n this.getForm();\n }\n\n _supplierId: number;\n @Input() set supplierId(value: number) {\n this._supplierId = value;\n }\n\n get supplierId() {\n return this._supplierId;\n }\n\n _siteSupplierId: number;\n @Input() set siteSupplierId(value: number) {\n this._siteSupplierId = value;\n }\n\n get siteSupplierId() {\n return this._siteSupplierId;\n }\n\n _formName: string;\n @Input() set formName(value: string) {\n this._formName = value ?? '';\n }\n\n get formName() {\n return this._formName;\n }\n\n _formType: FormType;\n @Input() set formType(value: FormType) {\n this._formType = value;\n }\n\n get formType() {\n return this._formType;\n }\n\n @Input() hashLink: string;\n\n @Input() displayCloseBtn: boolean = false;\n\n onCloseButton() {\n this.onCloseButtonClicked.emit(true);\n }\n\n @Output() onCloseButtonClicked = new EventEmitter();\n\n\n _notifyVisits: boolean;\n @Input() set notifyVisits(value: boolean) {\n this._notifyVisits = value ?? false;\n }\n\n get notifyVisits() {\n return this._notifyVisits;\n }\n\n _anonymousAttendanceKey: string;\n @Input() set anonymousAttendanceKey(value: string) {\n this._anonymousAttendanceKey = value;\n }\n\n get anonymousAttendanceKey() {\n return this._anonymousAttendanceKey;\n }\n\n @Input() initialQuestionAnswers: UniqueGeneralAnswerModel[];\n\n previewRenderer: boolean = false;\n\n _previewFormData: FormDataViewModel;\n get previewFormData(): FormDataViewModel {\n return this._previewFormData;\n }\n\n @Input() set previewFormData(value: FormDataViewModel) {\n if (value?.type != null && value?.type != undefined) {\n this._previewFormData = value;\n this.previewRenderer = true;\n this.getForm();\n } else {\n this.previewRenderer = false;\n this._previewFormData = undefined;\n }\n }\n\n today = new Date();\n\n DatetimePickerMode = DatetimePickerMode;\n FormTypeEnum = FormType;\n minStartDate: Date;\n startDate: FormControl = new FormControl(null);\n endDate: FormControl = new FormControl(null);\n versionDate: FormControl = new FormControl(null);\n registerFor: FormControl = new FormControl(FormRegisterFor.Supplier);\n\n endMinAvailableDate: Date = new Date();\n startMaxAvailableDate: Date = new Date();\n\n inProgress: boolean = false;\n form: FormDataViewModel;\n formResponse: FormDataModel;\n\n questionContainerValidationSubscription: Subscription = null;\n questionContainerValid: boolean = true;\n questionContainerValidation$: BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[] }>\n = new BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[] }>({ valid: false, answers: [] });\n requiredDocumentFormControls: CustomFormControl[];\n requiredDocumentFormArray: FormArray;\n\n\n permitSchedulesValidationResult: boolean = true;\n permitSchedules: PermitScheduleModel[] = [];\n\n zoneControl: FormControl = new FormControl(null);\n\n allUserDocumentTypes: UserDocumentType[];\n availableDocumentTypes: UserDocumentType[];\n\n formQueryToFillFormMode() {\n let fillFormMap = {};\n fillFormMap[FormType.Generic] = FillFormMode.General;\n fillFormMap[FormType.Permit] = FillFormMode.General;\n fillFormMap[FormType.AssetRegistration] = FillFormMode.AssetRegistration;\n fillFormMap[FormType.AssetOperator] = FillFormMode.AssetOperator;\n fillFormMap[FormType.AssetOperation] = FillFormMode.AssetOperation;\n fillFormMap[FormType.SupplierDocumentReview] = FillFormMode.SupplierDocument;\n\n return fillFormMap[this.formType] ?? fillFormMap[FormType.Generic];\n }\n\n constructor(private formService: FormService,\n private supplierFormService: SupplierFormService,\n private supplierPermitService: SupplierPermitsService,\n private modalService: ModalService,\n private userDocumentTypeService: UserDocumentTypeService,\n private siteAssetService: SiteAssetService,\n private announcementService: AnnouncementService,\n ) {\n }\n\n\n ngOnInit(): void {\n this.resetDates();\n this.inProgress = true;\n this.resetFormResponse();\n //questions\n this.questionContainerValidationSubscription = this.questionContainerValidation$.subscribe((res) => {\n if (!this?.form?.questions?.length) {\n this.questionContainerValid = true;\n this.validateAnswers();\n return;\n }\n this.questionContainerValid = res.valid;\n this.formResponse.questionAnswers = res.answers;\n\n // update draftFilledForm with all new non-file answers.\n // we're doing this to prevent resetting non-file answers when ResetAll() calls.\n // let oldFileQuestionAnswers = this.form?.draftFilledForm?.questionAnswers?.filter(q => q.questionType == QuestionType.File || q.questionType == QuestionType.SignaturePad);\n // let nonFileQuestionIds = this.form?.questions?.filter((q: SiteQuestionViewModel) => q.questionType != QuestionType.File && q.questionType != QuestionType.SignaturePad)\n // ?.map(q => q.questionId);\n // let newNonFileQuestionAnswers =\n // res.answers?.filter(qa => nonFileQuestionIds.includes(qa.questionId));\n // this.form.draftFilledForm.questionAnswers = [ ...oldFileQuestionAnswers, ...newNonFileQuestionAnswers ];\n this.validateAnswers();\n });\n\n this.inProgress = false;\n }\n\n resetDates() {\n this.today.setHours(0, 0, 0, 0);\n let minStartDate = this.form?.permitFormInfo?.minStartDate;\n let startDate = minStartDate && new Date(minStartDate) > this.today ? new Date(minStartDate) : new Date(this.today);\n\n if (this.formType == FormType.Permit && !this.isEditMode) {\n this.startDate.setValue(startDate);\n\n this.startDate?.setValidators(Validators.required);\n }\n if (!this.isEditMode && (this.formType == FormType.Permit || (this.formType == FormType.SupplierForm && this.form?.isEnableSupplierFormExpiryDate))) {\n let endDate = new Date(startDate);\n endDate.setHours(23, 59, 59);\n this.endDate.setValue(endDate);\n this.endDate?.setValidators(Validators.required);\n }\n\n this.setStartAndEndTimes();\n\n if (this.formType == FormType.SupplierForm) {\n this.versionDate.setValue(new Date(this.today.getFullYear(), this.today.getMonth(), this.today.getDate()));\n this.versionDate?.setValidators(Validators.required);\n }\n\n this.setMinAndMaxAvailableDates();\n }\n\n resetDatesInResetAll: boolean = true;\n resetFormResponse() {\n this.requiredDocumentFormControls = [];\n this.formResponse = {\n documentAnswers: [],\n questionAnswers: [],\n isValid: false,\n formId: this._formId,\n startDate: null,\n endDate: null,\n versionDate: null,\n supplierId: this.supplierId,\n siteId: this.siteId,\n } as FormDataModel;\n if (this.resetDatesInResetAll)\n this.resetDates();\n }\n\n getForm() {\n if (this.getFormsTimeoutHandler)\n clearTimeout(this.getFormsTimeoutHandler);\n\n this.userDocumentTypeService.getAll()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.allUserDocumentTypes = res;\n this.refreshDocuments();\n\n if (this.previewRenderer === true) {\n this.form = this.previewFormData;\n\n this.initializeFormSpecificControls();\n this.formName = this.form.formName;\n\n this.form.additionalDocumentConfig = this.previewFormData?.additionalDocumentConfig ?? {\n allowUsersToAttachAdditionalDocuments: true,\n order: 999999\n };\n this.documents = this.form.documents;\n\n if (this.form?.questions?.length > 0) {\n this.form.questions = setDocumentFormControlForQuestions(this.form.questions);\n }\n\n this.refreshDocuments();\n\n } else {\n this.inProgress = true;\n let service = new Observable();\n \n if (!this.filledFormDataId) {\n if (this.formType == FormType.Permit)\n service = this.supplierPermitService.getFormInformation(this._formId, this.siteId, this.hashLink, this.siteSupplierId, this.toolId);\n else if (this.formType == FormType.SupplierForm && this.hashLink?.length)\n service = this.supplierFormService.getFormsDetailsToFill(this._formId, this.hashLink, this.toolId);\n else if (this.formType == FormType.AssetRegistration && this.hashLink?.length)\n service = this.siteAssetService.getFormViewmodel(this._formId, this.hashLink, this.toolId);\n else if (this.formType == FormType.AssetOperator && this.hashLink?.length)\n service = this.siteAssetService.getFormViewmodel(this._formId, this.hashLink, this.toolId, this.siteId);\n else\n service = this.formService.getFillFormViewModel(this._formId, this.siteId, this.toolId);\n }\n else\n service = this.formService.getFilledFormViewModel({ filledFormDataId: this.filledFormDataId } as FilledFormRequestModel);\n\n service.subscribe(\n res => {\n if (res.success) {\n\n this.form = res.data;\n\n this.minStartDate = new Date(this.form.permitFormInfo.minStartDate);\n if (this.form?.draftFilledForm != null) {\n // remove answers that their question is removed from form\n this.form.draftFilledForm.questionAnswers = this.form?.draftFilledForm?.questionAnswers\n ?.filter((qA) => this.form?.questions?.find((formQ) =>\n formQ.questionId == qA.questionId));\n\n // add those documents which there is not a document in document list for them, as\n // additional document to documents list.\n let removedDocumentAnswers: DocumentViewModel[] = this.form?.draftFilledForm?.documents\n ?.filter((dA) => !this.form?.documents?.find((formD) =>\n formD.documentType?.id == dA.documentTypeId)) ?? [];\n if (removedDocumentAnswers.length > 0) {\n removedDocumentAnswers.map((item) => {\n let matchedDocumentType: UserDocumentType = this.allUserDocumentTypes?.find((userDocumentType) => userDocumentType.id == item.documentTypeId);\n if (matchedDocumentType) {\n this.form?.documents?.push({\n documentType: matchedDocumentType,\n documentTypes: [matchedDocumentType],\n additionalDocument: true,\n } as RequiredDocumentViewModel);\n }\n })\n }\n }\n\n if (this.isEditMode) {\n this.initializeFormSpecificControls();\n }\n\n this.form.additionalDocumentConfig = res.data?.additionalDocumentConfig ?? {\n allowUsersToAttachAdditionalDocuments: true,\n order: 999999\n };\n this.documents = this.form.documents;\n\n if (this.form?.questions?.length > 0) {\n this.form.questions = setDocumentFormControlForQuestions(this.form.questions);\n }\n\n this.refreshDocuments();\n\n if (!this.isEditMode && this.form?.questions?.length && (this.initialQuestionAnswers?.length || this.form?.defaultQuestionAnswers?.length)) {\n if (!this.form?.draftFilledForm)\n this.form!.draftFilledForm = {\n questionAnswers: []\n };\n\n if (this.initialQuestionAnswers) {\n this.form.draftFilledForm.questionAnswers = this.form?.questions\n .filter((q) =>\n // q.questionType != QuestionType.File &&\n q.uniqueKey?.length &&\n this.initialQuestionAnswers?.some((element) => element.uniqueKey == q.uniqueKey))\n .map((e) => {\n\n let answer = this.initialQuestionAnswers\n ?.filter((element) => element.uniqueKey == e.uniqueKey)[0];\n if (answer) {\n // I hate anybody that use 'any' variable type; and can avoid it!\n return {\n questionId: e.questionId,\n answer: answer?.answer?.answer,\n isBase64Answer: answer?.answer?.isBase64Answer,\n //files: answer?.value?.files,\n } as SiteQuestionAnswerViewModel;\n }\n return null;\n })\n ?.filter(e => e != null) ?? [];\n }\n\n if (this.form.defaultQuestionAnswers) {\n this.form.draftFilledForm.questionAnswers = [\n ...this.form.draftFilledForm.questionAnswers,\n ...this.form?.questions\n .filter((q) =>\n this.form.defaultQuestionAnswers?.some((element) => element.questionId == q.questionId))\n .map((e) => {\n let answer = this.form.defaultQuestionAnswers\n ?.find((element) => element.questionId == e.questionId);\n if (answer) {\n return {\n questionId: e.questionId,\n answer: answer?.answer,\n fileUrls: answer?.fileUrls,\n fileUrl: answer?.fileUrls?.length > 0 ? answer?.fileUrls[0] : null,\n fileStorageKeyList: answer?.fileStorageKeyList,\n questionType: answer?.questionType,\n isBase64Answer: false,\n } as SiteQuestionAnswerViewModel;\n }\n return null;\n })\n .filter(e => e != null) ?? [],\n ];\n }\n }\n\n } else {\n this.modalService.error(res.message);\n }\n }, _ => {\n this.modalService.error(\"Request Failed\");\n }, () => {\n this.ResetAll();\n this.inProgress = false;\n }\n );\n }\n });\n }\n\n initializeFormSpecificControls() {\n this.formType = this.form?.type;\n this.formName = this.form?.draftFilledForm?.formName;\n //this.supplierId = this.form?.draftFilledForm?.supplierId;\n this.notifyVisits = false;\n this._formId = this.form?.draftFilledForm?.formId;\n this._siteId = this.form?.draftFilledForm?.siteId;\n\n if (this.form?.permitFormInfo?.minStartDate != null) {\n this.minStartDate = parseUTCDateTimeToLocalDateTime(this.form?.permitFormInfo?.minStartDate);\n }\n\n if (this.form?.draftFilledForm?.startDate != null) {\n this.startDate.setValue(parseUTCDateTimeToLocalDateTime(this.form?.draftFilledForm?.startDate));\n }\n\n if (this.form?.draftFilledForm?.endDate != null) {\n this.endDate.setValue(parseUTCDateTimeToLocalDateTime(this.form?.draftFilledForm?.endDate));\n }\n\n this.endTime = FormDataRendererComponent.getTimeOutOfDate(this.endDate?.value);\n this.startTime = FormDataRendererComponent.getTimeOutOfDate(this.startDate?.value);\n\n\n this.setDocumentAnswers();\n\n // this.versionDate.setValue(this.form?.draftFilledForm?.endDate);\n this.permitSchedules = this.form?.draftFilledForm?.schedules?.map(function (item) {\n return {\n weekDay: item.weekDay,\n dateTime: item.dateTime,\n fromHour: item.fromHour?.toString(),\n toHour: item.toHour?.toString(),\n } as PermitScheduleModel;\n }\n );\n this.zoneControl.setValue(this.form?.draftFilledForm?.zoneId);\n this.setFormRegisterFor();\n }\n\n ResetAll() {\n this.resetFormResponse();\n let res = convertDocumentToFormControl(this.documents, (this.form?.questions?.filter(question => question.documentFormControl != null)?.map(question => question.documentFormControl) ?? []));\n this.requiredDocumentFormArray = res?.formArray;\n this.requiredDocumentFormControls = res?.controls;\n this.requiredDocumentFormArray?.controls.forEach(c => c.valueChanges.pipe(pairwise()).subscribe(([prev, next]: [RequiredDocumentAnswer, any]) => {\n this.validateAnswers();\n if (prev != null) {\n // if user clicks on × button and removed the filled input type,\n // then prev != null and prev.fileAsBase64 == null\n if (prev.filaAsBase64 == null) {\n this.removeFromDocumentAnswers(prev?.documentTypeId, prev?.questionId);\n }\n }\n }));\n this.resetDatesInResetAll = true;\n }\n\n\n setMinAndMaxAvailableDates() {\n if (isDateValid(this.startDate)) {\n this.endMinAvailableDate = new Date(this.startDate.value.getTime());\n this.endMinAvailableDate.setHours(0, 0, 0, 0);\n }\n if (isDateValid(this.endDate)) {\n this.startMaxAvailableDate = new Date(this.endDate.value.getTime());\n this.startMaxAvailableDate.setHours(0, 0, 0, 0);\n }\n }\n\n isUnvisitedMandatoryAnnouncements() {\n return this.form?.announcements?.some(s => (s.forceViewMode == SiteAnnouncementForceViewMode.MandatoryView ||\n s.forceViewMode == SiteAnnouncementForceViewMode.SetPlaythroughToMandatory ||\n s.forceViewMode == SiteAnnouncementForceViewMode.MandatoryViewAndSignOff\n ) && !(s as InternalAnnouncementVisitViewModel)?.viewed) ?? false;\n }\n\n isFormValid: boolean = false;\n\n validateAnswers(isRecall = 0) {\n\n this.formResponse.isValid = this.isValid();\n if (this.formType == FormType.Permit) {\n this.isFormValid = this.formResponse.isValid &&\n isDateValid(this.startDate) &&\n isDateValid(this.endDate) &&\n this.permitSchedulesValidationResult &&\n this.startDate.value <= this.endDate.value &&\n !this.isUnvisitedMandatoryAnnouncements();\n this.validate.emit(this.isFormValid);\n } else if (this.formType == FormType.SupplierForm) {\n this.isFormValid = this.formResponse.isValid &&\n isDateValid(this.versionDate) &&\n (!this.form?.isEnableSupplierFormExpiryDate ||\n (this.form?.isEnableSupplierFormExpiryDate && isDateValid(this.endDate))) &&\n !this.isUnvisitedMandatoryAnnouncements();\n this.validate.emit(this.isFormValid);\n } else {\n this.isFormValid = this.formResponse.isValid && !this.isUnvisitedMandatoryAnnouncements();\n this.validate.emit(this.isFormValid);\n }\n\n if (!isRecall) {\n setTimeout(() => {\n this.validateAnswers(1);\n }, 500);\n }\n }\n\n isDocumentVisible(docFormControl: CustomFormControl): boolean {\n let doc = docFormControl.item as RequiredDocumentViewModel;\n if (doc.questionId == null)\n return true;\n\n // ##### During refactore code, I have to read old version (q.questionId)! PLEASE AVOID (any) VARIABLE TYPE!!!!! ####\n\n let question = this.form.questions.find(q => q.questionId == doc.questionId);\n return isQuestionIsVisibleByCheckingConditions(question,\n this.form.questions,\n this.formResponse.questionAnswers);\n }\n\n private isValid() {\n let isValidDocuments = this.requiredDocumentFormArray == null ||\n this.requiredDocumentFormArray.controls.every(c => {\n let control = (c as CustomFormControl);\n let doc = control.item as RequiredDocumentViewModel;\n\n let isValid: boolean;\n let isDocInInitialAnswers = this.initialDocumentAnswers?.find((item) =>\n item.questionId == null &&\n item.documentTypeId == doc.documentType?.id);\n\n if (isDocInInitialAnswers && doc.isDirty != true)\n isValid = true;\n else {\n isValid = doc.questionId == null ? c.valid : true;\n }\n return isValid;\n });\n\n //let isValidDocuments = !this.requiredDocumentFormArray?.controls?.map(x =>x. x.valid)?.some(x => x == false);\n let isValidQuestions = this.questionContainerValid;\n return isValidDocuments && isValidQuestions;\n }\n\n\n initialDocumentAnswers: RequiredDocumentAnswer[] = [];\n\n setDocumentAnswers() {\n this.initialDocumentAnswers = this.form?.draftFilledForm?.documents?.map((item) => {\n return {\n title: item?.documentTitle,\n documentTypeId: item?.documentTypeId,\n additionalFileUrls: item?.additionalFileUrls ?? [],\n expireDate: item?.expireDate,\n userDocumentId: item?.userDocumentId,\n } as RequiredDocumentAnswer\n });\n\n this.form?.draftFilledForm?.questionAnswers?.filter((item: SiteQuestionAnswerViewModel) => item.userDocumentId != null)?.map((innerItem: SiteQuestionAnswerViewModel) => {\n let question = this.form?.questions?.find(q => q.questionId == innerItem.questionId);\n let matchedDocumentType = question?.document?.documentTypes?.find((docType) => docType.id == innerItem.documentTypeId);\n if (matchedDocumentType) {\n question.documentTypeId = matchedDocumentType.id;\n if (question.document)\n question.document.documentType = matchedDocumentType;\n let foundItem = this.initialDocumentAnswers.find(ida => ida.documentTypeId == innerItem?.documentTypeId && ida.questionId == innerItem?.questionId);\n if (!foundItem) {\n this.initialDocumentAnswers.push({\n title: innerItem?.documentTitle,\n documentTypeId: innerItem?.documentTypeId,\n additionalFileUrls: innerItem?.fileUrls ?? [],\n expireDate: innerItem?.documentExpireDate,\n userDocumentId: innerItem?.userDocumentId,\n questionId: innerItem?.questionId,\n fileType: detectExtension(innerItem?.fileUrl),\n inductionId: innerItem?.inductionId,\n } as RequiredDocumentAnswer);\n }\n }\n });\n }\n\n private getDocumentAnswers() {\n\n // user input answers\n let userInputList = this.requiredDocumentFormArray?.controls?.map(\n (formControl) => {\n let form = formControl as CustomFormControl;\n return form.value as RequiredDocumentAnswer;\n }\n )?.filter(doc => doc != null);\n\n // merge old answers and user input answers together.\n // if there is a new answer, ignore the old answer, otherwise put old answer inside answers list\n let finalDocumentAnswerList = [\n ...userInputList,\n ];\n this.initialDocumentAnswers?.map((item) => {\n let relatedUserInputAnswer = userInputList.find((userInputAnswer) => userInputAnswer.documentTypeId == item.documentTypeId &&\n userInputAnswer.questionId == item.questionId\n );\n let relatedRemovedDocument: boolean = false;\n if (relatedUserInputAnswer == null) {\n finalDocumentAnswerList.push(item);\n }\n });\n\n return finalDocumentAnswerList;\n }\n\n public getFormResponse() {\n this.formResponse.formId = this.formId;\n this.formResponse.filledFormDataId = this.filledFormDataId;\n this.formResponse.documentAnswers = this.getDocumentAnswers();\n this.formResponse.registerFor = this.registerFor.value;\n this.formResponse.siteAttendanceId = this.form?.draftFilledForm?.siteAttendanceId;\n this.formResponse.versionDate = this.versionDate.value != null ?\n (this.versionDate.value.getFullYear() + '/' + (this.versionDate.value.getMonth() + 1) + '/' + this.versionDate.value.getDate()) : null;\n\n this.setStartAndEndTimes();\n this.formResponse.startDate = this.startDate?.value ?? null;\n this.formResponse.endDate = this.endDate?.value ?? null;\n this.formResponse.permitFormInfo = {\n permitSchedules: this.permitSchedules,\n permitZoneId: this.zoneControl?.value\n } as PermitFormInfoModel;\n\n // in editing permit forms\n if (this.form?.type == FormType.Permit) {\n this.formResponse.supplierId = this.registerFor.value == FormRegisterFor.Supplier\n ? this.form?.draftFilledForm?.supplierId : null;\n } else {\n if (this.form?.draftFilledForm?.supplierId && this.isEditMode)\n this.formResponse.supplierId = this.form?.draftFilledForm?.supplierId;\n }\n\n this.formResponse.siteId = this.siteId;\n this.editFormInformationModel.emit({\n fillFormMode: this.formQueryToFillFormMode(),\n operatorMode: this.operatorMode,\n draft: this.form?.draftFilledForm,\n } as EditFormInformationModel);\n return this.formResponse;\n }\n\n\n updatePermitSchedulesValidationResult(value) {\n this.permitSchedulesValidationResult = value;\n this.validateAnswers();\n }\n\n updatePermitSchedules(value) {\n this.permitSchedules = value;\n }\n\n\n onAnnouncementVisit(announcementId) {\n\n if (this.hashLink == null || this.hashLink == '') {\n this.inProgress = true;\n this.announcementService.NotifyAnnouncementVisit({\n formId: this.form?.draftFilledForm?.formId,\n announcementId: announcementId,\n isSupplierAnnouncement: this.form?.draftFilledForm?.isSupplierForm,\n visitStatus: VisitStatus.Full,\n siteAttendanceId: this.form?.draftFilledForm?.siteAttendanceId,\n isPreCheckIn: false,\n } as AnnouncementVisitModel)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n if (!res) {\n this.modalService.error(\"Announcement Visit Failed\");\n }\n })\n }\n this.validateAnswers();\n }\n\n\n documents: RequiredDocumentViewModel[] = [];\n\n addSelectedDocumentToRequiredDocuments(documentType) {\n let baseOrder = (this.form?.additionalDocumentConfig?.order ?? 1000) + (this.documents?.filter(d => d.additionalDocument).length ?? 0);\n baseOrder = baseOrder - 100;//To Add All Additional Docs before [ADD] button\n\n if (documentType) {\n this.documents = [...this.documents, {\n documentType: documentType,\n documentTypes: [documentType],\n displayOrder: baseOrder,\n additionalDocument: true\n } as RequiredDocumentViewModel];\n this.resetDatesInResetAll = false;\n this.refreshDocuments();\n }\n }\n\n\n removeDocumentFromRequiredDocuments(documentType) {\n if (documentType) {\n\n this.documents = [...this.documents?.filter(item => item.documentType.id != documentType.id)];\n this.removeFromDocumentAnswers(documentType.id);\n this.resetDatesInResetAll = false;\n this.refreshDocuments();\n }\n }\n\n selectedDocumentsIds: number[] = [];\n\n refreshDocuments() {\n this.selectedDocumentsIds = this.documents?.map(item => item.documentType?.id);\n this.availableDocumentTypes = this.allUserDocumentTypes?.filter(doc => this.selectedDocumentsIds?.indexOf(doc.id) === -1) || [];\n this.ResetAll();\n }\n\n get isVisibleExpiryDate() {\n return this.form.isEnableSupplierFormExpiryDate && (\n this.formType == this.FormTypeEnum.SupplierForm ||\n this.formType == this.FormTypeEnum.AssetRegistration ||\n this.formType == this.FormTypeEnum.AssetOperator ||\n this.formType == this.FormTypeEnum.AssetOperation);\n }\n\n get isVisibleVersion() {\n return this.formType == this.FormTypeEnum.SupplierForm;\n }\n\n operatorMode: AssetOperatorMode;\n\n setOperatorMode(value) {\n this.operatorMode = value;\n }\n\n\n get operatorFullName() {\n return this.form?.draftFilledForm?.operatorFirstName + ' ' + this.form?.draftFilledForm?.operatorLastName;\n }\n\n // any means:\n // RequiredDocumentAnswer\n // UserDocumentType\n private removeFromDocumentAnswers(documentTypeId: number, questionId?: number) {\n let index;\n if (documentTypeId && !questionId)\n index = this.initialDocumentAnswers?.findIndex(d => d.documentTypeId == documentTypeId);\n if (questionId)\n index = this.initialDocumentAnswers?.findIndex(d => d.questionId == questionId);\n\n if (index > -1) {\n this.initialDocumentAnswers.splice(index, 1);\n }\n }\n\n private static getTimeOutOfDate(date: Date): ObcTime {\n if (!date)\n return null;\n\n return {\n hour: date.getHours(),\n minute: date.getMinutes(),\n second: date.getSeconds(),\n }\n }\n\n setStartAndEndTimes() {\n if (this.startTime) {\n this.startDate?.value?.setHours(this.startTime?.hour, this.startTime?.minute, this.startTime?.second, 0);\n } else {\n this.startDate?.value?.setHours(0, 0, 0, 0);\n }\n if (this.endTime) {\n this.endDate?.value?.setHours(this.endTime?.hour, this.endTime?.minute, this.endTime?.second, 0);\n } else {\n this.endDate?.value?.setHours(23, 59, 59, 0);\n }\n }\n}\n","
\n Form Data Id is needed\n
\n\n\n\n \n\n \n \n \n\n\n\n \n \n \n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\nimport { finalize } from \"rxjs/operators\";\nimport { FormService } from \"../../../services/form.service\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { FormDataModel } from \"../../../models/form/form-data-model\";\nimport { EditFormInformationModel } from \"../../../models/form/edit-form-information-model\";\nimport { FillFormMode } from \"../../../enums/fill-form-mode\";\nimport { SiteAssetOperationModel } from \"../../../models/site-asset/site-asset-operation-model\";\nimport { SiteAssetService } from \"../../../services/site-asset.service\";\nimport { SiteAssetOperatorModel } from \"../../../models/site-asset/site-asset-view-model\";\nimport { SiteAssetRegistrationModel } from \"../../../models/site-asset/site-asset-registration-model\";\nimport { ServerResult, ServerResultData } from \"../../../models/server-result-data\";\n\n@Component({\n selector: 'obc-filled-form-edit',\n templateUrl: './filled-form-edit.component.html',\n styleUrls: ['./filled-form-edit.component.scss']\n})\nexport class FilledFormEditComponent implements OnInit {\n\n @Input() displayAsModal: boolean;\n @Input() filledFormDataId: number;\n @Input() classes: string;\n @Input() noIcon: boolean = false;\n @Output('onUpdateForm') onUpdateFormEmitter: EventEmitter = new EventEmitter();\n\n inProgress: boolean = false;\n bsEditModalRef: BsModalRef;\n\n constructor(private bsModalService: BsModalService,\n private formService: FormService,\n private siteAssetService: SiteAssetService,\n private modalService: ModalService) {\n }\n\n ngOnInit(): void {\n }\n\n displayModal(template: any) {\n this.bsEditModalRef = this.bsModalService.show(template, {\n ignoreBackdropClick: true,\n class: 'modal-lg'\n });\n }\n\n closeModal() {\n this.bsEditModalRef.hide();\n }\n\n isFormValid: boolean = false;\n\n formInformationModel: EditFormInformationModel;\n\n updateFormInformationModel(value: EditFormInformationModel) {\n this.formInformationModel = value;\n }\n\n validateForm(formIsValid: boolean) {\n this.isFormValid = formIsValid\n }\n\n updateFilledForm(data: FormDataModel) {\n this.inProgress = true;\n\n let request;\n\n switch (this.formInformationModel?.fillFormMode) {\n case FillFormMode.General:\n case FillFormMode.SupplierDocument:\n case FillFormMode.Permit:\n request = this.formService.saveForm(data);\n break;\n case FillFormMode.AssetOperator:\n request = this.siteAssetService.registerAssetOperator({\n firstName: this.formInformationModel?.draft?.operatorFirstName,\n lastName: this.formInformationModel?.draft?.operatorLastName,\n mobile: this.formInformationModel?.draft?.operatorMobile,\n formData: data,\n siteAssetId: this.formInformationModel?.draft?.siteAssetId,\n } as SiteAssetOperatorModel)\n break;\n case FillFormMode.AssetRegistration:\n request = this.siteAssetService.registerSiteAsset({\n formDatamodel: data,\n siteAssetId: this.formInformationModel?.draft?.siteAssetId,\n siteId: this.formInformationModel?.draft?.siteId,\n toolId: this.formInformationModel?.draft?.assetId,\n operatorRegistrationMode: this.formInformationModel?.operatorMode,\n temporarilyTool: null\n } as SiteAssetRegistrationModel)\n break;\n case FillFormMode.AssetOperation:\n request = this.siteAssetService.submitAssetOperation({\n formData: data,\n } as SiteAssetOperationModel, this.formInformationModel?.draft?.siteAssetId,)\n break;\n }\n\n\n request\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n if (res != null && res instanceof Object) {\n if (res.success == true) {\n this.modalService.success(\"Form Updated Successfully\");\n this.bsEditModalRef.hide();\n this.onUpdateFormEmitter.emit(true);\n } else {\n this.modalService.error(res.message);\n }\n } else {\n if (res) {\n this.modalService.success(\"Form Updated Successfully\");\n this.bsEditModalRef.hide();\n this.onUpdateFormEmitter.emit(true);\n } else {\n this.modalService.error(\"Form not saved\");\n }\n }\n },\n (err) => {\n this.modalService.error(err);\n this.onUpdateFormEmitter.emit(false);\n }, () => {\n this.inProgress = false;\n })\n ;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'groupBy'\n})\nexport class GroupByPipe implements PipeTransform {\n\n transform(collection: any[], property: string): any[] {\n if (!collection) {\n return null;\n }\n\n const groupedCollection = collection.reduce((previous, current) => {\n if (!previous[current[property]]) {\n previous[current[property]] = [current];\n } else {\n previous[current[property]].push(current);\n }\n\n return previous;\n }, {});\n\n return Object.keys(groupedCollection).map(key => ({ key: key == 'null' ? null : key, value: groupedCollection[key] }));\n }\n\n}\n","\n
\n
\n {{item.key == null ? \"Announcement\" : item.key}}\n
\n
\n \n \n \n \n
\n
\n
","import { Component, Input, OnInit } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { AnnouncementBaseViewModel } from 'src/app/models/announcement-viewmodel';\n\n@Component({\n selector: 'obc-announcement-renderer',\n templateUrl: './announcement-renderer.component.html',\n styleUrls: ['./announcement-renderer.component.scss']\n})\nexport class AnnouncementRendererComponent implements OnInit {\n _announcements = new BehaviorSubject([]);\n AnnouncementType = FileType;\n @Input() set announcements(value: AnnouncementBaseViewModel[]) {\n this._announcements.next(value);\n }\n @Input() largeButton = true;\n @Input() isSupplierAnnouncement: boolean = false;\n @Input() notifyVisits = true;\n @Input() anonymousAttendanceKey: string = null;\n constructor(\n ) { }\n\n ngOnInit() {\n }\n\n\n}\n","\n\n
\n
Form Logs\n \n
\n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DateByOperations
{{log.dateTime | datetime}}\n
\n {{log.userFullName}} ({{log.userMobile | mobile}})\n
\n
\n {{log.userExtraInfo}}\n
\n
\n
\n {{l.title}}\n\n
\n \n \n \n -\n →\n \n \n \n -\n
\n
{{l.oldValue | date}} → {{l.newValue | date}}
\n
{{getLogDescription(l)}}
\n
\n
No logs found
\n
\n
","import { Component, Input, OnInit } from '@angular/core';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { FormDataLogDetail, FormDataLogViewModel } from 'src/app/models/form/form-data-detail-view-model';\nimport { FormService } from 'src/app/services/form.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-form-history',\n templateUrl: './form-history.component.html',\n styleUrls: ['./form-history.component.scss']\n})\nexport class FormHistoryComponent implements OnInit {\n inProgress: boolean;\n\n _formDataId: number;\n logs: FormDataLogViewModel[];\n get formDataId(): number {\n return this._formDataId;\n };\n\n @Input() set formDataId(value: number) {\n if (this._formDataId != value) {\n this._formDataId = value;\n this.getHistory();\n }\n }\n\n constructor(private formService: FormService, public modalService: ModalService) { }\n\n ngOnInit(): void {\n if (this.formDataId)\n this.getHistory();\n }\n\n getHistory() {\n this.inProgress = true;\n this.formService.getFormHistory(this.formDataId)\n .subscribe(res => {\n this.inProgress = false;\n this.logs = res;\n });\n }\n\n isDateLogValue(log: FormDataLogDetail) {\n return log.questionType == QuestionType.Date;\n }\n showLink(log: FormDataLogDetail) {\n return log.type == 1 || log.questionType == QuestionType.File || log.questionType == QuestionType.SignaturePad;\n }\n getLogDescription(log: FormDataLogDetail) {\n return `${(log.oldValue?.length ?? false) ? log.oldValue : '-'} → ${(log.newValue?.length ?? false) ? log.newValue : '-'}`;\n }\n\n\n\n\n}\n\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AssetOperatorMode } from '../enums/asset-operator-mode.enum';\n\n@Pipe({\n name: 'assetOperatorMode'\n})\nexport class AssetOperatorModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == AssetOperatorMode.Nobody) return 'Nobody';\n if (value == AssetOperatorMode.AssetCompanyHosts) return 'Owner Company Employees';\n if (value == AssetOperatorMode.SiteCompanyHosts) return 'Site Company Hosts';\n if (value == AssetOperatorMode.AssetOperators) return 'Operators';\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {AssetOperatorMode} from \"../enums/asset-operator-mode.enum\";\nimport {AssetOperatorModePipe} from \"./asset-operator-mode.pipe\";\nimport {DatePipe} from \"@angular/common\";\n\n@Pipe({\n name: 'listOfOperatorRegistrationMode'\n})\nexport class ListOfOperatorRegistrationModePipe implements PipeTransform {\n\n private assetOperatorModePipe: AssetOperatorModePipe = new AssetOperatorModePipe();\n\n transform(value: any): string {\n let output = [];\n for (let item in AssetOperatorMode) {\n if((Number(item) & value) > 0) {\n output.push(this.assetOperatorModePipe.transform(item));\n }\n }\n return output?.join(', ');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\nimport { timeFormat } from '../helpers/date-time-format';\nimport { LocaleService } from '../services/locale.service';\nimport { DatetimePipe } from './datetime.pipe';\nimport { dateTimeFormat } from '../helpers/date-time-format';\n\n@Pipe({\n name: 'time'\n})\nexport class TimePipe implements PipeTransform {\n transform(value: string, format?: string): string {\n if (!value)\n return '';\n var ret = moment(value, timeFormat).format('LT');\n return ret.toString();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormDataStatus } from '../enums/form-data-status';\n\n@Pipe({\n name: 'permitStatusIcon'\n})\nexport class PermitStatusIconPipe implements PipeTransform {\n\n transform(value: FormDataStatus): string {\n var cssClass = \"\";\n if (value == FormDataStatus.NotRequired) cssClass = \"\";\n if (value == FormDataStatus.PendingApproval) cssClass = \"history text-warning\";\n if (value == FormDataStatus.Approved) cssClass = \"check-circle text-success\";\n if (value == FormDataStatus.Rejected) cssClass = \"times text-danger\";\n return !(cssClass?.length) ? \"\" : \"fas fa-\" + cssClass;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormDataStatus } from '../enums/form-data-status';\n\n@Pipe({\n name: 'permitStatusColor'\n})\nexport class PermitStatusColorPipe implements PipeTransform {\n\n transform(value: FormDataStatus): string {\n var cssClass = \"\";\n if (value == FormDataStatus.NotRequired) cssClass = \"\";\n if (value == FormDataStatus.PendingApproval) cssClass = \"text-warning\";\n if (value == FormDataStatus.Approved) cssClass = \"text-success\";\n if (value == FormDataStatus.Rejected) cssClass = \"text-danger\";\n return cssClass;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormDataStatus } from '../enums/form-data-status';\n\n@Pipe({\n name: 'permitStatusTitle'\n})\nexport class PermitStatusTitlePipe implements PipeTransform {\n\n transform(value: FormDataStatus): string {\n if (value == FormDataStatus.NotRequired) return \"\";\n if (value == FormDataStatus.PendingApproval) return \"Pending Approval\";\n if (value == FormDataStatus.Approved) return \"Approved\";\n if (value == FormDataStatus.Rejected) return \"Rejected\";\n return value;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SiteAssetRequestApproveStatus } from '../enums/site-asset-request-approve-status.enum';\n\n@Pipe({\n name: 'filledFormEntityStatusIcon'\n})\nexport class FilledFormEntityStatusIconPipe implements PipeTransform {\n\n transform(value: SiteAssetRequestApproveStatus): string {\n var cssClass = \"\";\n if (value == SiteAssetRequestApproveStatus.Pending) cssClass = \"history text-warning\";\n if (value == SiteAssetRequestApproveStatus.AutoApproved) cssClass = \"check-circle text-success\";\n if (value == SiteAssetRequestApproveStatus.Approved) cssClass = \"check-circle text-success\";\n if (value == SiteAssetRequestApproveStatus.Rejected) cssClass = \"times text-danger\";\n return !(cssClass?.length) ? \"\" : \"fas fa-\" + cssClass;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {SiteAssetRequestApproveStatus} from \"../enums/site-asset-request-approve-status.enum\";\n\n@Pipe({\n name: 'filledFormEntityStatusColor'\n})\nexport class FilledFormEntityStatusColorPipe implements PipeTransform {\n\n transform(value: SiteAssetRequestApproveStatus): string {\n var cssClass = \"\";\n if (value == SiteAssetRequestApproveStatus.AutoApproved) cssClass = \"\";\n if (value == SiteAssetRequestApproveStatus.Pending) cssClass = \"text-warning\";\n if (value == SiteAssetRequestApproveStatus.Approved) cssClass = \"text-success\";\n if (value == SiteAssetRequestApproveStatus.Rejected) cssClass = \"text-danger\";\n return cssClass;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SiteAssetRequestApproveStatus } from '../enums/site-asset-request-approve-status.enum';\n\n@Pipe({\n name: 'siteAssetRequestApproveStatus'\n})\nexport class SiteAssetRequestApproveStatusPipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === SiteAssetRequestApproveStatus.Pending) return 'Pending';\n if (value === SiteAssetRequestApproveStatus.Approved) return 'Approved';\n if (value === SiteAssetRequestApproveStatus.Rejected) return 'Rejected';\n if (value === SiteAssetRequestApproveStatus.AutoApproved) return 'Auto Approved';\n return value?.toString();\n }\n\n}\n","\n
\n
\n
{{ formDetail.formName }}
\n
\n
\n Form\n
\n
\n\n\n Form\n\n\n\n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n Site:\n \n
\n
\n
\n
\n For:\n \n
\n
\n\n
\n
\n By:\n \n \n
\n
\n\n
\n
\n Operators:\n \n
\n
\n\n
\n
\n Start Date:\n \n \n \n
\n \n \n \n \n
\n
\n
\n
\n\n
\n
\n \n End Date:\n \n \n \n \n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n \n Asset Registration Form Submitted On: \n Submit Date: \n \n
\n
\n \n
\n
\n Exclusive Access:\n \n
\n
\n
0\">\n
\n Schedules:\n
    \n
  • \n {{item.weekDay | numberToWeekday}}\n {{item.dateTime | date}}\n ({{item.fromHour | time}} - {{item.toHour | time}})\n
  • \n
\n
\n
\n
\n\n
\n
\n \n Review comments:\n \n
\n
\n
0\" class=\"row p-2\">\n
\n Review comments:\n \n
\n
\n
\n
\n \n {{formDetail.status |\n permitStatusTitle}}:\n \n {{formDetail.permitStatus?.fullName}}\n ({{formDetail.permitStatus?.mobile | mobile}})\n \n
\n
\n
\n
\n \n {{formDetail.entityStatusInfo?.approveStatus\n |\n siteAssetRequestApproveStatus}}:\n \n {{formDetail.entityStatusInfo?.fullName}}\n ({{formDetail.entityStatusInfo?.mobile | mobile}})\n \n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n\n \n \n \n \n \n\n \n \n
    \n
  • \n \n
  • \n
\n
\n\n\n \n \n
    \n
  • \n \n \n \n
  • \n
\n
\n
\n
\n\n\n \n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BehaviorSubject } from \"rxjs\";\nimport { FormService } from \"../../../services/form.service\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { FilledFormInfoViewModel } from \"../../../models/filled-form-info-view-model\";\nimport { DocumentProvider } from 'src/app/enums/document-provider.enum';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { SiteAttendanceDocumentViewModel } from \"../../../models/site-attendance-document-viewmodel\";\nimport { FormType } from 'src/app/enums/form-type';\nimport { ApproveEntityType } from 'src/app/enums/approve-entity-type';\nimport { ApproveRejectQueryModel } from 'src/app/models/approve/approve-reject-query-model';\nimport { ApproveService } from 'src/app/services/approve-service';\nimport { finalize } from 'rxjs/operators';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { FormDataStatus } from 'src/app/enums/form-data-status';\nimport { FormControl } from \"@angular/forms\";\nimport { UserService } from 'src/app/services/user.service';\nimport { SiteSupplierService } from 'src/app/services/site-supplier.service';\nimport { SiteAssetRequestApproveStatus } from \"../../../enums/site-asset-request-approve-status.enum\";\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { ToastrService } from 'ngx-toastr';\nimport { BsModalService } from \"ngx-bootstrap/modal\";\n\n\n@Component({\n selector: 'obc-form-data-details',\n templateUrl: './form-data-details.component.html',\n styleUrls: ['./form-data-details.component.scss']\n})\nexport class FormDataDetailsComponent implements OnInit {\n @Input() formDataId: number;\n @Input() entityId: number;\n @Input() formDetail: FilledFormInfoViewModel;\n @Output() onRefresh = new EventEmitter();\n @Input() noCard: boolean = false;\n\n @Input() set siteSupplierHashlink(value: string) {\n if (value != this._siteSupplierHashlink.value && value != null) {\n this._siteSupplierHashlink.next(value);\n }\n }\n\n @Input() loadFromWorkflow: boolean = false;\n\n _siteSupplierHashlink = new BehaviorSubject(null);\n\n inProgress = false;\n DocumentProvider = DocumentProvider;\n QuestionType = QuestionType;\n newStartDate: Date;\n newEndDate: Date;\n description: FormControl = new FormControl();\n isNewStartDateAvailable: boolean = false;\n isNewEndDateAvailable: boolean = false;\n showPermitPendingControls: boolean = false;\n showSupplierFormPendingControls: boolean = false;\n showPendingControls: boolean = false;\n datetimePickerMode = DatetimePickerMode;\n FormDataStatus = FormDataStatus;\n FormType = FormType;\n\n updatePendingDisplayMode() {\n this.userService.info.subscribe(res => {\n this.showPendingControls =\n this.formDetail &&\n this.formDetail.companyId == this.userService.currentCompanyId &&\n this.userService.hasUserPermissionForCompany(UserPermission.ApproveRejectSiteInduction) &&\n (((this.formDetail.type == FormType.Permit) &&\n this.formDetail.status == FormDataStatus.PendingApproval) ||\n ((this.formDetail.type == FormType.SupplierForm) &&\n this.formDetail.status == FormDataStatus.PendingApproval) ||\n ((this.formDetail.type == FormType.AssetRegistration ||\n this.formDetail.type == FormType.AssetOperator) &&\n this.formDetail.entityStatusInfo.approveStatus == SiteAssetRequestApproveStatus.Pending));\n });\n }\n\n\n get isSupplierUser() {\n return this._siteSupplierHashlink.value?.length > 0;\n }\n\n constructor(private formService: FormService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private approveService: ApproveService,\n private userService: UserService,\n private siteSupplierService: SiteSupplierService,\n private toastrService: ToastrService,) {\n }\n\n ngOnInit(): void {\n if (!this.formDetail && this.formDataId) {\n this.inProgress = true;\n var request = this.isSupplierUser == true\n ? this.siteSupplierService.getFilledForm(this.formDataId, this._siteSupplierHashlink.value)\n : this.formService.getFilledForm(this.formDataId);\n\n request.subscribe(\n res => {\n if (res) {\n this.formDetail = res;\n this.convertStringDatesToDate();\n this.userService.info.subscribe(res => {\n });\n this.updatePendingDisplayMode();\n } else {\n this.modalService.error('No Details Available');\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n }, () => {\n this.inProgress = false;\n }\n )\n } else {\n this.userService.info.subscribe(res => {\n });\n if (this.formDetail?.endDate != null && this.formDetail?.type != FormType.Permit) {\n this.newEndDate = new Date(this.formDetail?.endDate);\n this.isNewEndDateAvailable = true;\n }\n this.convertStringDatesToDate();\n this.updatePendingDisplayMode();\n }\n }\n\n isExpiredDocument(doc: SiteAttendanceDocumentViewModel): boolean {\n return doc.expireDate != null && new Date(doc.expireDate) < new Date();\n }\n\n convertStringDatesToDate() {\n if (this.formDetail && this.formDetail.minStartDate) {\n this.formDetail.minStartDate = new Date(this.formDetail.minStartDate);\n }\n }\n\n editDate(isStartDate: boolean) {\n if (isStartDate) {\n this.isNewStartDateAvailable = true;\n this.newStartDate = new Date(this.formDetail.startDate);\n } else {\n this.isNewEndDateAvailable = true;\n this.newEndDate = this.formDetail.endDate ? new Date(this.formDetail.endDate) : new Date();\n }\n }\n\n datePickerValueChage($event: Date, isStartDate: boolean) {\n if (isStartDate) {\n if ($event == null)\n this.isNewStartDateAvailable = false;\n else\n this.newStartDate = $event;\n\n } else {\n if ($event == null)\n this.isNewEndDateAvailable = false;\n else\n this.newEndDate = $event;\n }\n }\n\n approveReject(isApprove: boolean) {\n\n this.modalService.confirm(`Are you sure you want to ${isApprove ? 'approve' : 'reject'} ?`, `Confirm the action`).subscribe(result => {\n if (result) {\n let entityType: ApproveEntityType = ApproveEntityType.PermitForms;\n if (this.formDetail.type == FormType.AssetRegistration) {\n entityType = ApproveEntityType.SiteAsset;\n this.entityId = this.entityId ?? this.formDetail.siteAssetId;\n } else if (this.formDetail.type == FormType.AssetOperator)\n entityType = ApproveEntityType.SiteAssetOperator\n else if (this.formDetail.type == FormType.SupplierForm)\n entityType = ApproveEntityType.SupplierForms\n\n if (entityType == ApproveEntityType.PermitForms) {\n if (this.isNewStartDateAvailable)\n this.newStartDate = new Date(this.newStartDate.getFullYear(),\n this.newStartDate.getMonth(),\n this.newStartDate.getDate(),\n 0, 0, 0\n );\n if (this.isNewEndDateAvailable)\n this.newEndDate = new Date(this.newEndDate.getFullYear(),\n this.newEndDate.getMonth(),\n this.newEndDate.getDate(),\n 23, 59, 59\n );\n }\n this.inProgress = true;\n let model = {\n approveEntityType: entityType,\n entityId: this.entityId ?? this.formDetail?.entityId ?? this.formDetail.formDataId,\n isApprove: isApprove,\n newStartDate: isApprove == true && this.isNewStartDateAvailable ? this.newStartDate : null,\n newEndDate: isApprove == true && this.isNewEndDateAvailable ? this.newEndDate : null,\n description: this.description?.value ?? ''\n } as ApproveRejectQueryModel;\n\n this.approveService.approveRejectEntity(model)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res == true) {\n this.toastrService.success(`${isApprove == true ? 'Approved' : 'Rejected'} Successfully.`);\n this.onRefresh.emit();\n } else\n this.toastrService.error(`${isApprove == true ? 'Approve' : 'Reject'} Failed.`);\n }, err => {\n this.modalService.error(err)\n })\n }\n });\n\n }\n\n isValid(): boolean {\n const startDate = this.isNewStartDateAvailable ? this.newStartDate : new Date(this.formDetail.startDate);\n const endDate = this.isNewEndDateAvailable ? this.newEndDate : new Date(this.formDetail.endDate);\n return startDate <= endDate;\n }\n\n openFormHistoryModal(formHistory) {\n this.modalService.show(formHistory, 'modal-lg');\n }\n\n onUpdateForm(result) {\n if (result) {\n this.formService.getFilledForm(this.formDetail?.formDataId)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res) {\n this.formDetail = res;\n }\n })\n }\n }\n}\n","
\n
\n
Activity Details
\n
\n \n
\n
\n
\n \n
\n {{ errorMessage }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Accompanying Persons\n \n \n Visited Announcements\n \n \n Scanned Items\n \n \n Forms\n \n \n Forms\n \n \n Supplier Documents\n \n \n\n \n
\n
\n \n \n
\n
\n
\n\n \n
\n
    \n
  • \n \n
  • \n
\n
\n
\n\n \n
\n
\n
\n Answer Date: {{ completeAnswerDate | datetime }}\n
\n \n
There is no Item!
\n
\n
\n
\n\n \n
\n
    \n
  • \n
    \n
    \n \n
    \n \n {{ accompany.firstName }} {{ accompany.lastName }}\n ({{ accompany.mobile }})\n \n
    \n
  • \n
\n
\n
\n\n \n
\n
\n
    \n
  • \n
    \n {{ visited.title }}\n \n \n Form: {{ visited.formTitle }} -\n \n \n Induction: ({{ visited.inductionTitle }}) -\n \n\n {{ visited.visitDate | datetime }}\n \n \n \n \n \n
    \n
  • \n
\n
\n
\n
\n\n \n
\n
\n
    \n
    \n
    {{ grp.value[0].scannableGroupName }}
    \n
  • \n
    \n
    {{ scan.name }}
    \n
    \n {{\n scan.scanDateTime | datetime\n }}\n
    \n
    \n \n
    \n
    \n
  • \n
    \n
\n
\n
\n
\n
\n
\n\n\n
\n
\n
Dispute Site Attendance
\n
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n\n\n
\n
\n
Dispute History
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n\n\n
\n
\n
    \n
    \n \n
    \n
\n
\n
\n
\n\n\n
\n
\n
    \n
    \n \n
    \n
\n
\n
\n
\n\n\n \n","import { Component, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { SiteAttendanceService } from '../../services/site-attendance.service';\nimport { QuestionAnswerInputModel } from '../../models/question-answer-inputmodel';\nimport { AsyncResult } from '../../models/helper-models';\nimport { SiteQuestionAnswerViewModel } from 'src/app/models/site_question_answer_view_model';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { SiteAttendanceDocumentViewModel } from 'src/app/models/site-attendance-document-viewmodel';\nimport { SiteAttendanceAccompanierModel } from 'src/app/models/site-attendance-accompanier-model';\nimport { UserContactInformation } from 'src/app/models/user-profile-viewmodel';\nimport { AnnouncementVisitViewModel } from '../../models/announcement-visit-view-model';\nimport { FileType } from '../../enums/file-type.enum';\nimport { AttendanceScannedItemViewModel } from 'src/app/models/attendance-scanned-item-viewmodel';\nimport { AnswerMode } from 'src/app/enums/answer-mode.enum';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteInductionViewModel } from 'src/app/models/site-induction-view-model';\nimport { DocumentProvider } from 'src/app/enums/document-provider.enum';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { SiteAttendanceDisputeType } from 'src/app/enums/site-attendance-dispute-type.enum';\nimport { FilledFormInfoViewModel } from 'src/app/models/filled-form-info-view-model';\nimport { clone } from 'src/app/helpers/general-functions';\nimport { SiteInductionFilledInfoViewModel } from 'src/app/models/induction/site-induction-filled-info-view-model';\nimport { SupplierDocumentViewModel } from 'src/app/models/supplier-document/site-supplier-document-version-signoff-viewModel';\nimport { SiteAttendanceApprovalStatusViewModel } from 'src/app/models/site-attendance-approval-status';\nimport { SiteAttendanceApprovalStatus } from 'src/app/enums/site-attendance-approval-status.enum';\nimport { FormType } from \"../../enums/form-type\";\nimport { SiteAttendanceAttachmentsViewModel } from \"../../models/site-attendance-attachments-viewmodel\";\nimport { EmergencyContactViewModel } from 'src/app/models/emergency-contact-view-model';\nimport { userInformationFields } from 'src/app/models/userProfile/worker-profile-view-model';\n\n@Component({\n selector: 'obc-question-answer',\n templateUrl: './question-answer.component.html',\n styleUrls: ['./question-answer.component.scss'],\n})\nexport class QuestionAnswerComponent implements OnInit {\n SiteAttendanceApprovalStatus = SiteAttendanceApprovalStatus;\n @Output() public result = new EventEmitter();\n @Output() public resultOfApproveReject = new EventEmitter();\n needParentRefresh: boolean = false;\n questionAnswer: QuestionAnswerInputModel;\n DocumentProvider = DocumentProvider;\n siteInductionFilledInfo: SiteInductionFilledInfoViewModel[];\n siteAttendanceApprovalStatus: SiteAttendanceApprovalStatusViewModel;\n @Input() set questionAnswerInput(\n _questionAnswerInput: QuestionAnswerInputModel\n ) {\n if (!_questionAnswerInput) return;\n this.questionAnswer = _questionAnswerInput;\n }\n\n @ViewChild('disputeModal') disputeModal!: TemplateRef;\n\n checkInAnswerResult: SiteQuestionAnswerViewModel[];\n checkOutAnswerResult: SiteQuestionAnswerViewModel[];\n siteAttendanceDocuments: SiteAttendanceDocumentViewModel[];\n accompanyingPersons: SiteAttendanceAccompanierModel[];\n visitedAnnouncements: AnnouncementVisitViewModel[];\n scannedItems: AttendanceScannedItemViewModel[];\n userInformation: UserContactInformation;\n announcementType = FileType;\n siteInductions: SiteInductionViewModel[];\n forms: FilledFormInfoViewModel[];\n permitForms: FilledFormInfoViewModel[];\n supplierDocuments: SupplierDocumentViewModel[];\n\n isCheckInSelected: boolean = true;\n errorMessage = '';\n inProgress: boolean = false;\n questionType = QuestionType;\n userInformationFields: any[];\n showDisputeHistoryType: SiteAttendanceDisputeType;\n\n @Input() largeButton = true;\n anonymousAttendanceKey = null;\n @Output() onAnnouncementVisit = new EventEmitter();\n callOnAnnouncementVisitEvent(announcementId: number) {\n this.onAnnouncementVisit.emit(announcementId);\n }\n @Output() onCheckedMandatorySignOff = new EventEmitter();\n callOnAnnouncementCheckedMandatorySignOffEvent(announcementId: number) {\n this.onCheckedMandatorySignOff.emit(announcementId);\n }\n\n get answerResult() {\n return this.isCheckInSelected\n ? this.checkInAnswerResult?.filter(a => a.siteInductionId == null)\n : this.checkOutAnswerResult;\n }\n get completeAnswerDate() {\n return this.userInformation == null ? null : this.isCheckInSelected\n ? (this.userInformation.checkInAnswerMode == AnswerMode.DelayedAnswer\n ? this.userInformation.completeCheckInAnswerDate\n : null)\n : (this.userInformation.checkOutAnswerMode == AnswerMode.DelayedAnswer\n ? this.userInformation.completeCheckOutAnswerDate\n : null);\n }\n\n constructor(private siteAttendanceService: SiteAttendanceService,\n private bsModalService: BsModalService,\n public modalService: ModalService) { }\n\n ngOnInit(): void {\n this.getData();\n }\n\n get showUserInformationPanel(): boolean {\n return (\n this.userInformation != null &&\n (this.userInformation.mobile != null ||\n this.userInformation.firstName != null ||\n this.userInformation.lastName != null)\n );\n }\n\n getData() {\n this.inProgress = true;\n this.siteAttendanceService\n .getSiteAttendanceAttachments(this.questionAnswer.siteAttendanceId)\n .subscribe(\n (res) => {\n this.setData(res);\n },\n (error) => {\n this.errorMessage = 'We were not able to retrieve the result';\n },\n () => {\n this.inProgress = false;\n }\n );\n }\n\n setData(res: SiteAttendanceAttachmentsViewModel) {\n this.checkInAnswerResult = res.checkInQuestionAnswers;\n this.checkOutAnswerResult = res.checkOutQuestionAnswers;\n this.siteAttendanceDocuments = res.documents;\n this.accompanyingPersons = res.accompaniers;\n this.userInformation = res.userInformation;\n this.visitedAnnouncements = res.visitedAnnouncements;\n this.scannedItems = res.scannedItems;\n this.siteInductions = res.siteInductions;\n this.forms = res.forms?.filter(item => item.type != FormType.Permit);\n this.permitForms = res.forms?.filter(item => item.type == FormType.Permit);\n this.supplierDocuments = res.supplierDocuments;\n this.siteAttendanceApprovalStatus = res.siteAttendanceApprovalStatus\n\n if (this.questionAnswer)\n this.questionAnswer.hasCheckOutDate = this.userInformation.checkOutDate != null;\n\n //Must be last expression\n this.setUserInformationFields();\n this.getSiteInductionsFilledInfo();\n }\n\n setUserInformationFields() {\n this.userInformationFields = userInformationFields.filter((f) =>\n (this.userInformation[f.key] != null &&\n (f.key != 'emergencyContactAsJson' || !EmergencyContactViewModel.isEmpty(JSON.parse(this.userInformation[f.key])))) ||\n (f.key == 'induction' && this.siteInductions != null));//allowComminiucateWithUser's value can be null\n }\n getAnnouncementTypeLabel(type: FileType) {\n if (type == this.announcementType.ExternalLink)\n return \"External Link\";\n else\n return this.announcementType[type];\n }\n\n onApproveOrReject($event: SiteInductionViewModel, induction: SiteInductionFilledInfoViewModel) {\n this.getData();\n this.needParentRefresh = true;\n this.resultOfApproveReject.emit()\n }\n\n answerResultOfInduction(induction: SiteInductionViewModel) {\n return this.checkInAnswerResult?.filter(a => a.siteInductionId == induction.siteInductionId);\n }\n documentResultOfInduction(induction: SiteInductionViewModel) {\n return this.siteAttendanceDocuments?.filter(a => a.siteInductionId == induction.siteInductionId);\n }\n\n get onlySiteAttendanceDocuments() {\n return this.siteAttendanceDocuments?.filter(doc => doc.siteInductionId == null);\n }\n\n disputeModalRef: any = null;\n onShowDisputeModal(template) {\n this.disputeModalRef = this.bsModalService.show(template);\n }\n\n onUpdateAttachment($event) {\n this.setData($event);\n this.disputeModalRef.hide();\n }\n\n showDisputHistory(showCheckInHistory: boolean, template) {\n this.showDisputeHistoryType = showCheckInHistory ? SiteAttendanceDisputeType.CheckInDate : SiteAttendanceDisputeType.CheckOutDate;\n this.disputeModalRef = this.bsModalService.show(template);\n }\n getSiteInductionsFilledInfo() {\n this.siteInductionFilledInfo = this.siteInductions.map(siteInduction => {\n var fullInduction = clone(siteInduction) as SiteInductionFilledInfoViewModel;\n fullInduction.siteInductionQuestionAnswers = this.answerResultOfInduction(siteInduction);\n fullInduction.siteInductionDocuments = this.documentResultOfInduction(siteInduction);\n return fullInduction;\n });\n }\n showDispute = () => this.onShowDisputeModal(this.disputeModal);\n onShowDisputeHistory = (isShow: boolean) =>\n this.showDisputHistory(isShow, this.disputeModal);\n}\n","export enum ExportAsFileType {\n CSV = 0,\n PDF = 1\n}","import { Injectable } from '@angular/core';\nimport { ExportAsFileType } from '../enums/export-as-file-type';\nimport { getCurrentDateTime } from '../helpers/datetime-helper';\nimport { DatetimePipe } from '../pipes/datetime.pipe';\nimport { GenderPipe } from '../pipes/gender.pipe';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExportAsService {\n constructor(private dateTimePipe: DatetimePipe, private genderPipe: GenderPipe) { }\n\n exportAs(rows: Object[], config: ExportAsConfig) {\n config.preFileName = (config.preFileName ? config.preFileName : 'obc-report') + '-' + getCurrentDateTime() + '.csv';\n\n switch (config.fileType) {\n case ExportAsFileType.CSV: this.exportToCsv(rows, config); return;\n }\n }\n\n private exportToCsv(rows: object[], config: ExportAsConfig) {\n if (!rows || !rows.length) {\n return;\n }\n const separator = config.separator ? config.separator : ',';\n const keys = config.fields ? config.fields.filter(f => f != null).map(c => c) :\n Object.keys(rows[0]).map(c => { return { fieldName: c, title: '' } as ExportAsFields });\n const headers = config.fields ? config.fields.filter(f => f != null).map(c => c.title).join(separator) : keys.join(separator);\n const csvContent =\n headers +\n '\\n' +\n rows.filter(f => f != null).map(row => {\n return keys.map(k => {\n let cell = row[k.fieldName] === null || row[k.fieldName] === undefined ? '' : row[k.fieldName];\n try {\n let cellType = k.type === null || k.type === undefined ? '' : k.type;\n if (cell === '') return '';\n if (cellType === FieldType.Date)\n cell = this.dateTimePipe.transform(cell, 'd/M/yyyy')\n else if (cell instanceof Date || cellType === FieldType.DateTime)\n cell = this.dateTimePipe.transform(cell)\n else if (cellType === FieldType.Mobile)\n cell = `+${cell.substring(0, 2)} ${cell.substring(2)}`; //we can use regex\n else if (cellType === FieldType.Gender)\n cell = this.genderPipe.transform(cell);\n else if (cellType === FieldType.Boolean)\n cell = cell ? 'Yes' : 'No';\n else if (cellType === FieldType.Object) {\n cell = k.function(cell);\n }\n else\n cell = cell.toString().replace(/\"/g, '\"\"');\n\n if (cell.search(/(\"|,|\\n)/g) >= 0 && cellType !== FieldType.Object)\n cell = `\"${cell}\"`;\n return cell;\n }\n catch {\n return cell;\n }\n }).join(separator);\n }).join('\\n');\n\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n if (navigator.msSaveBlob) { // IE 10+\n navigator.msSaveBlob(blob, config.preFileName);\n } else {\n const link = document.createElement('a');\n if (link.download !== undefined) {\n // Browsers that support HTML5 download attribute\n const url = URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', config.preFileName);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n }\n\n is_date(value: any): boolean {\n if (Object.prototype.toString.call(value) === \"[object Date]\")\n return true;\n\n if (!isNaN(value))\n return false;\n\n if (isNaN(new Date(value).getTime())) {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport interface ExportAsConfig {\n fields?: ExportAsFields[];\n separator?: string;\n fileType: ExportAsFileType;\n preFileName?: string;\n}\n\nexport interface ExportAsFields {\n title: string,\n fieldName: any,\n type?: FieldType,\n function?: Function\n}\n\n\nexport enum FieldType {\n DateTime = 0,\n Mobile = 1,\n Gender = 2,\n Date = 3,\n Boolean = 4,\n Object = 5,\n}\n","import { DashboardSearchModel } from '../models/dashboard-search-model';\n\nexport function getCurrentDateTime() {\n var currentdate = new Date();\n var datetime = currentdate.getDate() + \"-\"\n + (currentdate.getMonth() + 1) + \"-\"\n + currentdate.getFullYear() + \"-\"\n + currentdate.getHours() + \"-\"\n + currentdate.getMinutes() + \"-\"\n + currentdate.getSeconds();\n return datetime;\n}\n\n","
\n
\n
\n
\n
Contact Tracing
\n
\n \n
\n
\n \n \n
\n
\n
\n

Target User

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Full NameMobileSiteCheck In DateCheck Out Date
{{item.firstName}} {{item.lastName}}{{item.mobile | mobile}}{{item.site}}\n ({{item.siteReference }}) \n \n
{{item.checkInDate | datetime}}
\n
( {{item.checkInForm}} )
\n
\n
{{item.checkOutDate | datetime}}
\n
( {{item.checkOutForm}} )
\n
\n \n
\n
\n
\n
\n
\n

All users who had contact with the target user on {{selectedModel.site}}\n

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Full NameMobileCheck In DateCheck Out Date
\n \n
{{item.firstName}} {{item.lastName}}{{item.mobile | mobile}}\n
{{item.checkInDate | datetime}}
\n
( {{item.checkInForm}} )
\n
\n
{{item.checkOutDate | datetime}}
\n
( {{item.checkOutForm}} )
\n
\n \n
\n

Searching

\n
\n

No Contact Found!

\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n\n \n \n \n \n","import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SiteBasicInfo } from 'src/app/models/site-basicinfo';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\nimport { ModalService } from '../../services/modal.service';\nimport { AsyncResult } from '../../models/helper-models';\nimport { QuestionAnswerInputModel } from '../../models/question-answer-inputmodel';\nimport { ExportAsConfig, FieldType, ExportAsService } from 'src/app/services/export-as.service';\nimport { ExportAsFileType } from 'src/app/enums/export-as-file-type';\nimport { UserService } from 'src/app/services/user.service';\nimport { SiteAttendanceReportViewModel } from 'src/app/models/site-report-models';\n\n@Component({\n selector: 'obc-user-activity',\n templateUrl: './user-activity.component.html',\n styleUrls: ['./user-activity.component.css']\n})\nexport class UserActivityComponent implements OnInit {\n @Output() public result = new EventEmitter();\n inProgress: boolean = false;\n selectedModel: SiteAttendanceReportViewModel;\n @Input() set siteAttendance(model: SiteAttendanceReportViewModel) {\n this.selectedModel = model;\n if (this.selectedModel == null) return;\n this.inProgress = true;\n this.siteAttendanceService.getAttendanceContactTracing(model.siteAttendanceId).subscribe(\n res => {\n this.report = res;\n }, err => {\n console.log(err);\n }, () => {\n this.inProgress = false;\n }\n );\n };\n sites: SiteBasicInfo[];\n selectedSite: SiteBasicInfo;\n report: SiteAttendanceReportViewModel[] = null;\n searchQueryForm: FormGroup = null;\n questionAnswerInputModel: QuestionAnswerInputModel = new QuestionAnswerInputModel();\n pageInfo = `Identification of user who may have come into contact with another user. By Entering a\n particular user’s phone number, you will be able to see who they were in contact with\n between a date and time rage.`;\n filterListTerm: string;\n constructor(private siteAttendanceService: SiteAttendanceService,\n private modalService: ModalService,\n public userService: UserService,\n private exportAsService: ExportAsService\n ) { }\n\n ngOnInit() {\n\n }\n\n openModal(template, siteAttendanceId: number, isCheckInAnswer: boolean, hasCheckoutDate: boolean) {\n this.questionAnswerInputModel = { isCheckInAnswer: isCheckInAnswer, siteAttendanceId: siteAttendanceId, hasCheckOutDate: hasCheckoutDate };\n this.modalService.show(template, \"modal-lg\");\n }\n\n closeModal(result: AsyncResult) {\n this.modalService.hide();\n }\n\n //exportAsCSV() {\n // let config: ExportAsConfig = {\n // fileType: ExportAsFileType.CSV,\n // preFileName: 'attendance-report',\n // fields: [\n // { fieldName: 'firstName', title: 'First Name' },\n // { fieldName: 'lastName', title: 'Last Name' },\n // { fieldName: 'mobile', title: 'Mobile', type: FieldType.Mobile },\n // { fieldName: 'site', title: 'Site Name' },\n // { fieldName: 'siteReference', title: 'Site Reference' },\n // { fieldName: 'checkInDate', title: 'Check in Date', type: FieldType.DateTime },\n // ],\n // }\n // this.exportAsService.exportAs(this.report, config);\n //}\n exportAsCSV() {\n var query = {\n siteAttendanceId: this.selectedModel.siteAttendanceId\n };\n this.siteAttendanceService.exportContactsReportAsCsv(this.selectedModel.siteAttendanceId);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'formTitle',\n})\nexport class FormTitlePipe implements PipeTransform {\n transform(value: any): string {\n if (value) return value?.toString() + ' - ' ?? '?';\n }\n}\n","
\n
\n
\n \n
\n
Search Activities
\n \n \n \n \n\n\n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n \n {{ item.checkInDate | datetime }}\n \n
\n \n\n \n\n \n
\n
\n
\n ({{item.checkInForm}})\n
\n
\n {{item.checkInDistanceTitle}}\n
\n
\n \n
\n
\n \n {{ item.checkOutDate | datetime }}\n \n
\n \n\n \n
\n
\n
\n ({{item.checkOutForm}})\n
\n \n {{item.checkOutDistanceTitle}}\n
\n
\n \n\n \n \n \n\n
\n \n \n \n
\n
\n \n \n \n \n \n \n \n \n\n \n
\n \n
\n
\n \n \n {{ visit.title }}\n \n
\n ({{visit.formTitle | formTitle}} {{ visit.visitDate | datetime }})\n
\n
\n
\n
\n\n \n
\n
\n
\n
\n Name:\n {{permitForm.name}}\n
\n
\n
\n
\n Start Date:\n {{permitForm.startDate | date}}\n
\n
\n
\n
\n End Date:\n {{permitForm.endDate | date}}\n
\n
\n
\n
\n For:\n {{permitForm.registerFor | formRegisterFor}}\n
\n
\n
\n
\n
\n\n \n
\n {{ item.businessName }}\n
\n\n
\n {{ item.businessAbn ? \"(Abn: \" + item.businessAbn + \")\" : \"\" }}\n
\n\n
\n {{ item.businessAcn ? \"(Acn: \" + item.businessAcn + \")\" : \"\" }}\n
\n
\n\n \n
\n \n
\n {{ isCheckin ? \"CheckIn\" : \"CheckOut\" }}\n\n
    \n \n
  • \n
    \n \n {{ item.questionText }}\n
    \n \n {{ item.answer }}\n \n
    \n
    \n \n \n \n \n \n \n \n {{ isQuestionTimeIncluded(item.questionParameters) == true ? (item.answer | datetime) :\n (item.answer | date)}}\n \n \n \n \n \n {{ item.answer }}\n \n
    \n
    \n
  • \n
    \n
\n
\n
\n
\n
\n\n \n
\n\n
\n
\n
\n
\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { SiteAttendanceReportViewModel } from 'src/app/models/site-report-models';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { SiteActivityReportType } from 'src/app/enums/site-activity-report-type.enum';\nimport { UserService } from 'src/app/services/user.service';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { MobilePipe } from 'src/app/pipes/mobile.pipe';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { DatePipe } from 'src/app/pipes/date.pipe';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { SiteAttendanceApprovalStatus } from 'src/app/enums/site-attendance-approval-status.enum';\nimport { EmergencyContactViewModel } from 'src/app/models/emergency-contact-view-model';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { QuestionType } from 'src/app/enums/question-type';\nimport { ScheduleReportMode } from 'src/app/enums/schedule-report-mode';\nimport { ScheduleReportType } from 'src/app/enums/schedule-report-type';\nimport { AnnouncementVisitReportViewModel } from 'src/app/models/announcement-visit-report-viewmodel';\nimport { AsyncResult } from 'src/app/models/helper-models';\nimport { QuestionAnswerInputModel } from 'src/app/models/question-answer-inputmodel';\nimport { DateQuestionParameter } from 'src/app/models/questionParameters/date-question-parameter';\nimport { QuestionParameter } from 'src/app/models/questionParameters/question-parameter';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { Constants } from \"../../../../enums/constants\";\n\n@Component({\n selector: 'obc-site-activity-report',\n templateUrl: './site-activity-report.component.html',\n providers: [MobilePipe, DatetimePipe, DatePipe],\n styleUrls: ['./site-activity-report.component.scss']\n})\nexport class SiteActivityReportComponent implements OnInit {\n _selectedUserId = null;\n @Input() set selectedUserId(id: number) {\n this._selectedUserId = id;\n //this.prepareGridConfig();\n }\n get selectedUserId() {\n return this._selectedUserId;\n }\n @Input() siteIdList: number[] = [];\n\n @Input() isReportMode: boolean = false;\n\n @ViewChild('grid') grid: any;\n\n inProgress: boolean = false;\n siteActivityReportType = SiteActivityReportType;\n SiteAttendanceApprovalStatus = SiteAttendanceApprovalStatus;\n Table = Table;\n mode: \"answers\" | \"tracing\" | 'supplier' = \"answers\";\n selectedSiteActivityReport: SiteAttendanceReportViewModel = null;\n searchQueryForm: FormGroup = new FormGroup({\n user: new FormControl(null),\n });\n filterUserBy = UserAutoCompleteFilterByFields;\n questionAnswerInputModel: QuestionAnswerInputModel = new QuestionAnswerInputModel();\n selectedUser: any;\n gridColumns: GridColumn[];\n gridConfig: GridConfig = {} as GridConfig;\n\n constructor(private layoutService: LayoutService,\n private route: ActivatedRoute,\n public userService: UserService,\n private modalService: ModalService,\n private datetimePipe: DatetimePipe,\n ) {\n }\n\n userIdValidator = [];\n\n ngOnInit() {\n this.route.params.subscribe((res: Params) => {\n if (!this.isReportMode) {\n try {\n if (res['mode'] == \"answers\")\n this.mode = \"answers\";\n else this.mode = 'tracing';\n } catch (error) {\n this.mode = \"answers\";\n }\n }\n else {\n this.mode = 'answers';\n }\n\n if (!this.isReportMode) {\n if (this.mode == 'answers')\n this.layoutService.header = \"Activity Report\";\n else\n this.layoutService.header = \"Contact Tracing\";\n }\n this.userIdValidator = this.mode == \"tracing\" ? [Validators.required] : [];\n this.searchQueryForm?.controls['user']?.setValidators(this.userIdValidator);\n });\n\n this.prepareGridConfig();\n }\n\n prepareGridConfig() {\n\n let csvReportUrl;\n if (!this.isReportMode) {\n if (this.mode == 'tracing')\n csvReportUrl = '/api/SiteAttendance/export-contact-tracing-report-csv-as-job';\n else\n csvReportUrl = '/api/SiteAttendance/export-activity-report-csv-as-job';\n }\n\n this.gridConfig = new GridConfig({\n apiUrl: this.isReportMode ? '/api/workerprofile/site-activity-report' : '/api/SiteAttendance/site-activity-report',\n forceHideAllControlButtons: this.isReportMode,\n displayQuestionsFilter: this.reportType == SiteActivityReportType.SiteActivity,\n displayAnnouncementsFilter: this.reportType == SiteActivityReportType.SiteActivity,\n cacheKeyPrefix: this.isReportMode ? Constants.WORKER_PROFILE_REPORT_PREFIX : '',\n scheduleReport: {\n enabled: !this.isReportMode,\n mode: this.reportType == SiteActivityReportType.SiteActivity &&\n this.userService.hasCompanyFeature(\n ProductPlanFeature.SchaduleReport\n ) ? ScheduleReportMode.ScheduleReport : ScheduleReportMode.HashCode,\n type: ScheduleReportType.ActivityReport,\n reportColumns: [\n 'siteIds',\n {\n labelCaption: 'User Mobile',\n key: 'userIds',\n }\n ],\n },\n csvReportUrl: csvReportUrl,\n displayEnableMagicLink: !this.isReportMode && this.reportType == SiteActivityReportType.SiteActivity && this.userService.isGodUser(),\n tableType: this.tableSettingKey,\n displayGeneralSearch: true,\n refreshButtonValidity:\n this.reportType != SiteActivityReportType.ContactTracing ||\n (this.reportType == SiteActivityReportType.ContactTracing\n && this.searchQueryForm?.controls.user?.value?.id != undefined),\n generalSearchPlaceholder: \"Filter Result by Mobile, First Name, Last Name\",\n initialFilters: this.reportType == SiteActivityReportType.ContactTracing ? [\n this.searchQueryForm?.controls.user?.value?.id != undefined ? {\n key: 'userIds',\n value: [this.searchQueryForm?.controls.user?.value],\n } : null,\n {\n key: 'type',\n value: 1, // ContactTracing\n displayInFilterRenderer: false,\n }\n ] :\n [\n this.selectedUserId != null ?\n {\n key: 'userIds',\n value: [this.selectedUserId],\n displayInFilterRenderer: false,\n } : null,\n (this.siteIdList?.length ?? 0) ?\n {\n key: 'siteIds',\n value: this.siteIdList,\n displayInFilterRenderer: false,\n } : null,\n {\n key: 'type',\n value: 0,\n displayInFilterRenderer: false,\n }\n ].filter(f => f),\n apiResultCallback: (res) => {\n return {\n data: res.data,\n totalCount: res.totalCount\n };\n }\n });\n\n this.gridColumns = [\n !this.isReportMode ? {\n name: \"Full Name\",\n key: \"firstName\",\n type: FilterType.Text,\n gridTemplate: new GridTemplate().FullNameAccompanierCount({\n firstName: 'firstName',\n lastName: 'lastName',\n accompaniersText: 'accompaniers',\n accompanierCount: 'accompanierCount',\n })?.CsvFields(['firstName', 'lastName', 'accompaniers', 'accompanierCount']),\n propertyNameInQuery: 'names',\n } : null,\n {\n name: \"Supplier\",\n key: \"supplier\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'suppliers',\n visible: this.reportType == SiteActivityReportType.SiteActivity,\n },\n !this.isReportMode ? {\n name: \"Mobile\", key: \"mobile\", type: FilterType.Mobile,\n propertyNameInQuery: 'userIds',\n } : null,\n {\n name: \"Site\", key: \"site\",\n type: FilterType.Site,\n gridTemplate: new GridTemplate().SiteNameReference({\n siteName: 'site',\n siteReference: 'siteReference',\n }).CsvFields(['site', 'siteReference']),\n propertyNameInQuery: 'siteIds',\n },\n {\n name: \"Check In Time\",\n key: \"checkInDate\",\n propertyNameInQuery: 'checkInRanges',\n type: FilterType.DateTimeRange,\n gridTemplate: new GridTemplate().ComponentTemplateName('checkInDateTime').CsvFields([\n 'checkInDate',\n 'isOfflineCheckIn',\n 'offlineCheckInRegisterDate',\n 'isDisputedCheckInDate',\n 'siteAttendanceApprovalStatus',\n 'checkInForm',\n 'checkInDistanceTitle'\n ]),\n },\n {\n name: \"Check Out Time\",\n key: \"checkOutDate\",\n type: FilterType.DateTimeRange,\n gridTemplate: new GridTemplate().ComponentTemplateName('checkOutDateTime').CsvFields([\n 'checkOutDate',\n 'isOfflineCheckOut',\n 'offlineCheckOutRegisterDate',\n 'isDisputedCheckOutDate',\n 'checkOutForm',\n 'checkOutDistanceTitle'\n ]),\n propertyNameInQuery: 'checkOutRanges',\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.checkOutDate == undefined;\n });\n }\n },\n !this.isReportMode ? {\n name: \"Employee No\",\n key: \"employeeNo\",\n type: FilterType.Text,\n propertyNameInQuery: 'employees',\n visible: false,\n } : null,\n !this.isReportMode ? {\n name: \"Email\",\n key: \"email\",\n type: FilterType.Text,\n propertyNameInQuery: 'emails',\n visible: false,\n } : null,\n {\n name: \"Visitor Type\",\n key: \"visitorType\",\n type: FilterType.VisitorType,\n propertyNameInQuery: 'visitorTypeIds',\n visible: this.reportType == SiteActivityReportType.SiteActivity,\n },\n !this.isReportMode ? {\n name: \"Gender\", key: \"gender\", type: FilterType.Gender,\n propertyNameInQuery: 'genders',\n visible: false,\n } : null,\n !this.isReportMode ? {\n name: \"Date of Birth\", key: \"birthDay\", type: FilterType.DateRange,\n propertyNameInQuery: 'birthdayRanges',\n visible: false,\n } : null,\n !this.isReportMode ? {\n name: \"Industry\",\n key: \"industryTypeName\",\n type: FilterType.IndustryType,\n visible: false,\n propertyNameInQuery: 'industryTypes'\n } : null,\n !this.isReportMode ? {\n name: \"Business\",\n key: \"businessName\",\n type: FilterType.Text,\n gridTemplate: new GridTemplate().ComponentTemplateName('business').CsvFields([\n 'businessName',\n 'businessAbn',\n 'businessAcn',\n ]),\n propertyNameInQuery: 'businusses',\n visible: false,\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return (item.businessName == undefined || item.businessName?.toString()?.trim() == '')\n && (item.businessAcn == undefined || item.businessAcn?.toString()?.trim() == '')\n && (item.businessAbn == undefined || item.businessAbn?.toString()?.trim() == '');\n });\n }\n } : null,\n !this.isReportMode ? {\n name: \"Induction\",\n key: \"siteInductions\",\n type: FilterType.InductionId,\n enableSort: false,\n visible: this.reportType == SiteActivityReportType.SiteActivity,\n propertyNameInQuery: 'InductionIds',\n gridTemplate: new GridTemplate().Inductions({\n inductions: 'siteInductions',\n }),\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.siteInductions == undefined || item.siteInductions?.length == 0;\n });\n }\n } : null,\n {\n name: \"Duration Onsite\",\n key: 'workingDuration',\n type: FilterType.Duration,\n enableSort: false,\n propertyNameInQuery: 'durations',\n visible: this.reportType != SiteActivityReportType.SiteActivity || this.isReportMode,\n },\n ].filter((q) => !!q);\n\n if (this.reportType == SiteActivityReportType.SiteActivity && !this.isReportMode) {\n this.gridColumns = [\n ...this.gridColumns,\n ...[\n {\n name: \"Q&A\",\n key: \"siteQuestionAnswers\",\n type: FilterType.QuestionAndAnswer,\n gridTemplate: new GridTemplate().ComponentTemplateName('QA'),\n enableSort: false,\n enableFilter: false,\n hasIncludeFilter: true,\n visible: false,\n propertyNameInQuery: 'includeQuestionAnswers'\n },\n {\n name: \"Supplier Documents\",\n key: 'supplierDocuments',\n type: FilterType.SupplierDocuments,\n enableSort: false,\n enableFilter: false,\n propertyNameInQuery: 'includeSupplierDocuments',\n hasIncludeFilter: true,\n visible: false,\n gridTemplate: new GridTemplate().SupplierDocuments({\n supplierDocuments: 'supplierDocuments',\n }),\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.supplierDocuments == undefined || item.supplierDocuments?.length == 0;\n });\n }\n },\n {\n name: \"Announcements\",\n propertyNameInQuery: 'includeAnnouncements',\n key: 'announcementVisits',\n enableSort: false,\n enableFilter: false,\n hasIncludeFilter: true,\n gridTemplate: new GridTemplate().ComponentTemplateName('announcementsTemplate'),\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.announcementVisits == undefined || item.announcementVisits?.length == 0;\n });\n }\n }\n ]\n ]\n }\n\n if (!this.isReportMode) {\n this.gridColumns.push({\n name: \"Permit\",\n key: \"permitForms\",\n gridTemplate: new GridTemplate().ComponentTemplateName('permits'),\n type: FilterType.PermitForm,\n enableSort: false,\n enableFilter: false,\n visible: false,\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.permitForms == undefined || item.permitForms?.length == 0;\n });\n }\n });\n }\n\n this.gridColumns.push({\n name: \"Actions\",\n key: 'viewDetails',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails'),\n visible: true,\n });\n }\n\n get tableSettingKey(): Table {\n return this.reportType == SiteActivityReportType.SiteActivity ? Table.ActivityReport :\n Table.ContactTracingReport;\n }\n\n get reportType(): SiteActivityReportType {\n return this.mode == 'answers' ?\n SiteActivityReportType.SiteActivity\n : SiteActivityReportType.ContactTracing;\n }\n\n\n pad(num) {\n if (num < 10) {\n return \"0\" + num;\n } else {\n return \"\" + num;\n }\n }\n\n openModal(template, siteAttendanceId: number, isCheckInAnswer: boolean, hasCheckOutDate: boolean = false) {\n this.questionAnswerInputModel = {\n isCheckInAnswer: isCheckInAnswer,\n siteAttendanceId: siteAttendanceId,\n hasCheckOutDate: hasCheckOutDate\n };\n this.modalService.show(template, \"modal-lg\");\n }\n\n openContactTracingModal(template, siteAttendance) {\n this.selectedSiteActivityReport = siteAttendance;\n this.modalService.show(template, \"modal-lg\");\n }\n\n closeModal(result: AsyncResult) {\n this.modalService.hide();\n if (result && result.needParentRefresh == true)\n this.grid.loadData(0);\n }\n\n getAnnouncementIconCSSClass(visit: AnnouncementVisitReportViewModel) {\n switch (visit.type) {\n case FileType.Audio:\n return 'fas fa-file-audio text-primary';\n case FileType.ExternalLink:\n return 'fas fa-link text-primary';\n case FileType.Image:\n return 'fas fa-image text-success';\n case FileType.Pdf:\n return 'fas fa-file-pdf text-danger';\n case FileType.Text:\n return 'fas fa-file-alt text-info';\n case FileType.Video:\n return 'fas fa-video text-warning';\n case FileType.Youtube:\n return 'fas fa-link text-primary';\n }\n }\n\n onSelectedUser(user) {\n this.searchQueryForm.controls.user.setValue(user);\n this.selectedUser = user;\n this.prepareGridConfig();\n }\n\n getApprovalStatusFriendlyLabel(item: SiteAttendanceReportViewModel) {\n if (item.siteAttendanceApprovalStatus == SiteAttendanceApprovalStatus.Pending)\n return 'Pending Approval';\n else if (item.siteAttendanceApprovalStatus == SiteAttendanceApprovalStatus.NotRequiredApproval)\n return 'Approval Not Required';\n else if (item.siteAttendanceApprovalStatus == SiteAttendanceApprovalStatus.Rejected)\n return `Rejected By ${item.approvalStatusChangeBy} at ${this.datetimePipe.transform(item.approvalStatusChangeDateTimeOffset)}`;\n else if (item.siteAttendanceApprovalStatus == SiteAttendanceApprovalStatus.Approved)\n return `Approved By ${item.approvalStatusChangeBy} at ${this.datetimePipe.transform(item.approvalStatusChangeDateTimeOffset)}`;\n }\n\n\n _questionType = QuestionType;\n\n getQAs(reportItem: SiteAttendanceReportViewModel, isCheckin) {\n if (reportItem.siteQuestionAnswers == null) return [];\n return reportItem.siteQuestionAnswers.filter(i => i.isCheckInAnswer == isCheckin);\n }\n\n isQuestionTimeIncluded(questionParameters: string): boolean {\n let parameter = QuestionParameter.getParameter(questionParameters);\n return parameter.includeTime;\n }\n\n isShowTemplateColumns(mainColumn, detailColumn) {\n return this.grid.isShowTemplateColumns(mainColumn, detailColumn);\n }\n\n emergencyContactAnswerIsNotEmpty(answer) {\n try {\n let res = JSON.parse(answer) as EmergencyContactViewModel;\n return !EmergencyContactViewModel.isEmpty(res);\n } catch (_) {\n return false;\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-site-activity',\n templateUrl: './site-activity.component.html',\n\n styleUrls: ['./site-activity.component.css']\n})\nexport class SiteActivityComponent implements OnInit {\n ngOnInit(): void { }\n}\n","","
\n
\n
\n \n
Search Site Attendance
\n \n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n \n \n \n {{item.checkInDate | datetime}}\n \n \n ({{item.checkInForm}})\n \n \n\n \n \n {{item.checkOutDate | datetime}}\n \n \n ({{item.checkOutForm}})\n \n \n\n \n \n \n \n
\n
\n
\n
\n\n\n \n \n\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, } from '@angular/forms';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\nimport { ModalService } from '../../services/modal.service';\nimport { AsyncResult } from '../../models/helper-models';\nimport { QuestionAnswerInputModel } from '../../models/question-answer-inputmodel';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { GridColumn, GridConfig, GridTemplate, InitialFilter } from \"../../models/grid/grid.config\";\nimport { AttendanceDocumentReportViewModel } from \"../../models/attendance-document-report-viewmodel\";\nimport { Table } from \"../../enums/table.enum\";\n\n@Component({\n selector: 'obc-site-attendance',\n templateUrl: './site-attendance.component.html',\n styleUrls: ['./site-attendance.component.css'],\n})\nexport class SiteAttendanceComponent implements OnInit {\n @ViewChild('grid') grid: any;\n\n inProgress: boolean = false;\n searchQueryForm: FormGroup = null;\n questionAnswerInputModel: QuestionAnswerInputModel = new QuestionAnswerInputModel();\n initialFilters: InitialFilter[] = [];\n UserPermission = UserPermission;\n\n constructor(\n private layoutService: LayoutService,\n private formBuilder: FormBuilder,\n private siteAttendanceService: SiteAttendanceService,\n private modalService: ModalService,\n public userService: UserService,\n ) {\n }\n\n ngOnInit() {\n this.layoutService.header = 'Live Attendance Report';\n this.searchQueryForm = this.formBuilder.group({\n date: new FormControl(null),\n });\n\n this.searchQueryForm?.controls.date?.valueChanges?.subscribe((res) => {\n let filter = this.initialFilters?.find((item) => item.key == 'liveDate');\n if (res) {\n filter.value = res;\n } else {\n filter.value = null;\n }\n this.initialFilters = [\n ...this.initialFilters?.filter((item) => item.key != 'liveDate'),\n filter,\n ];\n })\n\n this.prepareGridConfig();\n }\n\n setNow() {\n this.searchQueryForm.get('date').setValue(new Date());\n }\n\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n prepareGridConfig() {\n let currentDate = new Date();\n currentDate.setFullYear(currentDate.getFullYear() - 1);\n\n this.initialFilters.push({\n key: 'liveDate',\n value: null,\n displayInFilterRenderer: false,\n });\n\n this.gridConfig = new GridConfig({\n apiUrl: '/api/SiteAttendance/site-attendance-web-report',\n tableType: Table.LiveAttendance,\n displayGeneralSearch: true,\n generalSearchPlaceholder: \"Filter Result by Mobile, First Name, Last Name, Site\",\n initialFilters: this.initialFilters,\n csvReportUrl: '/api/SiteAttendance/export-live-attendance-report-csv-as-job',\n generalSearchApiKeyName: 'searchTermToFilterUser',\n });\n this.gridColumns = [\n {\n name: \"Full Name\",\n key: \"firstName\",\n type: FilterType.Text,\n propertyNameInQuery: 'names',\n gridTemplate: new GridTemplate().FullNameAccompanierCount({\n firstName: 'firstName',\n lastName: 'lastName',\n accompaniersText: 'accompaniers',\n accompanierCount: 'accompanierCount',\n }).CsvFields([\n 'firstName',\n 'lastName',\n 'accompaniers',\n 'accompanierCount',\n ]),\n },\n {\n name: \"Supplier\",\n key: \"supplier\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'supplierIds',\n },\n {\n name: \"Mobile\",\n key: \"mobile\",\n type: FilterType.Mobile,\n propertyNameInQuery: 'userIds',\n },\n {\n name: \"Site\",\n key: \"siteName\",\n sortBy: \"site\",\n type: FilterType.Site,\n propertyNameInQuery: 'siteIds',\n gridTemplate: new GridTemplate().SiteNameReference({\n siteName: 'site',\n siteReference: 'siteReference',\n }).CsvFields([\n 'site',\n 'siteReference',\n ]),\n },\n {\n name: \"Check In Time\",\n key: \"checkInDate\",\n gridTemplate: new GridTemplate().ComponentTemplateName('checkInDateTime')\n .CsvFields([\n 'checkInDate',\n 'checkInForm'\n ]),\n enableFilter: false,\n },\n {\n name: \"Check Out Time\",\n key: \"checkOutDate\",\n gridTemplate: new GridTemplate().ComponentTemplateName('checkOutDateTime')\n .CsvFields([\n 'checkOutDate',\n 'checkOutForm'\n ]),\n enableFilter: false,\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.checkOutDate == undefined;\n });\n }\n },\n {\n name: \"Email\",\n key: \"email\",\n type: FilterType.Text,\n propertyNameInQuery: 'emails',\n },\n {\n name: \"Gender\",\n key: \"gender\",\n type: FilterType.Gender,\n propertyNameInQuery: 'genders',\n },\n {\n name: \"Date of Birth\",\n key: \"birthDay\",\n type: FilterType.DateRange,\n propertyNameInQuery: 'birthdayRanges',\n },\n {\n name: \"Industry\",\n key: \"industryTypeName\",\n type: FilterType.IndustryType,\n propertyNameInQuery: 'industryTypes',\n },\n {\n name: \"Business\",\n key: \"businessName\",\n type: FilterType.Text,\n propertyNameInQuery: 'businusses',\n },\n {\n name: \"Induction\",\n key: \"siteInductions\",\n type: FilterType.InductionId,\n propertyNameInQuery: 'InductionIds',\n enableSort: false,\n gridTemplate: new GridTemplate().Inductions({\n inductions: 'siteInductions',\n }),\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.siteInductions == undefined || item.siteInductions?.length == 0;\n });\n }\n },\n {\n name: \"Duration Onsite\",\n key: 'workingDuration',\n type: FilterType.Duration,\n enableSort: false,\n propertyNameInQuery: 'durationRange',\n isArray: false,\n },\n {\n name: \"Supplier Document Types\",\n key: 'supplierDocuments',\n enableSort: false,\n enableFilter: false,\n propertyNameInQuery: \"includeSupplierDocuments\",\n isArray: false,\n hasIncludeFilter: true,\n visible: false,\n gridTemplate: new GridTemplate().SupplierDocuments({\n supplierDocuments: 'supplierDocuments',\n }),\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.supplierDocuments == undefined || item.supplierDocuments?.length == 0;\n });\n }\n },\n {\n name: \"Details\",\n key: 'viewDetails',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails'),\n visible: true,\n },\n ];\n }\n\n\n openModal(\n template,\n siteAttendanceId: number,\n isCheckInAnswer: boolean,\n hasCheckOutDate: boolean\n ) {\n this.questionAnswerInputModel = {\n isCheckInAnswer: isCheckInAnswer,\n siteAttendanceId: siteAttendanceId,\n hasCheckOutDate: hasCheckOutDate,\n };\n this.modalService.show(template, 'modal-lg');\n }\n\n closeModal(_: AsyncResult) {\n this.modalService.hide();\n }\n\n isShowTemplateColumns(mainColumn, detailColumn) {\n return this.grid.isShowTemplateColumns(mainColumn, detailColumn);\n }\n\n}\n\n","import { DocumentMultiImageMode } from '../enums/document-multi-image-mode-enum';\nimport { OptionalMandatoryState } from '../enums/site-document-state.enum';\nimport { SiteQuestionViewModel } from \"./site-question-viewmodel\";\nimport { DocumentViewModel } from \"./document-viewmodel\";\n\nexport class BaseUserDocumentType {\n id: number;\n title: string;\n}\n\nexport class UserDocumentType extends BaseUserDocumentType {\n enableTitle: boolean;\n enableExpireDate: boolean;\n state: OptionalMandatoryState;\n multiImageMode: DocumentMultiImageMode;\n order: number;\n initialAnswer?: DocumentViewModel;\n isSelectable: boolean;\n parentId: number;\n isAvailable: boolean;\n}\n\nexport class RequiredDocumentViewModel {\n documentType: UserDocumentType;\n documentTypes: UserDocumentType[];\n displayOrder: number;\n additionalDocument: boolean\n questionId: number;\n inductionId: number;\n\n //Only To Show Document Mode Question Title,Rich Text and Others\n question: SiteQuestionViewModel;\n isDirty?: boolean;\n}\n","
  • \n","import { Component, EventEmitter, HostBinding, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { UserDocumentType } from \"../../../models/user-document-type\";\nimport Sortable from 'sortablejs';\nimport { uuid4 } from 'src/app/helpers/uuid';\nimport { OrderedEntity } from \"../../../models/ordered-entity\";\nimport { finalize } from \"rxjs/operators\";\nimport { UserDocumentTypeService } from \"../../../services/user-document-type.service\";\n\n@Component({\n selector: 'ul[obc-document-type-viewer-ul]',\n templateUrl: './document-type-viewer-ul.component.html',\n styleUrls: ['./document-type-viewer-ul.component.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {'[id]': 'randIdPrefix'}\n})\nexport class DocumentTypeViewerUlComponent implements OnInit {\n\n @Input('isRoot') isRootInput: boolean = false;\n @Input() children: UserDocumentType[] = [];\n @Input() allDocuments: UserDocumentType[] = [];\n @Input() canDelete: boolean;\n @Input() draggable: boolean;\n @Input() canAdd: boolean;\n @Input() canUpdate: boolean;\n @Input() cacheUniqueId: string = '';\n\n @Output() orderedList: EventEmitter = new EventEmitter();\n\n randIdPrefix = uuid4();\n @HostBinding('class.document-type-tree') isRoot: boolean = false;\n\n constructor(private userDocumentTypeService: UserDocumentTypeService) { }\n\n ngOnInit(): void {\n this.isRoot = this.isRootInput;\n }\n\n sortableOptions = {\n ghostClass: 'ghost-class',\n fallbackClass: \"ghost-class\",\n handle: \".move-handler\",\n dragoverBubble: true,\n forceFallback: true,\n onEnd: (event: any) => {\n\n let orderedList: OrderedEntity[] = [];\n let order = 0;\n for (let child of event.target.children) {\n orderedList.push({\n id: +child?.dataset?.id,\n order: order,\n })\n order++;\n }\n\n this.orderedList.emit(orderedList);\n\n }\n };\n\n ngAfterViewInit() {\n if(this.draggable) {\n let el = document.getElementById(`${this.randIdPrefix}`);\n Sortable.create(el, this.sortableOptions);\n }\n }\n\n onOrderedList(orderedList: OrderedEntity[]) {\n this.orderedList.emit(orderedList);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { UserDocumentType } from \"../../models/user-document-type\";\nimport { UserDocumentTypeService } from \"../../services/user-document-type.service\";\nimport { finalize } from \"rxjs/operators\";\nimport { OrderedEntity } from \"../../models/ordered-entity\";\n\n@Component({\n selector: 'obc-document-type-viewer',\n templateUrl: './document-type-viewer.component.html',\n styleUrls: ['./document-type-viewer.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class DocumentTypeViewerComponent implements OnInit {\n\n @Input() documents: UserDocumentType[] = [];\n inProgress: boolean = false;\n @Input() canDelete: boolean = true;\n @Input() canAdd: boolean = true;\n @Input() canUpdate: boolean = true;\n @Input() draggable: boolean = false;\n @Input() cacheUniqueId: string = '';\n @Output() orderedList: EventEmitter = new EventEmitter();\n\n constructor(private userDocumentTypeService: UserDocumentTypeService) { }\n ngOnInit(): void {\n if(this.documents?.length == 0) {\n this.inProgress = true;\n this.userDocumentTypeService.GetAllCompaniesUserDocumentTypes()\n .pipe(finalize(()=> this.inProgress = false))\n .subscribe((res) => {\n this.documents = res;\n });\n }\n }\n\n get rootDocuments() {\n return this.documents?.filter((item) => !item.parentId);\n }\n\n onOrderedList(orderedList: OrderedEntity[]) {\n this.orderedList.emit(orderedList);\n }\n}\n","
      \n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DocumentMultiImageMode } from '../enums/document-multi-image-mode-enum';\nimport { isNumber } from '../helpers/general-functions';\n\n@Pipe({\n name: 'multiImageModePipe',\n})\nexport class MultiImageModePipe implements PipeTransform {\n transform(value: unknown): string {\n if (isNumber(value)) {\n let valueAsNumber = parseInt(value.toString());\n switch (valueAsNumber) {\n case DocumentMultiImageMode.FrontBack:\n return 'Front / Back';\n case DocumentMultiImageMode.SingleImage:\n return 'Single Image';\n case DocumentMultiImageMode.MultiImage:\n return 'Multi Image';\n }\n }\n return value?.toString() ?? '?';\n }\n}\n","
      \n
      \n
      User Document Types
      \n \n
      \n
      \n \n\n \n \n\n
      \n {{errorMessage}}\n
      \n
      \n
      \n\n
      \n \n
      \n 0\">Edit User Document Type\n Add New User Document Type\n \n
      \n
      \n
      \n
      \n Parent: \n \n
      \n
      \n\n
      \n \n \n\n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n

      \n \n

      \n
      \n
      \n
      \n
      \n","import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { UserDocumentType } from 'src/app/models/user-document-type';\nimport { UserDocumentTypeService } from 'src/app/services/user-document-type.service';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { FormBuilder, FormControl, FormGroup, Validators, } from '@angular/forms';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { DocumentMultiImageMode } from 'src/app/enums/document-multi-image-mode-enum';\nimport { OrderedEntity } from 'src/app/models/ordered-entity';\nimport { finalize } from 'rxjs/operators';\nimport { ModalService } from \"../../services/modal.service\";\n\n@Component({\n selector: 'obc-user-document-types',\n templateUrl: './user-document-types.component.html',\n styleUrls: ['./user-document-types.component.css'],\n})\nexport class UserDocumentTypesComponent implements OnInit {\n\n @ViewChild('addEditUserDocumentType') addEditUserDocumentType: TemplateRef;\n\n types: UserDocumentType[];\n documentMultiImageMode = DocumentMultiImageMode;\n nothingFound: boolean = true;\n errorMessage: string = null;\n inProgress: boolean = false;\n inAddEditProgress: boolean = false;\n\n formGroup: FormGroup = null;\n bsModalRef: BsModalRef;\n\n constructor(\n private bsModalService: BsModalService,\n private layoutService: LayoutService,\n private fb: FormBuilder,\n private userDocumentTypeService: UserDocumentTypeService,\n private modalService: ModalService,\n ) {}\n\n addDocTypeReplaySub;\n updateDocTypeReplaySub;\n deleteDocTypeReplaySub;\n ngOnInit() {\n this.layoutService.header = 'Document Types';\n\n this.addDocTypeReplaySub = this.userDocumentTypeService.addDocumentTypeReplay.asObservable().subscribe((res: UserDocumentType) => {\n if (res && this.types) {\n this.openModal(this.addEditUserDocumentType, null, res);\n }\n });\n this.updateDocTypeReplaySub = this.userDocumentTypeService.updateDocumentTypeReplay.asObservable().subscribe((res: UserDocumentType) => {\n if (res && this.types) {\n let parent = this.types?.find((item) => item.id == res.parentId);\n this.openModal(this.addEditUserDocumentType, res, parent);\n }\n });\n this.deleteDocTypeReplaySub = this.userDocumentTypeService.deleteDocumentTypeReplay.asObservable().subscribe((res: UserDocumentType) => {\n if (res && this.types) {\n this.modalService.confirm('Are you sure?', 'delete document type').subscribe(iamsure => {\n if (iamsure === true) {\n this.inProgress = true;\n this.userDocumentTypeService.delete(res?.id)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(_ => {\n this.modalService.success('User document deleted successfully');\n this.getTypes();\n }, (err) => {\n this.modalService.error(err);\n });\n }\n });\n }\n });\n\n this.getTypes();\n }\n\n ngOnDestroy() {\n this.addDocTypeReplaySub.next();\n this.addDocTypeReplaySub.unsubscribe();\n this.updateDocTypeReplaySub.next();\n this.updateDocTypeReplaySub.unsubscribe();\n this.deleteDocTypeReplaySub.next();\n this.deleteDocTypeReplaySub.unsubscribe();\n }\n\n private getTypes() {\n this.inProgress = true;\n this.userDocumentTypeService.GetAllCompaniesUserDocumentTypes()\n .pipe(finalize(()=> this.inProgress = false))\n .subscribe((res) => {\n this.types = res;\n if (this.types.length > 0)\n this.nothingFound = false;\n });\n }\n\n selectedDocument: UserDocumentType;\n selectedDocumentParent: UserDocumentType;\n openModal(template, model: UserDocumentType = null, parent: UserDocumentType = null) {\n this.selectedDocumentParent = parent;\n this.selectedDocument = model;\n this.formGroup = this.fb.group({\n id: new FormControl(0),\n title: new FormControl('', [\n Validators.required,\n Validators.maxLength(255),\n ]),\n isSelectable: new FormControl(false, [Validators.required]),\n parentId: new FormControl(parent?.id),\n enableTitle: new FormControl(false, [Validators.required]),\n enableExpireDate: new FormControl(false, [Validators.required]),\n multiImageMode: new FormControl(0, [Validators.required]),\n });\n if (model != null) {\n this.formGroup.get('id').setValue(model.id);\n this.formGroup.get('title').setValue(model.title);\n this.formGroup.get('enableTitle').setValue(model.enableTitle);\n this.formGroup.get('enableExpireDate').setValue(model.enableExpireDate);\n this.formGroup.get('multiImageMode').setValue(model.multiImageMode);\n this.formGroup.get('parentId').setValue(model.parentId);\n this.formGroup.get('isSelectable').setValue(model.isSelectable);\n }\n this.bsModalRef = this.bsModalService.show(template);\n }\n\n onOrderedList(orderedList: OrderedEntity[]) {\n this.inProgress = true;\n this.userDocumentTypeService.reorder(orderedList)\n .pipe(finalize(()=> this.inProgress = false))\n .subscribe(res=> {\n this.getTypes();\n })\n }\n\n onSubmit() {\n if (this.formGroup.valid) {\n var model = new UserDocumentType();\n model.id = this.formGroup.get('id').value;\n model.title = this.formGroup.get('title').value;\n model.enableTitle = this.formGroup.get('enableTitle').value;\n model.enableExpireDate = this.formGroup.get('enableExpireDate').value;\n model.multiImageMode = this.formGroup.get('multiImageMode').value;\n model.isSelectable = this.formGroup.get('isSelectable').value;\n model.parentId = this.formGroup.get('parentId').value;\n\n if(model.parentId && this.ignoreChildrenOfCurrentDocument(this.selectedDocumentParent)?.includes(model.parentId)) {\n this.modalService.error('The selected parent is currently one of the children of the document type');\n return;\n }\n\n this.inAddEditProgress = true;\n if (model.id > 0) {\n // edit\n this.userDocumentTypeService.edit(model).subscribe((res) => {\n var refModel = this.types.filter((f) => {\n return f.id == model.id;\n })[0];\n refModel.enableExpireDate = model.enableExpireDate;\n refModel.title = model.title;\n refModel.enableTitle = model.enableTitle;\n refModel.multiImageMode = model.multiImageMode;\n this.bsModalRef.hide();\n this.inAddEditProgress = false;\n this.getTypes();\n });\n\n } else {\n // new\n this.userDocumentTypeService.add(model).subscribe((res) => {\n model.id = res;\n this.types.push(model);\n this.bsModalRef.hide();\n this.inAddEditProgress = false;\n\n this.getTypes();\n });\n }\n }\n }\n\n ignoreChildrenOfCurrentDocument(value: UserDocumentType) {\n return this.userDocumentTypeService\n ?.getDocumentTypeChildren(value, this.types)\n ?.map((item) => item.id) ?? [];\n }\n onSelectedDocumentType(value: UserDocumentType) {\n this.formGroup.get('parentId').setValue(value?.id);\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-god',\n templateUrl: './god.component.html',\n styleUrls: ['./god.component.css']\n})\nexport class GodComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","","import { CompanyType } from '../enums/company-type.enum';\nimport { SiteViewModel } from './site-viewmodel';\nimport { Timezone } from './time-zone';\n\nexport class BaseCompanyViewModel {\n public id?: number;\n public title: string;\n public description: string;\n public logoUrl?: string;\n public isActive?: boolean;\n public maxSites?: number;\n public companySupervisorEmailAddress?: string;\n}\nexport class CompanyViewModel extends BaseCompanyViewModel {\n public currentActiveSites: number;\n public sites: SiteViewModel[];\n public isTemplate: boolean;\n public activePlan: string;\n public activePlanId?: number;\n public timezoneId: number;\n public timezone: Timezone;\n public canAddSite: boolean;\n public tempdata: any[];\n public companyTypeId?: number;\n public companyType: CompanyType;\n public originalMaxSites?: number;\n public averageDailyCheckIns?: number;\n public maxAverageDailyCheckIns?: number;\n public endUserCanAddNewLocation : boolean;\n public smsSoftLimit?: number;\n public smsHardLimit?: number;\n}\n","export enum CompanyCategory{\n Private = 0,\n Industry = 1,\n MBAV = 2,\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError } from 'rxjs/operators';\nimport { ErrorService } from './error.service';\nimport { FullProductPlanViewmodel, RequestProductPlanModel } from '../models/product-plan-viewmodel';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProductPlanService {\n apiUrl: string = \"/api/ProductPlan\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n getActivePlan = (): Observable =>\n this.http.get(`${this.apiUrl}/get-activeplan`)\n .pipe(catchError(this._errorService.handleError));\n getAllPlans = (): Observable =>\n this.http.get(`${this.apiUrl}/get-all-plans`)\n .pipe(catchError(this._errorService.handleError));\n addUpdatePlan = (model: RequestProductPlanModel): Observable =>\n this.http.post(`${this.apiUrl}/add-update-plan`, model)\n .pipe(catchError(this._errorService.handleError));\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filterByProperty'\n})\nexport class FilterByPropertyPipe implements PipeTransform {\n transform(list: any[],value : any, property: string): any {\n if(list==null || list.length==0)\n return list;\n return list.filter(item => {\n return item[property] === value;\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CompanyCategory } from '../enums/company-category';\n\n@Pipe({\n name: 'companyCategory'\n})\nexport class CompanyCategoryPipe implements PipeTransform {\n\n transform(value:unknown): string {\n if(value === CompanyCategory.Private || value === 0) return \"Private\";\n if(value === CompanyCategory.Industry || value === 1) return \"Industry\";\n if (value === CompanyCategory.MBAV || value === 2) return \"MBAV\";\n return value?.toString();\n }\n\n}\n","
      \n
      \n
      Add/Edit Companies Info
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n
      \n
      \n {{errorMessage}}\n \n
      \n
      \n
      \n
      \n

      \n Loading ...\n

      \n

      \n Nothing Found\n

      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n company.maxSites) ||\n ((company.maxAverageDailyCheckIns != null && company.averageDailyCheckIns > company.maxAverageDailyCheckIns) && company.averageDailyCheckIns != null )}\">\n \n \n \n \n \n \n \n \n \n \n \n \n 0\">\n \n \n \n \n
      #TitleTypeStatusIs Template ?PlanActive SitesAverage CheckInsSMS Limit
      \n \n
      {{company.id}}{{company.title}}{{getCompanyTypeTitle(company.companyTypeId)}}\n \n Enable\n Disable\n \n {{ company.isTemplate ? 'Yes' : 'No' }}\n \n
      \n \n
      \n {{company.activePlan ? company.activePlan : 'No Plan'}}\n \n
      \n
      \n \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n {{company.currentActiveSites}} of {{company.maxSites != null ? company.maxSites : 'unlimited'}}\n
      \n
      \n
      \n \n
      \n \n {{company.averageDailyCheckIns}} of {{company.maxAverageDailyCheckIns != null ?\n company.maxAverageDailyCheckIns : 'unlimited'}}\n \n
      \n
      \n \n -\n \n \n
      \n
      \n
      \n {{company.smsSoftLimit ? company.smsSoftLimit:'-'}}\n /\n {{company.smsHardLimit ? company.smsHardLimit:'-'}}\n
      \n
      \n
      \n \n \n \n \n
      \n
      \n \n\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n
      \n Edit Company\n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n

      \n \n

      \n
      \n
      \n {{errorEditModalMessage}}\n \n
      \n
      \n
      \n
      \n\n
      \n \n
      \n \n Edit User(s) of Company\n
      \n {{selectedCompany.title}}\n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n {{message}}\n
      \n
      \n\n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      MobileNameFamilyIs Admininstrator?
      \n

      Nothing Found ...

      \n
      {{user.mobile | mobile}}{{user.firstName}}{{user.lastName}}\n Yes\n No\n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n Send Welcome Email\n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n Company Statistics\n
      \n
      \n \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      MonthAverage Check-Ins Per Days
      {{GetYearMonth(stat)}}{{stat.avarageDailyCheckIns}}
      \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, FormControl, Validators, EmailValidator, RequiredValidator } from '@angular/forms';\nimport { CompanyViewModel, BaseCompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { CompanyService } from 'src/app/services/company.service';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { CompanyUserViewModel } from 'src/app/models/company-user-view-model';\nimport { e168Validator, mobileIsValid } from 'src/app/helpers/mobile-format-validator';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { debounceTime, finalize } from 'rxjs/operators';\nimport { CountryService } from 'src/app/services/country.service';\nimport { Timezone } from 'src/app/models/time-zone';\nimport { ProductPlanService } from 'src/app/services/product-plan.service';\nimport { RequestProductPlanModel } from 'src/app/models/product-plan-viewmodel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { CompanyCategory } from 'src/app/enums/company-category';\nimport { emailListValidator } from 'src/app/helpers/email-list-validator';\nimport { SendWelcomeEmailUserProfile } from 'src/app/models/user-profile-viewmodel';\nimport { CompanyTypeViewModel } from '../../../models/company-type-viewmodel';\nimport { pagingSortingModel } from 'src/app/models/paging_model';\nimport { SortOrder } from 'src/app/enums/sort-order-enum';\nimport { CompaniesQueryModel } from 'src/app/models/get-companies-query-model';\nimport { PaginationInfo } from 'src/app/models/pagination-info';\nimport { CompanyStats } from 'src/app/models/company-stats';\nimport { getPageSizeByUrl } from \"../../../helpers/general-functions\";\nimport { UserService } from 'src/app/services/user.service';\nimport { GodUserPermission } from 'src/app/enums/god-user-permission.enum';\n\n@Component({\n selector: 'obc-manage-companies',\n templateUrl: './manage-companies.component.html',\n styleUrls: ['./manage-companies.component.css']\n})\nexport class ManageCompaniesComponent implements OnInit {\n //Paging\n pagingInfo: pagingSortingModel = {\n pageNumber: 0,\n pageSize: getPageSizeByUrl() ?? 30,\n sortBy: null,\n sortOrder: null,\n totalCount: 0,\n }\n enableWorkflowManagement: boolean = false;\n sortBy(column: string) {\n if (column == this.pagingInfo.sortBy) {\n this.pagingInfo.sortOrder = this.pagingInfo.sortOrder == SortOrder.ASC ? SortOrder.DESC : SortOrder.ASC;\n } else {\n this.pagingInfo.sortBy = column;\n this.pagingInfo.sortOrder = SortOrder.ASC;\n }\n this.getCompanies()\n }\n filterListTerm: string;\n filterFormcontrol = new FormControl();\n newCompanyFormGroup: FormGroup;\n editCompanyFormGroup: FormGroup;\n newUserFormGroup: FormGroup;\n inProgress: boolean = false;\n inAddEditProgress: boolean = false;\n companies: CompanyViewModel[] = null;\n templateCompanies: CompanyViewModel[] = null;\n users: CompanyUserViewModel[] = null;\n stats: CompanyStats[] = [];\n selectedCompany: CompanyViewModel = null;\n bsModalRef: BsModalRef;\n cloneACompanyTemplate: boolean = false;\n activePlanViewMode: ('view' | 'edit') = 'view';\n\n templateCompanyId: number = null;\n message: string;\n errorMessage: string;\n errorEditModalMessage: string;\n timezones: Timezone[];\n plans: RequestProductPlanModel[];\n companyCategory = CompanyCategory;\n companyTypes: CompanyTypeViewModel[];\n\n constructor(private layoutService: LayoutService,\n private companyService: CompanyService,\n private countrySerivce: CountryService,\n private productPlanService: ProductPlanService,\n private modalService: ModalService,\n private fb: FormBuilder,\n private bsModalService: BsModalService,\n private userService: UserService\n ) { }\n\n ngOnInit() {\n this.layoutService.header = \"Manage Companies\";\n this.newCompanyFormGroup = this.fb.group({\n title: new FormControl('', [Validators.required]),\n companyTypeId: new FormControl(this.userService.defaultCompanyType.value),\n timezone: new FormControl(this.userService.defaultServerTimeZone.value, [Validators.required]),\n maxSites: new FormControl(null, [Validators.min(0)]),\n isTemplate: new FormControl(false, [Validators.required]),\n description: new FormControl('')\n });\n\n this.getCompanyTypes();\n this.countrySerivce.getTimeZones().subscribe(res => this.timezones = res);\n this.getProductPlans();\n this.getCompanies();\n this.getTemplateCompanies();\n this.CheckWorkflowManagementPermission();\n\n this.filterFormcontrol.valueChanges.pipe(\n debounceTime(500),\n ).subscribe((searchTerm) => {\n this.filterListTerm = searchTerm;\n if (searchTerm == '' || (searchTerm != null && searchTerm.length >= 2)) {\n this.getCompanies();\n }\n });\n }\n\n getFormEntity(): CompaniesQueryModel {\n var query = {\n pagingInfo: {\n pageNumber: this.pagingInfo.pageNumber,\n pageSize: this.pagingInfo.pageSize,\n sortBy: this.pagingInfo.sortBy,\n sortOrder: this.pagingInfo.sortOrder,\n },\n searchTerm: this.filterListTerm,\n } as CompaniesQueryModel;\n return query;\n }\n\n private getCompanies(pageNumber?: number) {\n if (pageNumber != null && pageNumber != undefined)\n this.pagingInfo.pageNumber = pageNumber;\n var query = this.getFormEntity();\n this.inProgress = true;\n\n this.companyService.getCompanies(query).subscribe(res => {\n this.companies = res.data;\n this.pagingInfo.totalCount = res.totalCount;\n\n this.companies.forEach((c) => {\n c.tempdata = [];\n c.tempdata.push(new FormControl(c.activePlanId));\n c.tempdata.push('view');\n });\n this.inProgress = false;\n });\n }\n\n getCompanyTypes() {\n this.companyService.getCompanyTypes()\n .subscribe(res => this.companyTypes = res);\n }\n\n getTemplateCompanies() {\n this.companyService.getTemplateCompanies()\n .subscribe(res => this.templateCompanies = res);\n }\n\n getCompanyTypeTitle(companyTypeId: number) {\n return this.companyTypes?.find(type => type.id == companyTypeId)?.title ?? 'General';\n }\n\n switchViewMode(mode, company: CompanyViewModel) {\n company.tempdata[1] = mode;\n if (mode == 'edit')\n company.tempdata[0].setValue(company.activePlanId);\n }\n\n private getProductPlans() {\n this.inProgress = true;\n this.productPlanService.getAllPlans().subscribe(res => {\n this.plans = res;\n this.inProgress = false;\n });\n }\n\n getPlanTitle(plan: RequestProductPlanModel): string {\n if (plan == null) return 'No Plan';\n\n var period = '';\n switch (plan.billingPeriod) {\n case 0: period = 'Yearly'; break;\n case 1: period = 'Monthly'; break;\n case 2: period = 'Semiannually'; break;\n }\n\n return `${plan.title} ${period}`;\n }\n\n setActivePlan(company: CompanyViewModel) {\n if (company.activePlanId === company.tempdata[0].value) {\n company.tempdata[1] = 'view';\n return;\n }\n var plan = company.tempdata[0].value != null ? this.plans.filter(p => p.id == company.tempdata[0].value)[0] : null;\n var newPlanTitle = this.getPlanTitle(plan);\n var currentPlanTitle = company.activePlan ? `from ${company.activePlan}` : '';\n this.modalService.confirm(`Are you sure you want change plan ${currentPlanTitle} to ${newPlanTitle}?`).subscribe(confirmed => {\n if (confirmed) {\n this.inProgress = true;\n this.companyService.setActivePlan(company.id, company.tempdata[0].value).subscribe(res => {\n this.inProgress = false;\n if (res) {\n this.getCompanies();\n }\n }), err => {\n this.switchViewMode('view', company);\n return;\n }, () => {\n this.switchViewMode('view', company);\n return;\n }\n } else {\n company.tempdata[1] = 'view';\n return;\n }\n })\n }\n\n addCompany() {\n this.errorMessage = null;\n var company = new CompanyViewModel();\n company.title = this.newCompanyFormGroup.get('title').value;\n company.companyTypeId = this.newCompanyFormGroup.get('companyTypeId').value;\n company.description = this.newCompanyFormGroup.get('description').value;\n company.isActive = true;\n company.maxSites = this.newCompanyFormGroup.get('maxSites').value;\n company.timezoneId = parseInt(this.newCompanyFormGroup.get('timezone').value.toString());\n company.isTemplate = this.newCompanyFormGroup.get('isTemplate').value;\n\n this.inProgress = true;\n this.companyService.addCompany(company, this.templateCompanyId).subscribe(res => {\n company.id = res;\n //this.companies.push(company);\n this.inProgress = false;\n this.newCompanyFormGroup.reset();\n this.newCompanyFormGroup.controls.isTemplate.setValue(false);\n this.templateCompanyId = null;\n this.cloneACompanyTemplate = false;\n this.getCompanies();\n }, err => {\n this.errorMessage = err;\n this.inProgress = false;\n setTimeout(() => {\n this.errorMessage = null;\n }, 10000)\n\n });\n }\n\n onShowEditModal(template, company: CompanyViewModel) {\n this.errorEditModalMessage = null;\n this.selectedCompany = company;\n this.editCompanyFormGroup = this.fb.group({\n id: new FormControl(company.id),\n title: new FormControl(company.title, [Validators.required, Validators.maxLength(500)]),\n companyTypeId: new FormControl(company.companyTypeId),\n description: new FormControl(company.description),\n originalMaxSites: new FormControl(company.originalMaxSites, [Validators.min(0)]),\n smsSoftLimit: new FormControl(company.smsSoftLimit, [Validators.min(0)]),\n smsHardLimit: new FormControl(company.smsHardLimit, [Validators.min(0)]),\n companySupervisorEmailAddress: new FormControl(company.companySupervisorEmailAddress, [emailListValidator]),\n isActive: new FormControl(company.isActive),\n isTemplate: new FormControl(company.isTemplate, [Validators.required]),\n });\n this.bsModalRef = this.bsModalService.show(template);\n }\n\n onSubmitEditForm() {\n if (this.editCompanyFormGroup.valid) {\n var model = {\n id: this.selectedCompany.id,\n title: this.editCompanyFormGroup.get(\"title\").value,\n companyTypeId: this.editCompanyFormGroup.get(\"companyTypeId\").value,\n description: this.editCompanyFormGroup.get(\"description\").value,\n maxSites: this.editCompanyFormGroup.get(\"originalMaxSites\").value,\n smsSoftLimit: this.editCompanyFormGroup.get(\"smsSoftLimit\").value,\n smsHardLimit: this.editCompanyFormGroup.get(\"smsHardLimit\").value,\n isActive: this.editCompanyFormGroup.get(\"isActive\").value,\n companySupervisorEmailAddress: this.editCompanyFormGroup.get(\"companySupervisorEmailAddress\").value,\n isTemplate: this.editCompanyFormGroup.get(\"isTemplate\").value\n } as BaseCompanyViewModel;\n this.inAddEditProgress = true;\n this.companyService.editCompany(model).subscribe(res => {\n this.errorEditModalMessage = null;\n\n this.getCompanies();\n this.bsModalRef.hide();\n this.inAddEditProgress = false;\n }, err => {\n this.errorEditModalMessage = err;\n this.inAddEditProgress = false;\n setTimeout(() => {\n this.errorEditModalMessage = null;\n }, 10000)\n\n });\n }\n }\n\n onShowUsersModal(template, company: CompanyViewModel) {\n this.selectedCompany = company;\n this.users = [];\n this.message = '';\n this.newUserFormGroup = this.fb.group({\n mobile: new FormControl('', [Validators.required, e168Validator]),\n firstname: new FormControl(''),\n lastname: new FormControl(''),\n isAdmin: new FormControl(false),\n });\n this.getCompanyUserList();\n this.bsModalRef = this.bsModalService.show(template, Object.assign({}, { class: 'gray modal-lg' }));\n }\n\n getCompanyUserList() {\n this.inAddEditProgress = true;\n this.companyService.getCompanyUsers(this.selectedCompany.id)\n .pipe(finalize(() => { this.inAddEditProgress = false; }))\n .subscribe(res => {\n this.users = res;\n });\n }\n\n addNewUser() {\n if (!this.newUserFormGroup.valid) return;\n this.message = '';\n var newUser = {\n id: 0,\n companyId: this.selectedCompany.id,\n mobile: this.newUserFormGroup.get('mobile').value,\n firstName: this.newUserFormGroup.get('firstname').value,\n lastName: this.newUserFormGroup.get('lastname').value,\n isAdmin: this.newUserFormGroup.get('isAdmin').value ?? false,\n } as CompanyUserViewModel;\n if (!this.isValid(newUser)) return;\n this.inAddEditProgress = true;\n this.companyService.addUser(newUser).subscribe(res => {\n this.users.push(res);\n this.inAddEditProgress = false;\n this.newUserFormGroup.reset();\n }, (error) => {\n this.inAddEditProgress = false;\n this.message = error;\n });\n }\n\n isValid(user: CompanyUserViewModel): boolean {\n if (!user.mobile || user.mobile === '' || !mobileIsValid(user.mobile)) {\n this.message = 'the mobile number is not valid';\n return false;\n }\n\n let duplicatd = this.users.find(c => c.mobile.trim() === user.mobile.trim());\n if (duplicatd) {\n this.message = 'the mobile number is duplicated';\n return false;\n }\n\n return true;\n }\n\n onRemoveUser(user: CompanyUserViewModel) {\n this.inAddEditProgress = true;\n this.companyService.removeUser(user.id).subscribe(res => {\n if (res) {\n var index = this.users.indexOf(user);\n this.users.splice(index, 1);\n }\n this.inAddEditProgress = false;\n });\n }\n\n selectedUserIsAdmin: boolean;\n initEdit(user: CompanyUserViewModel) {\n this.selectedUserIsAdmin = user.isAdmin;\n user.inEdit = true;\n }\n\n updateUserAdminState(user: CompanyUserViewModel) {\n if (this.selectedUserIsAdmin === user.isAdmin) return;\n this.inAddEditProgress = true;\n this.companyService.updateUserAdminState(user.id, this.selectedUserIsAdmin)\n .pipe(finalize(() => { this.inAddEditProgress = false; }))\n .subscribe(res => {\n this.getCompanyUserList();\n }, error => {\n console.log(error);\n });\n }\n\n sendingWelcomeEmail() {\n this.inProgress = true;\n this.companyService.sendWelcomeEmail(this.sendWelcomeFormGroup.value as SendWelcomeEmailUserProfile)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.bsModalRef.hide();\n this.modalService.info(\"Welcome Email Sent Successfully\");\n },\n (e) => this.modalService.error(\"Send Welcome Email Failed!\"));\n }\n\n sendWelcomeFormGroup: FormGroup;\n onSendWelcomeEmail(template, companyId: number) {\n this.sendWelcomeFormGroup = new FormGroup({\n companyId: new FormControl(companyId),\n email: new FormControl('', [Validators.email, Validators.required]),\n firstName: new FormControl('', [Validators.required]),\n lastName: new FormControl('', [Validators.required])\n });\n this.bsModalRef = this.bsModalService.show(template);\n }\n\n onPageChange(paginationInfo: PaginationInfo) {\n this.pagingInfo.pageSize = paginationInfo.pageSize;\n this.getCompanies(paginationInfo.pageNumber);\n }\n\n inGettingStatsProgress: boolean = false;\n bsCompanyStatsModalRef: any = null;\n onGetCompanyStats(template, companyId: number) {\n this.stats = [];\n this.inGettingStatsProgress = true;\n this.bsCompanyStatsModalRef = this.bsModalService.show(template);\n this.companyService.getCompanyStats(companyId)\n .pipe((finalize(() => this.inGettingStatsProgress = false)))\n .subscribe(res => {\n this.stats = res;\n }, err => {\n this.modalService.error(\"unable to get company statistics\")\n })\n }\n GetYearMonth(stat: CompanyStats) {\n return `${this.MonthNames.en.month_names[stat.month - 1]} ${stat.year}`;\n }\n get MonthNames() {\n return {\n en: {\n month_names: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n month_names_short: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n }\n };\n };\n\n CheckWorkflowManagementPermission() {\n this.enableWorkflowManagement = this.userService.hasGodUserPermissionForCompany(GodUserPermission.WorkflowManagement);\n }\n\n getWorkflowManagementRoute(company: CompanyViewModel) {\n return `/company-workflow-template/${company.id}/${encodeURIComponent(company.title)}`;\n }\n}\n","export class SiteAttendanceBlockedUserViewModel {\n public id: number;\n public userId: number;\n public fullName: string;\n public firstName: string;\n public lastName: string;\n public mobile: string;\n public siteId: number;\n public siteName: string;\n public inEdit : boolean;\n}","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SiteAttendanceBlockedUserViewModel } from '../models/site-attendance-blocked-user-view-model';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError } from 'rxjs/operators';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteAttendanceBlockedUserService {\n\n baseUrl: string = '/api/SiteAttendanceBlockedUser';\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getBlockeUsers = (): Observable =>\n this._http.get(`${this.baseUrl}`)\n .pipe(catchError(this._errorService.handleError));\n\n add = (model: SiteAttendanceBlockedUserViewModel) =>\n this._http.post(`${this.baseUrl}`, model)\n .pipe(catchError(this._errorService.handleError));\n\n update = (model: SiteAttendanceBlockedUserViewModel) =>\n this._http.put(`${this.baseUrl}`, model)\n .pipe(catchError(this._errorService.handleError));\n\n delete = (siteBlockedUserId: number) =>\n this._http.delete(`${this.baseUrl}/${siteBlockedUserId}`)\n .pipe(catchError(this._errorService.handleError));\n}\n","
      \n
      \n

      Blocked Site Users

      \n
      \n\n \n \n
      \n \n
      \n
      \n
      \n \n\n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      MobileNameFamilySiteActions
      \n \n
      {{user.mobile | mobile}}{{user.firstName}}{{user.lastName}}{{user.siteName}}\n \n \n
      \n
      \n
      \n
      \n
      \n\n \n \n \n \n \n \n
      \n \n \n
      \n \n \n \n \n \n \n \n \n \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { SiteAttendanceBlockedUserService } from 'src/app/services/site-attendance-blocked-user.service';\nimport { finalize } from 'rxjs/operators';\nimport { SiteAttendanceBlockedUserViewModel } from 'src/app/models/site-attendance-blocked-user-view-model';\nimport { SiteBasicInfo } from 'src/app/models/site-basicinfo';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { SiteService } from 'src/app/services/site.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-site-attendance-blocked-user',\n templateUrl: './site-attendance-blocked-user.component.html',\n styleUrls: ['./site-attendance-blocked-user.component.scss']\n})\nexport class SiteAttendanceBlockedUserComponent implements OnInit {\n\n inProgress: boolean = false;\n addNewMode: boolean = false;\n selectedSite: SiteBasicInfo;\n filterUserBy = UserAutoCompleteFilterByFields;\n blockedUsers: SiteAttendanceBlockedUserViewModel[] = [];\n blockedUser: SiteAttendanceBlockedUserViewModel = new SiteAttendanceBlockedUserViewModel();\n inEdit = {};\n filterListTerm: string;\n constructor(private siteAttendanceBlockedUserService: SiteAttendanceBlockedUserService,\n private siteService: SiteService,\n private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.getBlockeUserList();\n }\n\n getBlockeUserList() {\n this.inProgress = true;\n this.siteAttendanceBlockedUserService.getBlockeUsers()\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(result => {\n this.blockedUsers = result;\n this.cancel();\n }, error => { console.log(error); });\n }\n\n initNew() {\n this.cancel();\n this.addNewMode = true;\n this.blockedUser = new SiteAttendanceBlockedUserViewModel();\n }\n\n initEdit(user) {\n this.blockedUsers.map(c => c.inEdit = false);\n user.inEdit = true;\n this.blockedUser = user;\n\n }\n\n addUpdateBlockedUser() {\n if (!this.isValidate()) return;\n this.inProgress = true;\n if (this.addNewMode) {\n this.siteAttendanceBlockedUserService.add(this.blockedUser)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => this.getBlockeUserList(),\n error => {\n this.modalService.error(error)\n });\n }\n // else if (this.blockedUser.id) {\n // this.siteAttendanceBlockedUserService.update(this.blockedUser)\n // .pipe(finalize(() => this.inProgress = false))\n // .subscribe(result => this.getBlockeUserList(),\n // error => { console.log(error) });\n\n // }\n }\n\n delete(user) {\n this.modalService.confirm(\"Are you sure? \", \"Delete \").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.siteAttendanceBlockedUserService.delete(user.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => this.getBlockeUserList(),\n error => { console.log(error) });\n }\n })\n }\n\n isValidate() {\n if (!this.blockedUser.siteId)\n return false;\n\n if (!this.blockedUser.userId)\n return false;\n\n return true;\n }\n\n cancel() {\n this.addNewMode = false;\n this.blockedUsers.map(c => c.inEdit = false);\n }\n}\n","export enum UserSystem {\n mobile = 0,\n desktop = 1,\n}\n","import { Injectable } from '@angular/core';\nimport { VideoViewModel, VideoList } from '../models/video-viewmodel';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AcademyService {\n apiUrl: string = \"/api/academy\";\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n getAll = (system: number): Observable =>\n this._http.get(`${this.apiUrl}/get-all/${system}`)\n .pipe(catchError(this._errorService.handleError));\n addVideo = (model: VideoViewModel): Observable =>\n this._http.post(`${this.apiUrl}/add-video`, model)\n .pipe(catchError(this._errorService.handleError));\n removeVideo = (id: number): Observable =>\n this._http.get(`${this.apiUrl}/remove-video/${id}`)\n .pipe(catchError(this._errorService.handleError));\n editVideo = (model: VideoViewModel): Observable =>\n this._http.post(`${this.apiUrl}/edit-video`, model)\n .pipe(catchError(this._errorService.handleError));\n pageRelatedVideo = (path: string, system: number): Observable =>\n this._http.get(`${this.apiUrl}/related/${system}?path=${path}`)\n .pipe(catchError(this._errorService.handleError));\n\n getCategorizedList = (system: number): Observable =>\n this._http.get(`${this.apiUrl}/get-categorized-list/${system}`)\n .pipe(catchError(this._errorService.handleError));\n}\n","
      \n
      \n
      Add/Edit Videos
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n Field \n
      \n \n
      \n
      \n
      \n Order BY\n
      \n \n
      \n
      \n
      \n Query\n
      \n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      OrderSystemTitlePageCategoryImageActions
      {{video.order}}{{getSystemName(video.system)}}{{video.title}}{{video.pageURL}}{{video.category}}\n \n \n

      \n \n \n

      \n
      \n
      \n\n
      \n
      \n\n\n
      \n \n
      \n 0\">Edit Video\n Add New Video\n \n
      \n
      \n
      \n \n
      \n
      \n System\n
      \n \n
      \n
      \n
      \n Title\n
      \n \n
      \n
      \n
      \n Category\n
      \n \n
      \n
      \n
      \n Description\n
      \n \n
      \n
      \n
      \n Video URL\n
      \n \n
      \n
      \n
      \n Image URL\n
      \n \n
      \n
      \n
      \n Order\n
      \n \n
      \n
      \n
      \n Page URL\n
      \n \n
      \n

      \n \n

      \n
      \n
      \n
      \n
      ","import { Component, OnInit, ViewChild, ElementRef, TemplateRef } from '@angular/core';\nimport { AcademyService } from 'src/app/services/academy.service';\nimport { VideoViewModel } from 'src/app/models/video-viewmodel';\nimport { FormGroup, FormControl, Validators, FormBuilder } from '@angular/forms';\nimport { UserSystem } from 'src/app/enums/user-system.enum';\nimport { EnumEntry, EnumToArray } from 'src/app/helpers/enum-to-array';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { urlValidator } from 'src/app/helpers/url-validator';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-manage-videos',\n templateUrl: './manage-videos.component.html',\n styleUrls: ['./manage-videos.component.css']\n})\nexport class ManageVideosComponent implements OnInit {\n\n _videos: VideoViewModel[];\n get videos(): VideoViewModel[] {\n if (this._videos == null) return null;\n var ret = this._videos;\n if (this.query != null && this.query.length > 0) {\n var q = this.query.toLowerCase();\n ret = ret.filter((v) => {\n var f1 = v.title == null ? true : v.title.toLowerCase().indexOf(q) >= 0;\n var f2 = v.category == null ? true : v.category.toLowerCase().indexOf(q) >= 0;\n var f3 = v.pageURL == null ? true : v.pageURL.toLowerCase().indexOf(q) >= 0;\n return f1 || f2 || f3;\n })\n }\n return ret.sort((a, b) => {\n if (a[this.orderByField] < b[this.orderByField]) {\n return -1 * this.orderDesc;\n }\n if (a[this.orderByField] > b[this.orderByField]) {\n return 1 * this.orderDesc;\n }\n return 0 * this.orderDesc;\n })\n }\n selectedVideo: VideoViewModel;\n formGroup: FormGroup;\n inAddEditProgress: boolean = false;\n inProgress: boolean = false;\n bsModalRef: BsModalRef;\n\n searchFormGroup: FormGroup;\n orderByField = \"order\";\n orderDesc = 1;\n query = null;\n\n constructor(private academyService: AcademyService,\n private layoutService: LayoutService,\n private bsModalService: BsModalService,\n private modalService : ModalService,\n public fb: FormBuilder\n ) { }\n\n ngOnInit() {\n this.layoutService.header = \"Manage Videos\";\n this.inProgress = true;\n this.searchFormGroup = this.fb.group({\n orderByField: new FormControl(\"order\"),\n orderDesc: new FormControl(1),\n query: new FormControl(null),\n });\n this.searchFormGroup.statusChanges\n .subscribe(res => {\n this.orderByField = this.searchFormGroup.get('orderByField').value;\n this.orderDesc = this.searchFormGroup.get('orderDesc').value;\n this.query = this.searchFormGroup.get('query').value;\n })\n this.academyService.getAll(null).subscribe(res => {\n this._videos = res;\n this.inProgress = false;\n });\n }\n\n onEdit(template, model: VideoViewModel) {\n this.formGroup = new FormGroup({\n id: new FormControl(model.id),\n title: new FormControl(model.title, [Validators.required]),\n category: new FormControl(model.category),\n description: new FormControl(model.description),\n videoURL: new FormControl(model.videoURL, [Validators.required, urlValidator]),\n imageURL: new FormControl(model.imageURL, [Validators.required, urlValidator]),\n order: new FormControl(model.order),\n pageURL: new FormControl(model.pageURL, [Validators.required]),\n system: new FormControl(model.system, [Validators.required])\n });\n this.selectedVideo = model;\n this.bsModalRef = this.bsModalService.show(template, Object.assign({}, { class: 'gray modal-lg' }));\n }\n\n onAdd(template) {\n this.formGroup = new FormGroup({\n id: new FormControl(0),\n title: new FormControl('', [Validators.required]),\n category: new FormControl(''),\n description: new FormControl(''),\n videoURL: new FormControl('', [Validators.required, urlValidator]),\n imageURL: new FormControl('', [Validators.required, urlValidator]),\n order: new FormControl(0),\n pageURL: new FormControl('', [Validators.required, Validators.maxLength(500)]),\n system: new FormControl(null, [Validators.required])\n });\n this.bsModalRef = this.bsModalService.show(template, Object.assign({}, { class: 'gray modal-lg' }));\n }\n\n onRemove(model: VideoViewModel) {\n this.academyService.removeVideo(model.id).subscribe(res => {\n var index = this._videos.indexOf(model);\n this._videos.splice(index, 1);\n });\n }\n\n onSubmit() {\n if (!this.formGroup.valid) {\n // close modal\n this.bsModalRef.hide();\n return;\n }\n this.inAddEditProgress = true;\n var model = {\n id: this.formGroup.get(\"id\").value,\n title: this.formGroup.get(\"title\").value,\n category: this.formGroup.get(\"category\").value,\n description: this.formGroup.get(\"description\").value,\n videoURL: this.formGroup.get(\"videoURL\").value,\n imageURL: this.formGroup.get(\"imageURL\").value,\n order: this.formGroup.get(\"order\").value as number,\n pageURL: this.formGroup.get(\"pageURL\").value,\n system: parseInt(this.formGroup.get(\"system\").value),\n } as VideoViewModel;\n if (this.formGroup.get(\"id\").value == 0) { // add\n this.academyService.addVideo(model).subscribe(res => {\n model.id = res;\n this._videos.push(model);\n // close modal\n this.bsModalRef.hide();\n this.inAddEditProgress = false;\n })\n } else { // edit\n this.academyService.editVideo(model).subscribe(res => {\n if (res) {\n var index = this._videos.indexOf(this.selectedVideo);\n this._videos.splice(index, 1, model);\n // close modal\n this.bsModalRef.hide();\n }\n else {\n this.modalService.error(\"unable to edit this video\", \"manage video\").subscribe(res=> {\n //alert(\"unable to edit this video\");\n });\n }\n this.inAddEditProgress = false;\n })\n }\n }\n\n getSystemName(id: number) {\n return this.userSystems.filter(i => i.id == id)[0].name;\n }\n\n get userSystems(): EnumEntry[] {\n return EnumToArray(UserSystem);\n }\n}\n","import { Component, OnInit, ViewChild, ElementRef, Input, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { VideoViewModel } from 'src/app/models/video-viewmodel';\n\n\n@Component({\n selector: 'obc-light-box',\n templateUrl: './light-box.component.html',\n styleUrls: ['./light-box.component.css']\n})\nexport class LightBoxComponent implements OnInit, OnDestroy {\n aspectRatio: number = 1.8;\n\n videoPlayerHeight: string = '100%';\n subscription: Subscription;\n @ViewChild('modal') modal: ElementRef;\n @Output() hide: EventEmitter = new EventEmitter();\n @Input() video : VideoViewModel;\n @Input() set resizeSubject(subject: Subject) {\n this.subscription = subject.subscribe(res => {\n this.videoPlayerHeight = `${this.modal.nativeElement.offsetWidth / this.aspectRatio}px`;\n })\n };\n\n constructor() { }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n ngOnInit() {\n }\n\n onclose() {\n this.hide.emit(\"\");\n }\n\n get videoUrl():string {\n return this.video.videoURL;\n }\n\n}\n","
      \n \n \n
      ","
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      0\">\n
      \n
      {{videoList.category}}
      \n
      \n
      \n
      \n
      \n
      \n \n

      {{video.title}}

      \n

      {{video.description}}

      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      ","import { Component, OnInit, HostListener } from '@angular/core';\nimport { AcademyService } from 'src/app/services/academy.service';\nimport { VideoViewModel, VideoList } from 'src/app/models/video-viewmodel';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { Subject, of } from 'rxjs';\nimport { UserSystem } from 'src/app/enums/user-system.enum';\nimport { groupBy } from 'rxjs/operators';\nimport { LayoutService } from 'src/app/services/layout.service';\n\n@Component({\n selector: 'obc-video-list',\n templateUrl: './video-list.component.html',\n styleUrls: ['./video-list.component.scss']\n})\nexport class VideoListComponent implements OnInit {\n query: string;\n bsModalRef: BsModalRef;\n _videos : VideoList[] = [];\n \n get videoLists () : VideoList[] {\n return this._videos;\n }\n\n getVideos(videoList: VideoList): VideoViewModel[] {\n if (videoList.videos == null) return null;\n var ret = videoList.videos;\n if (this.query != null && this.query.length > 0) {\n var q = this.query.toLowerCase();\n ret = ret.filter((v) => {\n var f1 = v.title == null ? true : v.title.toLowerCase().indexOf(q) >= 0;\n return f1;\n })\n }\n return ret;\n }\n\n windowsSize$: Subject = new Subject();\n video: VideoViewModel = null;\n constructor(private academyService : AcademyService,\n private layoutService: LayoutService,\n private bsModalService: BsModalService) { }\n\n ngOnInit() {\n this.layoutService.header = \"Video Gallery\";\n this.academyService.getCategorizedList(UserSystem.desktop)\n .subscribe(res => {\n this._videos = res;\n });\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n this.windowsSize$.next(event);\n }\n\n onhide() {\n if (this.bsModalRef)\n this.bsModalRef.hide();\n }\n\n onVideoCardClick(template,video : VideoViewModel) {\n this.video = video;\n this.bsModalRef = this.bsModalService.show(template, Object.assign({}, { class: 'gray modal-lg' }));\n setTimeout(() => {\n this.windowsSize$.next(null);\n }, 100);\n }\n\n}\n","export enum CheckInMode {\n Host = 0 ,\n Anonymous = 1,\n}\n","import { SiteAttendanceQuestionAnswer } from './site-attendance-question-answer';\nimport { UserBasicInfoViewModel } from '../user-basic-info-viewmodel';\nimport { RequiredDocumentAnswer } from '../requiredDocumentAnswer';\nimport { SiteAttendanceAccompanierModel } from '../site-attendance-accompanier-model';\nimport { SiteRequiredFieldValue } from '../site-required-field-viewmodel';\nimport { AttendanceFieldWithValue } from '../attendance-field-model';\nimport { SignedSupplierDocumentTypeVersionModel } from '../supplier-document/signed-supplier-document-type-version-model';\nimport { BaseAnnouncementVisit } from '../announcement-visit';\nimport { SupplierCheckinModel } from \"../supplier-checkin-model\";\n\nexport interface AttendanceRequestModel {\n Mode: RequestAttendanceMode;\n //isAuto?: boolean;\n latitude?: number;\n longtitude?: number;\n answers: SiteAttendanceQuestionAnswer[];\n}\n\nexport interface CheckInAttendanceRequestModel extends AttendanceRequestModel {\n siteId: number;\n accompanierCount?: number;\n accompaniers: SiteAttendanceAccompanierModel[];\n requiredFieldValues: SiteRequiredFieldValue[];\n signedSupplierDocumentTypeVersions: SignedSupplierDocumentTypeVersionModel[];\n visitedAnnouncements: BaseAnnouncementVisit[];\n}\n\nexport interface AnonymousCheckOutAttendanceRequestModel extends AttendanceRequestModel {\n supplierCheckOutData: SupplierCheckinModel;\n}\n\nexport interface CheckOutAttendanceRequestModel extends AttendanceRequestModel {\n siteId: number;\n siteAttendanceId: number;\n documents: RequiredDocumentAnswer[];\n supplierCheckOutData: SupplierCheckinModel;\n}\n\nexport interface ManualCheckInAttendanceRequestViewModel extends CheckInAttendanceRequestModel {\n siteAttendanceInfo: UserBasicInfoViewModel;\n documents: RequiredDocumentAnswer[];\n inductions: any[];\n allowComminiucateWithUser?: boolean;\n visitorTypeId?: number;\n supplierCheckinData: SupplierCheckinModel;\n requestSource: RequestSource;\n}\n\nexport interface AnonymousCheckInAttendanceRequestModel extends CheckInAttendanceRequestModel {\n siteAttendanceInfo: UserBasicInfoViewModel;\n documents: RequiredDocumentAnswer[];\n allowComminiucateWithUser?: boolean;\n session: string;\n inductions: any[];\n visitorTypeId?: number;\n supplierCheckinData: SupplierCheckinModel;\n}\n\nexport interface SiteAttendanceViewModel {\n userId: number;\n siteName: string;\n siteId: number;\n checkInDate: Date;\n siteAttendanceId: number;\n}\n\nexport interface AnonymousSiteAttendanceViewModel extends SiteAttendanceViewModel {\n logoUrl: string;\n anonymousCheckInKey: any;\n}\n\n\nexport enum RequestAttendanceMode {\n Self = 0,\n Manual = 1,\n Auto = 2,\n UndoAutoCheckOut = 3,\n}\n\nexport enum RequestSource {\n Portal = 0,\n Mobile = 1,\n}\n","
      \n
      \n \n \n
      \n Please enter valid mobile number\n
      \n
      \n Mobile number is not valid\n
      \n
      0\"\n class=\"valid-feedback\" style=\"display: block;\">\n {{successMessage}}\n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n\n \n
      ","import { EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { debounce, debounceTime } from 'rxjs/operators';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { e168Validator2 } from 'src/app/helpers/mobile-format-validator';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { UserAutocompleteComponent } from '../user-autocomplete/user-autocomplete.component';\n\n@Component({\n selector: 'app-user-selector',\n templateUrl: './user-selector.component.html',\n styleUrls: ['./user-selector.component.scss']\n})\nexport class UserSelectorComponent implements OnInit {\n userQualifierFiledList = ['id', 'firstName', 'lastName', 'mobile', 'isIncompleteRegister'];\n finalUser: UserBasicInfoViewModel = new UserBasicInfoViewModel();\n emittedUser: UserBasicInfoViewModel = new UserBasicInfoViewModel();\n FilterUserBy = UserAutoCompleteFilterByFields;\n @Input() successMessage = \"\";\n @Input() filterByCurrentUserRegion?: boolean = false;\n get isMobileValid(): boolean {\n var valid = new FormControl(this.finalUser?.mobile, [e168Validator2])?.valid;\n return valid;\n }\n\n @ViewChild('mobile') mobile: UserAutocompleteComponent;\n @ViewChild('firstname') firstname: UserAutocompleteComponent;\n @ViewChild('lastname') lastname: UserAutocompleteComponent;\n\n @Output() userChange = new EventEmitter();\n\n constructor() { }\n\n ngOnInit() {\n this.inputChangeObservable\n .pipe(debounceTime(500))\n .subscribe(res => {\n this.userChange.emit(res);\n })\n }\n inputChangeObservable = new BehaviorSubject(null);\n onInputChange($event) {\n if ($event.field == 'mobile' && this.finalUser.mobile != $event.value)\n {\n this.finalUser.id = null;\n this.resetFirstnameLastname();\n }\n this.finalUser[$event.field] = $event.value;\n this.onUserChange();\n }\n\n onSelectUser($event) {\n // if user selected update all inputs\n if ($event.id != null) {\n this.finalUser = new UserBasicInfoViewModel($event);\n this.onUserChange();\n }\n }\n\n public reset() {\n this.mobile.reset();\n this.firstname.reset();\n this.lastname.reset();\n }\n public resetFirstnameLastname(){\n this.firstname.reset();\n this.lastname.reset();\n }\n onUserChange() {\n if (!this.isEqual(this.finalUser, this.emittedUser)) {\n this.inputChangeObservable.next(this.finalUser);\n this.emittedUser = new UserBasicInfoViewModel(this.finalUser);\n }\n }\n\n public isEqual(value1: UserBasicInfoViewModel, value2: UserBasicInfoViewModel): boolean {\n var list = [value2, value1];\n if (list.map(x => !x).length % 2 == 1) return false;\n var keys = Object.keys(value1);\n for (let index = 0; index < keys.length; index++) {\n const element = keys[index];\n if (value1[element] != value2[element])\n return false;\n }\n return true;\n }\n}\n","export enum SupplierDocumentConfigMode {\n DisableSign = 0,\n MandatorySign = 1,\n}","\n \n
      \n \n
      \n \n
      \n
      \n\n \n\n\n\n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n\n\n
      \n {{ documentTitle }}\n
      \n
      \n\n\n
      {{part}}
      \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { ModalService } from \"../../../services/modal.service\";\nimport { HtmlNewLinePipe } from 'src/app/pipes/html-new-line.pipe';\n\n@Component({\n selector: 'obc-supplier-document-description-viewer',\n templateUrl: './supplier-document-description-viewer.component.html',\n styleUrls: ['./supplier-document-description-viewer.component.scss']\n})\nexport class SupplierDocumentDescriptionViewerComponent implements OnInit {\n\n @Input() buttonTitle: string = 'Amendment';\n @Input() documentTitle: string;\n @Input() description: string;\n @Input() icon: string;\n @Input() classes: string = 'btn btn-info'\n @Input() displayAsModal: boolean = true;\n\n constructor(private modalService: ModalService) { }\n\n ngOnInit(): void {\n }\n\n getDescriptionSplittedByNewLine() {\n return this.description?.split('\\n');\n }\n\n onDisplayDescription(template: any) {\n this.modalService.show(template, \"modal-lg\");\n }\n\n}\n","
      \n Site Supplier Document Version Id is needed\n
      \n\n \n \n
      \n \n
      \n \n
      \n
      \n\n \n \n \n
      \n\n\n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n\n\n
      \n Comments {{commentsList?.length > 0 ? '(' + commentsList?.length + ')' : ''}}\n
      \n \n \n
      \n
      \n
      \n\n\n
      0\">\n
      \n
      \n
      \n
      \n
      {{ comment.fullName }}
      \n
      ({{comment.mobile | mobile}})
      \n
      \n
      \n {{ comment.commentDate | datetime}}\n\n
      \n
      \n
      \n \n {{ supplierDocCommentAcknowledgementText }}\n
      \n
      \n {{ comment.comment }}\n
      \n
      \n
      \n
      \n\n
      \n There is no comment submitted yet.\n
      \n \n
      \n
      \n
      \n\n
      \n
      \n
      \n Add New Comment\n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n \n \n {{ supplierDocCommentAcknowledgementText }}\n
      \n
      \n \n \n Notify Supplier\n
      \n
      \n \n
      \n
      \n
      \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { finalize } from \"rxjs/operators\";\nimport { FormControl, Validators } from \"@angular/forms\";\nimport {\n SiteSupplierDocumentVersionCommentModel,\n SiteSupplierDocumentVersionCommentViewModel\n} from \"../../../models/supplier-document/site-supplier-document-version-comment-model\";\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\nimport { SupplierDocumentService } from \"../../../services/supplier-document.service\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ModalService } from \"../../../services/modal.service\";\n\n@Component({\n selector: 'obc-site-supplier-document-version-comments',\n templateUrl: './site-supplier-document-version-comments.component.html',\n styleUrls: ['./site-supplier-document-version-comments.component.scss']\n})\nexport class SiteSupplierDocumentVersionCommentsComponent implements OnInit {\n\n @Input() set comments(value: SiteSupplierDocumentVersionCommentViewModel[]) {\n this.commentsList = value ?? [];\n }\n\n commentsList: SiteSupplierDocumentVersionCommentViewModel[] = [];\n @Input() displayAsModal: boolean = true;\n @Input() siteSupplierDocumentVersionId: number;\n @Input() hasPermissionToAddSupplierDocumentComment: boolean;\n @Input() supplierDocCommentAcknowledgementText: string = 'Acknowledge';\n @Input() classes: string;\n @Input() noIcon: boolean = false;\n\n inProgress: boolean = false;\n commentsModalRef: BsModalRef;\n\n constructor(private bsModalService: BsModalService,\n private modalService: ModalService,\n private supplierDocumentService: SupplierDocumentService,\n private toastr: ToastrService) {\n }\n\n ngOnInit(): void {\n }\n\n displayCommentsModal(template: any) {\n this.commentsModalRef = this.bsModalService.show(template, {\n ignoreBackdropClick: true,\n class: 'modal-lg'\n });\n }\n\n closeCommentsModal() {\n this.commentsModalRef.hide();\n }\n\n /*Add New Comment*/\n hasAcknowledgment: boolean = false;\n notifySupplier: boolean = false;\n comment: FormControl = new FormControl('', [Validators.required]);\n addNewCommentModalRef: BsModalRef;\n\n displayAddNewCommentModal(template: any) {\n this.addNewCommentModalRef = this.bsModalService.show(template, {\n ignoreBackdropClick: true,\n class: 'modal-lg'\n });\n }\n\n closeNewCommentModal() {\n this.addNewCommentModalRef.hide();\n }\n\n isNewCommentFormValid(): boolean {\n return this.comment.valid || this.hasAcknowledgment === true;\n }\n\n submitNewComment() {\n if (this.isNewCommentFormValid()) {\n\n }\n this.supplierDocumentService.addSiteSupplierDocumentVersionComment({\n siteSupplierDocumentVersionId: this.siteSupplierDocumentVersionId,\n comment: this.comment.value,\n hasAcknowledgement: this.hasAcknowledgment,\n notifySupplier: this.notifySupplier,\n } as SiteSupplierDocumentVersionCommentModel)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res.success == true) {\n this.toastr.success('Comment Submitted Successfully.');\n this.commentsList = res.data ?? [];\n this.closeNewCommentModal();\n this.resetNewCommentControls();\n } else\n this.modalService.error(`Failed.`);\n }, err => {\n this.modalService.error(err)\n })\n }\n\n resetNewCommentControls() {\n this.comment.setValue('');\n this.hasAcknowledgment = false;\n this.notifySupplier = false;\n }\n}\n","
      \n
      \n
      \n
      \n {{fc.item.supplierDocumentTypeName}}\n \n \n \n {{fc.item.version}}\n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n \n \n \n
      You must view all files to enable
      \n
      \n
      \n 0\"\n [siteSupplierDocumentVersionId]=\"fc.item.siteSupplierDocumentVersionId\"\n [hasPermissionToAddSupplierDocumentComment]=\"hasPermissionToAddSupplierDocumentComment\"\n [supplierDocCommentAcknowledgementText]=\"supplierDocCommentAcknowledgementText\"\n [comments]=\"fc.item.supplierDocumentVersionComments\"\n [classes]=\"'ml-2'\"\n [displayAsModal]=\"false\"\n >\n \n \n \n
      \n
      \n
      \n
      \n
      \n\n\n \n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormArray, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { SignatureData } from 'src/app/custom-controls/signature-pad/signature-pad.component';\nimport { OptionalMandatoryState } from 'src/app/enums/site-document-state.enum';\nimport { SupplierDocumentConfigMode } from 'src/app/enums/supplier-document-config-mode.enum';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { SignedSupplierDocumentTypeVersionModel } from 'src/app/models/supplier-document/signed-supplier-document-type-version-model';\nimport { SupplierDocumentViewModel } from 'src/app/models/supplier-document/site-supplier-document-version-signoff-viewModel';\nimport { ApproveEntityType } from 'src/app/enums/approve-entity-type';\n\n@Component({\n selector: 'obc-supplier-document-renderer',\n templateUrl: './supplier-document-renderer.component.html',\n styleUrls: ['./supplier-document-renderer.component.scss']\n})\nexport class SupplierDocumentRendererComponent implements OnInit {\n _documents: SupplierDocumentViewModel[] = [];\n formArray = new FormArray([]);\n SiteDocumentState = OptionalMandatoryState;\n SupplierDocumentConfigMode = SupplierDocumentConfigMode;\n currentCustomFormControlToSign: CustomFormControl;\n signModalRef: any;\n get isSignMode(): boolean { return this.supplierDocumentConfigMode == SupplierDocumentConfigMode.MandatorySign; }\n\n @Input() hasPermissionToAddSupplierDocumentComment: boolean;\n @Input() supplierDocCommentAcknowledgementText: string;\n\n ApproveEntityType = ApproveEntityType;\n\n @Input() set documents(value: SupplierDocumentViewModel[]) {\n this._documents = value;\n if (this._documents.length > 0) {\n this.formArray.clear();\n let reqValidators = [Validators.requiredTrue];\n for (let index = 0; index < this._documents.length; index++) {\n const document = this._documents[index];\n\n let fc = new CustomFormControl(this.isSignMode ? '' : false, document, document.signOffMode == OptionalMandatoryState.Mandatory ? reqValidators : []);\n this.formArray.push(fc);\n }\n }\n else {\n this.formArray.clear();\n }\n }\n\n @Output('onFileViewed') onFileViewedOutput = new EventEmitter();\n\n constructor(private modalService: BsModalService) { }\n\n ngOnInit() {\n }\n\n getAnswers(): SignedSupplierDocumentTypeVersionModel[] {\n let list = this.formArray.controls.map(x => {\n let fc = x as CustomFormControl;\n return {\n siteSupplierDocumentVersionId: (fc.item as SupplierDocumentViewModel).siteSupplierDocumentVersionId,\n signatureBase64: this.isSignMode ? fc.value : '',\n isConfirmed: this.isSignMode ? !!fc.value : fc.value\n } as SignedSupplierDocumentTypeVersionModel;\n }\n ).filter(x => x.isConfirmed == true);\n return list;\n // return this.formArray.controls.filter(x => x.value == true).map(x => ((x as CustomFormControl).item as SupplierDocumentViewModel).siteSupplierDocumentVersionId)\n }\n\n valid(): boolean {\n return this.formArray.valid;\n }\n\n @Input() forceViewSupplierDocumentsBeforeSignOff: boolean = true;\n @Input() supplierDocumentConfigMode: SupplierDocumentConfigMode = SupplierDocumentConfigMode.DisableSign;\n\n forcedViewSupplierDocumentFilesList: string[] = [];\n onFileViewed(viewedFiles: any) {\n if (this.forceViewSupplierDocumentsBeforeSignOff) {\n if (viewedFiles && viewedFiles.length > 0) {\n for (const fileUrlElement of viewedFiles) {\n if (!this.forcedViewSupplierDocumentFilesList.includes(fileUrlElement.fileUrl)) {\n this.forcedViewSupplierDocumentFilesList.push(fileUrlElement.fileUrl);\n }\n }\n }\n }\n /*if(!this.forcedViewSupplierDocumentFilesList.includes(fileUrl)) {\n this.forcedViewSupplierDocumentFilesList.push(fileUrl);\n }*/\n }\n\n\n\n validateFCView(fc) {\n if (!this.forceViewSupplierDocumentsBeforeSignOff)\n return true;\n\n let viewedItems = fc.item?.supplierDocumentFiles?.filter(item => this.forcedViewSupplierDocumentFilesList?.includes(item.fileUrl));\n return viewedItems?.length == fc.item?.supplierDocumentFiles?.length;\n }\n\n sign(signTemplate, formControl: CustomFormControl) {\n this.currentCustomFormControlToSign = formControl;\n this.signModalRef = this.modalService.show(signTemplate);\n }\n saveSign(signature: SignatureData) {\n this.currentCustomFormControlToSign.setValue(signature.signatureAsPng);\n this.currentCustomFormControlToSign.updateValueAndValidity();\n this.currentCustomFormControlToSign.setErrors(null);\n this.formArray.updateValueAndValidity();\n this.currentCustomFormControlToSign = null;\n this.signModalRef.hide();\n }\n}\n","export enum SiteRequiredRenderType {\n Input = 0,\n DropDown = 1,\n Date = 2,\n Business = 3,\n Supplier = 4,\n EmergencyContact = 5,\n}\n\nexport enum SiteRequiredFieldType {\n Email = 0,\n Mobile = 1,\n Text = 2,\n SingleSelect = 3,\n Date = 4,\n Business = 5,\n Supplier = 6,\n EmergencyContact = 7\n}\n\nexport enum SiteRequiredFieldState {\n ignore = 0,\n optional = 1,\n mandatory = 2,\n validatedMandatory = 3,\n}\n\n\nexport interface BaseSiteRequiredFieldViewModel {\n title: string;\n fieldKey: string;\n fieldType: SiteRequiredFieldType;\n items: any[];\n state: SiteRequiredFieldState;\n}\n\n\nexport interface SiteRequiredFieldViewModel extends BaseSiteRequiredFieldViewModel {\n id: number;\n}\n\nexport interface SiteRequiredFieldWithVisitorTypeViewModel extends SiteRequiredFieldViewModel {\n visitorTypeIds: number[];\n}\n\nexport interface SiteRequiredFieldValue {\n fieldKey: string;\n value: any;\n}\n\nexport interface SiteRequiredFieldStateViewModel {\n // fieldKey: string;\n state: number;\n title: string;\n}\n\nexport interface ResponseSiteRequiredFieldViewModel {\n fields: SiteRequiredFieldWithVisitorTypeViewModel[];\n states: SiteRequiredFieldStateViewModel[];\n}\n","import { AbstractControl, ValidationErrors } from \"@angular/forms\";\nimport { CustomFormControl } from \"../models/custom-formcontrol\";\n\nexport function validatedMandatoryValidator(control: CustomFormControl): ValidationErrors | null {\n if(control.item?.answer?.abn || control.item?.answer?.acn) return null;\n return {\"not-valid-data\": \"this field is required\"};\n};","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { UserBusinessViewModel } from '../models/user-business-viewmodel';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserBusinessService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getAddressSuggestionList = (nameOrAbnOrAcn: string): Observable =>\n this._http.get(`api/UserBusiness/lookup/${nameOrAbnOrAcn}`)\n .pipe(catchError(this._errorService.handleError));\n\n getAddressSuggestionListBySessionKey = (sessionId: string, nameOrAbnOrAcn: string): Observable =>\n this._http.get(`api/UserBusiness/lookup-by-session-key/${sessionId}/${nameOrAbnOrAcn}`)\n .pipe(catchError(this._errorService.handleError));\n}\n","
      \n \n
      \n
      \n Loading...\n
      \n
      \n
      \n{{notFoundMessage}}\n\n
      \n {{ model.name }}\n
      \n
      \n abn: {{model.abn}}\n _ acn: {{model.acn}}\n
      \n
      \n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Observable, Observer, noop, of } from 'rxjs';\nimport { UserBusinessViewModel } from '../../models/user-business-viewmodel';\nimport { UserBusinessService } from '../../services/user-business-service';\nimport { switchMap, map, tap, finalize } from 'rxjs/operators';\nimport { TypeaheadMatch } from 'ngx-bootstrap/typeahead/public_api';\nimport { result } from 'lodash';\n\n@Component({\n selector: 'obc-user-business',\n templateUrl: './user-business.component.html',\n styleUrls: ['./user-business.component.scss']\n})\nexport class UserBusinessComponent implements OnInit {\n inProgress: boolean = false;\n suggestions$: Observable;\n loader: boolean = false;\n searchTerm: string = '';\n typedBusiness: string;\n\n @Input() placeholder: string = 'Search and add user business';\n @Input() displayNoResult: boolean = true;\n @Input() required: boolean = false;\n @Input() notFoundMessage: string = 'Nothing Found ...';\n @Input() isControlValid: boolean = true;\n @Input() sessionId: string;\n\n _currentBusiness: UserBusinessViewModel;\n @Input() set currentBusiness(model: UserBusinessViewModel) {\n this._currentBusiness = model;\n if (model != null) {\n this.resetSearchTerm();\n this.noResult = false;\n }\n };\n get currentBusiness(): UserBusinessViewModel {\n return this._currentBusiness;\n }\n\n @Output() selectedBusiness: EventEmitter = new EventEmitter();\n constructor(private userBusinessService: UserBusinessService) { }\n\n ngOnInit(): void {\n this.lookUpBusinessList();\n }\n\n lookUpBusinessList() {\n this.suggestions$ = new Observable((observer: Observer) => {\n observer.next(this.searchTerm);\n }).pipe(\n switchMap((nameOrAbnOrAcn: string) => {\n if (nameOrAbnOrAcn) {\n this.loader = true;\n var request: Observable;\n if ((this.sessionId?.length ?? 0) > 0)\n request = this.userBusinessService.getAddressSuggestionListBySessionKey(this.sessionId, nameOrAbnOrAcn);\n else\n request = this.userBusinessService.getAddressSuggestionList(nameOrAbnOrAcn);\n\n return request.pipe(\n map((data: UserBusinessViewModel[]) => (data && data) || []),\n tap(\n () => noop,\n (err) => {\n var rrr = (err && err.message) || 'Something goes wrong';\n }\n ),\n finalize(() => {\n this.loader = false;\n }));\n }\n return of([]);\n })\n );\n }\n\n onSelectBusiness(event: TypeaheadMatch): void {\n if (event.item) {\n (event.item as UserBusinessViewModel).mode = \"Selected\";\n this.currentBusiness = event.item;\n this.loader = false;\n this.selectedBusiness.emit(event.item);\n }\n }\n\n resetSearchTerm() {\n this.searchTerm = this.currentBusiness?.name ?? \"\";\n this.loader = false;\n }\n\n resetAll() {\n this.currentBusiness = null;\n this.resetSearchTerm();\n }\n\n onChange($event) {\n if ($event) {\n this.selectedBusiness.emit({ abn: '', acn: '', name: this.searchTerm, postcode: '', state: '', mode: \"UserValue\" });\n this.typedBusiness = $event;\n }\n }\n\n noResult: boolean = false;\n typeaheadNoResults(event: boolean): void {\n this.noResult = event;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'toAny'\n})\nexport class ToAnyPipe implements PipeTransform {\n\n transform(value: any, args?: any): any {\n return value as any;\n }\n\n}\n","
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n \n \n \n \n \n \n \n\n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n \n \n {{control.item.title}}\n
      \n
      \n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { BaseSiteRequiredFieldViewModel, SiteRequiredFieldState, SiteRequiredFieldType, SiteRequiredRenderType, SiteRequiredFieldValue } from 'src/app/models/site-required-field-viewmodel';\nimport { FormArray, ValidatorFn, Validators } from '@angular/forms';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { e168ValidatorNullable } from 'src/app/helpers/mobile-format-validator';\nimport { BehaviorSubject } from 'rxjs';\nimport { SiteRequiredFieldWithAnswerViewModel } from '../../../models/site-required-field-with-answer-view-model';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { UserBusinessViewModel } from '../../../models/user-business-viewmodel';\nimport { validatedMandatoryValidator } from 'src/app/helpers/validate-mandatory-business-validator';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { EmergencyContactEmitResponse } from \"../../../models/emergency-contact-emit-response\";\n\n@Component({\n selector: 'obc-required-field-renderer',\n templateUrl: './required-field-renderer.component.html',\n styleUrls: ['./required-field-renderer.component.css']\n})\nexport class RequiredFieldRendererComponent implements OnInit {\n DatetimePickerMode = DatetimePickerMode;\n formArray: FormArray;\n siteRequiredFieldTypes = SiteRequiredFieldType;\n siteRequiredFieldStates = SiteRequiredFieldState;\n siteRequiredRenderTypes = SiteRequiredRenderType;\n newBusiness: UserBusinessViewModel;\n\n today: Date;\n\n _valueChanged: BehaviorSubject<{ valid: boolean, values: SiteRequiredFieldValue[] }>;\n @Output() supplierChanged = new EventEmitter();\n @Input() sessionId: string = null;\n @Input() siteId;\n @Input() supplierId;\n @Input() set valueChanged(model: BehaviorSubject<{ valid: boolean, values: SiteRequiredFieldValue[] }>) {\n this._valueChanged = model;\n this.notifyChanges();\n };\n @Input() set requiredFields(models: SiteRequiredFieldWithAnswerViewModel[]) {\n if (models == null || models.length == 0) return;\n this.formArray = new FormArray([]);\n for (let i = 0; i < models.length; i++) {\n const element = models[i];\n var ctrl: CustomFormControl = null;\n if (element.fieldType === SiteRequiredFieldType.Business) {\n if (element.answer) {\n var item = JSON.parse(element.answer);\n item.mode = 'Selected';\n element.answer = item;\n ctrl = new CustomFormControl(item.name, element, this.getValidator(element));\n } else {\n ctrl = new CustomFormControl('', element, this.getValidator(element));\n element.answer = ({ name: '', mode: 'UserValue' } as UserBusinessViewModel as any);\n }\n }\n else\n ctrl = new CustomFormControl(element.answer, element, this.getValidator(element));\n\n ctrl.valueChanges.subscribe(res => {\n this.notifyChanges();\n });\n\n if (element.fieldType === SiteRequiredFieldType.Supplier) {\n ctrl.setValue(this.supplierId);\n ctrl.valueChanges.subscribe(res => {\n this.supplierChanged.emit(res);\n });\n }\n\n if (element.fieldType === SiteRequiredFieldType.Date && element.fieldKey == \"BirthDay\") {\n this.today = new Date();\n }\n this.formArray.controls.push(ctrl);\n }\n this.notifyChanges();\n }\n\n constructor(private datetimePipe: DatetimePipe) { }\n\n private notifyChanges() {\n if (this._valueChanged)\n this._valueChanged.next({\n valid: this.isValid,\n values: this.answers,\n });\n }\n\n ngOnInit() {\n }\n\n getRenderType(fieldType: SiteRequiredFieldType) {\n if (fieldType == this.siteRequiredFieldTypes.Email ||\n fieldType == this.siteRequiredFieldTypes.Mobile ||\n fieldType == this.siteRequiredFieldTypes.Text)\n return this.siteRequiredRenderTypes.Input;\n else if (fieldType == this.siteRequiredFieldTypes.SingleSelect)\n return this.siteRequiredRenderTypes.DropDown;\n else if (fieldType == this.siteRequiredFieldTypes.Date)\n return this.siteRequiredRenderTypes.Date;\n else if (fieldType == this.siteRequiredFieldTypes.Business)\n return this.siteRequiredRenderTypes.Business;\n else if (fieldType == this.siteRequiredFieldTypes.Supplier)\n return this.siteRequiredRenderTypes.Supplier;\n else if (fieldType == this.siteRequiredFieldTypes.EmergencyContact)\n return this.siteRequiredRenderTypes.EmergencyContact;\n }\n\n isRequired(model: BaseSiteRequiredFieldViewModel) {\n return model.state == this.siteRequiredFieldStates.mandatory;\n }\n\n private getValidator(model: SiteRequiredFieldWithAnswerViewModel): ValidatorFn[] {\n var list: ValidatorFn[] = [];\n if (model.state == this.siteRequiredFieldStates.mandatory || model.state == this.siteRequiredFieldStates.validatedMandatory)\n list.push(Validators.required);\n\n if (model.fieldKey == \"Business\" && model.state == this.siteRequiredFieldStates.validatedMandatory)\n list.push(validatedMandatoryValidator);\n\n switch (model.fieldType) {\n case this.siteRequiredFieldTypes.Email:\n list.push(Validators.email);\n break;\n case this.siteRequiredFieldTypes.Mobile:\n list.push(e168ValidatorNullable);\n break;\n }\n return list;\n }\n\n get isValid(): boolean {\n return this.formArray.controls.every((c) => c.valid);\n }\n\n getEntries(items) {\n if (items == null) return null;\n return Object.entries(items);\n }\n get answers(): SiteRequiredFieldValue[] {\n if (!this.isValid)\n return null;\n var answers: SiteRequiredFieldValue[] = [];\n this.formArray.controls.forEach(element => {\n var cctrl = element as CustomFormControl;\n var value = this.getFixedValue(cctrl);\n answers.push({\n fieldKey: cctrl.item.fieldKey,\n value: cctrl.item.fieldType != this.siteRequiredFieldTypes.Business ? value : JSON.stringify(cctrl.item.answer),\n } as SiteRequiredFieldValue);\n });\n return answers;\n }\n\n getFixedValue(control: CustomFormControl): any {\n if (this.getRenderType(control.item.fieldType) == this.siteRequiredRenderTypes.Date) {\n var value = this.datetimePipe.transform(control.value);\n return value;\n }\n return control.value;\n }\n onShowBusinessAutoComplete(control: CustomFormControl) {\n var businessControl = this.formArray.controls.find(c => c == control) as CustomFormControl;\n businessControl.item.answer = { abn: '', acn: '', name: '', postcode: '', state: '' };\n businessControl.setValue(businessControl.item.answer.name);\n }\n onSelectBusiness($event: UserBusinessViewModel, control: CustomFormControl): void {\n this.newBusiness = $event;\n if (this.newBusiness.abn || this.newBusiness.acn || this.newBusiness.name) {\n var businessControl = this.formArray.controls.find(c => c == control) as CustomFormControl;\n businessControl.item.answer = this.newBusiness;\n businessControl.setValue(this.newBusiness.name);\n }\n }\n\n onUpdate(response: EmergencyContactEmitResponse, control: CustomFormControl) {\n let emergencyControl = this.formArray.controls.find(c => c == control) as CustomFormControl;\n if(!emergencyControl) return;\n if(response.value) {\n emergencyControl.item.answer = response.value;\n emergencyControl.setValue(JSON.stringify(response.value));\n } else {\n emergencyControl.setValue(null);\n if(!response.isValid) {\n emergencyControl.addValidators(Validators.required);\n } else {\n emergencyControl.clearValidators();\n }\n emergencyControl.updateValueAndValidity();\n }\n }\n}\n","export class SiteAttendanceAccompanierModel {\n firstName: string;\n lastName: string;\n mobile: string;\n\n clone(): SiteAttendanceAccompanierModel {\n var newPerson = new SiteAttendanceAccompanierModel();\n newPerson.firstName = this.firstName;\n newPerson.lastName = this.lastName;\n newPerson.mobile = this.mobile;\n return newPerson;\n }\n}\n","export enum AccompanierMode {\n Disable = 0,\n OptionalNameAndMobile = 1,\n NameAndOptionalMobile = 2,\n NameAndMobile = 3\n}\n","import { SiteAttendanceAccompanierModel } from './site-attendance-accompanier-model';\n\nexport class AccompanyPeopleResult {\n valid: boolean;\n count: number;\n persons: SiteAttendanceAccompanierModel[];\n}\n","
      \n

      \n
      \n \n \n
      Accompanying Persons\n

      \n
      \n
      \n
      \n How many people do you want to add in this check-in?\n \n \n
      \n
      \n
      \n
      \n
      0\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Accompanier Info
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit, Input } from '@angular/core';\nimport { SiteAttendanceAccompanierModel } from '../../models/site-attendance-accompanier-model';\nimport { AccompanierMode } from '../../enums/accompanier-mode';\nimport { timer, Subject } from 'rxjs';\nimport { AccompanyPeopleResult } from 'src/app/models/accompany-people-result';\nimport { FormArray, FormControl, FormGroup, Validators, FormBuilder } from '@angular/forms';\nimport { e168Validator2, e168ValidatorNullable } from 'src/app/helpers/mobile-format-validator';\nimport { ModalService } from '../../services/modal.service';\n\n@Component({\n selector: 'obc-accompany-person',\n templateUrl: './accompany-person.component.html',\n styleUrls: ['./accompany-person.component.scss'],\n})\nexport class AccompanyPersonComponent implements OnInit {\n peopleFormArray: FormArray = new FormArray([]);\n get peopleCount(): number {\n return this.mode == 1 ?\n Math.max(this.userInputPeopleCountFormControl.value, this.peopleFormArray.controls.length) :\n this.peopleFormArray.controls.length;\n };\n\n updatePeopleCount() {\n if (this.mode == AccompanierMode.OptionalNameAndMobile) {\n this.userInputPeopleCountFormControl.setValue(Math.max(this.userInputPeopleCountFormControl.value, this.peopleFormArray.controls.length));\n }\n }\n\n editPeopleCount() {\n this.updatePeopleCount();\n }\n\n userInputPeopleCountFormControl = new FormControl(0, [Validators.min(0)]);\n get userInputPeopleCount(): number {\n return this.userInputPeopleCountFormControl.value;\n };\n get personList(): SiteAttendanceAccompanierModel[] {\n return this.peopleFormArray.controls.map((c) => {\n var person = new SiteAttendanceAccompanierModel();\n person.firstName = c.get('firstName').value;\n person.lastName = c.get('lastName').value;\n person.mobile = c.get('mobile').value;\n return person;\n })\n };\n AccompanierMode = AccompanierMode;\n mode: AccompanierMode = AccompanierMode.Disable;\n errorMessage: string;\n timeOut: any;\n\n get isDisablePeopleCount(): boolean {\n return (\n this.mode == AccompanierMode.NameAndOptionalMobile ||\n this.mode == AccompanierMode.NameAndMobile\n );\n }\n _accompanyData$: Subject;\n @Input() set accompanyData$(subject: Subject) {\n this._accompanyData$ = subject;\n this.pushData();\n };\n\n get accompanyData$(): Subject {\n return this._accompanyData$;\n }\n\n @Input() set accompanierMode(mode: AccompanierMode) {\n this.mode = mode;\n this.peopleFormArray.clear();\n }\n\n constructor(private fb: FormBuilder, private modalService: ModalService) { }\n\n ngOnInit(): void {\n\n }\n\n addNewPerson() {\n var formGroup: FormGroup = null;\n if (this.mode == AccompanierMode.OptionalNameAndMobile) {\n formGroup = new FormGroup({\n firstName: new FormControl('', [Validators.required]),\n lastName: new FormControl('', [Validators.required]),\n mobile: new FormControl('', [e168ValidatorNullable]),\n });\n\n } else if (this.mode == AccompanierMode.NameAndOptionalMobile) {\n formGroup = new FormGroup({\n firstName: new FormControl('', [Validators.required]),\n lastName: new FormControl('', [Validators.required]),\n mobile: new FormControl('', [e168ValidatorNullable]),\n });\n } else if (this.mode == AccompanierMode.NameAndMobile) {\n formGroup = new FormGroup({\n firstName: new FormControl('', [Validators.required]),\n lastName: new FormControl('', [Validators.required]),\n mobile: new FormControl('', [Validators.required, e168ValidatorNullable]),\n });\n } else {\n this.modalService.warn(\"unable to add accompanier to this site mode! \" + this.mode);\n }\n\n if (formGroup != null) {\n formGroup.valueChanges.subscribe(res => {\n this.pushData();\n });\n this.peopleFormArray.controls.push(formGroup);\n this.pushData();\n }\n }\n pushData() {\n var data = new AccompanyPeopleResult();\n if (!this.isFormArrayValid()) {\n data.valid = false;\n this.accompanyData$.next(data);\n } else {\n data.count = this.mode == 1 ? this.userInputPeopleCount : this.peopleCount;\n data.persons = this.personList;\n data.valid = true;\n this.accompanyData$.next(data);\n }\n this.updatePeopleCount();\n }\n\n isFormArrayValid(): boolean {\n if ((this.mode == 1 && !this.userInputPeopleCountFormControl.valid)) return false;\n for (let index = 0; index < this.peopleFormArray.controls.length; index++) {\n if (!this.peopleFormArray.controls[index].valid)\n return false;\n }\n return true;\n }\n\n removePerson(personFormControl: FormGroup) {\n var index = this.peopleFormArray.controls.indexOf(personFormControl);\n this.peopleFormArray.controls.splice(index, 1);\n this.pushData();\n }\n}\n","
      \n
      \n
      \n {{_induction.induction.title}}\n \n
      \n
      \n
      \n
      \n Perform Induction\n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormArray } from '@angular/forms';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { SiteAttendanceQuestionAnswer } from 'src/app/models/attendance-request/site-attendance-question-answer';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { SiteAttendanceInductionViewModel } from 'src/app/models/site-attendance-induction-view-model';\nimport { RequiredDocumentViewModel, UserDocumentType } from \"../../../models/user-document-type\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport {\n convertDocumentToFormControl, isEqual,\n setDocumentFormControlForQuestions\n} from \"../../../helpers/general-functions\";\nimport { SiteAnnouncementForceViewMode } from \"../../../enums/site-announcement-force-view-mode\";\n\n@Component({\n selector: 'obc-induction-renderer',\n templateUrl: './induction-renderer.component.html',\n styleUrls: ['./induction-renderer.component.scss']\n})\nexport class InductionRendererComponent implements OnInit {\n _induction: SiteAttendanceInductionViewModel = null;\n questionContainerValidationSubscription: Subscription = null;\n questionContainerValid: boolean = true;\n questionAnswers: any = null;\n questionContainerValidation$: BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[], isUpdatingByUser?: boolean }>\n = new BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[], isUpdatingByUser?: boolean }>({ valid: false, answers: [] });\n requiredDocumentFormControls: CustomFormControl[];\n requiredDocumentFormArray: FormArray;\n\n @Input() previewRenderer: boolean = false;\n\n @Input() set induction(value: SiteAttendanceInductionViewModel) {\n if (this._induction?.induction?.id != value?.induction?.id) {\n this._induction = value;\n this._induction.questions = setDocumentFormControlForQuestions(this._induction.questions,\n this._induction?.induction?.id);\n\n this.resetInduction();\n this.questionAnswers = value.answers?.answers?.questions;\n this.update();\n this.manageDocuments();\n }\n };\n\n _allUserDocumentTypes: UserDocumentType[];\n @Input() set allUserDocumentTypes(data: UserDocumentType[]){\n this._allUserDocumentTypes = data;\n this.update();\n this.manageDocuments();\n }\n get allUserDocumentTypes() {\n return this._allUserDocumentTypes;\n }\n availableDocumentTypes: UserDocumentType[];\n selectedDocumentsIds: number[] = [];\n\n documents: RequiredDocumentViewModel[] = [];\n\n @Input() notifyVisits = false;\n @Input() anonymousAttendanceKey = null;\n @Output() removeDocumentFromRequiredDocumentsOutput = new EventEmitter();\n @Output() addDocumentToDocumentTypesOutput = new EventEmitter();\n @Output() onAnnouncementVisit = new EventEmitter<{ announcementId: number, inductionId: number }>();\n @Output() onCheckedMandatorySignOff = new EventEmitter<{ announcementId: number, inductionId: number }>();\n\n resetInduction() {\n this.requiredDocumentFormControls = this._induction?.answers?.answers?.documents ?? [];\n let notEmptyFormControls = [ ...this.requiredDocumentFormControls?.filter((item) => item.value != null) ];\n let res = convertDocumentToFormControl(this._induction.documents, (this._induction.questions?.filter(question => question.documentFormControl != null)?.map(question => question.documentFormControl) ?? []));\n this.requiredDocumentFormArray = res?.formArray;\n this.requiredDocumentFormControls = res?.controls;\n this.requiredDocumentFormControls.forEach((control) => {\n let relatedFormControl = notEmptyFormControls.find((notEmptyFormControl) => isEqual(notEmptyFormControl.item, control.item));\n if(relatedFormControl) {\n control.setValue(relatedFormControl.value);\n }\n })\n this.requiredDocumentFormArray.controls.forEach(c => c.valueChanges.subscribe(_ => {\n this.update();\n }));\n }\n\n constructor() {\n }\n\n ngOnInit() {\n this.questionContainerValidationSubscription = this.questionContainerValidation$.subscribe((res) => {\n if (!this?._induction?.questions?.length) return;\n this.questionContainerValid = res.valid;\n if(res.isUpdatingByUser) {\n this.questionAnswers = res.answers;\n }\n this.update();\n });\n }\n\n manageDocuments() {\n this.selectedDocumentsIds = this._induction?.documents?.map(item => item.documentType?.id);\n this.availableDocumentTypes = this.allUserDocumentTypes?.filter(doc => this.selectedDocumentsIds?.indexOf(doc.id) === -1) || [];\n }\n\n private isValid() {\n //let isValidDocuments = !this.requiredDocumentFormArray.controls.map(x => x.valid).some(x => x == false);\n let isValidDocuments = this.documents == null ||\n this.requiredDocumentFormControls?.every(c => {\n let control = (c as CustomFormControl);\n let doc = control.item as RequiredDocumentViewModel;\n return doc.questionId == null ? c.valid : true;\n });\n\n let isValidQuestions = this.questionContainerValid;\n let isValidAnnouncements = !this._induction.announcements.some(s => (s.forceViewMode == SiteAnnouncementForceViewMode.MandatoryView ||\n s.forceViewMode == SiteAnnouncementForceViewMode.SetPlaythroughToMandatory ||\n s.forceViewMode == SiteAnnouncementForceViewMode.MandatoryViewAndSignOff\n ) && s.viewed != true);\n return isValidDocuments && isValidQuestions && isValidAnnouncements;\n }\n\n private getAnswers() {\n return {\n questions: this.questionAnswers,\n documents: this.requiredDocumentFormArray?.controls?.map(\n (formControl) => {\n return formControl as CustomFormControl;\n }\n ).filter(doc => doc != null)\n };\n }\n\n update() {\n if(this._induction) {\n this._induction.isValid = this._induction.skipped ? true : this.isValid();\n this._induction.answers = this._induction.skipped ? {} : {\n id: this._induction.induction.id,\n answers: this.getAnswers(),\n }\n }\n }\n\n\n onSkipInductionStatusChanged(_induction: SiteAttendanceInductionViewModel, skip) {\n _induction.skipped = !skip;\n this.resetInduction();\n this.update();\n }\n\n onUpdateVisitedAnnouncements(announcementId: number, inductionId: number) {\n this.update();\n this.onAnnouncementVisit.emit({ announcementId: announcementId, inductionId: inductionId });\n }\n\n onAddDocumentToDocuments(documentType) {\n if (documentType) {\n this.addDocumentToDocumentTypesOutput.emit(documentType);\n }\n // this.modalService.hide();\n }\n\n removeDocumentFromRequiredDocuments(reqDocument) {\n if (reqDocument) {\n this.removeDocumentFromRequiredDocumentsOutput.emit(reqDocument);\n }\n }\n\n onAnnouncementCheckedMandatorySignOff(announcementId: number, inductionId: number) {\n this.onCheckedMandatorySignOff.emit({ announcementId: announcementId, inductionId: inductionId });\n }\n}\n","\n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n +{{selectedCountry.prefixCode}}\n
      \n \n
      \n please enter valid mobile number\n
      \n
      \n Mobile number is not valid\n
      \n
      0\"\n class=\"valid-feedback\" style=\"display: block;\">\n {{successMessage}}\n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n\n
      0 && isMobileValid\">\n
      \n Select Visitor Type: \n \n
      \n
      \n
      \n\n\n
      \n
      \n \n \n
      \n
      \n\n
      \n \n \n
      \n\n\n \n\n \n \n \n \n \n \n \n \n\n
      \n \n \n
      \n\n
      \n \n \n
      \n
      \n
      \n \n \n \n
      \n
      \n\n
      \n
      \n
      \n {{supplierCheckinData.supplierName}}\n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n\n
      \n

      \n \n

      \n
      \n
      \n
      0\" class=\"invalid-feedback\" style=\"display: block;\">\n {{errorMessage}}\n
      \n
      \n
      \n
      \n
      \n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\nimport { SiteQuestionsViewModel } from 'src/app/models/sitequestion-viewmodel';\nimport { e168Validator2 } from 'src/app/helpers/mobile-format-validator';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { SiteAttendanceQuestionAnswer } from 'src/app/models/attendance-request/site-attendance-question-answer';\nimport {\n AnonymousCheckInAttendanceRequestModel,\n ManualCheckInAttendanceRequestViewModel,\n RequestAttendanceMode,\n RequestSource\n} from '../../../models/attendance-request/attendance-request-viewmodel';\nimport {\n RequiredDocumentViewModel,\n UserDocumentType\n} from '../../../models/user-document-type';\nimport { finalize } from 'rxjs/operators';\nimport { BaseSiteWithVisitorTypesViewModel } from 'src/app/models/site-viewmodel';\nimport { AccompanyPeopleResult } from 'src/app/models/accompany-people-result';\nimport { BaseSiteRequiredFieldViewModel, SiteRequiredFieldValue } from 'src/app/models/site-required-field-viewmodel';\nimport {\n SiteVisitorTypeViewModel\n} from '../../../models/site-visitortype-accompanier-viewmodel';\nimport { AccompanierMode } from '../../../enums/accompanier-mode';\nimport { AttendanceFieldWithValue, FieldPermission } from 'src/app/models/attendance-field-model';\nimport { AttendanceFieldRendererComponent } from '../../attendance-field-renderer/attendance-field-renderer.component';\nimport { SiteAttendanceInductionViewModel } from 'src/app/models/site-attendance-induction-view-model';\nimport { UserSelectorComponent } from 'src/app/custom-controls/user-selector/user-selector.component';\nimport { CheckInMode } from 'src/app/enums/checkin-mode.enum';\nimport { AnonymousUserInfo } from 'src/app/models/anonynous-userinfo';\nimport { StorageService } from 'src/app/services/storage.service';\nimport { SiteRequiredFieldWithAnswerViewModel } from 'src/app/models/site-required-field-with-answer-view-model';\nimport { CountryViewModel } from 'src/app/models/country-view-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { Router } from '@angular/router';\nimport { SupplierDocumentViewModel } from 'src/app/models/supplier-document/site-supplier-document-version-signoff-viewModel';\nimport { SupplierDocumentRendererComponent } from '../../supplier-documents/supplier-document-renderer/supplier-document-renderer.component';\nimport { UserDocumentTypeService } from \"../../../services/user-document-type.service\";\nimport {\n convertDocumentToFormControl,\n deepCloneCircular,\n getUploadedDocumentsFromFormArray, setDocumentFormControlForQuestions, isSetSupplierCheckinData,\n} from \"../../../helpers/general-functions\";\nimport { SupplierDocumentConfigMode } from 'src/app/enums/supplier-document-config-mode.enum';\nimport { CustomFormControl } from \"../../../models/custom-formcontrol\";\nimport { AdditionalDocumentConfig } from \"../../../models/induction-viewmodel\";\nimport {\n BaseSiteAnnouncementViewModel,\n InternalAnnouncementVisitViewModel\n} from 'src/app/models/announcement-viewmodel';\nimport { BaseAnnouncementVisit, VisitStatus } from 'src/app/models/announcement-visit';\nimport { SiteAnnouncementForceViewMode } from 'src/app/enums/site-announcement-force-view-mode';\nimport { SupplierCheckinViewModel } from \"../../../models/supplier-checkin-view-model\";\nimport { SupplierCheckinModel } from \"../../../models/supplier-checkin-model\";\nimport {RequiredDocumentAnswer} from \"../../../models/requiredDocumentAnswer\";\n\n@Component({\n selector: 'obc-manual-checkin',\n templateUrl: './manual-checkin.component.html',\n styleUrls: ['./manual-checkin.component.scss'],\n})\nexport class ManualCheckinComponent implements OnInit {\n\n @Output() needToUpdateAttendanceCount = new EventEmitter();\n static UserInfoStoreKey = 'UserInfoStoreKey'\n inProgress: boolean = false;\n errorMessage: string = null;\n successMessage: string = null;\n allowComminiucateWithUser?: boolean = false;\n\n // enums\n FilterUserBy = UserAutoCompleteFilterByFields;\n\n @Input() mode: CheckInMode = CheckInMode.Host;\n\n // questions\n questions: SiteQuestionsViewModel[] = null;\n questionContainerValidation$: BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[] }>\n = new BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[] }>({ valid: false, answers: [] });\n questionContainerValidationSubscription: Subscription;\n questionContainerValid: boolean = true;\n\n\n answers: SiteAttendanceQuestionAnswer[];\n\n // user selector component\n @ViewChild(\"userSelector\") userSelector: UserSelectorComponent;\n\n // accompanier mode\n accompanierMode: AccompanierMode;\n accompanyData$: Subject = new Subject();\n accompanyPeopleResult: AccompanyPeopleResult;\n supplierDocumentConfigMode: SupplierDocumentConfigMode;\n\n // required fields\n requiredFields: BaseSiteRequiredFieldViewModel[] = null;\n requiredFieldRenderer$: BehaviorSubject<{ valid: boolean, values: SiteRequiredFieldValue[] }> =\n new BehaviorSubject<{ valid: boolean, values: SiteRequiredFieldValue[] }>({ valid: false, values: null });\n requiredFieldContainerValidationSubscription: Subscription;\n requiredFieldValues: SiteRequiredFieldValue[] = null;\n isSiteRequiredFieldContainerValid: boolean = true;\n hasPermissionToAddSupplierDocumentComment: boolean;\n supplierDocCommentAcknowledgementText: string;\n\n // extra fields\n attendanceFields: AttendanceFieldWithValue[] = null;\n\n requiredDocumentFormControls: CustomFormControl[];\n requiredDocumentFormArray: FormArray;\n additionalDocumentConfig: AdditionalDocumentConfig;\n\n availableDocumentTypes: UserDocumentType[];\n selectedDocumentsIds: number[] = [];\n announcements: BaseSiteAnnouncementViewModel[] = [];\n visitedAnnouncements: BaseAnnouncementVisit[] = [];\n\n @ViewChild('attendanceFieldsRef') attendanceFieldsRef: AttendanceFieldRendererComponent;\n\n //induction\n inductions: SiteAttendanceInductionViewModel[] = [];\n\n\n //supplier documents\n supplierDocuments: SupplierDocumentViewModel[] = [];\n @ViewChild('supplierDocumentRenderer') supplierDocumentRenderer: SupplierDocumentRendererComponent;\n\n\n documents: RequiredDocumentViewModel[] = [];\n allowUsersToAttachAdditionalDocuments: boolean = false;\n CheckInMode = CheckInMode;\n\n selectedSupplierId: number = null;\n finalUser: UserBasicInfoViewModel = new UserBasicInfoViewModel();\n\n get selectedVisitorType(): SiteVisitorTypeViewModel {\n return this.selectedVisitorTypeFormControl.value;\n };\n\n selectedVisitorTypeFormControl = new FormControl()\n\n forceViewSupplierDocumentsBeforeSignOff: boolean = true;\n\n allUserDocumentTypes: UserDocumentType[];\n supplierCompanyAllUserDocumentTypes: UserDocumentType[];\n\n\n //Supplier Check In Data\n supplierCheckinData: SupplierCheckinViewModel;\n supplierAnswers: SiteAttendanceQuestionAnswer[];\n supplierQuestionContainerValidation$: BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[] }>\n = new BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[] }>({ valid: false, answers: [] });\n supplierQuestionContainerValidationSubscription: Subscription;\n supplierQuestionContainerValid: boolean = true;\n supplierQuestions: SiteQuestionsViewModel[] = null;\n supplierVisitedAnnouncements: BaseAnnouncementVisit[] = [];\n supplierRequiredDocumentFormControls: CustomFormControl[];\n supplierRequiredDocumentFormArray: FormArray;\n\n get isMobileValid(): boolean {\n return new FormControl(this.mode == CheckInMode.Host ? this.finalUser?.mobile : this.userInfoFormGroup.controls.mobile.value, [e168Validator2])?.valid;\n }\n\n\n private _site: BaseSiteWithVisitorTypesViewModel = null;\n @Input() set site(value: BaseSiteWithVisitorTypesViewModel) {\n if (this._site?.id != value?.id && value?.id) {\n this.getHostCheckInData();\n }\n this._site = value;\n }\n\n //#region anonymous\n @Input() selectedCountry: CountryViewModel;\n\n loadUserInformation() {\n try {\n let info = this.getStoredAnonymousUserInfo();\n if (info) {\n let user = info.user;\n let fields = info.fields as SiteRequiredFieldValue[];\n if (user) {\n if (user.countryRegion)\n this.selectedCountry.alpha2 = user.countryRegion;\n if (user.mobile)\n this.userInfoFormGroup.controls['mobile'].setValue(user.mobile);\n if (user.firstName)\n this.userInfoFormGroup.controls['firstName'].setValue(user.firstName);\n if (user.lastName)\n this.userInfoFormGroup.controls['lastName'].setValue(user.lastName);\n\n }\n if (fields && fields.length) {\n for (const field of this.requiredFields) {\n let answers = fields.filter(v => v.fieldKey == field.fieldKey);\n if (answers && answers.length) {\n if (!this.requiredFieldValues)\n this.requiredFieldValues = [];\n let answer = answers[0].value;\n if (field.fieldKey == 'BirthDay')\n answer = new Date(answer);\n this.requiredFieldValues.push({ fieldKey: field.fieldKey, value: answer });\n (field as SiteRequiredFieldWithAnswerViewModel).answer = answer;\n }\n }\n this.requiredFields = JSON.parse(JSON.stringify(this.requiredFields));\n }\n\n }\n } catch {\n }\n }\n\n getStoredAnonymousUserInfo(): AnonymousUserInfo {\n let json = this.storageService.get(ManualCheckinComponent.UserInfoStoreKey);\n try {\n if (json != null && json.toString().length) {\n return JSON.parse(json);\n }\n } catch {\n }\n return null;\n }\n\n userInfoFormGroup = new FormGroup({\n mobile: new FormControl('', [e168Validator2]),\n lastName: new FormControl('', []),\n firstName: new FormControl('', []),\n });\n @Input() sessionId: string = null;\n\n //#endregion\n\n\n get siteId(): number {\n return this._site?.id;\n }\n\n get site(): BaseSiteWithVisitorTypesViewModel {\n return this._site;\n }\n\n constructor(private siteAttendanceService: SiteAttendanceService,\n private modalService: ModalService,\n private router: Router,\n private storageService: StorageService,\n private userDocumentTypeService: UserDocumentTypeService) {\n\n }\n\n ngOnInit() {\n this.selectedVisitorTypeFormControl.valueChanges.subscribe(() => {\n this.getHostCheckInData();\n });\n\n if (this.mode == CheckInMode.Anonymous) {\n this.userInfoFormGroup.controls['mobile'].valueChanges.subscribe(() => this.getHostCheckInData());\n this.loadUserInformation();\n }\n\n this.accompanyData$.subscribe((data) => {\n this.accompanyPeopleResult = data;\n });\n }\n\n user: any = {};\n\n onSelectUser($event) {\n this.finalUser = new UserBasicInfoViewModel($event);\n if (this.user.mobile != this.finalUser.mobile || this.user.id != this.finalUser.id) {\n this.getHostCheckInData();\n this.user = this.finalUser;\n }\n }\n\n onInputChange($event) {\n this.finalUser[$event.field] = $event.value;\n if ($event.field == 'mobile')\n if (this.isMobileValid === true) {\n this.getHostCheckInData();\n }\n }\n\n isReadyToGetCheckInData(): boolean {\n\n return this.isMobileValid &&\n this.siteId &&\n (\n (this._site.siteVisitorTypes?.length && this.selectedVisitorType != null)\n ||\n !(this._site.siteVisitorTypes?.length > 0)\n );\n }\n\n onUpdateUserDocumentsbySupplier(supplierId: number) {\n if (this.selectedSupplierId != supplierId) {\n this.selectedSupplierId = supplierId;\n this.getHostCheckInData();\n }\n }\n\n getHostCheckInData() {\n if (!this.isReadyToGetCheckInData()) return;\n //fetch check-in data\n this.inProgress = true;\n const model = this.mode == CheckInMode.Host ? {\n siteId: this.siteId,\n siteVisitorTypeId: this.selectedVisitorType?.siteVisitorTypeId,\n supplierId: this.selectedSupplierId,\n checkInUserId: this.finalUser.id,\n mobile: this.finalUser.mobile,\n } : {\n session: this.sessionId,\n siteVisitorTypeId: this.selectedVisitorType?.siteVisitorTypeId,\n supplierId: this.selectedSupplierId,\n mobile: this.userInfoFormGroup.controls.mobile.value,\n countryRegion: this.selectedCountry.alpha2,\n };\n const request = this.mode == CheckInMode.Host ?\n this.siteAttendanceService.getHostCheckInData(model) :\n this.siteAttendanceService.getAnonymousCheckInData(model);\n\n this.userDocumentTypeService.getAll(this.sessionId)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.allUserDocumentTypes = res;\n\n\n request\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => {\n /*\n result.data?.inductions.forEach(function (induction: SiteAttendanceInductionViewModel, _) {\n let inductionDocuments = induction?.documents ?? [];\n\n let inductionDocumentQuestions = convertDocumentQuestionToRequiredDocument(induction?.questions, induction.induction.id);\n induction.documents = [...inductionDocuments, ...inductionDocumentQuestions];\n });*/\n this.updateRequiredFields(result.data.requiredFields);\n this.updateQuestions(result.data.siteQuestions);\n this.documents = result.data?.documents;\n this.allowUsersToAttachAdditionalDocuments = result.data.allowUsersToAttachAdditionalDocuments;\n this.inductions = result.data.inductions;\n this.supplierDocuments = result.data.supplierDocuments;\n this.accompanierMode = result.data.accompanierMode;\n this.forceViewSupplierDocumentsBeforeSignOff = result.data.forceViewSupplierDocumentsBeforeSignOff ?? false\n this.supplierDocumentConfigMode = result.data.supplierDocumentConfigMode ?? false\n this.additionalDocumentConfig = result.data?.additionalDocumentConfig ?? {\n allowUsersToAttachAdditionalDocuments: result.data.allowUsersToAttachAdditionalDocuments,\n order: 999999\n };\n this.hasPermissionToAddSupplierDocumentComment = result.data?.hasPermissionToAddSupplierDocumentComment;\n this.supplierDocCommentAcknowledgementText = result.data?.supplierDocCommentAcknowledgementText;\n this.announcements = result.data?.announcements;\n this.supplierCheckinData = result.data?.supplierCheckinData;\n this.updateSupplierQuestions(result.data?.supplierCheckinData?.siteQuestions);\n this.refreshDocuments();\n this.fetchSupplierCompanyDocumentTypes();\n }, error => {\n this.errorMessage = 'we can not get required fields for selected user';\n })\n });\n }\n\n fetchSupplierCompanyDocumentTypes() {\n if(this.supplierCheckinData && this.supplierCheckinData?.supplierCompanyId) {\n this.userDocumentTypeService.companyGetAll(this.supplierCheckinData?.supplierCompanyId)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.supplierCompanyAllUserDocumentTypes = res;\n });\n }\n }\n\n updateQuestions(questions: SiteQuestionsViewModel[]) {\n this.resetQuestionRenderer();\n this.questions = questions;\n this.questions = setDocumentFormControlForQuestions(this.questions);\n this.questionContainerValidationSubscription = this.questionContainerValidation$.subscribe((res) => {\n if (this.questions == null || this.questions.length == 0) return;\n this.questionContainerValid = res.valid;\n this.answers = res.answers;\n });\n }\n\n updateSupplierQuestions(questions: SiteQuestionsViewModel[]) {\n if (this.supplierQuestionContainerValidationSubscription)\n this.supplierQuestionContainerValidationSubscription.unsubscribe();\n this.supplierQuestionContainerValid = true;\n this.supplierQuestions = null;\n\n this.supplierQuestions = questions;\n this.supplierQuestions = setDocumentFormControlForQuestions(this.supplierQuestions);\n this.supplierQuestionContainerValidationSubscription = this.supplierQuestionContainerValidation$.subscribe((res) => {\n if (this.supplierQuestions == null || this.supplierQuestions.length == 0) return;\n this.supplierQuestionContainerValid = res.valid;\n this.supplierAnswers = res.answers;\n });\n }\n\n\n resetQuestionRenderer() {\n if (this.questionContainerValidationSubscription)\n this.questionContainerValidationSubscription.unsubscribe();\n this.questionContainerValid = true;\n this.questions = null;\n }\n\n\n updateRequiredFields(requiredFields: BaseSiteRequiredFieldViewModel[]) {\n this.resetRequiredFieldContainer();\n this.requiredFields = requiredFields;\n this.requiredFieldContainerValidationSubscription = this.requiredFieldRenderer$.subscribe(res => {\n if (this.requiredFields == null || this.requiredFields.length == 0) return;\n this.isSiteRequiredFieldContainerValid = res.valid;\n this.requiredFieldValues = res.values;\n });\n }\n\n resetRequiredFieldContainer() {\n if (this.requiredFieldContainerValidationSubscription)\n this.requiredFieldContainerValidationSubscription.unsubscribe();\n this.isSiteRequiredFieldContainerValid = true;\n this.requiredFields = null;\n }\n\n get isFormValid(): boolean {\n \n let isValidDocuments = this.requiredDocumentFormArray == null ||\n this.requiredDocumentFormArray.controls.every(c => {\n let control = (c as CustomFormControl);\n let doc = control.item as RequiredDocumentViewModel;\n return doc.questionId == null ? c.valid : true;\n });\n\n let isValidSupplierDocuments = this.supplierRequiredDocumentFormArray == null ||\n this.supplierRequiredDocumentFormArray.controls.every(c => {\n let control = (c as CustomFormControl);\n let doc = control.item as RequiredDocumentViewModel;\n return doc.questionId == null ? c.valid : true;\n });\n\n let isAllAnnouncementsVisitedAndSignedOff = this.isAllAnnouncementsVisitedAndSignedOff(this.announcements);\n let isAllSupplierAnnouncementsVisitedAndSignedOff = this.isAllAnnouncementsVisitedAndSignedOff(this.supplierCheckinData?.announcements);\n\n return this.isInductionsValid && this.isSupplierInductionsValid &&\n !(this.attendanceFieldsRef?.valid == false) &&\n this.isMobileValid &&\n this.questionContainerValid &&\n this.supplierQuestionContainerValid &&\n (isValidDocuments && isValidSupplierDocuments) &&\n !(this.accompanyPeopleResult?.valid == false) &&\n this.isSiteRequiredFieldContainerValid &&\n (this.supplierDocumentRenderer == null || this.supplierDocumentRenderer.valid()) &&\n isAllAnnouncementsVisitedAndSignedOff && isAllSupplierAnnouncementsVisitedAndSignedOff;\n }\n\n isAllAnnouncementsVisitedAndSignedOff(announcements: BaseSiteAnnouncementViewModel[]) {\n if (announcements?.length == 0)\n return true;\n if (announcements?.some(s => s.forceViewMode != SiteAnnouncementForceViewMode.Disable && s.isVisited == false))\n return false;\n if (announcements?.some(s => s.forceViewMode == SiteAnnouncementForceViewMode.MandatoryViewAndSignOff && s.isCheckedMandatorySignOff == false))\n return false;\n return true;\n }\n\n private get isInductionsValid() {\n if (this.inductions?.length) {\n return !this.inductions.some(x => x.isValid == false);\n }\n return true;\n }\n\n private get isSupplierInductionsValid() {\n if (this.supplierCheckinData?.inductions?.length) {\n return !this.supplierCheckinData?.inductions?.some(x => x.isValid == false);\n }\n return true;\n }\n\n onCheckin() {\n this.inProgress = true;\n let documents = getUploadedDocumentsFromFormArray(this.requiredDocumentFormArray);\n let supplierDocuments = getUploadedDocumentsFromFormArray(this.supplierRequiredDocumentFormArray);\n \n let inductions = this.inductions?.length ? this.inductions.filter(x => !x.skipped)?.map(x => deepCloneCircular(x.answers)) ?? [] : [];\n let supplierInductions = this.supplierCheckinData?.inductions?.length ? this.supplierCheckinData?.inductions?.filter(x => !x.skipped)?.map(x => deepCloneCircular(x.answers)) ?? [] : [];\n\n // inductions and supplierInductions: Resetting RequiredDocumentAnswers as document answers instead of FormControls to send to server. \n this.prepareInductionDocumentAnswers(inductions);\n this.prepareInductionDocumentAnswers(supplierInductions);\n \n let userInfo = this.mode == CheckInMode.Host ? null : {\n countryRegion: this.selectedCountry.alpha2,\n mobile: this.userInfoFormGroup.get('mobile').value,\n firstName: this.userInfoFormGroup.get('firstName').value,\n lastName: this.userInfoFormGroup.get('lastName').value,\n } as UserBasicInfoViewModel;\n const request = this.mode == CheckInMode.Host ? this.siteAttendanceService\n .ManualCheckIn({\n Mode: RequestAttendanceMode.Manual,\n siteAttendanceInfo: this.finalUser,\n siteId: this.siteId,\n answers: this.answers,\n documents: documents,\n inductions: inductions,\n accompanierCount: this.accompanyPeopleResult?.count,\n accompaniers: this.accompanyPeopleResult?.persons,\n requiredFieldValues: this.requiredFieldValues,\n visitorTypeId: this.selectedVisitorType?.visitorTypeId,\n signedSupplierDocumentTypeVersions: this.supplierDocumentRenderer.getAnswers(),\n visitedAnnouncements: this.visitedAnnouncements,\n supplierCheckinData: {\n supplierInductions: supplierInductions,\n supplierAnswers: this.supplierAnswers,\n supplierVisitedAnnouncements: this.supplierVisitedAnnouncements,\n supplierDocuments: supplierDocuments\n } as SupplierCheckinModel,\n requestSource: RequestSource.Portal\n } as ManualCheckInAttendanceRequestViewModel) : this.siteAttendanceService.AnonymousCheckIn({\n Mode: RequestAttendanceMode.Manual,\n siteAttendanceInfo: userInfo,\n siteId: this.siteId,\n session: this.sessionId,\n answers: this.answers,\n documents: documents,\n inductions: inductions,\n accompanierCount: this.accompanyPeopleResult?.count,\n accompaniers: this.accompanyPeopleResult?.persons,\n requiredFieldValues: this.requiredFieldValues,\n visitorTypeId: this.selectedVisitorType?.visitorTypeId,\n signedSupplierDocumentTypeVersions: this.supplierDocumentRenderer.getAnswers(),\n visitedAnnouncements: this.visitedAnnouncements,\n supplierCheckinData: {\n supplierInductions: supplierInductions,\n supplierAnswers: this.supplierAnswers,\n supplierVisitedAnnouncements: this.supplierVisitedAnnouncements,\n supplierDocuments: supplierDocuments\n } as SupplierCheckinModel\n } as AnonymousCheckInAttendanceRequestModel)\n\n\n request\n .pipe(finalize(() => (this.inProgress = false)))\n .subscribe(\n (res) => {\n if (res.success === true) {\n this.successMessage = res.message;\n this.resetForms(); // clean form\n\n if (this.mode == CheckInMode.Host) {\n this.finalUser = null;\n this.needToUpdateAttendanceCount.emit();\n } else {\n this.storeUserInformation(userInfo, this.requiredFieldValues);\n this.userInfoFormGroup.reset(); // clean form\n setTimeout(() => {\n this.successMessage = null;\n this.router.navigate(['anonymous']).then()\n }, 1000);\n }\n } else {\n this.modalService.error(res.message);\n this.errorMessage = res.message;\n }\n setTimeout(() => {\n this.errorMessage = null;\n this.successMessage = null;\n }, 10000);\n },\n (err) => console.log(err)\n );\n }\n\n private prepareInductionDocumentAnswers(inductions: SiteAttendanceInductionViewModel[]) {\n inductions.forEach((ind) => {\n let documentsAnswers: RequiredDocumentAnswer[] = [];\n ind.answers?.documents?.forEach((indDoc) => {\n if (indDoc.value) {\n documentsAnswers.push(indDoc.value as RequiredDocumentAnswer)\n }\n })\n ind.answers.documents = documentsAnswers;\n })\n }\n\n storeUserInformation(userInfo: UserBasicInfoViewModel, fields: SiteRequiredFieldValue[]) {\n try {\n let newData = { user: userInfo, fields: fields } as AnonymousUserInfo;\n let savedData = this.getStoredAnonymousUserInfo();\n if (newData.fields == null)\n newData.fields = [];\n if (savedData?.fields) {\n for (const of of savedData.fields) {\n if (!newData.fields.some(s => s.fieldKey == of.fieldKey))\n newData.fields.push(of);\n }\n }\n\n let birthDay = newData.fields?.filter(v => v.fieldKey == 'BirthDay');\n if (birthDay?.length)\n birthDay[0].value = this.getCalendarDateAsStarndardFormat(birthDay[0].value);\n this.storageService.set(ManualCheckinComponent.UserInfoStoreKey, JSON.stringify(newData));\n } catch {\n }\n }\n\n getCalendarDateAsStarndardFormat(date: string): any {\n let dateParts = date.substr(0, date.indexOf(',')).split('/');\n return new Date(+dateParts[2], (+dateParts[1]) - 1, +dateParts[0]);//.toISOString();\n }\n\n resetForms() {\n this.answers = null;\n this.allowComminiucateWithUser = false;\n this.requiredFieldValues = null;\n this.selectedVisitorTypeFormControl.setValue(null);\n this.selectedSupplierId = null;\n if (this.userSelector)\n this.userSelector.reset();\n\n this.ResetAll();\n }\n\n\n get isSelectedVisitorTypeValid(): boolean {\n if (!(this.site.siteVisitorTypes && this.site.siteVisitorTypes.length > 0))\n return true;\n else if ((this.site.siteVisitorTypes && this.site.siteVisitorTypes.length > 0) && this.selectedVisitorType?.visitorTypeId != null)\n return true;\n return false;\n }\n\n\n addSelectedDocumentToRequiredDocuments(documentType) {\n if (documentType) {\n this.documents = [...this.documents, {\n documentType: documentType,\n documentTypes: [documentType],\n displayOrder: ((this.documents?.length ?? 0) + (this.questions?.length ?? 0) + 1) ?? 1,\n additionalDocument: true\n } as RequiredDocumentViewModel];\n this.refreshDocuments();\n }\n }\n\n removeDocumentFromRequiredDocuments(documentType) {\n if (documentType) {\n this.documents = [...this.documents?.filter(item => item.documentType.id != documentType.id)];\n this.refreshDocuments();\n }\n }\n\n addDocumentToInductionDocuments(documentType, induction: SiteAttendanceInductionViewModel, isSupplierInduction: boolean = false) {\n if (documentType) {\n let inductionsSource = isSupplierInduction == false ? this.inductions : (this.supplierCheckinData?.inductions ?? []);\n let inductionIndex = inductionsSource.findIndex(findInduction => findInduction.induction.id === induction.induction.id);\n let newInduction = {...induction};\n newInduction.documents.push({\n documentType: documentType,\n documentTypes: [documentType],\n displayOrder: ((newInduction.documents?.length ?? 0) + (newInduction.questions?.length ?? 0) + 1) ?? 1,\n additionalDocument: true\n } as RequiredDocumentViewModel);\n inductionsSource.splice(inductionIndex, 1, newInduction);\n }\n }\n\n removeDocumentFromInductionDocuments(reqDocument, induction: SiteAttendanceInductionViewModel, isSupplierInduction: boolean = false) {\n if (reqDocument) {\n let inductionsSource = isSupplierInduction == false ? this.inductions : (this.supplierCheckinData?.inductions ?? []);\n let inductionIndex = inductionsSource?.findIndex(findInduction => findInduction.induction.id === induction.induction.id);\n let newInduction = deepCloneCircular(induction);\n newInduction.documents = [...newInduction.documents?.filter(item => item.documentType.id != reqDocument.id)];\n inductionsSource.splice(inductionIndex, 1, newInduction);\n }\n }\n\n ResetAll() {\n this.requiredDocumentFormControls = [];\n this.supplierRequiredDocumentFormControls = [];\n let res = convertDocumentToFormControl(this.documents, (this.questions?.filter(question => question.documentFormControl != null)?.map(question => question.documentFormControl) ?? []));\n this.requiredDocumentFormArray = res?.formArray;\n this.requiredDocumentFormControls = res?.controls;\n\n let supRes = convertDocumentToFormControl([], (this.supplierQuestions?.filter(question => question.documentFormControl != null)?.map(question => question.documentFormControl) ?? []));\n this.supplierRequiredDocumentFormArray = supRes?.formArray;\n this.supplierRequiredDocumentFormControls = supRes?.controls;\n }\n\n refreshDocuments() {\n this.selectedDocumentsIds = this.documents?.map(item => item.documentType?.id);\n this.availableDocumentTypes = this.allUserDocumentTypes?.filter(doc => this.selectedDocumentsIds?.indexOf(doc.id) === -1) || [];\n this.ResetAll();\n }\n\n onInductionAnnouncementCheckedMandatorySignOff(inductionAnnouncementVisit: { announcementId: number, inductionId: number }, isSupplier: boolean) {\n this.onAnnouncementVisit(inductionAnnouncementVisit.announcementId, isSupplier, inductionAnnouncementVisit.inductionId);\n }\n onAnnouncementCheckedMandatorySignOff(announcementId: number, isSupplier: boolean, inductionId?: number) {\n if (!isSupplier) {\n let index = this.visitedAnnouncements.findIndex(s => s.announcementId == announcementId && s.inductionId == inductionId);\n if (index >= 0) {\n this.visitedAnnouncements[index].isCheckedMandatorySignOff = true;\n }\n } else {\n let index = this.supplierVisitedAnnouncements.findIndex(s => s.announcementId == announcementId && s.inductionId == inductionId);\n if (index >= 0) {\n this.supplierVisitedAnnouncements[index].isCheckedMandatorySignOff = true;\n }\n }\n }\n\n onInductionAnnouncementVisit(indectionAnnouncementVisit: { announcementId: number, inductionId: number }, isSupplier: boolean) {\n this.onAnnouncementVisit(indectionAnnouncementVisit.announcementId, isSupplier, indectionAnnouncementVisit.inductionId);\n }\n onAnnouncementVisit(announcementId: number, isSupplier: boolean, inductionId?: number) {\n let visitedAnnouncements = !isSupplier ? this.visitedAnnouncements : this.supplierVisitedAnnouncements;\n if (visitedAnnouncements.some(s => s.announcementId == announcementId && s.inductionId == inductionId) == false) {\n visitedAnnouncements.push({\n announcementId: announcementId,\n isCheckedMandatorySignOff: false,\n visitStatus: VisitStatus.Full,\n isSupplierAnnouncement: !isSupplier ? false : true,\n inductionId: inductionId,\n } as BaseAnnouncementVisit)\n }\n }\n\n isSetSupplierCheckinData() {\n return isSetSupplierCheckinData(this.supplierCheckinData);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { SiteQuestionsViewModel } from '../models/sitequestion-viewmodel';\nimport { catchError } from 'rxjs/operators';\nimport { SiteQuestionSearchModel } from '../models/site-questions-search-model';\nimport { extractParamsFromModel } from '../helpers/extract-params-from-model';\nimport { WidgetSummaryViewmodel } from '../models/widget-summary-viewmodel';\nimport {ServerResultData} from \"../models/server-result-data\";\nimport {SelfCheckOutViewModel} from \"../models/site-check-in-out-data\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteQuestionService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n searchSiteQuestion = (model: SiteQuestionSearchModel): Observable =>\n this._http.get(`/api/sitequestion/search`, { params: extractParamsFromModel(model) })\n .pipe(catchError(this._errorService.handleError));\n\n\n getSiteQuestionDashboardInfo = (model: SiteQuestionSearchModel): Observable =>\n this._http.get(`/api/sitequestion/dashboard`, { params: extractParamsFromModel(model) })\n .pipe(catchError(this._errorService.handleError));\n\n\n addQuestionToSite = (model: SiteQuestionsViewModel) =>\n this._http.post('/api/sitequestion', model)\n .pipe(catchError(this._errorService.handleError));\n\n\n removeQuestionFromSite = (siteQuestioId: number) =>\n this._http.delete(`/api/sitequestion/${siteQuestioId}`)\n .pipe(catchError(this._errorService.handleError));\n\n\n changeSiteQuestionOrder = (siteQuestionIds: number[]) =>\n this._http.post(`/api/sitequestion/change-order/`, siteQuestionIds)\n .pipe(catchError(this._errorService.handleError));\n\n //GetSiteQuestions(siteId: number, isCheckIn: boolean): Observable {\n // return this._http.get(`/api/sitequestion/site-questions/${siteId}/${isCheckIn}`)\n // .pipe(catchError(this._errorService.handleError));\n //}\n\n // Deprecated\n GetHostCheckOutInformation(mobile: string, siteId: number, visitorTypeId?: number): Observable> {\n if (visitorTypeId == null)\n return this._http.get>(`/api/SiteAttendance/manual-check-out-form/${mobile}/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n else\n return this._http.get>(`/api/SiteAttendance/manual-check-out-form/${mobile}/${siteId}/${visitorTypeId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n GetQuestionsToCheckOutForAnonymousUser(key: any): Observable {\n return this._http.get(`/api/sitequestion/check-out-site-questions/${key}`)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","\n
      \n
      \n
      \n
      \n Filter \n
      \n \n
      \n
      \n
      \n
      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\">\n \n \n \n \n \n \n
      Full NameMobileCheck In Date\n \n
      \n {{item.firstName}} {{item.lastName}}\n (+{{item.accompanierCount}})\n \n {{item.mobile | mobile}}\n \n {{item.checkInDate | datetime}}\n \n

      \n \n \n

      \n
      \n
      \n There is no filtered attendance\n
      \n
      \n
      \n There is no attendance\n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n Questions\n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Full NameMobileCheck In Date
      {{selectedAttendee.firstName}} {{selectedAttendee.lastName}}{{selectedAttendee.mobile | mobile}}\n {{selectedAttendee.checkInDate | datetime}}\n
      \n
      \n
      \n
      \n
      \n \n
      \n\n
      \n
      \n
      \n {{supplierCheckinData.supplierName}}\n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n\n
      \n

      \n \n

      \n
      \n
      \n
      0\" class=\"invalid-feedback\" style=\"display: block;\">\n {{errorMessage}}\n
      \n
      \n
      \n
      \n
      \n
      \n\n\n \n \n\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { SiteAttendanceQuestionAnswer } from 'src/app/models/attendance-request/site-attendance-question-answer';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\nimport { SiteQuestionService } from 'src/app/services/site-question.service';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { RequestAttendanceMode } from '../../../models/attendance-request/attendance-request-viewmodel';\nimport { finalize } from 'rxjs/operators';\nimport { QuestionAnswerInputModel } from 'src/app/models/question-answer-inputmodel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { AsyncResult } from 'src/app/models/helper-models';\nimport { UserService } from 'src/app/services/user.service';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { AttendanceFieldViewModel } from 'src/app/models/attendance-field-model';\nimport { SiteAttendanceReportViewModel } from 'src/app/models/site-report-models';\nimport {\n RequiredDocumentViewModel,\n} from \"../../../models/user-document-type\";\nimport { RequiredDocumentListRendererComponent } from '../../question/renderer/required-document-list-renderer/required-document-list-renderer.component';\nimport {\n convertDocumentToFormControl,\n getUploadedDocumentsFromFormArray,\n setDocumentFormControlForQuestions,\n isSetSupplierCheckinData,\n} from 'src/app/helpers/general-functions';\nimport { SiteQuestionViewModel } from 'src/app/models/site-question-viewmodel';\nimport { CustomFormControl } from \"../../../models/custom-formcontrol\";\nimport { FormArray } from \"@angular/forms\";\nimport {SupplierCheckinViewModel} from \"../../../models/supplier-checkin-view-model\";\nimport {SupplierCheckinModel} from \"../../../models/supplier-checkin-model\";\n\n\n@Component({\n selector: 'obc-manual-checkout',\n templateUrl: './manual-checkout.component.html',\n styleUrls: ['./manual-checkout.component.scss'],\n})\nexport class ManualCheckoutComponent implements OnInit {\n _questions: SiteQuestionViewModel[] = null;\n _attendees: SiteAttendanceReportViewModel[] = null;\n selectedAttendee: SiteAttendanceReportViewModel = null;\n inProgress: boolean = false;\n selectedUserId: number;\n @Output() needToUpdateAttendanceCount = new EventEmitter();\n\n requiredDocumentFormControls: CustomFormControl[] = [];\n requiredDocumentFormArray: FormArray;\n\n @Input() set checkoutSelected(model: BehaviorSubject) {\n model.subscribe(tabSelected => {\n if (tabSelected == true)\n this.getSiteAttendees();\n })\n }\n\n @Output() attendeesCountUpdate: EventEmitter = new EventEmitter();\n\n\n @ViewChild('requiredDocumentsList') requiredDocumentsList: RequiredDocumentListRendererComponent;\n\n\n set questions(model: SiteQuestionViewModel[]) {\n this._questions = model;\n this._questions = setDocumentFormControlForQuestions(this._questions);\n this.questions$.next(this._questions);\n }\n\n _siteId: number = null;\n filterListTerm: string = '';\n\n get attendees(): SiteAttendanceReportViewModel[] {\n return this._attendees;\n }\n\n questions$: BehaviorSubject = new BehaviorSubject(this._questions);\n questionContainerValidation$: BehaviorSubject<{\n valid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n }> = new BehaviorSubject<{\n valid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n }>({valid: true, answers: []});\n questionContainerValid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n\n /*Supplier Data*/\n supplierCheckinData: SupplierCheckinViewModel;\n _supplierQuestions: SiteQuestionViewModel[] = null;\n supplierRequiredDocumentFormControls: CustomFormControl[] = [];\n supplierRequiredDocumentFormArray: FormArray;\n supplierQuestions$: BehaviorSubject = new BehaviorSubject(this._supplierQuestions);\n supplierQuestionContainerValidation$: BehaviorSubject<{\n valid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n }> = new BehaviorSubject<{\n valid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n }>({valid: true, answers: []});\n supplierQuestionContainerValid: boolean;\n supplierAnswers: SiteAttendanceQuestionAnswer[];\n set supplierQuestions(model: SiteQuestionViewModel[]) {\n this._supplierQuestions = model;\n this._supplierQuestions = setDocumentFormControlForQuestions(this._supplierQuestions);\n this.supplierQuestions$.next(this._supplierQuestions);\n }\n\n\n\n\n\n\n @Input() set siteId(model: number) {\n if (this._siteId != model) {\n this._siteId = model;\n this.getSiteAttendees();\n }\n }\n\n get siteId(): number {\n return this._siteId;\n }\n\n errorMessage: string = null;\n bsModalRef: BsModalRef;\n userPermissions = UserPermission;\n\n constructor(\n private siteAttendanceService: SiteAttendanceService,\n private modalService: ModalService,\n public userService: UserService,\n private siteQuestionService: SiteQuestionService,\n private bsModalService: BsModalService\n ) {\n }\n\n ngOnInit() {\n this.getSiteAttendees();\n this.questionContainerValidation$.subscribe((res) => {\n this.questionContainerValid = res.valid;\n this.answers = res.answers;\n });\n\n this.supplierQuestionContainerValidation$.subscribe((res) => {\n this.supplierQuestionContainerValid = res.valid;\n this.supplierAnswers = res.answers;\n });\n }\n\n get isFormValid(): boolean {\n\n let isValidDocuments = this.requiredDocumentFormArray == null ||\n this.requiredDocumentFormArray.controls.every(c => {\n let control = (c as CustomFormControl);\n let doc = control.item as RequiredDocumentViewModel;\n return doc.questionId == null ? c.valid : true;\n });\n\n let isValidSupplierDocuments = this.supplierRequiredDocumentFormArray == null ||\n this.supplierRequiredDocumentFormArray.controls.every(c => {\n let control = (c as CustomFormControl);\n let doc = control.item as RequiredDocumentViewModel;\n return doc.questionId == null ? c.valid : true;\n });\n\n return this.questionContainerValid && this.supplierQuestionContainerValid && isValidDocuments && isValidSupplierDocuments;\n }\n\n // siteHasQuestion(): boolean {\n // return this._questions?.length > 0;\n // }\n\n openModal(template, attendee: SiteAttendanceReportViewModel) {\n this.selectedAttendee = attendee;\n this.selectedUserId = attendee.userId;\n this.inProgress = true;\n this.siteQuestionService\n // .GetSiteQuestionsForSelectedUser(this.selectedUserId, this._siteId, false, attendee.visitorTypeId)\n .GetHostCheckOutInformation(this.selectedAttendee.mobile, this._siteId, attendee.visitorTypeId)\n .pipe(finalize(() => (this.inProgress = false)))\n .subscribe(\n (res) => {\n if(res && res.success) {\n this.questions = res.data?.siteQuestions;\n\n this.supplierCheckinData = res.data?.supplierCheckinData;\n this.supplierQuestions = res.data?.supplierCheckinData?.siteQuestions\n\n this.bsModalRef = this.bsModalService.show(\n template,\n Object.assign({}, {class: 'gray modal-lg'})\n );\n setTimeout(() => {\n this.questions$.next(this._questions);\n this.supplierQuestions$.next(this._supplierQuestions);\n\n this.ResetAll();\n\n }, 100);\n this.errorMessage = \"\";\n } else {\n this.errorMessage = \"we can't retrive check-out questions\"\n }\n\n },\n (_) => (this.errorMessage = \"we can't retrive check-out questions\")\n );\n }\n\n onhide() {\n if (this.bsModalRef) this.bsModalRef.hide();\n }\n\n onCheckout() {\n this.inProgress = true;\n this.siteAttendanceService.ManualCheckOut(this.selectedAttendee.mobile, {\n Mode: RequestAttendanceMode.Manual,\n siteId: this.siteId,\n answers: this.answers,\n documents: getUploadedDocumentsFromFormArray(this.requiredDocumentFormArray),\n siteAttendanceId: this.selectedAttendee.siteAttendanceId,\n supplierCheckOutData: {\n supplierAnswers: this.supplierAnswers,\n supplierDocuments: getUploadedDocumentsFromFormArray(this.supplierRequiredDocumentFormArray),\n } as SupplierCheckinModel\n })\n .subscribe(res => {\n if (res.success === true) {\n let index = this._attendees.indexOf(this.selectedAttendee);\n this._attendees.splice(index, 1);\n this.onhide();\n this.needToUpdateAttendanceCount.emit()\n } else {\n this.inProgress = false;\n this.errorMessage = res.message ?? 'Check-out failed';\n }\n setTimeout(() => {\n this.errorMessage = null;\n }, 10000);\n },\n (err) => console.log(err),\n () => this.inProgress = false);\n }\n\n onQueryChange($event) {\n this.filterListTerm = $event;\n }\n\n\n getSiteAttendees() {\n this.inProgress = true;\n this.siteAttendanceService\n .SiteActiveAttendees(this._siteId)\n .subscribe((res) => {\n this._attendees = res;\n this.attendeesCountUpdate.emit(this._attendees.length);\n this.inProgress = false;\n res.forEach(item =>\n item.accompaniersText = item.accompaniers\n ?.map(a => [a.firstName, a.lastName, a.mobile].filter(Boolean).join(' '))\n ?.filter(Boolean).join(', ')\n );\n });\n }\n\n questionAnswerInputModel: QuestionAnswerInputModel = new QuestionAnswerInputModel();\n\n openQuestionAnswerModal(\n template,\n siteAttendanceId: number,\n isCheckInAnswer: boolean,\n hasCheckoutDate: boolean\n ) {\n this.questionAnswerInputModel = {\n isCheckInAnswer: isCheckInAnswer,\n siteAttendanceId: siteAttendanceId,\n hasCheckOutDate: hasCheckoutDate,\n };\n this.modalService.show(template, 'gray modal-lg');\n }\n\n closeModal(_: AsyncResult) {\n this.modalService.hide();\n }\n\n ResetAll() {\n this.requiredDocumentFormControls = [];\n this.supplierRequiredDocumentFormControls = [];\n\n let res = convertDocumentToFormControl([], (this._questions?.filter(question => question.documentFormControl != null)?.map(question => question.documentFormControl) ?? []));\n this.requiredDocumentFormArray = res?.formArray;\n this.requiredDocumentFormControls = res?.controls;\n\n let supRes = convertDocumentToFormControl([], (this._supplierQuestions?.filter(question => question.documentFormControl != null)?.map(question => question.documentFormControl) ?? []));\n this.supplierRequiredDocumentFormArray = supRes?.formArray;\n this.supplierRequiredDocumentFormControls = supRes?.controls;\n }\n\n isSetSupplierCheckinData() {\n return isSetSupplierCheckinData(this.supplierCheckinData);\n }\n}\n","\n\n\n\n
      \n
      \n
      \n \n {{ serverResult?.totalCount }} Record(s)\n \n
      \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\">\n \n \n \n \n \n \n \n \n \n \n 0\">\n \n \n \n \n
      \n Site Name\n \n User Name\n \n Mobile\n \n Check In Date\n
      \n

      \n There is no pre check in to finalise\n

      \n
      \n {{ item.siteName }}\n \n {{ item.user?.firstName }} {{ item.user?.lastName }}\n \n {{ item.user?.mobile | mobile }}\n \n {{ item.checkInDate | datetime }}\n \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n \n \n \n
      \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { BasePagingModel } from \"../../models/paging_model\";\nimport { getPageSizeByUrl } from \"../../helpers/general-functions\";\nimport { BaseSiteViewModel } from \"../../models/site-viewmodel\";\nimport { UserPermission } from \"../../enums/user-permission.enum\";\nimport { LayoutService } from \"../../services/layout.service\";\nimport { ActivatedRoute, Params } from \"@angular/router\";\nimport { ModalService } from \"../../services/modal.service\";\nimport { SiteAttendanceService } from \"../../services/site-attendance.service\";\nimport { finalize } from \"rxjs/operators\";\n\nimport { SiteActiveStatus } from \"../../enums/site-active-status.enum\";\nimport {\n ApprovePreCheckInModel,\n PreAttendanceReportViewModel,\n UserPreAttendanceCheckInsViewModel\n} from \"../../models/pre-check-in/user-pre-attendance-check-ins-view-model\";\nimport { PagingRequest } from \"../../models/paging-request-model\";\nimport { PreCheckInListQueryModel } from \"../../models/pre-check-in/pre-checkin-list-query-model\";\nimport { PagingViewModel } from \"../../models/site-list-paging-view-model\";\n\n@Component({\n selector: 'obc-pre-check-in-list',\n templateUrl: './pre-check-in-list.component.html',\n styleUrls: ['./pre-check-in-list.component.scss']\n})\nexport class PreCheckInListComponent implements OnInit {\n\n pagingInfo: BasePagingModel = {\n pageNumber: 0,\n pageSize: getPageSizeByUrl() ?? 30,\n }\n\n @Input() siteId: number;\n\n //selectedSite: BaseSiteViewModel;\n inProgress = false;\n userPermissions = UserPermission;\n SiteActiveStatus = SiteActiveStatus;\n serverResult: PagingViewModel;\n\n constructor(\n private route: ActivatedRoute,\n public siteAttendanceService: SiteAttendanceService,\n private modalService: ModalService,\n ) {\n }\n\n ngOnInit() {\n this.route.params.subscribe((_: Params) => {\n this.fetchPendingList();\n });\n }\n\n fetchPendingList() {\n this.inProgress = true;\n this.siteAttendanceService.getPreCheckInsList({\n query: { siteIdList: this.siteId ? [this.siteId] : [] },\n pagingInfo: this.pagingInfo\n } as PagingRequest)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n this.serverResult = res;\n }, err => {\n this.modalService.error(err)\n })\n }\n\n finaliseOrCancelPreCheckin(item: UserPreAttendanceCheckInsViewModel, isConfirm: boolean) {\n\n let message = 'Are you sure you want to ' + (isConfirm ? 'confirm' : 'cancel') + ' pre check-in?';\n this.modalService.confirm(message, (isConfirm ? 'Confirm' : 'Cancel')).subscribe(confirmRes => {\n if (confirmRes === true) {\n this.inProgress = true;\n\n const model = {\n preSiteAttendanceId: item?.preSiteAttendanceId,\n } as ApprovePreCheckInModel;\n if (isConfirm) {\n this.siteAttendanceService.approvePreCheckInModel(model)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res && res.success) {\n this.modalService.success('Confirmed successfully.');\n this.fetchPendingList();\n } else\n this.modalService.error(res.message);\n }, err => {\n this.modalService.error(err)\n });\n }\n else {\n this.siteAttendanceService.cancelPreCheckInModel(model.preSiteAttendanceId)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res && res.success) {\n this.modalService.success('Canceled successfully.');\n this.fetchPendingList();\n } else\n this.modalService.error(res.message);\n }, err => {\n this.modalService.error(err)\n });\n }\n }\n });\n }\n\n onPageChange(paginationInfo) {\n this.pagingInfo.pageSize = paginationInfo.pageSize;\n this.pagingInfo.pageNumber = paginationInfo.pageNumber;\n this.fetchPendingList();\n }\n}\n","
      \n \n
      \n

      Host Check-In/Out

      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { BehaviorSubject } from 'rxjs';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { UserService } from 'src/app/services/user.service';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\nimport { CheckInMode } from 'src/app/enums/checkin-mode.enum';\n\n@Component({\n selector: 'obc-manual-check',\n templateUrl: './manual-check.component.html',\n styleUrls: ['./manual-check.component.scss'],\n})\nexport class ManualCheckComponent implements OnInit {\n inProgress: boolean = false;\n selectedSite: SiteViewModel = null;\n mode: 'checkin' | 'checkout' = 'checkin';\n checkInCount: number = 0;\n userPermissions = UserPermission;\n checkoutSelected = new BehaviorSubject(false);\n CheckInMode = CheckInMode;\n constructor(\n private layoutService: LayoutService,\n public userService: UserService,\n private siteAttendanceService: SiteAttendanceService,\n ) { }\n\n ngOnInit() {\n this.layoutService.header = 'Host Check-In/Out';\n }\n\n get siteListPermission() {\n var hasCheckInPermission = this.userService.hasUserPermissionForCompany(this.userPermissions.ManualCheckIn);\n return hasCheckInPermission ? this.userPermissions.ManualCheckIn : this.userPermissions.ManualCheckOut;\n }\n\n get siteId(): number {\n return this.selectedSite.id;\n }\n\n tabs = [];\n onSiteChange() {\n this.tabs = [false, false, false];\n setTimeout(() => {\n this.tabs = [\n this.userService.hasUserPermissionForCompany(UserPermission.ManualCheckIn, this.selectedSite.id),\n this.userService.hasUserPermissionForCompany(UserPermission.ManualCheckOut, this.selectedSite.id),\n this.userService.isCompanyAdminUser(),\n ];\n }, 0)\n this.updateAttendanceCount();\n }\n\n\n attendeesCountUpdated(checkInCount: number) {\n this.checkInCount = checkInCount;\n }\n\n updateAttendanceCount() {\n this.siteAttendanceService.getTotalCountCheckInSite(this.selectedSite.id).subscribe(res => {\n this.checkInCount = res;\n })\n }\n\n onSelectCheckout() {\n this.checkoutSelected.next(true);\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-not-found-page',\n templateUrl: './not-found-page.component.html',\n styleUrls: ['./not-found-page.component.css']\n})\nexport class NotFoundPageComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { UserService } from './user.service';\nimport { Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyGuardService {\n constructor(private userService: UserService, private router: Router) {\n\n }\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n if(!this.userService.currentCompanyId) {\n this.router.navigate(['/not-found'], { queryParams: { returnPath: routerState.url } });\n }\n return this.userService.info?.value?.currentCompanyId != 0;\n }\n\n}\n","import { ImportRecordState } from '../enums/import-record-status.enum';\nimport { UserPermission } from '../enums/user-permission.enum';\nimport { ValidationResultModel } from './validation-result-model';\nimport {RegionViewModel} from \"./region/region-model\";\nimport { CompanyRoleViewModel } from \"./company-role.view.model\";\n\n// export const CompanyUserPermissions = {\n// 0: \"Check In/Check Out\",\n// 1: \"View Attendance Details\",\n// 2: \"Manage Hosts\",\n// 3: \"Adjust Site Location\",\n// 4: \"Add New Site By Template\",\n// 5: \"Add Site Announcement\",\n// 6: \"Send Emergency Alarm\"\n// }\n\n\n\nexport class BaseSiteCompanyViewModel {\n mobile: string;\n firstName: string;\n lastName: string;\n isFrequentUser: boolean;\n}\n\nexport class CompanyEmployeeViewModel extends BaseSiteCompanyViewModel {\n id: number;\n userId: number;\n companyId: number;\n inEdit: boolean;\n employeeNo: string;\n regionId: number;\n regionName: string;\n}\n\nexport class CompanyUserViewModel extends BaseSiteCompanyViewModel {\n id: number;\n userId: number;\n companyId: number;\n inEdit: boolean;\n isAdmin: boolean;\n permissions: UserPermission;\n addToFrequentUser: boolean;\n isObcStaff: boolean;\n companyRoles: CompanyRoleViewModel[];\n}\n\nexport class SiteUserViewModel extends BaseSiteCompanyViewModel {\n id: number;\n isAdmin: boolean;\n permissions: UserPermission;\n siteId: number;\n companyRoles: CompanyRoleViewModel[];\n}\n\nexport class SiteUserUpdateRequest {\n isAdmin: boolean;\n permissions: UserPermission;\n}\n\nexport class CompanyUserUpdateRequest {\n isAdmin: boolean;\n userId: number;\n permissions: UserPermission;\n roles: number[]\n}\n\nexport class ImportCompanyUserModel extends CompanyUserViewModel {\n validationStatus: ImportRecordState;\n errorMessages: ValidationResultModel[];\n isUpdateRequest: boolean;\n}\n\nexport class ImportCompanyUserResponse {\n valid: boolean;\n message: string;\n users: ImportCompanyUserModel[];\n}\n","import { AbstractControl } from '@angular/forms';\nimport { CheckListItem } from '../custom-controls/check-list-form-control/check-list-item';\nimport { UserPermission } from '../enums/user-permission.enum';\n\n\nexport function combinePermissions(permissions : UserPermission[]): UserPermission {\n if (permissions == null || permissions.length == 0)\n return UserPermission.None;\n else {\n var permission = UserPermission.None;\n for (var i = 0; i < permissions.length; i++) {\n permission |= permissions[i];\n }\n return permission;\n }\n }\n","export enum PermissionModeEnum {\n Permission,\n Role,\n Mixed\n}\n","export enum FileUploadAcceptType {\n Image,\n PDF,\n CSV,\n Any\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ErrorService } from './error.service';\nimport { PermissionModeEnum } from \"../enums/permission-mode.enum\";\nimport { PermissionModeRequestModel } from \"../models/permission-mode-request.model\";\nimport { AddCompanyRoleModel } from \"../models/add-company-role.model\";\nimport { CompanyRoleViewModel } from \"../models/company-role.view.model\";\nimport { DeleteCompanyRoleModel } from \"../models/delete-company-role.model\";\nimport { UpdateCompanyRoleModel } from \"../models/update-company-role.model\";\nimport { UpdateRolePermissionsModel } from \"../models/update-role-permissions.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyRoleService {\n\n\n apiUrl = '/api/CompanyRole';\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n getCompanyPermissionMode(): Observable {\n return this.http.get(`${this.apiUrl}/get-company-permissionmode`)\n .pipe(catchError(this._errorService.handleError));\n }\n setCompanyRoles(model: PermissionModeRequestModel): Observable {\n return this.http.post(`${this.apiUrl}/set-company-permissionmode`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addCompanyRole(model: AddCompanyRoleModel): Observable {\n return this.http.post(`${this.apiUrl}/add-company-role`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n updateCompanyRole(model: UpdateCompanyRoleModel): Observable {\n return this.http.post(`${this.apiUrl}/update-company-role`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n getCompanyRoles(): Observable {\n return this.http.get(`${this.apiUrl}/get-company-role-list`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getCompanyRolesByCompanyId(companyId: number): Observable {\n return this.http.get(`${this.apiUrl}/get-company-role-list/${companyId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n deleteCompanyRole(model: DeleteCompanyRoleModel): Observable {\n return this.http.post(`${this.apiUrl}/delete-role`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n updateRolePermissions(model: UpdateRolePermissionsModel): Observable {\n return this.http.post(`${this.apiUrl}/update-role-permission`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CompanyUserViewModel, CompanyUserUpdateRequest } from '../models/company-user-view-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyUserService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n apiUrl = '/api/companyUser';\n\n onAddUserToFrequentUserList = (userId: number): Observable =>\n this._http.get(`${this.apiUrl}/add-user-to-frequent-user-list/${userId}`)\n .pipe(catchError(this._errorService.handleError));\n\n getPermissions = (): Observable =>\n this._http.get(`${this.apiUrl}/get-permissions`)\n .pipe(catchError(this._errorService.handleError));\n\n getCurrentCompanyUsers = (): Observable =>\n this._http.get(`${this.apiUrl}/get-current-company-users`)\n .pipe(catchError(this._errorService.handleError));\n\n addUser = (user: CompanyUserViewModel): Observable =>\n this._http.post(`${this.apiUrl}`, user)\n .pipe(catchError(this._errorService.handleError));\n\n removeUser = (id: number): Observable =>\n this._http.delete(`${this.apiUrl}/${id}`)\n .pipe(catchError(this._errorService.handleError));\n\n ImportUsers(formData: any): Observable {\n return this._http.post(`/api/CompanyUser/import-users`, formData,\n { reportProgress: false, observe: 'events', headers: { \"do-not-modify-content-type\": \"\" } })\n .pipe(catchError(this._errorService.handleError));\n }\n\n UpdateCompanyUser(model : CompanyUserUpdateRequest) : Observable {\n return this._http.post(`/api/CompanyUser/update-company-user`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","
      \n \n \n {{item.name}}\n \n \n
      \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup } from \"@angular/forms\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { CompanyRoleService } from \"../../services/company-role.service\";\nimport { CompanyRoleViewModel } from \"../../models/company-role.view.model\";\n\n@Component({\n selector: 'obc-role-selector',\n templateUrl: './role-selector.component.html',\n styleUrls: ['./role-selector.component.scss'],\n})\nexport class RoleSelectorComponent implements OnInit {\n\n constructor(\n public companyRoleService: CompanyRoleService,\n ) {\n }\n\n formControl = new FormControl(null);\n term$ = new BehaviorSubject(null)\n loading: boolean = false;\n roles: CompanyRoleViewModel[] = [];\n\n @Input() controlName: string;\n @Input() selectedRoles: CompanyRoleViewModel[] = [];\n @Output() result: EventEmitter = new EventEmitter();\n\n public form: FormGroup;\n ngOnInit(): void {\n this.companyRoleService.getCompanyRoles().subscribe({\n next: (res) => {\n this.roles = res;\n }\n })\n this.formControl.setValue(this.selectedRoles?.map((item) => item.companyRoleId) ?? []);\n this.formControl.valueChanges?.subscribe((_) => {\n let result = this.roles?.filter((item) =>\n (this.formControl.value ?? []).includes(item.companyRoleId)\n );\n this.result.emit(result);\n })\n }\n}\n","
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n","import { Component, Input } from '@angular/core';\nimport { ControlValueAccessor, FormArray, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { CheckListItem, CheckListItemViewModel } from './check-list-item';\n\n@Component({\n selector: 'obc-check-list-form-control',\n templateUrl: './check-list-form-control.component.html',\n styleUrls: ['./check-list-form-control.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: CheckListFormControlComponent,\n multi: true,\n }\n ]\n})\nexport class CheckListFormControlComponent implements ControlValueAccessor {\n onChange: Function;\n formArray: FormArray = null;\n @Input() formClass: string = '';\n @Input() colClass: string = \"col-md-6\";\n @Input() set values(data: CheckListItemViewModel[]) {\n this.formArray = new FormArray([]);\n var cpcs = data.map((item) => {\n var cfc = new CustomFormControl(item.value, item);\n cfc.valueChanges.subscribe(res => {\n this.valueChanges();\n });\n return cfc;\n });\n this.formArray.controls.push(...cpcs);\n };\n constructor() { }\n writeValue(obj: CheckListItem[]): void {\n for (let index = 0; index < this.formArray.controls.length; index++) {\n const element = this.formArray.controls[index] as CustomFormControl;\n this.formArray.controls[index].setValue(element.item?.value);\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n }\n\n setDisabledState?(isDisabled: boolean): void {\n }\n\n ngOnInit() {\n }\n\n result: any[] = [];\n valueChanges() {\n this.result = [];\n for (let index = 0; index < this.formArray.controls.length; index++) {\n const element = this.formArray.controls[index] as CustomFormControl;\n element.item.value = element.value;\n this.result.push(element.item);\n }\n if (this.onChange)\n this.onChange(this.result);\n }\n\n getCustomFormControl(c) {\n return c as CustomFormControl;\n }\n}\n","
      \n \n \n
      \n","import { Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { isValidCSVFile, isValidImageFile, isValidPDFFile } from 'src/app/helpers/general-functions';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { FileUploadAcceptType } from \"../../enums/file-upload-accept-type\";\n\n@Component({\n selector: 'obc-file-upload',\n templateUrl: './file-upload.component.html',\n styleUrls: ['./file-upload.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: FileUploadComponent,\n multi: true,\n }\n ]\n})\n\nexport class FileUploadComponent implements ControlValueAccessor {\n onChange: Function;\n\n private file: File | null = null;\n @HostListener('change', ['$event.target.files']) async emitFiles(event: FileList) {\n let localFile = event && event.item(0);\n\n switch(this.accept) {\n case FileUploadAcceptType.Image:\n if(!isValidImageFile(localFile.type))\n {\n this.modalService.error(\"The selected file is not a valid type of Image\");\n this.onClear(this.input);\n return;\n }\n break;\n case FileUploadAcceptType.CSV:\n if(!isValidCSVFile(localFile.type))\n {\n this.modalService.error(\"The selected file is not a valid type of CSV\");\n this.onClear(this.input);\n return;\n }\n break;\n case FileUploadAcceptType.PDF:\n if(!isValidPDFFile(localFile.type))\n {\n this.modalService.error(\"The selected file is not a valid type of PDF\");\n this.onClear(this.input); \n return;\n }\n break;\n }\n\n if(this.maxSize && localFile.size > this.maxSize)\n {\n this.modalService.error(\"Maximum Size of File Exceed\");\n return;\n }\n this.file = localFile;\n this.onChange(localFile);\n }\n\n getAccept() {\n switch(this.accept) {\n case FileUploadAcceptType.Image:\n return '.png, .jpg, .jpeg';\n case FileUploadAcceptType.CSV:\n return 'text/csv';\n case FileUploadAcceptType.PDF:\n return 'application/pdf';\n }\n return '*/*';\n }\n\n @Input() disabled: boolean = false;\n @Input() showClearButton: boolean = false;\n @Input() accept: FileUploadAcceptType = FileUploadAcceptType.Image;\n @Input() maxSize: number = null;\n @Output() clear = new EventEmitter();\n constructor(private host: ElementRef, private modalService: ModalService) {\n }\n writeValue(obj: any): void {\n this.host.nativeElement.value = obj;\n if (this.input)\n {\n this.input.value = obj;\n if(obj == null)\n this.input.nativeElement.value = \"\";\n }\n this.file = obj;\n }\n\n @ViewChild('input') input;\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n }\n setDisabledState?(isDisabled: boolean): void {\n }\n\n onClear(element) {\n element.value = null;\n this.clear.emit();\n }\n}\n","
      \n
      \n \n
      \n
      \n
      \n \n
      \n \n \n Export Users\n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n Please enter a valid mobile\n number.\n
      \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n  \n
      \n \n \n \n
      \n
      \n
      \n
      \n Roles\n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n
      \n
      \n \n \n \n \n
      \n
      \n
      \n \n \n Save New User\n \n \n
      \n
      \n \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      MobileNameFamilyAccess LevelActions
      \n \n
      \n {{user.mobile | mobile}}\n \n {{user.firstName}}{{user.lastName}}\n
      \n 0\">\n Roles:\n
      \n
      {{getRoles(user)}}
      \n
      \n\n
      \n
      \n
      \n \n
      \n Has All Permissions\n
      \n \n
      \n
      {{l.label}}
      \n
      \n
      \n
      \n {{getPermissionCount(user)}}\n Permission(s)\n\n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n\n
      \n
      \n \n Manage User Permissions\n \n \n
      \n
      \n
      \n
      \n
      \n \n {{ currentUser.firstName }}\n \n
      \n
      \n
      \n
      \n \n {{ currentUser.lastName }}\n \n
      \n
      \n
      \n
      \n\n
      \n
      \n Roles: \n \n
      \n
      \n\n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n\n
      \n
      \n
      \n

      \n \n

      \n
      \n
      \n\n \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n
      \n\n\n\n
      \n
      \n \n
      \n
      \n
      \n
      \n

      \n Import company user data in CSV file format (comma seperated)\n Download Sample File\n

      \n
      \n
      \n \n \n
      \n
      \n
      \n {{importData.message}}\n
      \n
      \n
      \n \n
      \n
      \n
      \n {{importData.message}}\n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport {\n CompanyUserUpdateRequest,\n CompanyUserViewModel,\n ImportCompanyUserModel,\n ImportCompanyUserResponse\n} from 'src/app/models/company-user-view-model';\nimport { CompanyUserService } from 'src/app/services/company-user.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { finalize } from 'rxjs/operators';\nimport { UserService } from 'src/app/services/user.service';\nimport { mobileIsValid } from 'src/app/helpers/mobile-format-validator';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { CheckListItemViewModel } from 'src/app/custom-controls/check-list-form-control/check-list-item';\nimport { forkJoin } from 'rxjs';\nimport { combinePermissions } from 'src/app/helpers/permission-helper';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { CompanyRoleService } from \"../../../services/company-role.service\";\nimport { PermissionModeEnum } from \"../../../enums/permission-mode.enum\";\nimport { CompanyRoleViewModel } from \"../../../models/company-role.view.model\";\nimport { FileUploadAcceptType } from 'src/app/enums/file-upload-accept-type';\n\n\n@Component({\n selector: 'obc-company-user',\n templateUrl: './company-user.component.html',\n styleUrls: ['./company-user.component.scss']\n})\nexport class CompanyUserComponent implements OnInit {\n FileUploadAcceptType = FileUploadAcceptType;\n PermissionModeEnum = PermissionModeEnum;\n companyPermissionMode: PermissionModeEnum;\n ProductPlanFeature = ProductPlanFeature;\n inProgress: boolean = false;\n addNewMode: boolean = false;\n filterUserBy = UserAutoCompleteFilterByFields;\n companyUsers: CompanyUserViewModel[] = [];\n companyUser: CompanyUserViewModel = null;\n permissions = null;\n inEdit = {};\n filterListTerm: string;\n userPermissions = UserPermission;\n companyUserPermissions: CheckListItemViewModel[] = [];\n companyUserPermissionsFormControl: FormControl = new FormControl([]);\n\n // currentCompanyId: number;\n // currentCompanyName: string;\n selectedUser: UserBasicInfoViewModel;\n constructor(public userService: UserService,\n public companyRoleService: CompanyRoleService,\n private companyUserService: CompanyUserService,\n private bsModalService: BsModalService,\n private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.initComponentData();\n this.userService.currentCompany$.subscribe(c => this._currentCompany = c);\n this.fileFormControl.valueChanges.subscribe(res => {\n if (res == null) return;\n let formData = new FormData();\n formData.append(\"file\", res, res.name);\n this.import(formData);\n });\n }\n\n _currentCompany: CompanyViewModel = null;\n get currentCompany(): CompanyViewModel {\n return this._currentCompany;\n }\n\n get currentCompanyId(): number {\n if (this._currentCompany == null)\n return null;\n else\n return this._currentCompany.id;\n }\n\n get currentCompanyName(): string {\n if (this._currentCompany == null)\n return null;\n else\n return this._currentCompany.title;\n }\n\n initComponentData() {\n this.inProgress = true;\n const companyUsers = this.companyUserService.getCurrentCompanyUsers();\n const companyPermissions = this.companyUserService.getPermissions();\n const companyPermissionMode = this.companyRoleService.getCompanyPermissionMode();\n\n forkJoin({\n users: companyUsers,\n permissions: companyPermissions,\n companyPermissionMode: companyPermissionMode,\n })\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(ret => {\n this.companyPermissionMode = ret[\"companyPermissionMode\"];\n this.companyUsers = ret[\"users\"];\n var keys = Object.keys(ret[\"permissions\"]);\n this.companyUserPermissions = keys.map(up => {\n return {\n value: false,\n key: +up,\n label: ret[\"permissions\"][up],\n validators: [],\n } as CheckListItemViewModel;\n });\n });\n }\n\n addCompanyUserForm: FormGroup = new FormGroup({\n roles: new FormControl([]),\n });\n newUserPermissionsFormControl: FormControl;\n addNewUserToFrequentUser: boolean;\n onNewCompanyUser() {\n this.cancel();\n this.addNewMode = true;\n this.companyUser = new CompanyUserViewModel();\n this.companyUser.companyId = this.currentCompanyId;\n this.companyUser.isAdmin = false;\n this.companyUser.userId = null;\n this.companyUser.addToFrequentUser = false;\n this.selectedUser = new UserBasicInfoViewModel();\n this.newUserPermissionsFormControl = new FormControl([]);\n this.addCompanyUserForm.reset();\n }\n\n fillCompanyUser(cUser: UserBasicInfoViewModel) {\n if (cUser.id) this.selectedUser = cUser;\n }\n\n\n addCompanyUser() {\n\n if (!this.isValidate()) return;\n this.inProgress = true;\n this.companyUser.permissions = combinePermissions(\n (this.newUserPermissionsFormControl.value as CheckListItemViewModel[])\n ?.filter((item) => item.value)\n ?.map(x => x.key));\n this.companyUserService.addUser(this.companyUser)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => {\n this.initComponentData();\n this.cancel();\n },\n error => { this.modalService.error(error) });\n }\n\n onAddUserToFrequentUserList(user: CompanyUserViewModel) {\n this.modalService.confirm('Are you sure you want to add this user as frequent to all sites?')\n .subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.companyUserService.onAddUserToFrequentUserList(user.userId)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.initComponentData();\n },\n error => {\n this.modalService.error(error).subscribe(errResponse => {\n })\n });\n }\n });\n }\n\n delete(user) {\n this.modalService.confirm(\"Are you sure you want to delete this user? \", \"Delete \").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.companyUserService.removeUser(user.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => this.initComponentData(),\n error => { this.modalService.error(error) });\n }\n })\n }\n\n bsModalRef: any;\n editUserPermissionFormGroup: FormGroup;\n currentUser: CompanyUserViewModel;\n currentCompanyUserPermissions: any[];\n onEdit(template: any, user: CompanyUserViewModel) {\n this.currentUser = { ...user };\n var selectedPermissions = this.companyUserPermissions.map((item: CheckListItemViewModel) => { item.value = (user.permissions & item.key) > 0; return item; });\n\n this.editUserPermissionFormGroup =\n new FormGroup({\n isAdmin: new FormControl(user.isAdmin),\n permissions: new FormControl(selectedPermissions),\n addToFrequentUser: new FormControl(false),\n roles: new FormControl([]),\n });\n this.bsModalRef =\n this.bsModalService.show(template);\n }\n\n onUpdate() {\n var permissions = combinePermissions(\n (this.editUserPermissionFormGroup.controls[\"permissions\"].value as CheckListItemViewModel[])\n .filter(c => c.value)\n .map(x => x.key));\n var isAdmin = this.editUserPermissionFormGroup.controls[\"isAdmin\"].value;\n var model = {\n userId: this.currentUser.userId,\n isAdmin: isAdmin,\n permissions: isAdmin ? UserPermission.None : permissions,\n roles: this.currentUser.companyRoles?.map((item) => item.companyRoleId) ?? []\n } as CompanyUserUpdateRequest;\n\n this.inProgress = true;\n this.companyUserService.UpdateCompanyUser(model)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.bsModalRef.hide();\n this.initComponentData();\n },\n error => {\n this.modalService.error(error).subscribe(errResponse => {\n this.bsModalRef.hide();\n })\n })\n\n }\n\n get isCurrentUserIsAdmin(): boolean {\n return this.editUserPermissionFormGroup.controls[\"isAdmin\"].value;\n }\n\n isValidate() {\n if (!this.companyUser.companyId)\n return false;\n\n if (!this.companyUser.userId && this.isValidMobile === false)\n return false;\n\n if (this.companyUser.isAdmin === undefined)\n return false;\n\n var duplicated = this.companyUsers.find(c => c.userId === this.companyUser.userId && c.companyId === this.companyUser.companyId);\n if (duplicated) {\n this.modalService.warn('this user added before.');\n return false;\n }\n\n return true;\n }\n\n get isValidMobile(): boolean {\n return (this.companyUser.mobile !== undefined && mobileIsValid(this.companyUser.mobile));\n }\n\n cancel() {\n this.addNewMode = false;\n }\n\n // import users\n importData: ImportCompanyUserResponse;\n fileFormControl = new FormControl(null, [Validators.required]);\n clear() {\n this.fileFormControl.setValue(null);\n this.importData = null;\n }\n\n onClearForm() {\n this.clear();\n }\n\n get users(): ImportCompanyUserModel[] {\n if (this.importData == null) return [];\n return this.importData.users;\n };\n\n import(formData) {\n this.inProgress = true;\n this.companyUserService.ImportUsers(formData)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n if (res.type == 4 && res.ok) {\n if (res.body.valid) {\n this.modalHandle.hide();\n this.initComponentData();\n } else\n this.importData = res.body;\n }\n });\n }\n\n modalHandle: any;\n openImportUserModal(template) {\n this.modalHandle = this.bsModalService.show(template);\n }\n\n getPermissionLabels(user: CompanyUserViewModel) {\n return this.companyUserPermissions\n .filter(p => (p.key & user.permissions) > 0);\n }\n getRoles(user: CompanyUserViewModel) {\n let tips = user.companyRoles?.map(p => p.name) ?? [];\n return tips.join(\", \");\n }\n getToolTipCount(user: CompanyUserViewModel) {\n return user.companyRoles?.length ?? 0;\n }\n\n getPermissionCount(user: CompanyUserViewModel) {\n return this.companyUserPermissions\n .filter(p => (p.key & user.permissions) > 0).length;\n }\n\n updateRoles(roles: CompanyRoleViewModel[]) {\n this.currentUser.companyRoles = roles;\n }\n updateNewUserRoles(roles: CompanyRoleViewModel[]) {\n this.companyUser.companyRoles = roles;\n }\n}\n","export class SiteAttendanceTriggerResultSearchModel {\n public isFlagged: boolean\n public isRejected?: boolean;\n public isReviewed?: boolean;\n public userId?: number;\n public siteId?: number;\n public checkInDate?: string;\n}","import { Injectable } from '@angular/core';\nimport { catchError } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { extractParamsFromModel } from '../helpers/extract-params-from-model';\nimport { SiteAttendanceTriggerResultSearchModel } from '../models/site-attendance-trigger-result-search-model';\nimport { ErrorService } from './error.service';\nimport { SiteAttendanceTriggerResultViewModel } from '../models/site-attendance-trigger-result-view-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteAttendanceTriggerResultService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n apiUrl = '/api/siteAttendanceTriggerResult';\n\n getSiteAttendanceTriggerResults = (model: SiteAttendanceTriggerResultSearchModel): Observable =>\n this._http.get(`${this.apiUrl}`, { params: extractParamsFromModel(model) })\n .pipe(catchError(this._errorService.handleError));\n\n updateFlaggState = (id: number, isFlagged: boolean): Observable =>\n this._http.post(`${this.apiUrl}/${id}`, isFlagged)\n .pipe(catchError(this._errorService.handleError));\n\n}\n","
      \n
      \n
      \n
      \n

      You Can Filter List By Change Below Options

      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n

      Filter List By Review Status

      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n

      Filter List By Tag Status

      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n

      Filter List By Reject Status

      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n

      Filter By Site

      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n

      Filter By User

      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n

      Filter By Check-In Date

      \n
      \n
      \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n

      Manage Tagged Users\n ( {{flaggedUsersList?.length}} records found )\n

      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      UserMobileSiteCheck-In DateIs Rejected?Rejected Message(s)Is Tagged / Tag(s)Is Reviewed?Actions
      \n \n
      {{user.userFullName}}{{user.mobile | mobile}}{{user.siteName}}{{user.checkInDate | datetime}}\n {{user.isRejected ? 'Yes' :\n 'No'}}\n \n {{user.rejectMessage}}\n \n {{user.isFlagged ? 'Yes' : 'No'}}\n \n \n {{tag.title}}\n \n NO\n TAG\n \n \n \n \n \n \n \n {{user.isReviewed ? 'Yes' :\n 'No'}}\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { finalize } from 'rxjs/operators';\nimport { UserService } from 'src/app/services/user.service';\nimport { SiteAttendanceTriggerResultViewModel } from 'src/app/models/site-attendance-trigger-result-view-model';\nimport { SiteAttendanceTriggerResultService } from 'src/app/services/site-attendance-trigger-result.service';\nimport { SiteAttendanceTriggerResultSearchModel } from 'src/app/models/site-attendance-trigger-result-search-model';\nimport { SiteService } from 'src/app/services/site.service';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { ExportAsConfig, FieldType, ExportAsService } from '../../../services/export-as.service';\nimport { ExportAsFileType } from '../../../enums/export-as-file-type';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\n\n@Component({\n selector: 'obc-flagged-user',\n templateUrl: './flagged-user.component.html',\n styleUrls: ['./flagged-user.component.scss']\n})\nexport class FlaggedUserComponent implements OnInit {\n DatetimePickerMode = DatetimePickerMode;\n ProductPlanFeature = ProductPlanFeature;\n inProgress: boolean = false;\n addNewMode: boolean = false;\n filterUserBy = UserAutoCompleteFilterByFields;\n flaggedUsersList: SiteAttendanceTriggerResultViewModel[] = [];\n originalFlaggedUsersList: SiteAttendanceTriggerResultViewModel[] = [];\n flaggedUser: SiteAttendanceTriggerResultViewModel = null;\n serachModel: SiteAttendanceTriggerResultSearchModel = new SiteAttendanceTriggerResultSearchModel();\n siteList: SiteViewModel[] = [];\n selectedDate: Date;\n filterListTerm: string;\n constructor(public userService: UserService,\n private siteAttendanceTriggerResultService: SiteAttendanceTriggerResultService,\n private modalService: ModalService,\n private siteService: SiteService,\n private exportAsService: ExportAsService) { }\n\n ngOnInit(): void {\n this.getSiteList();\n }\n\n getSiteList() {\n this.siteService.getAllPermissionedActiveSites(UserPermission.ManageViewTaggedUser)\n .subscribe(result => {\n this.siteList = result;\n this.serachModel.isFlagged = null;\n this.serachModel.isRejected = null;\n this.serachModel.isReviewed = false;\n this.serachModel.siteId = null;\n this.geSiteAttendanceTriggerResults();\n }, error => { });\n }\n\n geSiteAttendanceTriggerResults() {\n this.inProgress = true;\n //this.setFilterLabel();\n this.siteAttendanceTriggerResultService.getSiteAttendanceTriggerResults(this.serachModel)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.flaggedUsersList = res;\n this.originalFlaggedUsersList = res;\n }, err => console.log(err));\n }\n\n selectedUserIsReviewed: boolean = false;\n initEdit(user) {\n this.selectedUserIsReviewed = user.isReviewed;\n user.inEdit = true;\n this.flaggedUser = user;\n }\n\n changeReviewStatus(user: SiteAttendanceTriggerResultViewModel) {\n if (!this.isValidate(user)) return;\n if (this.selectedUserIsReviewed === user.isReviewed) return;\n this.inProgress = true;\n this.siteAttendanceTriggerResultService.updateFlaggState(user.id, user.isReviewed)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => {\n this.geSiteAttendanceTriggerResults();\n user.inEdit = false;\n },\n error => { this.modalService.error(error) });\n }\n\n isValidate(flaggedUser: SiteAttendanceTriggerResultViewModel) {\n if (!flaggedUser.id)\n return false;\n\n if (!flaggedUser.userId)\n return false;\n\n if (flaggedUser.isReviewed === undefined || flaggedUser.isReviewed === null)\n return false;\n\n return true;\n }\n\n selectedUser: UserBasicInfoViewModel\n selectUser(user: UserBasicInfoViewModel) {\n if (!user || !user.id) return\n this.serachModel.userId = user.id;\n this.selectedUser = user;\n }\n\n setFilterLabel() {\n this.serachModel['isFlaggedText'] = this.serachModel.isFlagged ? 'Flagged Users' : 'UnFlagged Users';\n this.serachModel['selectedSiteName'] = this.serachModel.siteId ? this.siteList.find(c => c.id === this.serachModel.siteId).name : undefined;\n this.serachModel[\"fullName\"] = this.selectedUser.firstName + ' ' + this.selectedUser.lastName;\n this.serachModel['isFlaggedText'] = this.serachModel.isFlagged ? 'Flagged Users' : 'UnFlagged Users';\n }\n\n reset() {\n this.serachModel = new SiteAttendanceTriggerResultSearchModel();\n this.selectedDate = undefined;\n this.selectedUser = JSON.parse(JSON.stringify(new UserBasicInfoViewModel()));\n this.serachModel.isFlagged = null;\n this.serachModel.isRejected = null;\n this.serachModel.isReviewed = false;\n this.geSiteAttendanceTriggerResults();\n }\n\n cancel(user) {\n user.inEdit = false\n user.isFlagged = this.serachModel.isFlagged;\n }\n\n setNow() {\n this.serachModel.checkInDate = new Date().toLocaleString();\n this.selectedDate = new Date();\n }\n\n dateChanges($event: Date) {\n this.serachModel.checkInDate = $event?.toLocaleString();\n this.selectedDate = $event;\n }\n\n exportCsv() {\n let config: ExportAsConfig = {\n fileType: ExportAsFileType.CSV,\n preFileName: 'tagged-users-report',\n fields: [\n { fieldName: 'userFullName', title: 'Full Name' },\n { fieldName: 'mobile', title: 'Mobile', type: FieldType.Mobile },\n { fieldName: 'siteName', title: 'Site' },\n { fieldName: 'checkInDate', title: 'CheckIn Date', type: FieldType.DateTime },\n { fieldName: 'isFlagged', title: 'Tagged', type: FieldType.Boolean },\n { fieldName: 'isRejected', title: 'Rejected', type: FieldType.Boolean },\n { fieldName: 'rejectMessage', title: 'Reject Message' },\n { fieldName: 'isReviewed', title: 'Reviewed', type: FieldType.Boolean },\n ],\n }\n this.exportAsService.exportAs(this.flaggedUsersList, config);\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-company-owner',\n templateUrl: './company-owner.component.html',\n styleUrls: ['./company-owner.component.css']\n})\nexport class CompanyOwnerComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","","
      \n
      \n
      \n Active Plan\n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Title{{activeProductPlan.title}}
      Sites{{activeSiteCountLabel}}
      Average Check-in per day{{averageCheckInCountPerDayLabel}}
      Billing Type{{activeProductPlan.billingPeriodTitle}}
      Price Per Month{{activeProductPlan.pricePerMonth}}\n {{activeProductPlan.priceUnit}}Not Set
      Allow Export\n \n \n
      Questions\n {{numberOfQuestionLabel}}\n
      Users\n {{numberOfUserLabel}}\n
      Email Support\n \n \n
      Support 24x7\n \n \n
      Training Academy\n \n \n
      Integration API\n \n \n
      \n
      \n
      \n

      You are on the Trial plan

      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ProductPlanService } from 'src/app/services/product-plan.service';\nimport { FullProductPlanViewmodel } from 'src/app/models/product-plan-viewmodel';\n\n@Component({\n selector: 'obc-billing',\n templateUrl: './billing.component.html',\n styleUrls: ['./billing.component.scss']\n})\nexport class BillingComponent implements OnInit {\n\n constructor(public layoutService: LayoutService, private productPlanService: ProductPlanService) { }\n activeProductPlan: FullProductPlanViewmodel;\n ngOnInit() {\n this.layoutService.header = \"Billing\";\n this.productPlanService.getActivePlan().subscribe(res => {\n this.activeProductPlan = res;\n });\n }\n\n get activeSiteCountLabel(): string {\n return this.activeProductPlan.activeSiteCount == null ? \"Unlimited\" : `Up to ${this.activeProductPlan.activeSiteCount}`;\n }\n get averageCheckInCountPerDayLabel(): string {\n return this.activeProductPlan.averageCheckInCountPerDay == null ? \"Unlimited\" : `Up to ${this.activeProductPlan.averageCheckInCountPerDay}`;\n }\n get numberOfQuestionLabel(): string {\n return this.activeProductPlan.numberOfQuestions == null ? \"Unlimited\" : `Up to ${this.activeProductPlan.numberOfQuestions}`;\n }\n get numberOfUserLabel(): string {\n return this.activeProductPlan.numberOfUsers == null ? \"Unlimited\" : `Up to ${this.activeProductPlan.numberOfUsers}`;\n }\n}\n","
      \n \n
      \n
      \n \n
      \n \n
      \n \n Copied to clipboard\n \n \n
      \n\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { copyToClipboard } from 'src/app/helpers/general-functions';\n\n@Component({\n selector: 'app-clipboard-box',\n templateUrl: './clipboard-box.component.html',\n styleUrls: ['./clipboard-box.component.scss']\n})\nexport class ClipboardBoxComponent implements OnInit {\n @Input() text = null;\n @Input() label = null;\n @Output() copied = new EventEmitter();\n showCopiedMessage = false;\n constructor() { }\n\n ngOnInit() {\n }\n inputId = 'clipboard-input';\n onCopy() {\n copyToClipboard(this.inputId);\n this.showCopiedMessage = true;\n setTimeout(()=>{\n this.copied.emit();\n }, 1000)\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TwoFactorVerificationMode } from '../enums/two-factor-verification-mode';\n\n@Pipe({\n name: 'twoFactorVerificationModePipe'\n})\nexport class TwoFactorVerificationModePipe implements PipeTransform {\n\n transform(value: any): unknown {\n if (value == TwoFactorVerificationMode.SMS || value == \"SMS\") return \"SMS\";\n if (value == TwoFactorVerificationMode.Email || value == \"Email\") return \"Email\";\n if (value == TwoFactorVerificationMode.Totp || value == \"Totp\") return \"Time-based One-time Password\";\n }\n}\n","
      \n
      Edit Your Profile
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n
      \n
      \n \n
      \n
      \n \n \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      NameAbnAcn
      \n
      \n \n
      \n
      \n Loading...\n
      \n
      \n
      \n \n
      \n
      \n \n
      \n {{ model.name }}\n
      \n
      \n abn: {{model.abn}}\n _ acn: {{model.acn}}\n
      \n
      \n
      \n

      Nothing Found ...

      \n
      {{item.name}}{{item.abn}}{{item.acn}}\n \n \n \n
      \n
      \n
      \n
      \n
      Emergency Contact
      \n \n
      \n\n
      \n

      \n \n

      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n \n Enable authenticator\n \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n To use an authenticator app go through the following steps:
      \n 1. Download a two-factor authenticator app like Microsoft Authenticator for Windows Phone, Android and iOS or\n Google Authenticator for Android and iOS.
      \n 2. Scan the QR Code or enter below key into your two factor authenticator app.\n \n
      \n
      \n \n
      \n
      \n
      \n 3. Once you have scanned the QR code or input the key above, your two factor authentication app will provide you\n with a unique code. Enter the code in the confirmation box below.
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n","import { MaxFileSize } from './../../enums/constants';\nimport { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { UserService } from 'src/app/services/user.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { getFileExtenstion, isValidImageFile, toBase64 } from 'src/app/helpers/general-functions';\nimport { RequestUserProfileUpdateViewmodel } from 'src/app/models/user-profile-viewmodel';\nimport { IndustryTypeService } from '../../services/industry-type-service';\nimport { IndustryTypeViewModel } from '../../models/industry-type/industry-type-view-model';\nimport { noop, Observable, Observer, of } from 'rxjs';\nimport { finalize, map, switchMap, tap } from 'rxjs/operators';\nimport { UserBusinessViewModel } from '../../models/user-business-viewmodel';\nimport { UserBusinessService } from '../../services/user-business-service';\nimport { TypeaheadMatch } from 'ngx-bootstrap/typeahead/public_api';\nimport { ModalService } from 'src/app/services/modal.service';\nimport * as moment from 'moment';\nimport { dateFormat } from 'src/app/helpers/date-time-format';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { EmergencyContactEmitResponse } from \"../../models/emergency-contact-emit-response\";\nimport { EmergencyContactViewModel } from 'src/app/models/emergency-contact-view-model';\nimport { TwoFactorVerificationMode } from '../../enums/two-factor-verification-mode';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { TotpVerifyViewModel } from 'src/app/models/totp-verify-view-model';\n\n@Component({\n selector: 'obc-user-profile',\n templateUrl: './user-profile.component.html',\n styleUrls: ['./user-profile.component.scss']\n})\nexport class UserProfileComponent implements OnInit {\n DatetimePickerMode = DatetimePickerMode;\n profileFormGroup: FormGroup;\n profileInProccess: boolean = false;\n croppedImage: string;\n imageSourceBase64: string;\n fileType: string;\n industryTypeList: IndustryTypeViewModel[];\n suggestions$: Observable;\n userBusinesses: UserBusinessViewModel[] = [];\n selectedSuggestion: string = '';\n isEmailVerified: boolean = false;\n imageViewMode: ('view' | 'edit') = 'view';\n isEmergencyContactValid: boolean = true;\n isActive2fa: boolean = false;\n twoFactorVerificationModeEnum = TwoFactorVerificationMode;\n currentTwoFactorMode?: TwoFactorVerificationMode;\n verifyCode: string;\n\n constructor(\n private layoutService: LayoutService,\n public userService: UserService,\n public bsModalService: BsModalService,\n public modalService: ModalService,\n private industryTypeService: IndustryTypeService,\n private userBusinessService: UserBusinessService) {\n }\n\n ngOnInit() {\n this.layoutService.header = \"User Profile\";\n this.profileInProccess = true;\n\n this.userService\n .userProfile()\n .subscribe(res => {\n this.profileFormGroup = new FormGroup({\n firstName: new FormControl(res.firstName, [Validators.required]),\n lastName: new FormControl(res.lastName, [Validators.required]),\n email: new FormControl(res.email, [Validators.email]),\n birthDay: new FormControl(res.birthDay != null ? new Date(res.birthDay) : null),\n gender: new FormControl(res.gender, null),\n industryTypeId: new FormControl(res.industryTypeId, null),\n profileImageBase64: new FormControl(res.profileImage, null),\n userBusiness: new FormControl('', null),\n emergencyContact: new FormControl(res.emergencyContactAsJson, null),\n twoFactorVerificationMode: new FormControl(res.twoFactorVerificationMode, null),\n });\n\n this.initEmailViewMode();\n this.isEmailVerified = res.isEmailVerified;\n this.profileInProccess = false;\n this.userBusinesses = res.userBusinesses;\n this.isActive2fa = res.isActive2fa;\n this.currentTwoFactorMode = res.twoFactorVerificationMode;\n this.hasTotpSecretKey = this.useCurrentTotpSecretKey = res.hasTotpSecretKey;\n });\n this.industryTypeService.getActiveIndustryTypes()\n .subscribe(res => this.industryTypeList = res);\n this.lookUpBusinessList();\n }\n\n get imageSource(): string {\n if (this.profileFormGroup === null || this.profileFormGroup.get(\"profileImageBase64\").value == null)\n return null;\n let src = this.profileFormGroup.get(\"profileImageBase64\").value as string;\n if (src.startsWith(\"http://\") || src.startsWith(\"https://\"))\n return src;\n else\n return `data:image/png;base64,${src}`\n }\n\n async onPickImage($event) {\n let file = $event.target.files[0];\n if (!isValidImageFile(file.type)) {\n this.modalService.error(\"The selected file must be a valid type of image\").subscribe(_ => { });\n $event.target.value = null;\n return;\n }\n if (file.size > MaxFileSize * 1024000) {\n this.modalService.error(`Maximum File Size is ${MaxFileSize}mb`, \"\").subscribe(_ => { });\n $event.target.value = null;\n return;\n }\n this.imageSourceBase64 = (await toBase64(file)) as string;\n this.fileType = getFileExtenstion(file.name);\n this.imageViewMode = 'edit';\n }\n\n onDiscardImageChanges() {\n this.imageViewMode = 'view';\n this.croppedImage = null;\n }\n\n onSaveProfileChanges() {\n this.profileInProccess = true;\n let source = null;\n if (this.croppedImage != null) {\n source = this.croppedImage;\n }\n let industryStr = this.profileFormGroup.get(\"industryTypeId\").value;\n let industryId = !industryStr || industryStr == '' ? null : parseInt(industryStr);\n let birthday = this.profileFormGroup.get(\"birthDay\").value;\n let model = {\n firstName: this.profileFormGroup.get(\"firstName\").value,\n lastName: this.profileFormGroup.get(\"lastName\").value,\n email: this.profileFormGroup.get(\"email\").value,\n //Actually birthday is datetime, but to remove timezone we set it to any and use below code\n //moment date without timezone:moment().utcOffset(0, true).format()\n birthDay: birthday == null ? null : moment(birthday, dateFormat).utcOffset(0, true).format(),\n gender: parseInt(this.profileFormGroup.get(\"gender\").value),\n industryTypeId: industryId,\n mobile: '',\n profileImageBase64: source,\n userBusinesses: this.userBusinesses,\n fileType: this.fileType,\n emergencyContactAsJson: JSON.stringify(this.emergencyContact),\n twoFactorVerificationMode: this.profileFormGroup.get(\"twoFactorVerificationMode\").value\n } as RequestUserProfileUpdateViewmodel;\n\n this.userService.editProfile(model)\n .subscribe({\n next: res => {\n this.userService.initUserInfo();\n this.profileInProccess = false;\n this.initEmailViewMode();\n if (res.isVerificationEmailSent)\n this.modalService.info(\"Verification email sent to your email address\");\n this.isEmailVerified = res.isEmailVerified;\n this.imageViewMode = 'view';\n if (source != null) {\n this.profileFormGroup.get(\"profileImageBase64\").setValue(`${source}`);\n //this.imageSourceBase64 = `data:image/png;base64,${source}`;\n }\n this.currentTwoFactorMode = model.twoFactorVerificationMode;\n this.modalService.success(\"Successfully saved\");\n },\n error: (err) => {\n this.profileInProccess = false;\n },\n complete: () => {\n this.profileInProccess = false;\n }\n });\n }\n\n imageCropped($event) {\n let base64 = $event.base64.split(';base64,')[1];\n this.croppedImage = base64;\n }\n\n loadImageFailed() {\n this.modalService.error(\"unable to load image\", \"\").subscribe(res => {\n //alert(\"unable to load image\");\n });\n }\n\n onRemoveProfilePicture() {\n let header = \"Remove Profile Picture\"\n this.modalService.confirm(\"Your image will be completely removed from the server. Are you sure?\", header).subscribe(result => {\n if (result) {\n this.profileInProccess = true;\n this.userService.removeProfilePicture().subscribe(res => {\n this.profileInProccess = false;\n this.profileFormGroup.get(\"profileImageBase64\").setValue(null);\n this.croppedImage = null;\n });\n }\n })\n }\n\n loader: boolean = false;\n\n lookUpBusinessList() {\n this.suggestions$ = new Observable((observer: Observer) => {\n observer.next(this.profileFormGroup.get(\"userBusiness\").value);\n }).pipe(\n switchMap((nameOrAbnOrAcn: string) => {\n if (nameOrAbnOrAcn) {\n this.loader = true;\n return this.userBusinessService.getAddressSuggestionList(nameOrAbnOrAcn).pipe(\n map((data: UserBusinessViewModel[]) => (data && data) || []),\n tap(\n () => noop,\n (_) => {\n // var rrr = (err && err.message) || 'Something goes wrong';\n }\n ),\n finalize(() => {\n this.loader = false;\n })\n );\n }\n\n return of([]);\n })\n );\n }\n\n onSelectBusiness(event: TypeaheadMatch): void {\n if (event.item) {\n this.userBusinesses.push(event.item);\n this.profileFormGroup.get(\"userBusiness\").setValue('');\n }\n }\n\n onAddBusiness() {\n let newItem = this.profileFormGroup.get(\"userBusiness\").value;\n if (newItem === null || newItem.match(/^ *$/) !== null || (newItem as string).length <= 1)\n return;\n let typedBusiness = this.profileFormGroup.get(\"userBusiness\").value as string;\n let newItemModel = ({ name: typedBusiness });\n this.userBusinesses.push(newItemModel);\n this.profileFormGroup.get(\"userBusiness\").setValue('');\n this.loader = false;\n }\n\n onDelete(record: UserBusinessViewModel) {\n this.userBusinesses = this.userBusinesses.filter(obj => obj !== record);\n }\n\n onSendVerificationEmail() {\n this.userService.sendVerificationEmail().subscribe(res => {\n this.modalService.info(\"Verification email sent successfully\", \"\").subscribe(res => {\n //alert(\"verification email sent successfully\");\n });\n });\n }\n\n initEmailViewMode() {\n if (this.profileFormGroup)\n this.emailViewMode = this.profileFormGroup.get('email').value && this.profileFormGroup.get('email').valid ? 'view' : 'edit';\n }\n\n emailViewMode: ('view' | 'edit') = 'view';\n\n\n emergencyContact: EmergencyContactViewModel;\n onUpdateEmergencyContact(response: EmergencyContactEmitResponse) {\n this.isEmergencyContactValid = response.isValid;\n this.emergencyContact = response.value;\n if (this.emergencyContact == null) {\n this.emergencyContact = EmergencyContactViewModel.newEmptyAnswer();\n }\n }\n\n secretKey: string;\n manualEntryKey: string;\n qrCode: string;\n\n isShowQr() {\n return this.isActive2fa && this.profileFormGroup.get(\"twoFactorVerificationMode\").value == TwoFactorVerificationMode.Totp;\n }\n\n qrCodeModalref: any;\n showQrCodeModal(template) {\n if (this.isActive2fa && this.profileFormGroup.get(\"twoFactorVerificationMode\").value == TwoFactorVerificationMode.Totp && this.currentTwoFactorMode != TwoFactorVerificationMode.Totp) {\n this.qrCodeModalref = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: true,\n });\n this.userService.totpGenerateQrCode().subscribe(\n (res) => {\n this.manualEntryKey = res.manualEntryKey;\n this.qrCode = res.qrCodeSetupImageUrl;\n this.secretKey = res.secretKey;\n },\n (error) => {\n console.log(error);\n }\n );\n }\n }\n\n totpVerifyCode() {\n var model: TotpVerifyViewModel;\n if (this.useCurrentTotpSecretKey) {\n model = {\n userCode: this.verifyCode,\n secretKey: this.secretKey,\n useCurrentSecretKey: true\n }\n }\n else {\n if (this.verifyCode != \"\" && this.verifyCode != undefined) {\n model = {\n userCode: this.verifyCode,\n secretKey: this.secretKey,\n useCurrentSecretKey: false\n }\n }\n }\n this.userService.totpVerifyCode(model).subscribe(res => {\n if (!res) {\n this.modalService.error(\"Verification failed\");\n }\n else {\n this.modalService.success(\"Successfully validated\");\n this.qrCodeModalref.hide();\n }\n });\n }\n\n closeQr() {\n this.profileFormGroup.get(\"twoFactorVerificationMode\").setValue(this.currentTwoFactorMode);\n this.qrCodeModalref.hide();\n }\n\n hasTotpSecretKey: boolean;\n useCurrentTotpSecretKey: boolean = true;\n setUseAuthentication(event) {\n this.useCurrentTotpSecretKey = event;\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nexport function repeatPasswordValidator(control: AbstractControl): { [key: string]: boolean } | null {\n var valid = control.get(\"password\").value == control.get(\"repeatPassword\").value;\n return valid ? null : { 'repeatPassword': true };\n}","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { repeatPasswordValidator } from 'src/app/helpers/repeat-password-validator';\nimport { ChangePasswordViewmodel } from 'src/app/models/change-password-viewmodel';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-change-password',\n templateUrl: './change-password.component.html',\n styleUrls: ['./change-password.component.css']\n})\nexport class ChangePasswordComponent implements OnInit {\n passwordInProccess: boolean = false;\n passwordFormGroup: FormGroup;\n constructor(private layoutService: LayoutService, private userService: UserService,private modalService: ModalService ) { }\n\n ngOnInit() {\n this.layoutService.header = \"Change Password\";\n this.passwordFormGroup = new FormGroup({\n currentPassword: new FormControl('', [Validators.required, Validators.minLength(8)]),\n repeatPasswordGroup: new FormGroup({\n password: new FormControl('', [Validators.required, Validators.minLength(8)]),\n repeatPassword: new FormControl('', [Validators.required, Validators.minLength(8)]),\n }, [repeatPasswordValidator])\n })\n }\n\n onChangePassword() {\n var model = {\n password: this.passwordFormGroup.get(\"repeatPasswordGroup\").get(\"password\").value,\n currentPassword: this.passwordFormGroup.get(\"currentPassword\").value,\n } as ChangePasswordViewmodel;\n this.passwordInProccess = true;\n this.userService.changePassword(model).subscribe(res => {\n if (res.success === true) {\n this.passwordInProccess = false;\n this.passwordFormGroup.reset();\n } else {\n this.modalService.error(res.message, \"change password error\").subscribe(res => {\n });\n this.passwordInProccess = false;\n this.passwordFormGroup.get(\"currentPassword\").setValue('');\n }\n }, err => {\n this.modalService.error(err.error, \"change password error\").subscribe(res=> {\n //alert(err.error);\n });\n this.passwordInProccess = false;\n this.passwordFormGroup.get(\"currentPassword\").setValue('');\n },()=>{\n });\n }\n}\n","
      \n
      Reset Password
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n

      \n \n

      \n
      \n
      \n
      \n
      ","
      \n \n
      \n \n Select Registered User\n
      \n
      \n
      \n
      \n
      Name : {{model.firstName}} {{model.lastName}}
      \n
      Mobile : {{model.mobile | mobile}}
      \n
      \n
      \n \n
      \n
      \n
      \n
      ","import { EventEmitter, Input, Output } from '@angular/core';\nimport { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'app-user-card',\n templateUrl: './user-card.component.html',\n styleUrls: ['./user-card.component.scss']\n})\nexport class UserCardComponent implements OnInit {\n model: UserBasicInfoViewModel = null;\n _userId = null;\n @Input() set userId(value : number) {\n if(this._userId != value && value > 0)\n {\n this._userId = value;\n this.userService.getAccessibleUserBasicProfile(value).subscribe(res=> {\n this.model = res;\n })\n } \n }\n @Input() label = \"Select User\";\n @Output() remove = new EventEmitter();\n @Output() valueChange = new EventEmitter();\n @Input() hideRemoveButton = false;\n @Input() required = true;\n filterUserBy = UserAutoCompleteFilterByFields;\n formControl = new FormControl();\n constructor(private userService : UserService) { }\n\n ngOnInit() {\n this.formControl.valueChanges.subscribe(res=> {\n this.valueChange.emit(res);\n });\n }\n\n onRemove() {\n this.model = null;\n this.formControl.reset();\n this.remove.emit();\n }\n\n onSelectUser($event : UserBasicInfoViewModel) {\n if($event.id > 0) {\n this.formControl.setValue($event.id); \n this.model = $event; \n this._userId = $event.id\n }\n }\n\n}\n","
      \n
      \n
      \n
      \n \n \n \n \n
      \n
      \n \n \n \n
      \n\n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n

      \n \n

      \n
      \n
      \n
      \n
      \n

      {{ errorMessage }}

      \n
      \n
      ","import { MaxFileSize } from '../../../enums/constants';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { getFileExtenstion, isValidImageFile, toBase64 } from 'src/app/helpers/general-functions';\nimport { UpdateCompanyProfileModel } from 'src/app/models/company-profile-viewmodel';\nimport { CountryService } from 'src/app/services/country.service';\nimport { Timezone } from 'src/app/models/time-zone';\nimport { CompanyService } from 'src/app/services/company.service';\nimport { Subject } from 'rxjs';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { emailListValidator } from 'src/app/helpers/email-list-validator';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { CompanySiteContactInformationModel } from \"../../../models/company-site-contact-information.view.model\";\nimport {\n e168ValidatorNullableCompanyPhoneNumber,\n} from \"../../../helpers/mobile-format-validator\";\nimport {UserService} from \"../../../services/user.service\";\nimport {ProductPlanFeature} from \"../../../enums/product-plan-feature.enum\";\n\n@Component({\n selector: 'obc-company-profile',\n templateUrl: './company-profile.component.html',\n styleUrls: ['./company-profile.component.css']\n})\nexport class CompanyProfileComponent implements OnInit {\n errorMessage: string = null;\n profileFormGroup: FormGroup;\n @Input() inProgress$: Subject;\n croppedImage: string;\n imageSourceBase64: string;\n timezones: Timezone[];\n imageChange: boolean = false;\n fileType: string;\n filterUserBy = UserAutoCompleteFilterByFields;\n\n constructor(private companyService: CompanyService, private countryService: CountryService,\n private modalService: ModalService, public userService: UserService) { }\n\n get companyHasFormFeature() {\n return this.userService.hasCompanyFeature(ProductPlanFeature.Form);\n }\n ngOnInit() {\n this.inProgress$.next(true);\n this.countryService.getTimeZones().subscribe(res => this.timezones = res);\n this.companyService.getCurrentCompanyProfile().subscribe(res => {\n\n this.profileFormGroup = new FormGroup({\n title: new FormControl(res.title, [Validators.required]),\n description: new FormControl(res.description),\n timezone: new FormControl(res.timezoneId, [Validators.required]),\n profileImageBase64: new FormControl(res.profileImageBase64),\n companySupervisorEmailAddress: new FormControl(res.companySupervisorEmailAddress, [emailListValidator]),\n contactUserId: new FormControl(res.contactUserId),\n shareDataWithVicVisitation: new FormControl(res.shareDataWithVicVisitation),\n // forceViewSupplierDocumentsBeforeSignOff: new FormControl(res.forceViewSupplierDocumentsBeforeSignOff),\n });\n this.inProgress$.next(false);\n });\n }\n \n get imageSource(): string {\n if (this.profileFormGroup === null || this.profileFormGroup.get(\"profileImageBase64\").value == null)\n return null;\n let src = this.profileFormGroup.get(\"profileImageBase64\").value as string;\n if (src.startsWith(\"http://\") || src.startsWith(\"https://\"))\n return src;\n else\n return `data:image/png;base64,${src}`\n }\n\n async onPickImage($event) {\n let file = $event.target.files[0];\n if (!isValidImageFile(file.type)) {\n this.modalService.error(\"The selected file must be a valid type of image\").subscribe(_ => { });\n $event.target.value = null;\n return;\n }\n if (file.size > MaxFileSize * 1024000) {\n this.modalService.error(`Maximum File Size is ${MaxFileSize}mb`, \"company profile image\").subscribe(_ => { });\n $event.target.value = null;\n return;\n }\n this.imageSourceBase64 = (await toBase64(file)) as string;\n this.imageChange = true;\n this.fileType = getFileExtenstion(file.name);\n }\n\n onSaveProfileChanges() {\n this.errorMessage = null;\n let source = null;\n if (this.croppedImage != null && this.imageChange) {\n source = this.croppedImage;\n }\n\n let model = {\n title: this.profileFormGroup.get(\"title\").value,\n description: this.profileFormGroup.get(\"description\").value,\n timezoneId: parseInt(this.profileFormGroup.get(\"timezone\").value),\n profileImageBase64: source,\n fileType: this.fileType,\n companySupervisorEmailAddress: this.profileFormGroup.get(\"companySupervisorEmailAddress\").value,\n contactUserId: +this.profileFormGroup.get(\"contactUserId\").value,\n shareDataWithVicVisitation: this.profileFormGroup.get(\"shareDataWithVicVisitation\").value,\n // forceViewSupplierDocumentsBeforeSignOff: this.profileFormGroup.get(\"forceViewSupplierDocumentsBeforeSignOff\").value as boolean,\n } as UpdateCompanyProfileModel;\n\n if (model.shareDataWithVicVisitation && !model.contactUserId) {\n this.modalService.error(\"You Must Select Company Contact\");\n return;\n }\n this.inProgress$.next(true);\n this.companyService.updateCurrentCompanyProfile(model).subscribe(_ => {\n this.inProgress$.next(false);\n if (source != null)\n this.imageSourceBase64 = `data:image/png;base64,${source}`;\n this.modalService.success(\"Company setting updated successfully\").subscribe((_) => {\n if (model.profileImageBase64 != null) {\n window.location.reload();\n }\n });\n }, err => {\n this.inProgress$.next(false);\n this.errorMessage = err;\n setTimeout(() => {\n this.errorMessage = null;\n }, 5000);\n }, () => {\n this.imageChange = false;\n });\n }\n\n imageCropped($event) {\n this.croppedImage = $event.base64.split(';base64,')[1];\n }\n\n loadImageFailed() {\n this.modalService.error(\"unable to load image\", \"company profile image\").subscribe(_ => {\n //alert(\"unable to load image\");\n });\n }\n\n}\n","export enum AnswerDeletionPolicy {\n None = 0,\n All = 1,\n Sensitive = 2,\n}\n","export enum DataDeletionPolicy {\n None = 0,\n All = 1,\n}\n","export enum DataRetentionPolicyStatus {\n Active = 1,\n Disabled = 2,\n}\n","export enum DocumentDeletionPolicy {\n None = 0,\n All = 1,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { DataRetentionPolicyStatus } from '../enums/data-retention-policy-status.enum';\nimport { DataRetentionPolicyModel, DataRetentionPolicyViewModel } from '../models/data-retention-policy';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DataRetentionPolicyService {\n\n constructor(private http: HttpClient, private errorService: ErrorService) {\n\n }\n\n getPolicies() {\n return this.http.get(\"/api/DataRetentionPolicy/get-all\")\n .pipe(catchError(this.errorService.handleError));\n }\n\n deletePolicy(policyId: number) {\n return this.http.get(`/api/DataRetentionPolicy/remove/${policyId}`)\n .pipe(catchError(this.errorService.handleError));\n }\n\n policyStatusChange(policyId: number, status: DataRetentionPolicyStatus) {\n return this.http.get(`/api/DataRetentionPolicy/change-status/${policyId}/${status}`)\n .pipe(catchError(this.errorService.handleError));\n }\n\n updatePolicy(policyId: number, model: DataRetentionPolicyModel) {\n return this.http.post(`/api/DataRetentionPolicy/update/${policyId}`, model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n addPolicy(model: DataRetentionPolicyModel): Observable {\n return this.http.post(`/api/DataRetentionPolicy/add`, model)\n .pipe(catchError(this.errorService.handleError));\n }\n\n}\n","
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      TitleDelete AfterDelete All DataDelete User DataDelete DocumentsDelete AnswersStatus\n
      \n
      \n
      All Sites
      \n
      Selected Site(s)
      \n
      \n \n
      \n
      \n
      {{policy.title}}{{policy.daysBefore}} Days\n Yes\n No\n {{policy.deleteAttendance ? \"---\" :DataDeletionPolicyToLabel(policy.dataDeletionPolicy)}}{{policy.deleteAttendance ? \"---\"\n :DocumentDeletionPolicyToLabel(policy.documentDeletionPolicy)}}{{policy.deleteAttendance ? \"---\" :AnswerDeletionPolicyToLabel(policy.answerDeletionPolicy)}}\n \n \n \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n \n Add / Update Retention Policy\n \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n Days\n
      \n
      \n
      \n
      \n
      \n
      \n Does this policy apply to all sites?\n \n \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      NameCount: {{sites.length}}
      {{site.name}} [{{site.siteReference}}]\n \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n Do you want to delete all data?\n \n \n \n
      \n
      \n
      \n Warning: This policy will delete all attendance data.\n
      \n \n
      \n
      \n \n
      \n \n
      \n\n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n\n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n
      \n \n \n
      \n
      \n
      \n
      \n\n
      ","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { AnswerDeletionPolicy } from 'src/app/enums/answer-deletion-policy.enum';\nimport { DataDeletionPolicy } from 'src/app/enums/data-deletion-policy.enum';\nimport { DataRetentionPolicyStatus } from 'src/app/enums/data-retention-policy-status.enum';\nimport { DocumentDeletionPolicy } from 'src/app/enums/document-deletion-policy.enum';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { deepCloneJson } from 'src/app/helpers/general-functions';\nimport { DataRetentionPolicyModel, DataRetentionPolicyViewModel } from 'src/app/models/data-retention-policy';\nimport { BaseSiteViewModel } from 'src/app/models/site-viewmodel';\nimport { DataRetentionPolicyService } from 'src/app/services/data-retention-policy.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\n// ******* In the name of GO..............D *******\n@Component({\n selector: 'app-data-retention-policy',\n templateUrl: './data-retention-policy.component.html',\n styleUrls: ['./data-retention-policy.component.scss']\n})\nexport class DataRetentionPolicyComponent implements OnInit {\n fakeFormControl = new FormControl();\n inProgress = false;\n SiteActiveStatus = SiteActiveStatus;\n deletionPolicies = new BehaviorSubject([]);\n DataDeletionPolicy = DataDeletionPolicy;\n DocumentDeletionPolicy = DocumentDeletionPolicy;\n AnswerDeletionPolicy = AnswerDeletionPolicy;\n\n DataDeletionPolicyToLabel(value: DataDeletionPolicy) {\n switch (value) {\n case DataDeletionPolicy.All:\n return \"All\";\n case DataDeletionPolicy.None:\n return \"Disabled\"\n }\n }\n\n DataDeletionPolicyToCssClass(value: DataDeletionPolicy) {\n switch (value) {\n case DataDeletionPolicy.All:\n return \"text-danger\";\n case DataDeletionPolicy.None:\n return \"text-success\";\n default:\n return \"\";\n }\n }\n\n DocumentDeletionPolicyToLabel(value: DocumentDeletionPolicy) {\n switch (value) {\n case DocumentDeletionPolicy.All:\n return \"All\";\n case DocumentDeletionPolicy.None:\n return \"Disabled\"\n }\n }\n\n DocumentDeletionPolicyToCssClass(value: DocumentDeletionPolicy) {\n switch (value) {\n case DocumentDeletionPolicy.All:\n return \"text-danger\";\n case DocumentDeletionPolicy.None:\n return \"text-success\";\n default:\n return \"\";\n }\n }\n\n AnswerDeletionPolicyToLabel(value: AnswerDeletionPolicy) {\n switch (value) {\n case AnswerDeletionPolicy.All:\n return \"All\";\n case AnswerDeletionPolicy.None:\n return \"Disabled\"\n case AnswerDeletionPolicy.Sensitive:\n return \"Sensitive\"\n }\n }\n\n AnswerDeletionPolicyToCssClass(value: AnswerDeletionPolicy) {\n switch (value) {\n case AnswerDeletionPolicy.All:\n return \"text-danger\";\n case AnswerDeletionPolicy.None:\n return \"text-success\";\n case AnswerDeletionPolicy.Sensitive:\n return \"text-warning\";\n default:\n return \"\";\n }\n }\n\n formGroup = new FormGroup({\n id: new FormControl(null),\n title: new FormControl(''),\n isCompanyPolicy: new FormControl(true),\n status: new FormControl(true),\n daysBefore: new FormControl(null, [Validators.min(1), Validators.required]),\n deleteAttendance: new FormControl(true),\n dataDeletionPolicy: new FormControl(DataDeletionPolicy.None),\n documentDeletionPolicy: new FormControl(DocumentDeletionPolicy.None),\n answerDeletionPolicy: new FormControl(AnswerDeletionPolicy.None),\n })\n constructor(private dataRetentionPolicyService: DataRetentionPolicyService,\n private bsModalService: BsModalService,\n private layoutService: LayoutService,\n private modalService: ModalService) { }\n\n ngOnInit() {\n setTimeout(() => {\n this.getPolicies();\n }, 100)\n }\n\n private getPolicies() {\n this.inProgress = true;\n this.dataRetentionPolicyService.getPolicies()\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.deletionPolicies.next(res);\n });\n }\n\n formGroupIsValid() {\n return this.formGroup.valid && (\n (this.formGroup.controls.isCompanyPolicy.value == true || this.sites.some(x => true)) &&\n (this.formGroup.controls.deleteAttendance.value == true || (\n this.formGroup.controls.dataDeletionPolicy.value > 0 ||\n this.formGroup.controls.documentDeletionPolicy.value > 0 ||\n this.formGroup.controls.answerDeletionPolicy.value > 0\n )));\n }\n\n addPolicy() {\n var isCompanyPolicy = this.formGroup.controls.isCompanyPolicy.value;\n var model = {\n title: this.formGroup.controls.title.value,\n isCompanyPolicy: this.formGroup.controls.isCompanyPolicy.value,\n daysBefore: this.formGroup.controls.daysBefore.value,\n status: DataRetentionPolicyStatus.Disabled,\n deleteAttendance: this.formGroup.controls.deleteAttendance.value,\n dataDeletionPolicy: this.formGroup.controls.dataDeletionPolicy.value,\n documentDeletionPolicy: this.formGroup.controls.documentDeletionPolicy.value,\n answerDeletionPolicy: this.formGroup.controls.answerDeletionPolicy.value,\n siteIds: isCompanyPolicy ? [] : (this.sites?.length ? this.sites.map(x => x.id) : null),\n } as DataRetentionPolicyModel;\n\n this.inProgress = true;\n this.dataRetentionPolicyService.addPolicy(model)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.deletionPolicies.value.push(res);\n this.resetFormGroup();\n this.onCloseModal();\n if (res.status == DataRetentionPolicyStatus.Disabled) {\n var msg = \"New Data Retention Policy Was Added Successfully! By default this policy is disabled and you need to activate it.\";\n this.modalService.info(msg);\n }\n })\n }\n\n getPolicyStatus(value: boolean) {\n return value ? DataRetentionPolicyStatus.Active : DataRetentionPolicyStatus.Disabled;\n }\n\n getPolicyBooleanStatus(value: DataRetentionPolicyStatus) {\n return value == DataRetentionPolicyStatus.Active ? true : false;\n }\n\n updatePolicy() {\n var isCompanyPolicy = this.formGroup.controls.isCompanyPolicy.value;\n var model = {\n title: this.formGroup.controls.title.value,\n isCompanyPolicy: this.formGroup.controls.isCompanyPolicy.value,\n daysBefore: this.formGroup.controls.daysBefore.value,\n status: this.getPolicyStatus(this.formGroup.controls.status.value),\n deleteAttendance: this.formGroup.controls.deleteAttendance.value,\n dataDeletionPolicy: this.formGroup.controls.dataDeletionPolicy.value,\n documentDeletionPolicy: this.formGroup.controls.documentDeletionPolicy.value,\n answerDeletionPolicy: this.formGroup.controls.answerDeletionPolicy.value,\n siteIds: isCompanyPolicy ? [] : (this.sites?.length ? this.sites.map(x => x.id) : null),\n } as DataRetentionPolicyModel;\n this.inProgress = true;\n this.dataRetentionPolicyService.updatePolicy(this.formGroup.controls.id.value, model)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.getPolicies();\n this.onCloseModal();\n })\n }\n\n onPolicyStatusChange($event, policy: DataRetentionPolicyViewModel) {\n var status = this.getPolicyStatus($event);\n if (policy.status != status) {\n this.inProgress = true;\n this.dataRetentionPolicyService.policyStatusChange(policy.id, status)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n policy.status = res;\n })\n }\n }\n\n onRemovePolicy(policy: DataRetentionPolicyViewModel) {\n this.inProgress = true;\n this.dataRetentionPolicyService.deletePolicy(policy.id)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n var index = this.deletionPolicies.value.indexOf(policy);\n this.deletionPolicies.value.splice(index, 1);\n })\n }\n\n sites: BaseSiteViewModel[] = [];\n onSiteSelect($event) {\n this.sites.push($event);\n }\n\n onRemoveSite(site: BaseSiteViewModel) {\n var index = this.sites.indexOf(site);\n this.sites.splice(index, 1);\n }\n\n boolToLabel(value: boolean) {\n return value ? \"Yes\" : \"No\";\n }\n\n modalHandle: any = null;\n onAddNewPolicy(template) {\n this.resetFormGroup();\n this.modalHandle = this.bsModalService.show(template, {\n class: 'modal-lg'\n });\n }\n\n onUpdatePolicy(policy: DataRetentionPolicyViewModel, template) {\n this.formGroup.controls.id.setValue(policy.id);\n this.formGroup.controls.title.setValue(policy.title);\n this.formGroup.controls.isCompanyPolicy.setValue(policy.isCompanyPolicy);\n this.formGroup.controls.daysBefore.setValue(policy.daysBefore);\n this.formGroup.controls.status.setValue(this.getPolicyBooleanStatus(policy.status));\n this.formGroup.controls.deleteAttendance.setValue(policy.deleteAttendance);\n this.formGroup.controls.dataDeletionPolicy.setValue(policy.dataDeletionPolicy);\n this.formGroup.controls.documentDeletionPolicy.setValue(policy.documentDeletionPolicy);\n this.formGroup.controls.answerDeletionPolicy.setValue(policy.answerDeletionPolicy);\n this.sites = deepCloneJson(policy.sites);\n\n this.modalHandle = this.bsModalService.show(template, {\n class: 'modal-lg'\n });\n }\n\n resetFormGroup() {\n this.formGroup.reset();\n this.formGroup.controls.id.setValue(null);\n this.formGroup.controls.title.setValue('');\n this.formGroup.controls.isCompanyPolicy.setValue(true);\n this.formGroup.controls.deleteAttendance.setValue(true);\n\n this.formGroup.controls.dataDeletionPolicy.setValue(DataDeletionPolicy.None);\n this.formGroup.controls.documentDeletionPolicy.setValue(DocumentDeletionPolicy.None);\n this.formGroup.controls.answerDeletionPolicy.setValue(AnswerDeletionPolicy.None);\n this.sites = [];\n }\n\n onCloseModal() {\n if (this.modalHandle)\n this.modalHandle.hide()\n }\n\n getFakeSwitchFormControl(policy: DataRetentionPolicyViewModel) {\n if ((policy as any).fakeStatusSwitchFormControl)\n return (policy as any).fakeStatusSwitchFormControl;\n var status = this.getPolicyBooleanStatus(policy.status);\n (policy as any).fakeStatusSwitchFormControl = new FormControl(status);\n return (policy as any).fakeStatusSwitchFormControl;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CompanyInventoryConfigModel } from '../models/inventory/company-inventory-config-model';\nimport { InventoryLocationModel, InventoryLocationViewModel } from '../models/inventory/inventory-location-model';\nimport { ToolCategoryModel, ToolCategoryViewModel } from '../models/inventory/tool-category-model';\nimport { BaseToolDynamicFieldViewModel, ToolDynamicFieldModel, ToolDynamicFieldViewModel } from '../models/inventory/tool-dynamic-field-model';\nimport { ToolDynamicFieldTriggerModel, ToolDynamicFieldTriggerViewModel } from '../models/inventory/tool-dynamic-field-trigger-model';\nimport { ToolStatusModel, ToolStatusViewModel } from '../models/inventory/tool-status-model';\nimport { ToolStatusTriggerViewModel, ToolStatusTriggerModel } from '../models/inventory/tool-status-trigger-model';\nimport { ServerResultData } from '../models/server-result-data';\nimport { ErrorService } from './error.service';\nimport { UpdateInventoryLocationModel } from '../models/inventory/update-inventory-location-model';\nimport { GlobalToolDynamicFieldViewModel } from '../models/inventory/global-tool-dynamic-field-view-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ManageInventoryService {\n\n apiUrl: string = \"/api/ManageInventory\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n getToolCategories(): Observable {\n return this.http.get(`${this.apiUrl}/get-tool-categories`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addToolCategory(model: ToolCategoryModel): Observable {\n return this.http.post(`${this.apiUrl}/add-tool-category`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeToolCategory(id: number) {\n return this.http.get(`${this.apiUrl}/remove-tool-category/${id}`)\n .pipe(catchError(this._errorService.handleError));\n }\n addToolDynamicField(id: number, model: ToolDynamicFieldModel): Observable {\n return this.http.post(`${this.apiUrl}/add-tool-dynamic-field/${id}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeToolDynamicField(itemId: number) {\n return this.http.get(`${this.apiUrl}/remove-tool-dynamic-field/${itemId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getToolStatuses(): Observable {\n return this.http.get(`${this.apiUrl}/get-tool-statuses`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addToolStatus(model: ToolStatusModel): Observable {\n return this.http.post(`${this.apiUrl}/add-tool-status`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeToolStatus(id: number) {\n return this.http.get(`${this.apiUrl}/remove-tool-status/${id}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getInventoryLocations(): Observable {\n return this.http.get(`${this.apiUrl}/get-inventory-locations`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addInventoryLocation(model: InventoryLocationModel): Observable {\n return this.http.post(`${this.apiUrl}/add-inventory-location`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeInventoryLocation(id: number) {\n return this.http.get(`${this.apiUrl}/remove-inventory-location/${id}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getCompanyInventoryConfig(): Observable> {\n return this.http.get(`${this.apiUrl}/get-company-inventory-config`)\n .pipe(catchError(this._errorService.handleError));\n }\n saveCompanyInventoryConfig = (companyInventoryConfigModel: CompanyInventoryConfigModel): Observable => {\n return this.http.post(`${this.apiUrl}/save-company-inventory-config`, companyInventoryConfigModel)\n .pipe(catchError(this._errorService.handleError));\n }\n\n changeDynamicFieldOrder = (categoryId: number, isAssignField: boolean, dynamicFields: number[]) =>\n this.http.post(`${this.apiUrl}/change-dynamic-field-order/${categoryId}/${isAssignField}`, dynamicFields);\n\n // status triggers\n getToolStatusTriggers(toolStatusId: number): Observable> {\n return this.http.get>(`${this.apiUrl}/toolstatus/${toolStatusId}/get-triggers`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeToolStatusTrigger(toolStatusId: number, triggerId: number): Observable> {\n return this.http.get>(`${this.apiUrl}/toolstatus/${toolStatusId}/remove-trigger/${triggerId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateToolStatusTrigger(toolStatusId: number, triggerId: number, model: ToolStatusTriggerModel) {\n return this.http.post>(`${this.apiUrl}/toolstatus/${toolStatusId}/update-trigger/${triggerId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addToolStatusTrigger(toolStatusId: number, model: ToolStatusTriggerModel) {\n return this.http.post>(`${this.apiUrl}/toolstatus/${toolStatusId}/add-trigger`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n changeStatusToolStatusTrigger(toolStatusId: number, triggerId: number) {\n return this.http.get(`${this.apiUrl}/toolstatus/${toolStatusId}/change-trigger-status/${triggerId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n // dynamic field triggers\n getToolDynamicFieldTriggers(toolDynamicFieldId: number): Observable> {\n return this.http.get>(`${this.apiUrl}/toolDynamicField/${toolDynamicFieldId}/get-triggers`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeToolDynamicFieldTrigger(toolDynamicFieldId: number, triggerId: number): Observable> {\n return this.http.get>(`${this.apiUrl}/toolDynamicField/${toolDynamicFieldId}/remove-trigger/${triggerId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateToolDynamicFieldTrigger(toolDynamicFieldId: number, triggerId: number, model: ToolDynamicFieldTriggerModel) {\n return this.http.post>(`${this.apiUrl}/toolDynamicField/${toolDynamicFieldId}/update-trigger/${triggerId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addToolDynamicFieldTrigger(toolDynamicFieldId: number, model: ToolDynamicFieldTriggerModel) {\n return this.http.post>(`${this.apiUrl}/toolDynamicField/${toolDynamicFieldId}/add-trigger`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n changeStatusToolDynamicFieldTrigger(toolDynamicFieldId: number, triggerId: number) {\n return this.http.get(`${this.apiUrl}/toolDynamicField/${toolDynamicFieldId}/change-trigger-status/${triggerId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addCategoryOperationForm(categoryId: number, formId: number): Observable {\n return this.http.post(`${this.apiUrl}/category/${categoryId}/add-operation-form/${formId}`, null)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeCategoryOperationForm(categoryId: number, formId: number): Observable {\n return this.http.post(`${this.apiUrl}/category/${categoryId}/remove-operation-form/${formId}`, null)\n .pipe(catchError(this._errorService.handleError));\n }\n\n setAsDefaultInventoryLocation(id: number) {\n return this.http.get(`${this.apiUrl}/set-default-inventory-location/${id}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateInventoryLocation(id: number, model: UpdateInventoryLocationModel): Observable {\n return this.http.post(`${this.apiUrl}/update-inventory-location/${id}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n toggleInventoryLocationStatus(id: number, status: boolean): Observable {\n return this.http.post(`${this.apiUrl}/toggle-inventory-location-status/${id}/${status}`, {})\n .pipe(catchError(this._errorService.handleError));\n }\n getGlobalToolDynamicFields() {\n return this.http.get(`${this.apiUrl}/global-tool-dynamic-fields`)\n .pipe(catchError(this._errorService.handleError));\n }\n addGlobalToolDynamicField(model: BaseToolDynamicFieldViewModel): Observable {\n return this.http.post(`${this.apiUrl}/add-global-tool-dynamic-field`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n removeGlobalToolDynamicField(itemId: number) {\n return this.http.post(`${this.apiUrl}/remove-global-tool-dynamic-field/${itemId}`, {})\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","
      \n
      \n {{title}}\n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n
      \n {{ formType == FormType.Permit ? 'Permit' : 'Form' }}\n Add
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n
      \n

      There are no more\n {{ formType == FormType.Permit ? 'permits' : 'forms' }}\n to add

      \n
      \n {{queze?.name}}\n \n \n
      \n
      \n
      \n
      \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { FormType } from 'src/app/enums/form-type';\nimport { FormViewModel } from 'src/app/models/form/form-view-model';\n\n@Component({\n selector: 'app-form-inject',\n templateUrl: './form-injector.component.html',\n styleUrls: []\n})\nexport class FormInjectorComponent implements OnInit {\n title = \"Select Form(s)\";\n filterTerm = null;\n forms : FormViewModel[] = [];\n addedForms : number[] = [];\n addForm : Function;\n @Input() formType: FormType = FormType.Generic;\n FormType = FormType;\n\n get availableForms(): FormViewModel[] {\n return this.forms.filter(function (x) { return this.indexOf(x.id) < 0 }, this.addedForms);\n };\n constructor(public bsModalRef: BsModalRef,) { }\n\n ngOnInit() {\n }\n\n onAddForm(id: number) {\n var form = this.availableForms.find(x=> x.id == id);\n if(form && this.addForm)\n {\n this.addedForms.push(id);\n this.addForm(form);\n }\n }\n\n}\n","\n","import { Component, EventEmitter, forwardRef, Input, OnInit, Output, TemplateRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'obc-sortable',\n templateUrl: './sortable.component.html',\n styleUrls: ['./sortable.component.scss'],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SortableComponent),\n multi: true\n }]\n})\nexport class SortableComponent implements OnInit, ControlValueAccessor {\n\n constructor() { }\n writeValue(value: any): void {\n this.items = value; \n this.updateChanges();\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n setDisabledState?(isDisabled: boolean): void {\n }\n updateChanges() {\n this.onChange(this.items);\n }\n\n onChange: (_: any) => void = (_: any) => { };\n onTouched: () => void = () => { };\n\n items: any;\n @Input() template: TemplateRef;\n @Output() onChangeOrder: EventEmitter = new EventEmitter();\n\n ngOnInit(): void {\n }\n\n changeOrderTimer = null;\n onChangeOrderInternal(e) {\n\n //HACK: Sortable call onChange on drag event\n if (this.changeOrderTimer)\n clearTimeout(this.changeOrderTimer);\n\n this.changeOrderTimer = setTimeout(() => {\n\n if (JSON.stringify(e) == JSON.stringify(this.items))\n return;\n\n this.items = e;\n this.onChange(e);\n\n if (this.onChangeOrder)\n this.onChangeOrder.emit(e);\n if (this.changeOrderTimer) clearTimeout(this.changeOrderTimer);\n }, 500);\n\n }\n}\n","export enum CheckInApprovalMode {\n Disable = 0,\n EveryCheckIn = 1,\n NewSupplierDocument = 2,\n}\n","export enum CompareOperator {\n GreaterThan = 0,\n GreaterEqualThan = 1,\n LowerThan = 2,\n LowerEqualThan = 3,\n Equal = 4,\n Contains = 5,\n}\n","export enum LocationOverrideMode {\n Disabled = 0,\n OverrideNonDisableModesToOptional = 1,\n}","import { CheckInApprovalMode } from \"../enums/check-in-approval-mode.enum\";\nimport { CompareOperator } from \"../enums/compare-operator.enum\";\nimport { LocationOverrideMode } from \"../enums/location-override-mode-enum\";\n\nexport function CompareOperatorFriendlyLabel(operator: CompareOperator) : string {\n switch(operator) {\n case CompareOperator.GreaterThan: return \"Greater Than\";\n case CompareOperator.GreaterEqualThan: return \"Greater Equal Than\";\n case CompareOperator.LowerThan: return \"Lower Than\";\n case CompareOperator.LowerEqualThan: return \"Lower Equal Than\";\n case CompareOperator.Equal: return \"Equal\";\n case CompareOperator.Contains: return \"Contains\";\n default : return CompareOperator[operator];\n }\n}\n\nexport function getCheckinApprovalModeFriendlyMode(mode?: CheckInApprovalMode) : string {\n switch(mode) {\n case CheckInApprovalMode.Disable: return \"Disabled\";\n case CheckInApprovalMode.EveryCheckIn: return \"Every Check-In\";\n case CheckInApprovalMode.NewSupplierDocument: return \"New Supplier Document\";\n default : return CheckInApprovalMode[mode];\n }\n}\n\nexport function getcheckInLocationOverrideInKioskModeFriendlyMode(mode?: LocationOverrideMode) : string {\n switch(mode) {\n case LocationOverrideMode.Disabled: return \"No\";\n case LocationOverrideMode.OverrideNonDisableModesToOptional: return \"Yes\";\n default : return LocationOverrideMode[mode];\n }\n}\n","
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n
      \n
      \n \n
      \n\n
      \n \n \n
      \n
      ","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { CompareOperator } from 'src/app/enums/compare-operator.enum';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { ToolDynamicFieldType } from 'src/app/enums/tool-dynamic-field-type.enum';\nimport { TriggerAction } from 'src/app/enums/trigger-action.enum';\nimport { formatDate, triggerDateTimeFormat } from 'src/app/helpers/date-time-format';\nimport { EnumToArray } from 'src/app/helpers/enum-to-array';\nimport { CompareOperatorFriendlyLabel } from 'src/app/helpers/friendly-label';\nimport { ToolDynamicFieldViewModel } from 'src/app/models/inventory/tool-dynamic-field-model';\nimport { ToolDynamicFieldTriggerModel, ToolDynamicFieldTriggerViewModel } from 'src/app/models/inventory/tool-dynamic-field-trigger-model';\nimport { DatePipe } from 'src/app/pipes/date.pipe';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\n\n@Component({\n selector: 'obc-inventory-dynamic-field-trigger-editor',\n templateUrl: './inventory-dynamic-field-trigger-editor.component.html',\n styleUrls: [],\n providers: [DatePipe]\n})\nexport class InventoryDynamicFieldTriggerEditorComponent implements OnInit {\n @Input() toolDynamicField: ToolDynamicFieldViewModel = null;\n ToolDynamicFieldType = ToolDynamicFieldType;\n _trigger: ToolDynamicFieldTriggerViewModel;\n DatetimePickerMode = DatetimePickerMode;\n currentDate = Date.now();\n TriggerAction = TriggerAction;\n formGroup = new FormGroup({\n action: new FormControl(null, [Validators.required]),\n operator: new FormControl(null, [Validators.required]),\n value: new FormControl(null, [Validators.required]),\n parameters: new FormControl(null, [Validators.required])\n });\n @Input() set trigger(value: ToolDynamicFieldTriggerViewModel) {\n if (this._trigger?.id != value?.id) {\n this.formGroup.controls.action.setValue(value?.action);\n this.formGroup.controls.value.setValue(value?.value);\n this.formGroup.controls.operator.setValue(value?.operator);\n this.formGroup.controls.parameters.setValue(JSON.parse(value?.parameters));\n }\n this._trigger = value;\n }\n\n @Output() close = new EventEmitter();\n constructor(private manageInventoryService: ManageInventoryService, private datePipe: DatePipe) { }\n\n ngOnInit() {\n }\n\n upsert() {\n var model = {\n action: this.formGroup.controls.action.value,\n parameters: JSON.stringify(this.formGroup.controls.parameters.value),\n operator: this.formGroup.controls.operator.value,\n value: this.toolDynamicField.type == ToolDynamicFieldType.Date ? formatDate(this.formGroup.controls.value.value, triggerDateTimeFormat) : this.formGroup.controls.value.value,\n } as ToolDynamicFieldTriggerModel;\n if (this._trigger?.id) {\n this.manageInventoryService.updateToolDynamicFieldTrigger(this.toolDynamicField.id, this._trigger.id, model).subscribe(res => {\n this.close.emit();\n })\n } else {\n this.manageInventoryService.addToolDynamicFieldTrigger(this.toolDynamicField.id, model).subscribe(res => {\n this.close.emit();\n })\n }\n }\n\n getTriggerActionFriendlyName(action: TriggerAction): string {\n switch (action) {\n case TriggerAction.Email: return 'Send an Email';\n default: return TriggerAction[action];\n }\n }\n\n getCompareOperatorItems() {\n return EnumToArray(CompareOperator)\n .filter(x => {\n return this.toolDynamicField.type == ToolDynamicFieldType.Date ? x.id != CompareOperator.Contains : true;\n })\n .map(x => {\n return {\n id: x.id,\n name: CompareOperatorFriendlyLabel(CompareOperator[CompareOperator[x.id]]),\n };\n });\n }\n\n}\n","\n
      \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n
      ActionConditionStatus\n
      \n \n
      \n
      \n {{getTriggerActionFriendlyName(trigger.action)}}\n \n {{getTriggerConditionFriendlyName(trigger)}}\n \n \n \n \n \n
      \n
      \n\n\n
      \n
      \n 0\">Edit Trigger\n Add Trigger\n \n
      \n
      \n \n \n
      \n
      \n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { CompareOperator } from 'src/app/enums/compare-operator.enum';\nimport { ToolDynamicFieldType } from 'src/app/enums/tool-dynamic-field-type.enum';\nimport { TriggerAction } from 'src/app/enums/trigger-action.enum';\nimport { dateFormat, formatDate } from 'src/app/helpers/date-time-format';\nimport { CompareOperatorFriendlyLabel } from 'src/app/helpers/friendly-label';\nimport { ToolDynamicFieldViewModel } from 'src/app/models/inventory/tool-dynamic-field-model';\nimport { ToolDynamicFieldTriggerViewModel } from 'src/app/models/inventory/tool-dynamic-field-trigger-model';\nimport { DatePipe } from 'src/app/pipes/date.pipe';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-inventory-dynamic-field-triggers',\n templateUrl: './inventory-dynamic-field-triggers.component.html',\n styleUrls: [],\n providers:[DatePipe]\n})\nexport class InventoryDynamicFieldTriggersComponent implements OnInit {\n _dynamicField: ToolDynamicFieldViewModel;\n inProgress: boolean = false;\n triggers = new BehaviorSubject([])\n @Input() set toolDynamicField(value: ToolDynamicFieldViewModel) {\n if (this._dynamicField?.id != value?.id) {\n this._dynamicField = value;\n this.refreshTriggers();\n }\n }\n constructor(private manageInventoryService: ManageInventoryService,\n private modalService: ModalService,\n private datePipe: DatePipe,\n private bsModalService: BsModalService) { }\n\n ngOnInit() {\n }\n\n refreshTriggers() {\n this.inProgress = true;\n this.manageInventoryService.getToolDynamicFieldTriggers(this._dynamicField.id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.triggers.next(res.data);\n });\n }\n\n getTriggerActionFriendlyName(action: TriggerAction): string {\n switch (action) {\n case TriggerAction.Email: return 'Send an Email';\n default: return TriggerAction[action];\n }\n }\n\n getTriggerConditionFriendlyName(trigger: ToolDynamicFieldTriggerViewModel) {\n return `${this.getDynamicFieldTriggerFriendlyName(trigger.operator)} ${ this._dynamicField.type == ToolDynamicFieldType.Date ? formatDate(trigger.value, dateFormat) : trigger.value }`\n }\n\n getDynamicFieldTriggerFriendlyName(operator: CompareOperator): string {\n return CompareOperatorFriendlyLabel(operator)\n }\n\n onToolDynamicFieldTriggerStateChange($event: boolean, trigger: ToolDynamicFieldTriggerViewModel) {\n if ($event != trigger.status) {\n this.inProgress = true;\n this.manageInventoryService.changeStatusToolDynamicFieldTrigger(this._dynamicField.id, trigger.id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.refreshTriggers();\n });\n }\n }\n\n onAddToolDynamicFieldTrigger(modalTemplate: any) {\n this.currentTrigger = null;\n this.editModalHandle = this.bsModalService.show(modalTemplate, {\n ignoreBackdropClick: true,\n })\n }\n\n currentTrigger: ToolDynamicFieldTriggerViewModel = null;\n editModalHandle: any;\n onEditToolDynamicFieldTrigger(trigger: ToolDynamicFieldTriggerViewModel, modalTemplate: any) {\n this.currentTrigger = trigger;\n this.editModalHandle = this.bsModalService.show(modalTemplate, {\n ignoreBackdropClick: true,\n })\n }\n\n onRemoveToolDynamicFieldTrigger(trigger: ToolDynamicFieldTriggerViewModel) {\n this.modalService.confirm(\"Are You Sure You Want Remove This Trigger?\", \"Remove Trigger\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.manageInventoryService.removeToolDynamicFieldTrigger(this._dynamicField.id, trigger.id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.refreshTriggers();\n });\n }\n })\n }\n\n onCloseInventoryDynamicFieldTriggerEditor() {\n this.editModalHandle.hide();\n this.refreshTriggers();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ToolDynamicFieldType } from '../enums/tool-dynamic-field-type.enum';\n\n@Pipe({\n name: 'toolDynamicFieldType'\n})\nexport class ToolDynamicFieldTypePipe implements PipeTransform {\n\n transform(value: unknown): any {\n if (value === ToolDynamicFieldType.Text) { return \"Text\"; }\n if (value === ToolDynamicFieldType.Number) { return \"Number\"; }\n if (value === ToolDynamicFieldType.File) { return \"File\"; }\n if (value === ToolDynamicFieldType.Date) { return \"Date\"; }\n return value;\n }\n\n}\n","
      \n
      \n \n
      \n
      \n
      \n Add New Category\n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Category
      {{item.title}}\n \n
      \n \n \n \n
      \n
      \n
      \n Name\n
      \n
      \n Is Required?\n
      \n
      \n Type\n
      \n
      \n Is Barcode?\n
      \n
      \n Use In Search?\n
      \n
      \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n Name\n
      \n
      \n Is Required?\n
      \n
      \n Type\n
      \n
      \n Is Barcode?\n
      \n
      \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n Title\n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n {{oform.name}}\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n {{toolDynamicFieldformGroup.controls.usage.value == ToolDynamicFieldUsage.ToolAssign ? \"Add Tool Assign Field\":\n \"Add Tool Field\"}}\n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n \n
      \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n\n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n {{item.value.fieldName}}{{item.value.isLongText ? ' (Long Text)' : ''}}\n
      \n
      \n {{item.value.isRequired ? \"Yes\":\"No\"}}\n
      \n
      \n {{item.value.type | toolDynamicFieldType}}{{item.value.type == ToolDynamicFieldType.File? \"(\"+(item.value.fileType| questionAnswerFileFormat)+\")\":\"\"}}\n
      \n
      \n {{item.value.isBarcode ? \"Yes\":\"No\"}}\n
      \n
      \n \n Triggers [{{item.initData.triggersCount}}]\n \n \n
      \n
      \n
      \n\n\n
      \n
      \n {{item.value.fieldName}}{{item.value.isLongText ? ' (Long Text)' : ''}}\n
      \n
      \n {{item.value.isRequired ? \"Yes\":\"No\"}}\n
      \n
      \n {{item.value.type | toolDynamicFieldType}}{{item.value.type == ToolDynamicFieldType.File? \"(\"+(item.value.fileType| questionAnswerFileFormat)+\")\":\"\"}}\n
      \n
      \n {{item.value.isBarcode ? \"Yes\":\"No\"}}\n
      \n
      \n {{item.value.isSearchable ? \"Yes\":\"No\"}}\n
      \n
      \n \n
      \n
      \n
      \n\n\n
      \n
      \n Add / Update Assignment Field Triggers\n \n
      \n
      \n \n \n
      \n \n
      \n
      \n
      \n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { FormType } from 'src/app/enums/form-type';\nimport { GlobalItemType } from 'src/app/enums/global-item-type.enum';\nimport { ToolDynamicFieldType } from 'src/app/enums/tool-dynamic-field-type.enum';\nimport { ToolDynamicFieldUsage } from 'src/app/enums/tool-dynamic-field-usage.enum';\nimport { FormViewModel } from 'src/app/models/form/form-view-model';\nimport { GetFormsQueryModel } from 'src/app/models/form/get-forms-query-model';\nimport { GlobalToolDynamicFieldViewModel } from 'src/app/models/inventory/global-tool-dynamic-field-view-model';\nimport { ToolCategoryModel, ToolCategoryViewModel } from 'src/app/models/inventory/tool-category-model';\nimport { ToolDynamicFieldModel, ToolDynamicFieldViewModel } from 'src/app/models/inventory/tool-dynamic-field-model';\nimport { QuestionAnswerFileFormat } from 'src/app/models/questionParameters/question-answer-file-format';\nimport { FormService } from 'src/app/services/form.service';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { FormInjectorComponent } from '../../form-manage/form-injector/form-injector.component';\n\n@Component({\n selector: 'obc-manage-tool-categories',\n templateUrl: './manage-tool-categories.component.html',\n styleUrls: ['./manage-tool-categories.component.scss']\n})\nexport class ManageToolCategoriesComponent implements OnInit {\n\n @Input() hideFormOperationPanel: boolean = false;\n @Input() isTemplateCompany: boolean = false;\n\n openedAccordion: {\n catId: number,\n isAssign: boolean\n } = null;\n\n formGroup = new FormGroup({\n title: new FormControl(null, [Validators.required])\n });\n\n GlobalItemType = GlobalItemType;\n ToolDynamicFieldType = ToolDynamicFieldType;\n ToolDynamicFieldUsage = ToolDynamicFieldUsage;\n QuestionAnswerFileFormat = QuestionAnswerFileFormat;\n\n toolDynamicFieldformGroup = new FormGroup({\n fieldName: new FormControl(null, [Validators.required]),\n target: new FormControl(null, [Validators.required]),\n usage: new FormControl(null, [Validators.required]),\n isRequired: new FormControl(true, []),\n type: new FormControl(0, [Validators.required]),\n fileType: new FormControl(0, [Validators.required]),\n isBarcode: new FormControl(false, []),\n isSearchable: new FormControl(false, []),\n isLongText: new FormControl(false, []),\n isGlobalField: new FormControl(false, [Validators.required])\n });\n\n toolCategories: ToolCategoryViewModel[] = [];\n forms = new BehaviorSubject([]);\n handlerToolDynamicField = null;\n selectedGlobalToolDynamicField: GlobalToolDynamicFieldViewModel;\n\n constructor(\n private manageInventoryService: ManageInventoryService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private formService: FormService) { }\n inProgress = false;\n\n get isGlobalField(): boolean {\n return this.toolDynamicFieldformGroup.controls.isGlobalField.value;\n }\n\n ngOnInit() {\n this.refresh();\n this.getForms();\n\n this.toolDynamicFieldformGroup.controls['isGlobalField'].valueChanges.subscribe(newValue => {\n if (newValue) {\n this.toolDynamicFieldformGroup.controls['fieldName'].clearValidators();\n this.toolDynamicFieldformGroup.controls['type'].disable();\n this.toolDynamicFieldformGroup.controls['fileType'].disable();\n this.toolDynamicFieldformGroup.controls['isBarcode'].disable();\n this.toolDynamicFieldformGroup.controls['isSearchable'].disable();\n this.toolDynamicFieldformGroup.controls['isLongText'].disable();\n\n }\n else {\n this.toolDynamicFieldformGroup.controls['fieldName'].setValidators([Validators.required]);\n this.toolDynamicFieldformGroup.controls['type'].enable();\n this.toolDynamicFieldformGroup.controls['fileType'].enable();\n this.toolDynamicFieldformGroup.controls['isBarcode'].enable();\n this.toolDynamicFieldformGroup.controls['isSearchable'].enable();\n this.toolDynamicFieldformGroup.controls['isLongText'].enable();\n }\n\n\n this.toolDynamicFieldformGroup.controls['fieldName'].updateValueAndValidity();\n this.toolDynamicFieldformGroup.updateValueAndValidity();\n });\n }\n\n getUsage(): ToolDynamicFieldUsage {\n return this.toolDynamicFieldformGroup.controls.usage.value;\n }\n\n private getForms() {\n var model = {\n formType: FormType.AssetOperation,\n } as GetFormsQueryModel;\n\n this.formService.getForms(model).subscribe(\n res => {\n if (res.success) {\n this.forms.next(res.data);\n } else {\n this.modalService.error(res.message);\n this.inProgress = false;\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n\n onAdd() {\n this.inProgress = true;\n var model = {\n title: this.formGroup.controls.title.value,\n } as ToolCategoryModel;\n this.manageInventoryService.addToolCategory(model)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.toolCategories.push(res);\n this.formGroup.reset();\n }, err => {\n this.modalService.error(err)\n })\n }\n\n onAddCategory() {\n\n }\n\n onRemove(id: number) {\n this.modalService.confirm(\"Are you sure you want to remove this tool category?\", \"Remove Tool Category\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.manageInventoryService.removeToolCategory(id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n var loc = this.toolCategories.find(x => x.id == id);\n var index = this.toolCategories.indexOf(loc);\n this.toolCategories.splice(index, 1);\n }, err => {\n this.modalService.error(err)\n })\n }\n })\n }\n\n refresh() {\n this.inProgress = true;\n this.manageInventoryService.getToolCategories()\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.toolCategories = res;\n }, err => {\n this.modalService.error(err)\n })\n }\n\n onOpenToolDynamicField(template: any, item: ToolCategoryViewModel, usage: ToolDynamicFieldUsage) {\n this.openedAccordion = { catId: item.id, isAssign: usage == ToolDynamicFieldUsage.ToolAssign };\n this.toolDynamicFieldformGroup.controls.target.setValue(item)\n this.toolDynamicFieldformGroup.controls.usage.setValue(usage)\n this.handlerToolDynamicField = this.bsModalService.show(template);\n }\n\n onGlobalToolDynamicFieldSelect(field: GlobalToolDynamicFieldViewModel) {\n this.selectedGlobalToolDynamicField = field;\n\n this.toolDynamicFieldformGroup.controls['type'].setValue(field.type);\n this.toolDynamicFieldformGroup.controls['fileType'].setValue(field.fileType);\n this.toolDynamicFieldformGroup.controls['isBarcode'].setValue(field.isBarcode);\n this.toolDynamicFieldformGroup.controls['isSearchable'].setValue(field.isSearchable);\n this.toolDynamicFieldformGroup.controls['isLongText'].setValue(field.isLongText);\n }\n\n get isAddToolDynamicFieldButtonDisabled() {\n return !this.toolDynamicFieldformGroup.valid || (this.isGlobalField && this.selectedGlobalToolDynamicField == null);\n }\n\n onRemoveToolDynamicField(itemId: number, usage: ToolDynamicFieldUsage) {\n this.inProgress = true;\n\n // *** ANGULAR DOES NOT DETECT CATEGORY FIELD CHANGES\n var cat = this.toolCategories.find(c => {\n return c.toolAssignDynamicFields.some(f => f.id == itemId) || c.toolDynamicFields.some(f => f.id == itemId)\n });\n this.openedAccordion = { catId: cat.id, isAssign: usage == ToolDynamicFieldUsage.ToolAssign };\n var me = this;\n this.manageInventoryService.removeToolDynamicField(itemId)\n .pipe(finalize(() => { me.inProgress = false }))\n .subscribe(res => {\n me.refresh();\n }, err => {\n me.modalService.error(err)\n })\n }\n\n onAddToolDynamicField() {\n if (this.validateInfos() == false)\n return;\n\n this.inProgress = true;\n\n var model = {\n globalToolDynamicFieldId: this.isGlobalField ? this.selectedGlobalToolDynamicField?.id : null,\n fieldName: this.toolDynamicFieldformGroup.controls.fieldName.value,\n isRequired: this.toolDynamicFieldformGroup.controls.isRequired.value ?? false,\n usage: this.toolDynamicFieldformGroup.controls.usage.value,\n type: this.isGlobalField ? null : this.toolDynamicFieldformGroup.controls.type.value,\n fileType: this.isGlobalField? null: this.toolDynamicFieldformGroup.controls.fileType.value,\n isBarcode: this.isGlobalField ? null : this.toolDynamicFieldformGroup.controls.isBarcode.value,\n isSearchable: this.isGlobalField ? null : this.toolDynamicFieldformGroup.controls.isSearchable.value,\n isLongText: this.isGlobalField ? null : this.toolDynamicFieldformGroup.controls.isLongText.value,\n } as ToolDynamicFieldModel;\n var target = this.toolDynamicFieldformGroup.controls.target.value as ToolCategoryViewModel;\n this.manageInventoryService.addToolDynamicField(target.id, model)\n .pipe(finalize(() => {\n this.inProgress = false;\n this.resetForm();\n\n this.handlerToolDynamicField.hide();\n }))\n .subscribe(res => {\n this.refresh();\n }, err => {\n this.modalService.error(err)\n });\n }\n validateInfos() {\n var usage = this.toolDynamicFieldformGroup.controls.usage.value;\n var type = this.toolDynamicFieldformGroup.controls.type.value;\n var fileType = this.toolDynamicFieldformGroup.controls.fileType.value;\n var isBarcode = this.toolDynamicFieldformGroup.controls.isBarcode.value;\n var isSearchable = this.toolDynamicFieldformGroup.controls.isSearchable.value;\n var isLongText = this.toolDynamicFieldformGroup.controls.isLongText.value;\n\n if (isBarcode == true &&\n (type == ToolDynamicFieldType.File ||\n type == ToolDynamicFieldType.Date)) {\n this.modalService.error(\"This field cannot be a barcode\");\n return false;\n }\n if (this.isGlobalField == false &&\n isSearchable == true &&\n (usage == ToolDynamicFieldUsage.ToolAssign ||\n type == ToolDynamicFieldType.File ||\n type == ToolDynamicFieldType.Date)) {\n this.modalService.error(\"This field cannot be searchable\");\n return false;\n }\n if (\n this.isGlobalField == false &&\n isLongText == true &&\n type != ToolDynamicFieldType.Text) {\n this.modalService.error(\"This field cannot be a long text\");\n return false;\n }\n return true;\n }\n\n resetForm() {\n this.toolDynamicFieldformGroup.reset();\n this.toolDynamicFieldformGroup.controls.type.setValue(ToolDynamicFieldType.Text);\n this.toolDynamicFieldformGroup.controls.fileType.setValue(QuestionAnswerFileFormat.AnyFile);\n this.toolDynamicFieldformGroup.controls.isRequired.setValue(false);\n this.toolDynamicFieldformGroup.controls.isBarcode.setValue(false);\n this.toolDynamicFieldformGroup.controls.isSearchable.setValue(false);\n this.toolDynamicFieldformGroup.controls.isLongText.setValue(false);\n this.toolDynamicFieldformGroup.controls.isGlobalField.setValue(false);\n }\n onToolDynamicFieldTypeChange() {\n this.toolDynamicFieldformGroup.controls.isBarcode.setValue(false);\n this.toolDynamicFieldformGroup.controls.isSearchable.setValue(false);\n this.toolDynamicFieldformGroup.controls.isLongText.setValue(false);\n }\n\n onChangeDynamicFieldOrder(category, dynamicFields: ToolDynamicFieldViewModel[], isAssignField: boolean) {\n this.manageInventoryService.changeDynamicFieldOrder(category.id, isAssignField, dynamicFields.map((field) => field.id))\n .subscribe(_ => {\n this.refresh();\n });\n }\n\n isAccordionOpen(catId: number, isAssign: boolean) {\n return this.openedAccordion?.catId == catId && this.openedAccordion?.isAssign == isAssign;\n }\n\n currentDynamicField: ToolDynamicFieldViewModel = null;\n dynamicFieldTriggersModalRef: any = null;\n onShowTriggers(status: ToolDynamicFieldViewModel, template: any) {\n this.currentDynamicField = status;\n this.dynamicFieldTriggersModalRef = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: true,\n })\n }\n\n onCloseStatusTriggers() {\n this.dynamicFieldTriggersModalRef.hide();\n this.refresh();\n }\n\n onOpenNewOperationFormModal(item: ToolCategoryViewModel) {\n this.bsModalService.show(FormInjectorComponent, {\n class: \"modal-lg\",\n initialState: {\n formType: FormType.AssetOperation,\n title: \"Select Operation Form(s)\",\n forms: this.forms.value,\n addedForms: (item.operationForms ?? [])?.map(x => x.id),\n addForm: ($event) => {\n this.manageInventoryService.addCategoryOperationForm(item.id, $event.id)\n .subscribe(res => {\n this.refresh();\n }, err => {\n this.modalService.error(err);\n });\n },\n },\n })\n }\n\n removeForm(item: ToolCategoryViewModel, form: FormViewModel) {\n this.modalService.confirm('Are you sure you want to remove this form?')\n .subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.manageInventoryService.removeCategoryOperationForm(item.id, form.id)\n .subscribe(_ => {\n this.inProgress = true;\n this.refresh();\n }, err => {\n this.inProgress = true;\n this.modalService.error(err);\n });\n }\n });\n }\n}\n","
      \n
      \n\n \n
      \n
      \n
      Add Inventory Location
      \n
      \n \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      NameSite
      \n
      \n \n {{item.name}}\n \n \n \n
      \n
      {{item.siteFullName ? item.siteFullName : \"Company Wide Location\"}}\n \n \n \n
      \n
      \n
      \n
      \n\n\n\n\n
      \n
      \n Update Name\n
      \n
      \n 0 ? updateName() : null\"\n required=\"required\" [formControl]=\"selectedInventoryLocationNameFormControl\">\n
      \n \n
      \n\n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { finalize } from 'rxjs/operators';\nimport { InventoryLocationModel, InventoryLocationViewModel } from 'src/app/models/inventory/inventory-location-model';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UpdateInventoryLocationModel } from 'src/app/models/inventory/update-inventory-location-model';\n\n@Component({\n selector: 'obc-manage-inventory-locations',\n templateUrl: './manage-inventory-locations.component.html',\n styleUrls: ['./manage-inventory-locations.component.scss']\n})\nexport class ManageInventoryLocationsComponent implements OnInit {\n formGroup = new FormGroup({\n siteId: new FormControl(null),\n name: new FormControl(null, [Validators.required])\n })\n invertoryLocations: InventoryLocationViewModel[] = [];\n constructor(private manageInventoryService: ManageInventoryService, private modalService: ModalService) { }\n inProgress = false;\n ngOnInit() {\n this.refresh();\n }\n\n onAdd() {\n this.inProgress = true;\n var model = {\n siteId: this.formGroup.controls.siteId.value,\n name: this.formGroup.controls.name.value,\n } as InventoryLocationModel;\n this.manageInventoryService.addInventoryLocation(model)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.invertoryLocations.push(res);\n this.formGroup.controls['name'].setValue(null);\n }, err => {\n this.modalService.error(err)\n })\n }\n\n onRemove(id: number) {\n this.modalService.confirm(\"Are you sure you want to remove this location?\", \"Remove inventory location\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.manageInventoryService.removeInventoryLocation(id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n var loc = this.invertoryLocations.find(x=> x.id == id);\n var index = this.invertoryLocations.indexOf(loc) ;\n this.invertoryLocations.splice(index, 1);\n }, err => {\n this.modalService.error(err)\n })\n }\n })\n\n }\n\n refresh() {\n this.inProgress = true;\n this.manageInventoryService.getInventoryLocations()\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.invertoryLocations = res;\n }, err => {\n this.modalService.error(err.error)\n })\n }\n\n onSetAsDefaultLocation(id: number){\n this.modalService.confirm(\"Are you sure you want to set this location as default?\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.manageInventoryService.setAsDefaultInventoryLocation(id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.refresh();\n }, err => {\n this.modalService.error(err)\n })\n }\n })\n }\n\n toggleStatus(loc: InventoryLocationViewModel){\n this.modalService.confirm(`Are you sure you want to ${loc.isActive ? 'deactivate' : 'activate'} this location?`).subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.manageInventoryService.toggleInventoryLocationStatus(loc.id, !loc.isActive)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.refresh();\n }, err => {\n this.modalService.error(err)\n })\n }\n })\n }\n\n\n selectedInventoryLocation: InventoryLocationViewModel;\n selectedInventoryLocationNameFormControl = new FormControl('', [Validators.required])\n onClickUpdateItem(template: any, item: InventoryLocationViewModel) {\n this.selectedInventoryLocationNameFormControl.setValue(item.name);\n this.selectedInventoryLocation = item;\n this.modalService.show(template);\n }\n\n updateName(){\n this.inProgress = true;\n this.manageInventoryService.updateInventoryLocation(this.selectedInventoryLocation?.id, {name: this.selectedInventoryLocationNameFormControl?.value} as UpdateInventoryLocationModel)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.refresh();\n this.modalService.hide();\n this.modalService.success('The name of the location changed successfully');\n }, err => {\n this.modalService.error(err)\n })\n }\n\n}\n","
      \n
      \n \n \n
      \n\n
      \n \n
      \n\n
      \n \n \n
      \n
      \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { TriggerAction } from 'src/app/enums/trigger-action.enum';\nimport { ToolStatusViewModel } from 'src/app/models/inventory/tool-status-model';\nimport { ToolStatusTriggerModel, ToolStatusTriggerViewModel } from 'src/app/models/inventory/tool-status-trigger-model';\nimport { InventoryService } from 'src/app/services/inventory.service';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\n\n@Component({\n selector: 'obc-inventory-status-trigger-editor',\n templateUrl: './inventory-status-trigger-editor.component.html',\n styleUrls: ['./inventory-status-trigger-editor.component.scss']\n})\nexport class InventoryStatusTriggerEditorComponent implements OnInit {\n @Input() toolStatus: ToolStatusViewModel = null;\n _trigger: ToolStatusTriggerViewModel;\n TriggerAction = TriggerAction;\n formGroup = new FormGroup({\n action: new FormControl(null, [Validators.required]),\n parameters: new FormControl(null, [Validators.required])\n });\n @Input() set trigger(value: ToolStatusTriggerViewModel) {\n if (this._trigger?.id != value?.id) {\n this.formGroup.controls.action.setValue(value?.action);\n this.formGroup.controls.parameters.setValue(JSON.parse(value?.parameters));\n }\n this._trigger = value;\n }\n\n @Output() close = new EventEmitter();\n constructor(private manageInventoryService: ManageInventoryService) { }\n\n ngOnInit() {\n }\n\n upsert() {\n var model = {\n action: this.formGroup.controls.action.value,\n parameters: JSON.stringify(this.formGroup.controls.parameters.value),\n } as ToolStatusTriggerModel;\n if (this._trigger?.id) {\n this.manageInventoryService.updateToolStatusTrigger(this.toolStatus.id, this._trigger.id, model).subscribe(res => {\n this.close.emit();\n })\n } else {\n this.manageInventoryService.addToolStatusTrigger(this.toolStatus.id, model).subscribe(res => {\n this.close.emit();\n })\n }\n }\n\n getTriggerActionFriendlyName(action: TriggerAction): string {\n switch (action) {\n case TriggerAction.Email: return 'Send an Email';\n default: return TriggerAction[action];\n }\n }\n\n}\n","\n
      \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n
      ActionStatus\n
      \n \n
      \n
      \n {{getTriggerActionFriendlyName(trigger.action)}}\n \n \n \n \n \n
      \n
      \n\n\n
      \n
      \n 0\">Edit Trigger\n Add Trigger\n \n
      \n
      \n \n \n
      \n
      \n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { TriggerAction } from 'src/app/enums/trigger-action.enum';\nimport { ToolStatusModel, ToolStatusViewModel } from 'src/app/models/inventory/tool-status-model';\nimport { ToolStatusTriggerViewModel } from 'src/app/models/inventory/tool-status-trigger-model';\nimport { InventoryService } from 'src/app/services/inventory.service';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-inventory-status-triggers',\n templateUrl: './inventory-status-triggers.component.html',\n styleUrls: ['./inventory-status-triggers.component.scss']\n})\nexport class InventoryStatusTriggersComponent implements OnInit {\n _toolStatus: ToolStatusViewModel;\n inProgress: boolean = false;\n triggers = new BehaviorSubject([])\n @Input() set toolStatus(value: ToolStatusViewModel) {\n if (this._toolStatus?.id != value?.id) {\n this._toolStatus = value;\n this.refreshTriggers();\n }\n }\n constructor(private manageInventoryService: ManageInventoryService,\n private modalService: ModalService,\n private bsModalService: BsModalService) { }\n\n ngOnInit() {\n }\n\n refreshTriggers() {\n this.inProgress = true;\n this.manageInventoryService.getToolStatusTriggers(this._toolStatus.id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.triggers.next(res.data);\n });\n }\n\n getTriggerActionFriendlyName(action: TriggerAction): string {\n switch (action) {\n case TriggerAction.Email: return 'Send an Email';\n default: return TriggerAction[action];\n }\n }\n\n onToolStatusTriggerStateChange($event: boolean, trigger: ToolStatusTriggerViewModel) {\n if ($event != trigger.status) {\n this.inProgress = true;\n this.manageInventoryService.changeStatusToolStatusTrigger(this._toolStatus.id, trigger.id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.refreshTriggers();\n });\n }\n }\n\n onAddToolStatusTrigger(modalTemplate: any) {\n this.currentTrigger = null;\n this.editModalHandle = this.bsModalService.show(modalTemplate, {\n ignoreBackdropClick: true,\n })\n }\n\n currentTrigger: ToolStatusTriggerViewModel = null;\n editModalHandle: any;\n onEditToolStatusTrigger(trigger: ToolStatusTriggerViewModel, modalTemplate: any) {\n this.currentTrigger = trigger;\n this.editModalHandle = this.bsModalService.show(modalTemplate, {\n ignoreBackdropClick: true,\n })\n }\n\n onRemoveToolStatusTrigger(trigger: ToolStatusTriggerViewModel) {\n this.modalService.confirm(\"Are You Sure You Want Remove This Trigger?\", \"Remove Trigger\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.manageInventoryService.removeToolStatusTrigger(this._toolStatus.id, trigger.id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.refreshTriggers();\n });\n }\n })\n }\n\n onCloseInventoryStatusTriggerEditor() {\n this.editModalHandle.hide();\n this.refreshTriggers();\n }\n\n}\n","
      \n
      \n \n
      \n
      \n
      Add Asset Status
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Title
      {{item.title}} [{{item.triggersCount}}] \n \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n Add / Update Asset Status Triggers\n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n","import {Component, Input, OnInit} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { finalize } from 'rxjs/operators';\nimport { ToolStatusModel, ToolStatusViewModel } from 'src/app/models/inventory/tool-status-model';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-manage-tool-statuses',\n templateUrl: './manage-tool-statuses.component.html',\n styleUrls: ['./manage-tool-statuses.component.scss']\n})\nexport class ManageToolStatusesComponent implements OnInit {\n formGroup = new FormGroup({\n title: new FormControl(null, [Validators.required])\n })\n toolStatuses: ToolStatusViewModel[] = [];\n constructor(private manageInventoryService: ManageInventoryService,\n private modalService: ModalService,\n private bsModalService : BsModalService) { }\n inProgress = false;\n ngOnInit() {\n this.refresh();\n }\n\n @Input() isTemplateCompany: boolean = false;\n\n onAdd() {\n this.inProgress = true;\n var model = {\n title: this.formGroup.controls.title.value,\n } as ToolStatusModel;\n this.manageInventoryService.addToolStatus(model)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.toolStatuses.push(res);\n this.formGroup.reset();\n }, err => {\n this.modalService.error(err)\n })\n }\n\n onRemove(id: number) {\n this.modalService.confirm(\"Are you sure you want to remove this tool status?\", \"Remove Tool Status\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.manageInventoryService.removeToolStatus(id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n var loc = this.toolStatuses.find(x=> x.id == id);\n var index = this.toolStatuses.indexOf(loc) ;\n this.toolStatuses.splice(index, 1);\n }, err => {\n this.modalService.error(err)\n })\n }\n })\n\n }\n\n currentStatus : ToolStatusViewModel = null;\n statusTriggersModalRef : any = null;\n onShowTriggers(status : ToolStatusViewModel , template : any) {\n this.currentStatus = status;\n this.statusTriggersModalRef = this.bsModalService.show(template, {\n class:\"modal-lg\",\n ignoreBackdropClick : true,\n })\n }\n\n onCloseStatusTriggers() {\n this.statusTriggersModalRef.hide();\n this.refresh();\n }\n\n refresh() {\n this.inProgress = true;\n this.manageInventoryService.getToolStatuses()\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.toolStatuses = res;\n }, err => {\n this.modalService.error(err.error)\n })\n }\n}\n","
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n\n
      \n
      \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { CompanyInventoryConfigModel } from 'src/app/models/inventory/company-inventory-config-model';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-manage-inventory',\n templateUrl: './manage-inventory.component.html',\n styleUrls: ['./manage-inventory.component.scss']\n})\nexport class ManageInventoryComponent implements OnInit {\n\n companyInventoryConfig: CompanyInventoryConfigModel;\n inProgress: boolean;\n isTemplateCompany: boolean;\n\n @Input() selectedTabIndex = 1;\n\n constructor(private layoutService: LayoutService,\n private manageInventoryService: ManageInventoryService,\n private modalService: ModalService,\n private userService: UserService) { }\n\n ngOnInit() {\n this.inProgress = true;\n this.userService.currentCompany$.subscribe(res => this.isTemplateCompany = res?.isTemplate);\n this.manageInventoryService.getCompanyInventoryConfig().subscribe(\n res => {\n if (res.success) {\n this.companyInventoryConfig = res.data;\n } else {\n this.modalService.error(res.message);\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n\n changeCompanyEnduserPermissions() {\n this.inProgress = true;\n\n this.manageInventoryService.saveCompanyInventoryConfig(this.companyInventoryConfig).subscribe(\n res => {\n if (res.success) {\n this.modalService.success(\"Saved Successfully\");\n } else {\n this.modalService.error(res.message);\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n}\n","
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n {{errorMessage}}\n \n
      \n
      \n
      \n
      \n

      \n Loading ...\n

      \n

      \n Nothing Found\n

      \n
      \n 0\" class=\"table table-bordered table-striped mb-0\">\n \n \n \n \n \n \n \n \n \n \n \n \n
      Title
      {{visitorType.title}}\n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { VisitorTypeService } from 'src/app/services/visitor-type.service';\nimport { finalize } from 'rxjs/operators';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { LayoutService } from 'src/app/services/layout.service';\n\n@Component({\n selector: 'obc-manage-visitor-type',\n templateUrl: './manage-visitor-type.component.html',\n styleUrls: ['./manage-visitor-type.component.scss']\n})\nexport class ManageVisitorTypeComponent implements OnInit {\n inProgress = false;\n errorMessage = \"\";\n newVisitorTypeGroup = new FormGroup({\n title: new FormControl(null, [Validators.required]),\n });\n editVisitorTypeGroup: FormGroup;\n visitorTypes = null;\n constructor(\n private bsModalSerive: BsModalService,\n private modalService: ModalService,\n private layoutService : LayoutService,\n private visitorTypeService: VisitorTypeService\n ) { }\n\n ngOnInit() {\n this.getAllVisitorType();\n }\n\n getAllVisitorType() {\n this.inProgress = true;\n this.visitorTypeService.getAllVisitorTypes()\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.visitorTypes = res ?? [];\n });\n }\n\n addNewVisitorType() {\n var model = {\n title: this.newVisitorTypeGroup.get(\"title\").value\n };\n this.inProgress = true;\n this.visitorTypeService.addVisitorType(model)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.visitorTypes.push(res);\n this.newVisitorTypeGroup.reset();\n });\n }\n\n onRemoveModal(model: any) {\n this.modalService.confirm(\"Are you sure you want to delete this visitor type?\",\"\", \"Yes\", \"No\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.visitorTypeService.removeVisitorType(model.id)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n var index = this.visitorTypes.indexOf(model);\n this.visitorTypes.splice(index, 1);\n });\n }\n })\n }\n\n bsModalRef = null;\n onShowEditModal(template: any, model: any) {\n this.editVisitorTypeGroup = new FormGroup({\n id: new FormControl(model.id, [Validators.required]),\n title: new FormControl(model.title, [Validators.required]),\n });\n this.bsModalRef = this.bsModalSerive.show(template);\n }\n\n onUpdateVisitorType() {\n var model = {\n title: this.editVisitorTypeGroup.get(\"title\").value,\n };\n var id = this.editVisitorTypeGroup.get(\"id\").value;\n this.visitorTypeService.updateVisitorType(id, model)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n var entity = this.visitorTypes.find(i => i.id == id);\n var index = this.visitorTypes.indexOf(entity);\n this.visitorTypes.splice(index, 1, res);\n this.bsModalRef.hide();\n });\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ServerResult, ServerResultData } from '../models/server-result-data';\nimport { ErrorService } from './error.service';\nimport { RegionModel, RegionViewModel } from \"../models/region/region-model\";\nimport { PagingViewModel } from \"../models/site-list-paging-view-model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RegionService {\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n\n getRegions = (): Observable> =>\n this._http.get>(`api/Region/all-regions`)\n .pipe(catchError(this._errorService.handleError));\n\n getAccessableRegions = (): Observable> =>\n this._http.get>(`api/Region/accessable-regions`)\n .pipe(catchError(this._errorService.handleError));\n\n addRegion = (model: RegionModel): Observable =>\n this._http.post(`api/Region/add-region`, model)\n .pipe(catchError(this._errorService.handleError));\n\n updateRegion = (id: number, model: RegionModel): Observable =>\n this._http.post(`api/Region/update-region/${id}`, model)\n .pipe(catchError(this._errorService.handleError));\n\n removeRegion = (id: number): Observable =>\n this._http.delete(`api/Region/remove-region/${id}`)\n .pipe(catchError(this._errorService.handleError));\n\n}\n","
      \n
      \n \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Name\n
      \n

      No Data

      \n
      {{item.regionName}}\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from \"@angular/forms\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { finalize } from \"rxjs/operators\";\nimport { RegionModel, RegionViewModel } from \"../../../models/region/region-model\";\nimport { RegionService } from \"../../../services/region.service\";\n\n@Component({\n selector: 'obc-manage-region',\n templateUrl: './manage-region.component.html',\n styleUrls: ['./manage-region.component.scss']\n})\nexport class ManageRegionComponent implements OnInit {\n\n formGroup = new FormGroup({\n id: new FormControl(null, []),\n name: new FormControl(null, [Validators.required])\n })\n inProgress = false;\n regions = new BehaviorSubject([]);\n currentRegion: RegionViewModel = null;\n constructor(private regionService: RegionService, private modalService: ModalService) { }\n\n ngOnInit() {\n this.inProgress = true;\n this._getRegions();\n }\n\n onEdit(model: RegionViewModel) {\n this.formGroup.controls.id.setValue(model.regionId);\n this.formGroup.controls.name.setValue(model.regionName);\n // scroll to top\n document.body.scrollTop = 0;\n document.documentElement.scrollTop = 0;\n }\n\n _getRegions() {\n this.resetFormGroups();\n this.regionService.getRegions()\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.regions.next(res.data);\n }, err => {\n this.modalService.error(err)\n })\n }\n\n onInsert() {\n var model = {\n regionName: this.formGroup.controls.name.value,\n } as RegionModel\n var subscription = this.regionService.addRegion(model);\n this.inProgress = true;\n subscription\n .pipe(finalize(() => {\n this.resetFormGroups();\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res.success) {\n this.formGroup.controls.name.setValue(null);\n this._getRegions();\n } else\n this.modalService.error(res.message);\n }, err => {\n this.modalService.error(err)\n })\n }\n\n onRemove(regionId: number) {\n this.modalService.confirm(\"Are you sure you want to delete this region?\", \"Remove Region\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.regionService.removeRegion(regionId)\n .pipe(finalize(() => {\n this.resetFormGroups();\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res.success) {\n this.modalService.info(res.message);\n this._getRegions();\n } else\n this.modalService.error(res.message);\n }, err => {\n this.modalService.error(err);\n })\n }\n })\n }\n\n onUpdate() {\n var model = {\n regionName: this.formGroup.controls.name.value,\n } as RegionModel\n this.inProgress = true;\n var subscription = this.regionService.updateRegion(this.formGroup.controls.id.value, model);\n subscription\n .pipe(finalize(() => {\n this.resetFormGroups();\n this.inProgress = false;\n }))\n .subscribe(res => {\n if (res.success) {\n this._getRegions();\n }\n else\n this.modalService.error(res.message);\n }, err => {\n this.modalService.error(err)\n })\n }\n resetFormGroups() {\n this.formGroup.controls.name.setValue(null);\n this.formGroup.controls.id.setValue(null);\n }\n\n\n isValid() {\n return this.formGroup.controls.name.value?.trim()?.length > 0;\n }\n}\n","export enum SupplierDocumentReviewMode {\n Mandatory = 0,\n Optional = 1,\n Disabled = 2\n}\n","export enum SupplierDocumentApprovalMode {\n AutoApproveIfUploadedByStaff = 0,\n AutoApproveForAll = 1,\n ManualApprove = 2,\n}\n","export enum SupplierDocumentExpiryNotificationPeriodType {\n Daily = 0,\n Weekly = 1,\n Monthly = 2,\n None = -1\n};","import { ProcorePermission } from './../models/procore/procore-permission';\nimport { ProcoreProjectModel } from './../models/procore/procore-project-model';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ProcoreIntegrationType } from '../enums/procore-integration-type.enum';\nimport { BaseBioStarIntegrationConfiguration, BioStarIntegrationConfiguration } from '../models/biostar/bio-star-integration-configuration';\nimport { IntDictionary } from '../models/dictionary';\nimport { HandsHQCheckTokenResponse, HandsHQConfigurationModel } from '../models/handsHQ/handshq-configuration';\nimport { BaseMyobConfiguration, MyobCompanyFile, MyobConfiguration } from '../models/myob/myob-configuration';\nimport {\n BaseProcoreIntegrationConfigModel,\n ProcoreCheckTokenResponse,\n ProcoreIntegrationAuthorizationModel,\n ProcoreIntegrationTypeInfo\n} from '../models/procore-integration-models';\nimport { CompanyPermissionsProjects } from '../models/procore/company-permissions-projects';\nimport { CompanySupplierConfiguration } from '../models/supplier-document/company-supplier-configuration';\nimport { CompanySupplierDocumentConfiguration } from '../models/supplier-document/company-supplier-document-configuration';\nimport { SupplierDocumentEmailReminder, SupplierDocumentExpiryNotificationReminderModel } from '../models/supplier-document/supplier-document-email-reminder-model';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanySettingService {\n\n\n apiUrl = '/api/companySetting';\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n checkAndSaveAuthorization(model: ProcoreIntegrationAuthorizationModel)\n : Observable {\n return this.http.post(`${this.apiUrl}/check-and-save-procore-authorization`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateProcoreConfig(model: BaseProcoreIntegrationConfigModel): Observable {\n return this.http.post(`${this.apiUrl}/update-procore-config`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getTokenInfo(): Observable {\n return this.http.get(`${this.apiUrl}/get-procore-token-info`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n toggleProcoreEnable(): Observable {\n return this.http.get(`${this.apiUrl}/toggle-procore-enable`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n resetProcoreSchedule(type: ProcoreIntegrationType): Observable> {\n return this.http.get(`${this.apiUrl}/reset-procore-schedule/${type}`)\n .pipe(catchError(this._errorService.handleError));\n }\n saveMyobConfiguration(config: BaseMyobConfiguration): Observable {\n return this.http.post(`${this.apiUrl}/save-myob-configuration`, config)\n .pipe(catchError(this._errorService.handleError));\n }\n validateAndSaveMyobConfiguration(config: BaseMyobConfiguration): Observable {\n return this.http.post(`${this.apiUrl}/validate-save-myob-configuration`, config)\n .pipe(catchError(this._errorService.handleError));\n }\n getMyobConfiguration(): Observable {\n return this.http.get(`${this.apiUrl}/get-myob-configuration`)\n .pipe(catchError(this._errorService.handleError));\n }\n getMyobPaymentCategories(): Observable {\n return this.http.get(`${this.apiUrl}/get-myob-payment-categories`)\n .pipe(catchError(this._errorService.handleError));\n }\n getMyobCompanies(): Observable {\n return this.http.get(`${this.apiUrl}/get-myob-companies`)\n .pipe(catchError(this._errorService.handleError));\n }\n getSupplierDocumentConfiguration(): Observable {\n return this.http.get(`${this.apiUrl}/get-supplier-configuration`)\n .pipe(catchError(this._errorService.handleError));\n }\n saveSupplierDocumentConfiguration(model: CompanySupplierDocumentConfiguration): Observable {\n return this.http.post(`${this.apiUrl}/save-supplier-document-configuration`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n saveSupplierDocumentEmailReminderInfo(model: SupplierDocumentEmailReminder): Observable {\n return this.http.post(`${this.apiUrl}/save-supplier-doc-email-reminder`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n saveSupplierDocumentexpiryEmailnotificationReminderInfo(model: SupplierDocumentExpiryNotificationReminderModel): Observable {\n return this.http.post(`${this.apiUrl}/save-supplier-doc-expiry-notification-email-reminder`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n // updateProcoreCompanyIdForDmsaMode(companyId: any) {\n // return this.http.post(`${this.apiUrl}/save-procore-dmsa-company-id`, { companyId: companyId })\n // .pipe(catchError(this._errorService.handleError));\n // }\n\n getHandsHQConfiguration(): Observable {\n return this.http.get(`${this.apiUrl}/get-handshq-configuration`)\n .pipe(catchError(this._errorService.handleError));\n }\n validateAndSaveHandsHQConfiguration(model: HandsHQConfigurationModel): Observable {\n return this.http.post(`${this.apiUrl}/validate-and-save-handshq-configuration`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n inactiveHandsHQIntegration(): Observable {\n return this.http.post(`${this.apiUrl}/inactive-handshq-integration`, null)\n .pipe(catchError(this._errorService.handleError));\n }\n getBioStarConfiguration(): Observable {\n return this.http.get(`${this.apiUrl}/biostar-configuration`)\n .pipe(catchError(this._errorService.handleError));\n }\n validateAndSaveBiostarConfiguration(config: BaseBioStarIntegrationConfiguration): Observable {\n return this.http.post(`${this.apiUrl}/validate-save-biostar-configuration`, config)\n .pipe(catchError(this._errorService.handleError));\n }\n\n GetProcorePermissionsProjects(): Observable {\n return this.http.post(`${this.apiUrl}/procore-company-permissions-projects`, null)\n .pipe(catchError(this._errorService.handleError));\n }\n\n GetProjectPermissions(model: ProcoreProjectModel): Observable {\n return this.http.post(`${this.apiUrl}/procore-project-permissions`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SupplierDocumentApprovalMode } from '../enums/supplier-document-approval-mode.enum';\n\n@Pipe({\n name: 'supplierDocumentApprovalMode'\n})\nexport class SupplierDocumentApprovalModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == SupplierDocumentApprovalMode.AutoApproveIfUploadedByStaff) return 'Auto Approve If Uploaded By Company Staff';\n if (value == SupplierDocumentApprovalMode.AutoApproveForAll) return 'Auto Approve For All';\n if (value == SupplierDocumentApprovalMode.ManualApprove) return 'Manual';\n return value?.toString();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SupplierDocumentReviewMode } from '../enums/supplier-document-review-mode.enum';\n\n@Pipe({\n name: 'supplierDocumentReviewModePipe'\n})\nexport class SupplierDocumentReviewModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == SupplierDocumentReviewMode.Mandatory) return 'Mandatory';\n if (value == SupplierDocumentReviewMode.Optional) return 'Optional';\n if (value == SupplierDocumentReviewMode.Disabled) return 'Disabled';\n return value?.toString();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SupplierDocumentExpiryNotificationPeriodType } from '../enums/supplier-document-expiry-notification-priod-type.enum';\n\n@Pipe({\n name: 'supplierDocumentExpiryNotificationPeriodTypePipe'\n})\nexport class SupplierDocumentExpiryNotificationPeriodTypePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == SupplierDocumentExpiryNotificationPeriodType.Daily) return 'Daily';\n if (value == SupplierDocumentExpiryNotificationPeriodType.Weekly) return 'Weekly';\n if (value == SupplierDocumentExpiryNotificationPeriodType.Monthly) return 'Monthly';\n if (value == SupplierDocumentExpiryNotificationPeriodType.None) return 'None';\n return value?.toString();\n }\n\n}\n","\n
      \n
      \n
      Supplier Document Configuration
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n
      \n
      Supplier Document Reminder
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n\n \n
      \n \n\n \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n
      0\">\n
      Supplier Document Expiry Notification Configuration
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n \n Error\n \n \n
      \n\n
      \n Text field length exceeded the maximum limit. Please reduce the length of your input and try again.
      \n
        \n
      • {{item}}
      • \n
      \n \n
      \n
      \n
      ","import { SupplierDocumentReviewMode } from 'src/app/enums/supplier-document-review-mode.enum';\nimport { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ToastrService } from 'ngx-toastr';\nimport { finalize } from 'rxjs/operators';\nimport { SupplierDocumentApprovalMode } from 'src/app/enums/supplier-document-approval-mode.enum';\nimport { SupplierDocumentConfigMode } from 'src/app/enums/supplier-document-config-mode.enum';\nimport { CompanySupplierDocumentConfiguration } from 'src/app/models/supplier-document/company-supplier-document-configuration';\nimport { SupplierDocumentEmailReminder, SupplierDocumentExpiryNotificationReminderModel } from 'src/app/models/supplier-document/supplier-document-email-reminder-model';\nimport { CompanySettingService } from 'src/app/services/company-setting.service';\nimport { SupplierDocumentEditorType } from 'src/app/enums/supplier-document-editor-type';\nimport { UserService } from 'src/app/services/user.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { SupplierDocumentExpiryNotificationPeriodType } from 'src/app/enums/supplier-document-expiry-notification-priod-type.enum';\nimport { WorkflowType } from 'src/app/enums/workflow/workflow-type';\nimport { WorkflowService } from 'src/app/services/workflow.service';\nimport { CheckListItemViewModel } from 'src/app/custom-controls/check-list-form-control/check-list-item';\nimport { WorkflowDefinitionViewModel } from 'src/app/models/workflow/workflow-definition-view-model';\nimport { DocumentKindService } from 'src/app/services/document-kind.service';\n\n@Component({\n selector: 'obc-supplier-document-reminder',\n templateUrl: './supplier-document-reminder.component.html',\n styleUrls: ['./supplier-document-reminder.component.scss']\n})\nexport class SupplierDocumentReminderComponent implements OnInit {\n supplierDocumentExpiryNotificationReminderModel: SupplierDocumentExpiryNotificationReminderModel;\n SupplierDocumentExpiryNotificationPeriodType = SupplierDocumentExpiryNotificationPeriodType;\n SupplierDocumentEditorType = SupplierDocumentEditorType;\n\n SupplierDocumentApprovalMode = SupplierDocumentApprovalMode;\n SupplierDocumentReviewMode = SupplierDocumentReviewMode;\n inProgress: boolean;\n supplierDocumentEmailReminder: SupplierDocumentEmailReminder;\n companySupplierDocumentConfiguration: CompanySupplierDocumentConfiguration;\n\n workflowDocumentKinds: WorkflowDefinitionViewModel[] = [];\n documentKindCheckList: CheckListItemViewModel[] = [];\n\n formGroup = new FormGroup({\n isActiveSupplierDocEmailReminder: new FormControl(false, [Validators.required]),\n supplierDocEmailReminderAtDaysCount: new FormControl(null, [Validators.required]),\n supplierDocEmailReminderSubject: new FormControl('', [Validators.required]),\n supplierDocEmailReminderBody: new FormControl('', [Validators.required]),\n supplierDocumentApprovalMode: new FormControl(SupplierDocumentApprovalMode.AutoApproveIfUploadedByStaff, [Validators.required]),\n forceViewSupplierDocumentsBeforeSignOff: new FormControl(false, [Validators.required]),\n forceEndUserToSign: new FormControl(false, [Validators.required]),\n supplierDocumentReviewMode: new FormControl(SupplierDocumentReviewMode.Mandatory, [Validators.required]),\n supplierDocumentRequestEmailBody: new FormControl(''),\n supplierFormsSubmitRequestEmailBody: new FormControl(''),\n supplierFullOnboardingEmailBody: new FormControl(''),\n supplierDocCommentEmailBody: new FormControl(''),\n supplierDocCommentAcknowledgementText: new FormControl(''),\n offsiteOnboardingEmailContent: new FormControl(''),\n supplierDocumentExpiryNotificationPeriod: new FormControl(SupplierDocumentExpiryNotificationPeriodType.Monthly),\n supplierDocumentExpiryNotificationAnyWorkflows: new FormControl(true),\n supplierDocumentWorkflowKinds: new FormControl(null),\n supplierDocExpiryNotificationEmailReminderSubject: new FormControl(),\n supplierDocExpiryNotificationEmailReminderBody: new FormControl(),\n });\n\n\n constructor(private companySettingService: CompanySettingService,\n private userService: UserService,\n private toastrService: ToastrService,\n private bsModalService: BsModalService,\n private workflowService: WorkflowService,\n private documentKindService: DocumentKindService) {\n }\n\n ngOnInit(): void {\n this.getData();\n\n this.formGroup.controls.supplierDocumentExpiryNotificationPeriod.valueChanges?.subscribe((_) => {\n this.UpdateFormValidity();\n });\n }\n\n UpdateFormValidity() {\n if (this.formGroup.controls.supplierDocumentExpiryNotificationPeriod.value == SupplierDocumentExpiryNotificationPeriodType.None) {\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderSubject.clearValidators();\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderBody.clearValidators();\n }\n else {\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderSubject.setValidators(Validators.required);\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderBody.setValidators(Validators.required);\n }\n\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderSubject.updateValueAndValidity();\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderBody.updateValueAndValidity();\n }\n\n getData() {\n this.inProgress = true;\n this.companySettingService.getSupplierDocumentConfiguration()\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n this.supplierDocumentEmailReminder = res.emailReminderInfo;\n this.companySupplierDocumentConfiguration = res.companySupplierDocumentConfiguration;\n this.supplierDocumentExpiryNotificationReminderModel = res.documentExpiryNotificationReminderInfo;\n\n this.fillFormGroup();\n this.getWorkflows();\n\n }, err => {\n this.toastrService.error(err);\n });\n }\n\n getWorkflows() {\n this.workflowService.getWorkflowListFull(WorkflowType.SupplierDocument)\n .subscribe(res => {\n this.workflowDocumentKinds = [];\n if (res) {\n res.filter(w => !w.isLegacyMode).forEach((value) => {\n this.workflowDocumentKinds.push(value)\n });\n\n this.documentKindService.prepareDocumentKindCheckList(this.supplierDocumentExpiryNotificationReminderModel.supplierDocumentKindIdList)\n .subscribe(res => {\n this.documentKindCheckList = res;\n this.formGroup.controls.supplierDocumentWorkflowKinds.setValue(this.documentKindCheckList);\n });\n }\n })\n }\n\n fillFormGroup() {\n this.formGroup.controls.isActiveSupplierDocEmailReminder.setValue(this.supplierDocumentEmailReminder.isActiveSupplierDocEmailReminder);\n this.formGroup.controls.supplierDocEmailReminderAtDaysCount.setValue(this.supplierDocumentEmailReminder.supplierDocEmailReminderAtDaysCount);\n this.formGroup.controls.supplierDocEmailReminderSubject.setValue(this.supplierDocumentEmailReminder.supplierDocEmailReminderSubject);\n this.formGroup.controls.supplierDocEmailReminderBody.setValue(this.supplierDocumentEmailReminder.supplierDocEmailReminderBody);\n this.formGroup.controls.supplierDocumentApprovalMode.setValue(this.companySupplierDocumentConfiguration.supplierDocumentApprovalMode);\n this.formGroup.controls.supplierDocumentReviewMode.setValue(this.companySupplierDocumentConfiguration.supplierDocumentReviewMode);\n this.formGroup.controls.forceViewSupplierDocumentsBeforeSignOff.setValue(this.companySupplierDocumentConfiguration.forceViewSupplierDocumentsBeforeSignOff ?? false);\n this.formGroup.controls.forceEndUserToSign.setValue(this.companySupplierDocumentConfiguration.supplierDocumentConfigMode != SupplierDocumentConfigMode.DisableSign);\n this.formGroup.controls.supplierDocumentRequestEmailBody.setValue(this.companySupplierDocumentConfiguration.supplierDocumentRequestEmailBody);\n this.formGroup.controls.supplierFormsSubmitRequestEmailBody.setValue(this.companySupplierDocumentConfiguration.supplierFormsSubmitRequestEmailBody);\n this.formGroup.controls.supplierFullOnboardingEmailBody.setValue(this.companySupplierDocumentConfiguration.supplierFullOnboardingEmailBody);\n this.formGroup.controls.supplierDocCommentEmailBody.setValue(this.companySupplierDocumentConfiguration.supplierDocCommentEmailBody);\n this.formGroup.controls.supplierDocCommentAcknowledgementText.setValue(this.companySupplierDocumentConfiguration.supplierDocCommentAcknowledgementText);\n this.formGroup.controls.offsiteOnboardingEmailContent.setValue(this.companySupplierDocumentConfiguration.offsiteOnboardingEmailContent);\n\n if (this.supplierDocumentExpiryNotificationReminderModel == null) {\n this.formGroup.controls.supplierDocumentExpiryNotificationPeriod.setValue(SupplierDocumentExpiryNotificationPeriodType.Monthly);\n this.formGroup.controls.supplierDocumentWorkflowKinds.setValue(null);\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderSubject.setValue('');\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderBody.setValue('');\n }\n else {\n this.formGroup.controls.supplierDocumentExpiryNotificationPeriod.setValue(this.supplierDocumentExpiryNotificationReminderModel.supplierDocumentExpiryNotificationPeriod);\n this.formGroup.controls.supplierDocumentExpiryNotificationAnyWorkflows.setValue(this.supplierDocumentExpiryNotificationReminderModel.supplierDocumentExpiryNotificationAnyWorkflows);\n this.formGroup.controls.supplierDocumentWorkflowKinds.setValue(this.supplierDocumentExpiryNotificationReminderModel.supplierDocumentKindIdList);\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderSubject.setValue(this.supplierDocumentExpiryNotificationReminderModel.supplierDocExpiryNotificationEmailReminderSubject);\n this.formGroup.controls.supplierDocExpiryNotificationEmailReminderBody.setValue(this.supplierDocumentExpiryNotificationReminderModel.supplierDocExpiryNotificationEmailReminderBody);\n }\n }\n\n getFromFormGroup() {\n this.supplierDocumentEmailReminder.isActiveSupplierDocEmailReminder = this.formGroup.controls.isActiveSupplierDocEmailReminder.value;\n this.supplierDocumentEmailReminder.supplierDocEmailReminderAtDaysCount = this.formGroup.controls.supplierDocEmailReminderAtDaysCount.value;\n this.supplierDocumentEmailReminder.supplierDocEmailReminderSubject = this.formGroup.controls.supplierDocEmailReminderSubject.value;\n this.supplierDocumentEmailReminder.supplierDocEmailReminderBody = this.formGroup.controls.supplierDocEmailReminderBody.value;\n\n this.companySupplierDocumentConfiguration.supplierDocumentApprovalMode = this.formGroup.controls.supplierDocumentApprovalMode.value;\n this.companySupplierDocumentConfiguration.supplierDocumentReviewMode = this.formGroup.controls.supplierDocumentReviewMode.value;\n this.companySupplierDocumentConfiguration.forceViewSupplierDocumentsBeforeSignOff = this.formGroup.controls.forceViewSupplierDocumentsBeforeSignOff.value;\n this.companySupplierDocumentConfiguration.supplierDocumentConfigMode = this.formGroup.controls.forceEndUserToSign.value == true ? SupplierDocumentConfigMode.MandatorySign : SupplierDocumentConfigMode.DisableSign;\n this.companySupplierDocumentConfiguration.supplierDocumentRequestEmailBody = this.formGroup.controls.supplierDocumentRequestEmailBody.value;\n this.companySupplierDocumentConfiguration.supplierFormsSubmitRequestEmailBody = this.formGroup.controls.supplierFormsSubmitRequestEmailBody.value;\n this.companySupplierDocumentConfiguration.supplierFullOnboardingEmailBody = this.formGroup.controls.supplierFullOnboardingEmailBody.value;\n this.companySupplierDocumentConfiguration.supplierDocCommentEmailBody = this.formGroup.controls.supplierDocCommentEmailBody.value;\n this.companySupplierDocumentConfiguration.supplierDocCommentAcknowledgementText = this.formGroup.controls.supplierDocCommentAcknowledgementText.value;\n this.companySupplierDocumentConfiguration.offsiteOnboardingEmailContent = this.formGroup.controls.offsiteOnboardingEmailContent.value;\n\n this.supplierDocumentExpiryNotificationReminderModel.supplierDocumentExpiryNotificationPeriod = this.formGroup.controls.supplierDocumentExpiryNotificationPeriod.value;\n this.supplierDocumentExpiryNotificationReminderModel.supplierDocumentExpiryNotificationAnyWorkflows = this.formGroup.controls.supplierDocumentExpiryNotificationAnyWorkflows.value;\n this.supplierDocumentExpiryNotificationReminderModel.supplierDocumentKindIdList =\n this.supplierDocumentExpiryNotificationReminderModel.supplierDocumentExpiryNotificationAnyWorkflows == true ?\n [] :\n this.formGroup.controls.supplierDocumentWorkflowKinds.value?.filter(item => item.value)?.map(item => item.key);\n this.supplierDocumentExpiryNotificationReminderModel.supplierDocExpiryNotificationEmailReminderSubject = this.formGroup.controls.supplierDocExpiryNotificationEmailReminderSubject.value;\n this.supplierDocumentExpiryNotificationReminderModel.supplierDocExpiryNotificationEmailReminderBody = this.formGroup.controls.supplierDocExpiryNotificationEmailReminderBody.value;\n }\n\n onActiveChanged(value) {\n this.formGroup.controls.isActiveSupplierDocEmailReminder.setValue(value);\n }\n\n onForceViewSupplierDocumentsBeforeSignOffChanged(value) {\n this.formGroup.controls.forceViewSupplierDocumentsBeforeSignOff.setValue(value);\n }\n\n onSaveSupplierDocumentEmailReminder() {\n this.inProgress = true;\n this.getFromFormGroup();\n this.companySettingService.saveSupplierDocumentEmailReminderInfo(this.supplierDocumentEmailReminder)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n this.toastrService.success('Saved Successfully');\n }, err => {\n this.toastrService.error(err);\n });\n }\n\n isValidForm: boolean = true;\n maxLengthErrorList = [];\n\n ValidateForms() {\n this.isValidForm = true;\n this.maxLengthErrorList = [];\n if (this.companySupplierDocumentConfiguration?.supplierDocumentRequestEmailBody.length > this.userService.editorMaxLength.value) {\n this.isValidForm = false;\n this.maxLengthErrorList.push(\"Document request\");\n }\n\n if (this.companySupplierDocumentConfiguration?.supplierFormsSubmitRequestEmailBody.length > this.userService.editorMaxLength.value) {\n this.isValidForm = false;\n this.maxLengthErrorList.push(\"Form fill out request\");\n }\n\n if (this.companySupplierDocumentConfiguration?.supplierFullOnboardingEmailBody.length > this.userService.editorMaxLength.value) {\n this.isValidForm = false;\n this.maxLengthErrorList.push(\"Full onboarding\");\n }\n\n if (this.companySupplierDocumentConfiguration?.offsiteOnboardingEmailContent.length > this.userService.editorMaxLength.value) {\n this.isValidForm = false;\n this.maxLengthErrorList.push(\"Onboarding email offsite\");\n }\n\n if (this.companySupplierDocumentConfiguration?.supplierDocCommentEmailBody.length > this.userService.editorMaxLength.value) {\n this.isValidForm = false;\n this.maxLengthErrorList.push(\"Document version comment\");\n }\n }\n\n bsModalRef: any;\n onSaveCompanySupplierDocumentConfiguration(template) {\n this.getFromFormGroup();\n this.ValidateForms();\n if (!this.isValidForm)\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: false,\n });\n else {\n this.inProgress = true;\n this.companySettingService.saveSupplierDocumentConfiguration(this.companySupplierDocumentConfiguration)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n this.toastrService.success('Saved Successfully');\n }, err => {\n this.toastrService.error(err);\n });\n }\n }\n\n onChangeSupplierDocumentConfigMode(value) {\n this.formGroup.controls.forceEndUserToSign.setValue(value == true ? SupplierDocumentConfigMode.MandatorySign : SupplierDocumentConfigMode.DisableSign);\n }\n\n\n supplierDocumentExpiryNotificationEmailIsValid(): boolean {\n this.getFromFormGroup();\n\n if (this.supplierDocumentExpiryNotificationReminderModel?.supplierDocumentExpiryNotificationPeriod != SupplierDocumentExpiryNotificationPeriodType.None &&\n (this.supplierDocumentExpiryNotificationReminderModel?.supplierDocExpiryNotificationEmailReminderSubject.length == 0 ||\n this.supplierDocumentExpiryNotificationReminderModel?.supplierDocExpiryNotificationEmailReminderBody.length == 0)) {\n return false;\n }\n return true;\n }\n\n onSaveSupplierDocumentExpiryNotificationEmailReminder() {\n\n if (this.supplierDocumentExpiryNotificationEmailIsValid()) {\n this.inProgress = true;\n this.companySettingService.saveSupplierDocumentexpiryEmailnotificationReminderInfo(this.supplierDocumentExpiryNotificationReminderModel)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n this.toastrService.success('Saved Successfully');\n }, err => {\n this.toastrService.error(err);\n });\n }\n else {\n this.toastrService.error(\"Please fill supplier document expiry notification configuration\");\n }\n }\n\n IsSpecificWorkflow(): boolean {\n return !(this.formGroup.controls.supplierDocumentExpiryNotificationAnyWorkflows.value === true);\n }\n}\n\n\n","export enum SignOffMode {\n Optional = 0,\n Mandatory = 1,\n Disable = 2,\n}\n","export enum SupplierDocumentAccessMode {\n HostOnly = 0,\n Supplier = 1,\n Anyone = 2\n}\n","export enum SupplierDocumentAmendmentMode {\n Disable = 0,\n Enable = 1\n}\n","export enum SupplierDocumentCommentMode {\n Disable = 0,\n Enable = 1\n}\n","export enum SupplierDocumentExpireDateMode {\n Disable = 0,\n Optional = 1,\n Mandatory = 2,\n}\n","export enum WorkflowTemplateAccessMode {\n GodUsersOnly = 0,\n Everyone = 1,\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { WorkflowTemplateResult } from '../models/workflow/company-workflow-template-view-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WorkflowTemplateService {\n apiUrl: string = \"/api/workflowTemplate\";\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getAllWorkflowTemplate = (): Observable =>\n this._http.post(`${this.apiUrl}/get-all-template/`, null)\n .pipe(catchError(this._errorService.handleError));\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CompanyWorkflowTemplateViewModel } from '../models/workflow/company-workflow-template-view-model';\nimport { ServerResult } from '../models/server-result-data';\nimport { WorkflowType } from '../enums/workflow/workflow-type';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyWorkflowTemplateService {\n apiUrl: string = \"/api/companyworkflowTemplate\";\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getCompanyWorkflowTemplate = (companyId: number, workflowType: WorkflowType, workflowSubType: number): Observable =>\n this._http.get(`${this.apiUrl}/get-company-workflow-template/${companyId}/${workflowType}/${workflowSubType}`)\n .pipe(catchError(this._errorService.handleError));\n\n getAllCompanyWorkflowTemplate = (): Observable =>\n this._http.post(`${this.apiUrl}/get-company-workflow-templates/`, null)\n .pipe(catchError(this._errorService.handleError));\n\n addCompanyWorkflowTemplate = (model: CompanyWorkflowTemplateViewModel): Observable =>\n this._http.post(`${this.apiUrl}/add-company-workflow-template/`, model)\n .pipe(catchError(this._errorService.handleError));\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { WorkflowType } from 'src/app/enums/workflow/workflow-type';\n\n@Pipe({\n name: 'WorkflowTypeFilter'\n})\nexport class WorkflowTypePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == WorkflowType.SupplierDocument) return 'Supplier Document';\n return value?.toString();\n }\n\n}\n","export enum MessageType {\n Email = 0,\n PushNotification = 5,\n SMS = 10,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MessageType } from '../enums/message-type.enum';\n\n@Pipe({\n name: 'messageTypeFilter'\n})\nexport class MessageTypePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == MessageType.Email || value == 0 || value==\"Email\") return \"Email\";\n if (value == MessageType.PushNotification || value == 5 || value==\"PushNotification\") return \"PushNotification\";\n if (value == MessageType.SMS || value == 10 || value==\"SMS\") return \"SMS\";\n return value?.toString() ?? \"\";\n }\n}\n","
      \n
      \n \n Add/Update workflow\n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      1) || dataModel?.workflowSubType)\">\n \n \n
      \n
      \n\n
      \n
      \n
      \n
      \n \n Customise Workflow\n \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n 0\">\n
      \n
      \n Variables\n
      \n
      \n
      \n \n
      \n \n \n
      \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n {{group.key == null ? \"Workflow Step\" : group.key}}\n
      \n
      \n
      \n \n \n \n
      \n
      \n \n
      \n \n
      \n \n
      \n
      \n
      \n \n \n \n {{item.name}}\n \n \n \n Please select role(s)\n
      \n
      \n \n
      \n
      \n \n \n
      \n \n \n
      \n \n
      \n
      \n \n \n \n {{item.name}}\n \n \n \n Please select role(s)\n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n
      \n \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n","import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { MessageType } from '@microsoft/signalr';\nimport { ToastrService } from 'ngx-toastr';\nimport { BehaviorSubject, finalize } from 'rxjs';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { FormType } from 'src/app/enums/form-type';\nimport { GodUserPermission } from 'src/app/enums/god-user-permission.enum';\nimport { SupplierDocumentExpireDateMode } from 'src/app/enums/supplier-document-expire-date-mode.enum';\nimport { WorkflowTemplateAccessMode } from 'src/app/enums/workflow-template-access-mode';\nimport { WorkflowType } from 'src/app/enums/workflow/workflow-type';\nimport { CompanyRoleViewModel } from 'src/app/models/company-role.view.model';\nimport { SupplierDocumentKindViewModel } from 'src/app/models/supplier-document/supplier-document-kind-viewmodel';\nimport { CompanyWorkflowTemplateViewModel, PlaceholderItemViewModel, WorkflowTemplateViewModel } from 'src/app/models/workflow/company-workflow-template-view-model';\nimport { VariableDefinitionMode, VariableDefinitionType, VariableValueDefinition } from 'src/app/models/workflow/variable-difinition';\nimport { CompanyRoleService } from 'src/app/services/company-role.service';\nimport { CompanyWorkflowTemplateService } from 'src/app/services/company-workflow-template.service';\nimport { DocumentKindService } from 'src/app/services/document-kind.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { WorkflowTemplateService } from 'src/app/services/workflow-template.service';\n\n@Component({\n selector: 'obc-workflow-renderer',\n templateUrl: './workflow-renderer.component.html',\n styleUrls: ['./workflow-renderer.component.scss']\n})\nexport class WorkflowRendererComponent implements OnInit, AfterViewInit {\n\n @Input() companyId: number;\n @Input() isStandAloneMode = true;\n\n _workflowSubType: number;\n @Input() set workflowSubType(value: number) {\n this._workflowSubType = value;\n this.filterWorkflowTemplates();\n }\n\n get isEditMode() {\n return this.isInEditMode || this.isLockedWorkflowSection;\n }\n @Input() isInEditMode: boolean = false;\n @Input() dataModel: CompanyWorkflowTemplateViewModel = {};\n\n _selectedWorkflowTemplateId: number;\n @Input() set selectedWorkflowTemplateId(id: number) {\n this._selectedWorkflowTemplateId = id;\n if (this.dataModel)\n this.dataModel.workflowTemplateId = id;\n this.manipulatePlaceholders();\n }\n\n _defaultPlaceHolderValues: any;\n @Input() set defaultPlaceHolderValues(values: any) {\n this._defaultPlaceHolderValues = values;\n }\n\n _defaultStartVariableValues: any;\n @Input() set defaultStartVariableValues(values: any) {\n this._defaultStartVariableValues = values;\n }\n\n @Input() currentWorkflowAccessMode: WorkflowTemplateAccessMode;\n\n get isLockedWorkflowSection() {\n return this.currentWorkflowAccessMode == WorkflowTemplateAccessMode.GodUsersOnly && !this.isGodUser;\n }\n\n _customWorkflowTitle: string;\n get customWorkflowTitle() {\n return this._customWorkflowTitle;\n }\n set customWorkflowTitle(title: string) {\n this._customWorkflowTitle = title;\n if (this.dataModel)\n this.dataModel.workflowTitle = title;\n }\n\n _workflowType: WorkflowType;\n @Input() set workflowType(value: WorkflowType) {\n this._workflowType = value;\n }\n get workflowType() {\n return this._workflowType;\n }\n\n inProgress: boolean = false;\n term$ = new BehaviorSubject(null)\n\n filteredWorkflowTemplateList: WorkflowTemplateViewModel[] = [];\n WorkflowType = WorkflowType;\n FilterType = FilterType;\n FormType = FormType;\n MessageType = MessageType;\n VariableDefinitionType = VariableDefinitionType;\n documentKinds: SupplierDocumentKindViewModel[];\n\n _selectedSupplierDocumentExpireDateMode: SupplierDocumentExpireDateMode;\n @Input() set expireDateMode(mode: SupplierDocumentExpireDateMode) {\n this._selectedSupplierDocumentExpireDateMode = mode;\n this.manipulatePlaceholders();\n }\n get selectedExpireDateMode(): SupplierDocumentExpireDateMode {\n if (this._selectedSupplierDocumentExpireDateMode != null)\n return this._selectedSupplierDocumentExpireDateMode;\n return this.documentKinds.find(k => k.id == this.dataModel.workflowSubType)?.expireDateMode;\n }\n workflowTemplateList: WorkflowTemplateViewModel[];\n startVariables: VariableValueDefinition[];\n placeholderItems: PlaceholderItemViewModel[];\n roles: CompanyRoleViewModel[];\n isActiveAdvancedMode: boolean = false;\n hasGodUserPermissionForCompany: boolean = false;\n isGodUser: boolean = false;\n\n get showBasicAdvancedSwitch() {\n return this.hasGodUserPermissionForCompany && this.dataModel?.workflowInfo?.placeholderList?.some(p => p.accessMode.toLowerCase() == 'advanced');\n }\n\n constructor(\n private workflowTemplateService: WorkflowTemplateService,\n private companyWorkflowTemplateService: CompanyWorkflowTemplateService,\n private companyRoleService: CompanyRoleService,\n private toastrService: ToastrService,\n private modalService: ModalService,\n private userService: UserService,\n private documentKindService: DocumentKindService) { }\n\n\n ngOnInit(): void {\n if (this._workflowType !== undefined && this._workflowType != null && this.dataModel)\n this.dataModel.workflowType = this._workflowType;\n\n this.workflowTemplateService.getAllWorkflowTemplate()\n .subscribe(\n res => {\n if (res) {\n this.workflowTemplateList = res.workflowTemplateViewModel;\n if (!this.isStandAloneMode || this.isInEditMode)\n this.filterWorkflowTemplates();\n }\n }\n );\n\n this.companyRoleService.getCompanyRolesByCompanyId(this.companyId).subscribe({\n next: (res) => {\n this.roles = res;\n }\n });\n\n this.documentKindService.list(this.companyId).subscribe(kindList => this.documentKinds = kindList);\n this.hasGodUserPermissionForCompany = this.userService.hasGodUserPermissionForCompany(GodUserPermission.WorklfowAdvancedManagement);\n this.isGodUser = this.userService.isGodUser();\n\n }\n\n ngAfterViewInit(): void {\n // if (this.dataModel?.workflowTemplateId)\n // this.dataModel.workflowTemplateId = this.dataModel.workflowTemplateId;\n\n // if (this.workflowTemplateList)\n // if (!this.isStandAloneMode)\n this.filterWorkflowTemplates();\n }\n\n @Output() onClose = new EventEmitter();\n\n closeModal() {\n this.onClose?.emit();\n }\n\n onWorkflowTypeSubTypeChange() {\n this.dataModel.workflowTemplateId = undefined;\n this.dataModel.workflowInfo = undefined;\n this.dataModel.title = undefined;\n this.dataModel.description = undefined;\n\n this.filterWorkflowTemplates();\n }\n\n\n\n private filterWorkflowTemplates() {\n if (this._workflowSubType && !this.dataModel.workflowSubType)\n this.dataModel.workflowSubType = this._workflowSubType;\n\n let workflowType: WorkflowType = this.dataModel.workflowType;\n let workflowSubType: number = this.dataModel.workflowSubType;\n\n // if (this.dataModel && this._selectedWorkflowTemplateId)\n // this.dataModel.workflowTemplateId = this._selectedWorkflowTemplateId;\n if (this.isLockedWorkflowSection) {\n this.filteredWorkflowTemplateList = this.workflowTemplateList; //Don't filter to show the GOD user selected template and its values if the workflow is locked\n }\n else {\n this.filteredWorkflowTemplateList = this.workflowTemplateList?.filter(p => p.workflowType == workflowType && workflowSubType != null && p.workflowSubType == workflowSubType) ?? [];\n if (!(this.filteredWorkflowTemplateList?.length ?? 0))\n this.filteredWorkflowTemplateList = this.workflowTemplateList?.filter(p => p.workflowType == workflowType && p.workflowSubType == null);\n\n this.filteredWorkflowTemplateList = this.filteredWorkflowTemplateList.filter(p => this.isGodUser || p.accessMode == WorkflowTemplateAccessMode.Everyone);\n\n if (this.filteredWorkflowTemplateList?.length && this.dataModel &&\n (!this.isStandAloneMode || workflowSubType) &&\n (!this.dataModel.workflowTemplateId || !this.filteredWorkflowTemplateList.some(t => t.id == this.dataModel.workflowTemplateId))) {\n this.dataModel.workflowTemplateId = this.filteredWorkflowTemplateList[0].id;\n }\n }\n this.manipulatePlaceholders();\n }\n\n getPlaceHolderValue(item: PlaceholderItemViewModel, template: WorkflowTemplateViewModel): any {\n return this._defaultPlaceHolderValues?.find(p => p.key == item.key)?.value ??\n template?.workflowInfo?.placeholderList?.find(p => p.key == item.key)?.value ??\n item.value;\n }\n\n manipulatePlaceholders() {\n if (this.workflowTemplateList?.length && this.dataModel?.workflowTemplateId) {\n var template = this.workflowTemplateList?.find(p => p.id == this.dataModel.workflowTemplateId);\n\n this.dataModel.workflowInfo = JSON.parse(JSON.stringify(template?.workflowInfo));\n this.dataModel.workflowTitle = this.customWorkflowTitle?.length ? this.customWorkflowTitle : template?.workflowTitle;\n this.dataModel.description = template?.description;\n\n this.dataModel.workflowInfo?.placeholderList?.map(item => {\n item.disabled = item.accessMode.toLowerCase() == 'advanced' && this.isActiveAdvancedMode == false;\n item.value = this.getPlaceHolderValue(item, template);\n if (item.type == FilterType.Switch)\n item.value = item.value == true || item.value == 'true';\n });\n\n\n this.startVariables = this._defaultStartVariableValues ?? this.dataModel.workflowInfo.startVariables ?? [];\n // Add expiry variable to the variables if the kind is in signmode and not existed in the workflow variables\n let expireDateKey = \"ExpireDate\";\n if (this.selectedExpireDateMode != SupplierDocumentExpireDateMode.Disable &&\n !this.startVariables?.some(v => v.key == expireDateKey)) {\n this.startVariables.push({ value: \"null\", key: expireDateKey, title: \"Expiry\", type: 1, typeString: \"Date\", mode: VariableDefinitionMode.Mandatory } as VariableValueDefinition);\n }\n else if (this.selectedExpireDateMode == SupplierDocumentExpireDateMode.Disable &&\n (this.startVariables?.length ?? 0) &&\n this.startVariables?.some(v => v.key == expireDateKey)) {\n this.startVariables = this.startVariables.filter(v => v.key != expireDateKey);\n }\n\n this.dataModel.workflowInfo?.placeholderList?.filter(p => p.type == FilterType.ActionList).map(item => {\n let commandList = JSON.parse(item.value.toString())\n item.parsedValue = [];\n commandList.forEach(value => {\n item.parsedValue.push(\n {\n RoleList: value.RoleList,\n ConfirmMessage: value.ConfirmMessage,\n CssClass: value.CssClass,\n Key: value.Key,\n Text: value.Text,\n Placeholder: JSON.parse(JSON.stringify(value.Text)),\n }\n )\n });\n });\n }\n }\n\n onAdvancedModeChanged(isActive) {\n this.isActiveAdvancedMode = isActive;\n this.dataModel.workflowInfo?.placeholderList?.map(item => {\n if (this.isActiveAdvancedMode) {\n item.disabled = false;\n }\n else {\n item.disabled = item.accessMode.toLowerCase() == 'advanced';\n }\n\n })\n }\n\n\n isNotification(key: string): boolean {\n return key.toLowerCase().indexOf('notification') > -1;\n }\n\n\n isValid(showErrorMessage = true,): boolean {\n if (this.isStandAloneMode) {\n if (this.dataModel.workflowType == null ||\n this.dataModel.workflowType == undefined ||\n !this.dataModel.workflowSubType ||\n !this.dataModel.workflowTemplateId ||\n !this.dataModel.workflowTitle ||\n !this.companyId) {\n if (showErrorMessage)\n this.toastrService.warning('Please complete all the required fields!');\n return false;\n }\n }\n\n if (this.dataModel.workflowInfo?.placeholderList?.filter(p => p.type == FilterType.RoleArray && !this.isNotification(p.key) && (!p.value || (p.value).length <= 0)).length > 0) {\n if (showErrorMessage)\n this.toastrService.warning('Please select the roles for workflow steps!');\n return false;\n }\n\n if (this.dataModel.workflowInfo?.placeholderList?.filter(p => p.type == FilterType.ActionList &&\n (!p.parsedValue || p.parsedValue.findIndex(v => v.Text === null || v.Text === undefined || v.Text === '') > -1)).length > 0) {\n if (showErrorMessage)\n this.toastrService.warning('Please enter the action button titles for workflow steps!');\n return false;\n }\n\n if (this.dataModel.workflowInfo?.placeholderList?.filter(p => p.type == FilterType.ActionList &&\n (!p.parsedValue || p.parsedValue.findIndex(v => v.Key === 'ResetApproval' && (v.RoleList === null || v.RoleList === undefined || v.RoleList === '' || v.RoleList.length <= 0)) > -1)).length > 0) {\n if (showErrorMessage)\n this.toastrService.warning('Please select the role(s) for Reset Approval button!');\n return false;\n }\n\n return true;\n }\n\n getWorkflowTemplateModel(): CompanyWorkflowTemplateViewModel {\n this.dataModel.workflowInfo?.placeholderList?.filter(p => p.type == FilterType.ActionList).map(item => {\n let t = JSON.stringify(item.parsedValue);\n item.value = t;\n });\n\n let model: CompanyWorkflowTemplateViewModel = JSON.parse(JSON.stringify(this.dataModel));\n model.workflowInfo.startVariables = this.startVariables;\n model.companyId = this.companyId;\n return model;\n }\n\n saveWorkflowTemplate() {\n if (this.isValid()) {\n\n let model = this.getWorkflowTemplateModel();\n var subscription = this.companyWorkflowTemplateService.addCompanyWorkflowTemplate(model);\n this.inProgress = true;\n subscription\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res.success) {\n this.dataModel = {};\n this.dataModel.companyId = this.companyId;\n this.toastrService.success('Company workflow template created successfully!');\n this.closeModal();\n } else\n this.modalService.error(res.message);\n }, err => {\n this.modalService.error(err)\n })\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SupplierDocumentAccessMode } from '../enums/supplier-document-access-mode.enum';\n\n@Pipe({\n name: 'supplierDocumentAccessMode'\n})\nexport class SupplierDocumentAccessModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value == SupplierDocumentAccessMode.Anyone) return 'Anyone';\n if (value == SupplierDocumentAccessMode.HostOnly) return 'Hosts Only';\n if (value == SupplierDocumentAccessMode.Supplier) return 'Supplier';\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SupplierDocumentExpireDateMode } from '../enums/supplier-document-expire-date-mode.enum';\n\n@Pipe({\n name: 'supplierDocumentExpiryDateMode'\n})\nexport class SupplierDocumentExpiryDateModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value == SupplierDocumentExpireDateMode.Disable) return 'Disable';\n if (value == SupplierDocumentExpireDateMode.Mandatory) return 'Mandatory';\n if (value == SupplierDocumentExpireDateMode.Optional) return 'Optional';\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SupplierDocumentSignOffViewerComponent } from '../components/supplier-documents/supplier-document-sign-off-viewer/supplier-document-sign-off-viewer.component';\nimport { SignOffMode } from '../enums/signoff-mode.enum';\n\n@Pipe({\n name: 'supplierDocumentSignOffMode'\n})\nexport class SupplierDocumentSignOffModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value == SignOffMode.Disable) return 'Disable';\n if (value == SignOffMode.Mandatory) return 'Mandatory';\n if (value == SignOffMode.Optional) return 'Optional';\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SupplierDocumentCommentMode } from '../enums/supplier-document-comment-mode.enum';\n\n@Pipe({\n name: 'supplierDocumentCommentMode'\n})\nexport class SupplierDocumentCommentModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value == SupplierDocumentCommentMode.Disable) return 'Disable';\n if (value == SupplierDocumentCommentMode.Enable) return 'Enable';\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SupplierDocumentAmendmentMode } from '../enums/supplier-document-amendment-mode.enum';\n\n@Pipe({\n name: 'supplierDocumentAmendmentMode'\n})\nexport class SupplierDocumentAmendmentModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value == SupplierDocumentAmendmentMode.Disable) return 'Disable';\n if (value == SupplierDocumentAmendmentMode.Enable) return 'Enable';\n return value?.toString() ?? '?';\n }\n\n}\n","
      \n \n
      \n Add\n Edit\n Document Kind\n \n
      \n
      \n
      \n \n \n
      \n \n \n
      \n\n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n

      \n \n

      \n
      \n
      \n
      ","import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ToastrService } from 'ngx-toastr';\nimport { ExpiryMode } from 'src/app/enums/expiry-mode.enum';\nimport { SignOffMode } from 'src/app/enums/signoff-mode.enum';\nimport { SupplierDocumentAccessMode } from 'src/app/enums/supplier-document-access-mode.enum';\nimport { SupplierDocumentAmendmentMode } from 'src/app/enums/supplier-document-amendment-mode.enum';\nimport { SupplierDocumentCommentMode } from 'src/app/enums/supplier-document-comment-mode.enum';\nimport { SupplierDocumentExpireDateMode } from 'src/app/enums/supplier-document-expire-date-mode.enum';\nimport { WorkflowType } from 'src/app/enums/workflow/workflow-type';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { SupplierDocumentKindViewModel } from 'src/app/models/supplier-document/supplier-document-kind-viewmodel';\nimport { DocumentKindService } from 'src/app/services/document-kind.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-document-kind-add-edit',\n templateUrl: './document-kind-add-edit.component.html',\n styleUrls: ['./document-kind-add-edit.component.scss']\n})\nexport class DocumentKindAddEditComponent implements OnInit, AfterViewInit {\n @Input() documentKind: SupplierDocumentKindViewModel;\n @Output() onSaveDocumentKind = new EventEmitter()\n\n SupplierDocumentAccessMode = SupplierDocumentAccessMode;\n SupplierDocumentExpireDateMode = SupplierDocumentExpireDateMode;\n SignOffMode = SignOffMode\n SupplierDocumentCommentMode = SupplierDocumentCommentMode;\n SupplierDocumentAmendmentMode = SupplierDocumentAmendmentMode;\n\n @Input() companyId: number;\n inProgress: boolean = false;\n inEditProgress: boolean = false;\n selectedCompany: CompanyViewModel;\n WorkflowType = WorkflowType;\n expiryMode: SupplierDocumentExpireDateMode;\n\n editFormGroup: FormGroup;\n bsModalRef: BsModalRef;\n isGodUser: boolean;\n\n get isLockedDocumentKind() {\n return this.documentKind.companyId == null;\n }\n _workflowRenderer: any;\n @ViewChild('workflowRenderer') set workflowRenderer(v: any) {\n if (v)\n this._workflowRenderer = v;\n }\n\n constructor(\n private documentKindService: DocumentKindService,\n private fb: FormBuilder,\n private userService: UserService,\n private toastrService: ToastrService) { }\n\n ngOnInit(): void {\n this.isGodUser = this.userService.isGodUser();\n if (!this.documentKind)\n this.documentKind = { companyId: this.companyId } as SupplierDocumentKindViewModel;\n\n let kind = this.documentKind;\n this.editFormGroup = this.fb.group({\n id: new FormControl(kind?.id ?? 0),\n name: new FormControl(kind?.name ?? '', [Validators.required],),\n accessMode: new FormControl(kind?.accessMode ?? SupplierDocumentAccessMode.Supplier, [Validators.required]),\n companyId: new FormControl(kind.companyId),\n expireDateMode: new FormControl(kind?.expireDateMode ?? SupplierDocumentExpireDateMode.Optional, [Validators.required]),\n signOffMode: new FormControl(kind?.signOffMode ?? SignOffMode.Optional, [Validators.required]),\n commentMode: new FormControl(kind?.commentMode ?? SupplierDocumentCommentMode.Disable, [Validators.required]),\n amendmentMode: new FormControl(kind?.amendmentMode ?? SupplierDocumentAmendmentMode.Disable, [Validators.required]),\n isActive: new FormControl(kind?.isActive ?? true, [Validators.required]),\n order: new FormControl(kind?.order),\n });\n if (this.isLockedDocumentKind) {\n Object.keys(this.editFormGroup.controls).forEach(key => {\n let control = this.editFormGroup.get(key);\n if (control instanceof AbstractControl && ['isActive', 'order'].indexOf(key) < 0)\n control.disable();\n });\n }\n\n this.editFormGroup.controls['accessMode'].valueChanges.subscribe(_ => {\n if (this.editFormGroup.controls['accessMode'].value == SupplierDocumentAccessMode.HostOnly) {\n let signOffModeFormControl = this.editFormGroup.controls['signOffMode'];\n signOffModeFormControl.setValue(SignOffMode.Disable);\n }\n });\n this.editFormGroup.controls['expireDateMode'].valueChanges.subscribe(_ => {\n this.updateWorkflowExpiryMode();\n });\n this.editFormGroup.controls['name'].valueChanges.subscribe(_ => {\n this.updateWorkflowTitle();\n });\n this.editFormGroup.controls['isActive'].valueChanges.subscribe(isActive => {\n if (isActive)\n this.updateWorkflowTitle();\n });\n }\n\n ngAfterViewInit(): void {\n this.updateWorkflowTitle();\n this.updateWorkflowExpiryMode();\n }\n\n updateWorkflowTitle() {\n setTimeout(() => {\n this._workflowRenderer.customWorkflowTitle = this.editFormGroup.controls['name'].value;\n }, 50);\n }\n\n updateWorkflowExpiryMode() {\n this.expiryMode = this.editFormGroup.controls['expireDateMode'].value;\n }\n\n showSignOff() {\n return this.editFormGroup.controls['accessMode'].value != SupplierDocumentAccessMode.HostOnly;\n }\n\n get showWorkflowSection() {\n return this.editFormGroup.get('isActive').value;\n }\n get formIsValid() {\n return (this.isLockedDocumentKind || this.editFormGroup.valid) &&\n (!this.showWorkflowSection || !this._workflowRenderer || this._workflowRenderer.isValid(false));\n }\n\n get getDocumentKind() {\n var model = {\n id: this.editFormGroup.get('id').value,\n name: this.editFormGroup.get('name').value,\n accessMode: this.editFormGroup.get('accessMode').value,\n companyId: this.editFormGroup.get('companyId').value,\n expireDateMode: this.editFormGroup.get('expireDateMode').value,\n signOffMode: this.editFormGroup.get('signOffMode').value,\n commentMode: this.editFormGroup.get('commentMode').value,\n amendmentMode: this.editFormGroup.get('amendmentMode').value,\n isActive: this.editFormGroup.get('isActive').value,\n order: this.editFormGroup.get('order').value,\n } as SupplierDocumentKindViewModel;\n return model;\n }\n onSave() {\n let model = this.getDocumentKind;\n let isActive = this.editFormGroup.get('isActive').value;\n let workflowModel = isActive ? this._workflowRenderer.getWorkflowTemplateModel() : null;\n model.workflowSpecification = workflowModel;\n\n this.inEditProgress = true;\n this.documentKindService.addUpdateDocumentKind(model).subscribe({\n next: (res) => {\n this.toastrService.success('Document kind saved successfully');\n this.onClosePopup();\n },\n error: (err) => {\n this.toastrService.error(err ?? 'Error while saving document kind!');\n this.inEditProgress = false;\n },\n complete: () => {\n this.inEditProgress = false;\n }\n });\n }\n\n onClosePopup() {\n this.onSaveDocumentKind?.emit();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'yesNo'\n})\nexport class YesNoPipe implements PipeTransform {\n\n transform(value: unknown): string {\n return value ? 'Yes' : 'No';\n }\n\n}\n","
      \n
      \n
      Add/Edit Document Kinds
      \n
      \n
      \n \n
      \n
      \n

      \n \n

      \n
      \n
      \n

      \n Loading ...\n

      \n

      \n Nothing Found\n

      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      TitleAccess ModeExpiry Date ModeSignOff ModeComment ModeAmendment ModeIs ActiveOrder
      \n {{kind.name}}\n \n \n {{kind.accessMode | supplierDocumentAccessMode}}{{kind.expireDateMode | supplierDocumentExpiryDateMode}}{{kind.signOffMode | supplierDocumentSignOffMode}}{{kind.commentMode | supplierDocumentCommentMode}}{{kind.amendmentMode | supplierDocumentAmendmentMode}}{{kind.isActive | yesNo}}{{kind.order}}
      \n
      \n
      \n
      \n
      \n\n \n","import { Component, Input, OnInit } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { SupplierDocumentKindViewModel } from 'src/app/models/supplier-document/supplier-document-kind-viewmodel';\nimport { CompanyAuthService } from 'src/app/services/company-auth.service';\nimport { DocumentKindService } from 'src/app/services/document-kind.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-document-kind-manager',\n templateUrl: './document-kind-manager.component.html',\n styleUrls: ['./document-kind-manager.component.scss']\n})\nexport class DocumentKindManagerComponent implements OnInit {\n\n @Input() isCurrentCompanyManagement = false;\n\n inProgress: boolean = false;\n selectedCompany: CompanyViewModel;\n initialCompanyId: number;\n kindList: SupplierDocumentKindViewModel[];\n bsModalRef: BsModalRef;\n selectedKind: SupplierDocumentKindViewModel;\n isGodUserMode: boolean;\n\n\n constructor(\n private documentKindService: DocumentKindService,\n private bsModalService: BsModalService,\n private layoutService: LayoutService,\n private companyAuthService: CompanyAuthService,\n private userService: UserService,\n ) { }\n\n ngOnInit(): void {\n this.isGodUserMode = this.userService.isGodUser();\n this.layoutService.header = \"Manage Document Kinds\";\n this.initialCompanyId = this.companyAuthService.getCompanyId();\n this.loadKindList();\n }\n\n get selectedCompanyId() {\n return this.isCurrentCompanyManagement ? this.initialCompanyId : (this.selectedCompany?.id ?? this.initialCompanyId);\n }\n\n get showNewKindButton() {\n return this.selectedCompanyId && this.isGodUserMode;\n }\n\n loadKindList() {\n this.kindList = [];\n\n if (this.selectedCompanyId) {\n this.inProgress = true;\n this.documentKindService.documentKindToManage(this.selectedCompanyId)\n .subscribe({\n next: (res) => {\n this.kindList = res;\n },\n error: (err) => {\n this.inProgress = false;\n },\n complete: () => {\n this.inProgress = false;\n }\n });\n }\n }\n\n\n onShowEditModal(template: any, kind?: SupplierDocumentKindViewModel) {\n this.selectedKind = kind;\n var config = {\n class: \"modal-lg\"\n };\n\n this.bsModalRef = this.bsModalService.show(template, config);\n }\n\n onSaveDocumentKind() {\n this.loadKindList();\n this.bsModalRef.hide();\n }\n\n}\n","\n \n \n \n \n \n \n \n","import { Component, OnInit } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { SiteSupplierDocumentTypeViewModel } from 'src/app/models/supplier-document/site-supplier-document-type-models';\nimport { BasicSiteSupplierViewModel } from 'src/app/models/supplier-document/site-supplier-models';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'app-manage-supplier-documents',\n templateUrl: './manage-supplier-documents.component.html',\n styleUrls: ['./manage-supplier-documents.component.scss']\n})\nexport class ManageSupplierDocumentsComponent implements OnInit {\n siteSupplierDocumentTypes = new BehaviorSubject([]);\n siteSuppliers = new BehaviorSubject([]);\n selectedsiteSupplierDocumentType = null;\n selectedsiteSupplierId: number = null;\n constructor(private userService: UserService) { }\n\n ngOnInit() {\n }\n\n showDocumentKindTab(): boolean {\n return this.userService.isGodUser();\n }\n}\n","
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n\n
      \n
      \n
      \n\n 0\">\n
      \n \n \n
      \n\n\n
      \n
      \n There are currently not documents specified for {{userService.currentCompany?.title}}.\n
      \n Select a document type from the drop down and click the + to add it to the options for site\n visitors.\n
      \n
      \n\n
      \n
      \n
      \n\n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from \"@angular/forms\";\nimport { finalize } from \"rxjs/internal/operators/finalize\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { UserDocumentTypeService } from \"../../../services/user-document-type.service\";\nimport { UserDocumentType } from \"../../../models/user-document-type\";\nimport { AddCompanyDocumentTypeModel } from \"../../../models/company-document-type-model\";\nimport { CompanyDocumentTypeService } from \"../../../services/company-document-type.service\";\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-company-document-type',\n templateUrl: './company-document-type.component.html',\n styleUrls: ['./company-document-type.component.scss']\n})\nexport class CompanyDocumentTypeComponent implements OnInit {\n\n companyDocumentTypes: UserDocumentType[] = [];\n documentFormControl = new FormControl();\n selectedDocumentType: number;\n backupDocumentTypes: UserDocumentType[] = [];\n inProgress: boolean = false;\n\n constructor(private companyDocumentTypeService: CompanyDocumentTypeService,\n private modalService: ModalService,\n private userDocumentTypeService: UserDocumentTypeService,\n public userService: UserService) { }\n\n deleteDocTypeSub;\n ngOnInit(): void {\n this.deleteDocTypeSub = this.userDocumentTypeService.deleteDocumentTypeReplay.asObservable().subscribe((res: UserDocumentType) => {\n if (res && this.companyDocumentTypes?.length > 0) {\n this.removeCompanyDocumentType(res.id);\n }\n });\n this.fetchCompanyDocumentTypes();\n }\n ngOnDestroy() {\n this.deleteDocTypeSub.next();\n this.deleteDocTypeSub.unsubscribe();\n }\n\n onSelectedDocumentType(event) {\n this.selectedDocumentType = event.id;\n }\n\n ignoreDocumentTypeIds: number[] = [];\n fetchCompanyDocumentTypes() {\n this.inProgress = true;\n this.companyDocumentTypeService.list()\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(result => {\n this.companyDocumentTypes = result;\n this.companyDocumentTypes.sort(function(a, b) {\n let keyA = new Date(a.order),\n keyB = new Date(b.order);\n if (keyA < keyB) return -1;\n if (keyA > keyB) return 1;\n return 0;\n });\n this.ignoreDocumentTypeIds = result?.filter((item) => item.isAvailable)?.map((item) => item.id);\n });\n }\n\n addCompanyDocumentType() {\n if (!this.selectedDocumentType)\n return;\n\n this.inProgress = true;\n let model: AddCompanyDocumentTypeModel = { documentTypeId: this.selectedDocumentType };\n this.companyDocumentTypeService.add(model)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(_ => {\n this.fetchCompanyDocumentTypes();\n });\n }\n\n removeCompanyDocumentType(documentTypeId: number) {\n this.modalService.confirm('Are you sure?', 'delete document type').subscribe(iamsure => {\n if (iamsure === true) {\n this.inProgress = true;\n this.companyDocumentTypeService.remove(documentTypeId)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(_ => {\n this.fetchCompanyDocumentTypes();\n });\n }\n });\n }\n}\n","export enum PermitOpenPolicy {\n NoRestricted = 0,\n RestrictedToScheduled = 1,\n RestrictedToOnlyScheduledDay = 2\n}","export enum PermitStartDatePolicyEnum {\n AfterTheApplicationDate = 0\n}\n","\nexport enum MessageType {\n Email = 0,\n PushNotification = 5,\n SMS = 10,\n}\n\nexport interface CompanyEvacuationSettings {\n evacuationDefaultSMSMessage: string;\n evacuationDefaultNotificationMessage: string;\n evacuationIsByDefaultOn: boolean;\n evacuationMessageType?: MessageType | null;\n}\n\nexport const emptyCompanyEvacuationSettings: CompanyEvacuationSettings = {\n evacuationDefaultSMSMessage: 'ca',\n evacuationDefaultNotificationMessage: 'ca',\n evacuationIsByDefaultOn: false,\n evacuationMessageType: null,\n};\n\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { convertObjectToUrlParameters } from '../helpers/extract-params-from-model';\nimport { EvacuationItemViewModel, EvacuationLogViewModel, EvacuationReportQueryModel, EvacuationRepotViewModel } from '../models/evacuation/evacuation-viewmodels';\nimport { ErrorService } from './error.service';\nimport {CsvReportRequestModel} from \"../models/csv-report-request-model\";\nimport { CompanyEvacuationSettings } from '../components/evacuation-setting-editor/evacuation-setting-models/CompanyEvacuationSettings';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EvacuationService {\n\n apiUrl: string = \"/api/evacuation\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n getEvacuations(model: EvacuationReportQueryModel): Observable {\n return this.http.post(`${this.apiUrl}/list`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getEvacuation(evacuationId: number): Observable {\n return this.http.get(`${this.apiUrl}/get/${evacuationId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getEvacuationLogs(evacuationId: number): Observable {\n return this.http.get(`${this.apiUrl}/${evacuationId}/logs`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n exportEvacuations(model: CsvReportRequestModel) {\n const params = convertObjectToUrlParameters(model.requestParams);\n return this.http.post(`${this.apiUrl}/evacuations-report-csv-as-job?${params}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getSettings(): Observable {\n return this.http.get(`${this.apiUrl}/settings`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateSettings(settings: CompanyEvacuationSettings): Observable {\n return this.http.put(`${this.apiUrl}/settings`, settings)\n .pipe(catchError(this._errorService.handleError));\n }\n\n exportEvacuationPeople(evacuationId: number) {\n return window.open(`/api/Evacuation/evacuation-people-report-csv/${evacuationId}`);\n }\n\n exportEvacuationPdf(evacuationId: number) {\n return window.open(`/api/Evacuation/export-pdf/${evacuationId}`);\n }\n}\n","
      \n \n
      \n
      Evacuation Setting
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { EvacuationContentEditorType } from 'src/app/enums/supplier-document-editor-type';\nimport { constructFormGroup } from 'src/app/extensions/form.helper';\nimport { CompanyEvacuationSettings, emptyCompanyEvacuationSettings, MessageType } from './evacuation-setting-models/CompanyEvacuationSettings';\nimport { EvacuationService } from 'src/app/services/evacuation.service';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({\n selector: 'obc-evacuation-setting-editor',\n templateUrl: './evacuation-setting-editor.component.html',\n styleUrls: ['./evacuation-setting-editor.component.scss']\n})\nexport class EvacuationSettingEditorComponent implements OnInit {\n\n EvacuationSettingFormControl: FormGroup;\n evacuationSetting: CompanyEvacuationSettings;\n MessageType = MessageType;\n isLoading = true;\n\n constructor(\n private evacuationService: EvacuationService,\n private toastrService: ToastrService,\n ) {\n \n }\n\n EvacuationContentEditorType = EvacuationContentEditorType;\n\n private loadEvacuationSettings(): void {\n this.isLoading = true;\n this.evacuationService.getSettings().subscribe(\n settings => {\n this.EvacuationSettingFormControl.patchValue(settings);\n this.evacuationSetting = this.EvacuationSettingFormControl.value;\n this.isLoading = false;\n });\n }\n\n\n ngOnInit(): void {\n this.EvacuationSettingFormControl = constructFormGroup(emptyCompanyEvacuationSettings);\n this.loadEvacuationSettings();\n }\n updateEvacuation(){\n this.isLoading = true;\n const updatedSettings: CompanyEvacuationSettings = this.EvacuationSettingFormControl.value;\n\n this.evacuationService.updateSettings(updatedSettings).subscribe({\n next: () => {\n this.isLoading = false;\n this.toastrService.success('Saved Successfully');\n this.evacuationSetting = updatedSettings;\n }\n });\n }\n\n}\n","import { FormGroup, FormControl, Validators } from '@angular/forms';\n\nexport function constructFormGroup(model: T): FormGroup {\n const group: { [key: string]: FormControl } = {};\n\n Object.keys(model).forEach((key) => {\n const value = model[key as keyof T];\n\n // Example logic: Add custom validators or initial values based on key\n switch (key) {\n case 'id':\n group[key] = new FormControl(value ?? null, []);\n break;\n case 'name':\n group[key] = new FormControl(value ?? null, [Validators.required]);\n break;\n case 'email':\n group[key] = new FormControl(value ?? null, [Validators.email]);\n break;\n default:\n group[key] = new FormControl(value ?? null, []); // Default case for unspecified fields\n break;\n }\n });\n\n return new FormGroup(group);\n}","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AccessControlWhiteListUserModel, AccessControlWhiteListUserViewModel } from '../models/access-control/access-control-white-list-user-model';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AccessControlService {\n\n apiUrl: string = \"/api/AccessControlManager\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n getWhiteListUsers(): Observable {\n return this.http.get(`${this.apiUrl}/get-white-list-users`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n addNewWhiteListUser(newRecord: AccessControlWhiteListUserModel) {\n return this.http.post(`${this.apiUrl}/add-white-list-user`, newRecord)\n .pipe(catchError(this._errorService.handleError));\n }\n\n removeNewWhiteListUser(whiteUserId: number) {\n return this.http.post(`${this.apiUrl}/remove-white-list-user/${whiteUserId}`, {})\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","
      \n
      \n
      \n
      \n White List Users\n
      \n
      \n\n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n\n
      \n
      \n
      \n \n \n \n \n \n \n \n \n 0\">\n \n \n \n \n \n \n \n \n \n \n \n
      \n User\n Site
      \n {{ userInfo.userFullName }}\n \n All Sites\n {{userInfo.siteName }}\n \n \n
      \n
      \n There are not any white list user.\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { AccessControlWhiteListUserModel, AccessControlWhiteListUserViewModel } from 'src/app/models/access-control/access-control-white-list-user-model';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { AccessControlService } from 'src/app/services/access-control.service';\nimport { ToastrService } from 'ngx-toastr';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-access-control-white-list-users',\n templateUrl: './access-control-white-list-users.component.html',\n styleUrls: ['./access-control-white-list-users.component.scss']\n})\nexport class AccessControlWhiteListUsersComponent implements OnInit {\n inProgress: boolean = false;\n newRecord: AccessControlWhiteListUserModel = {};\n whiteListUsers: AccessControlWhiteListUserViewModel[];\n\n\n constructor(private accessControlService: AccessControlService,\n private toastr: ToastrService,\n private modelService: ModalService) { }\n\n ngOnInit(): void {\n this.loadWhiteListUsers();\n }\n\n loadWhiteListUsers() {\n this.inProgress = true;\n this.accessControlService.getWhiteListUsers()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => this.whiteListUsers = res);\n }\n\n onSelectUser(user: UserBasicInfoViewModel) {\n this.newRecord.userId = user?.id;\n }\n\n onSiteIdSelect(siteId: number) {\n this.newRecord.siteId = siteId;\n }\n\n addNewWhiteListUser() {\n if (this.newRecord?.userId == null) {\n this.toastr.error('Please select user!');\n return;\n }\n this.inProgress = true;\n this.accessControlService.addNewWhiteListUser(this.newRecord)\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.newRecord = {};\n this.loadWhiteListUsers();\n });\n }\n\n removeWhiteListUser(id: number) {\n this.modelService.confirm('Are you sure you want to remove this record?')\n .subscribe(res => {\n if (res == true) {\n this.inProgress = true;\n this.accessControlService.removeNewWhiteListUser(id)\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.loadWhiteListUsers();\n });\n }\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {PermitStartDatePolicyEnum} from \"../enums/permit-start-date-policy.enum\";\n\n@Pipe({\n name: 'permitStartDatePolicy'\n})\nexport class PermitStartDatePolicyPipe implements PipeTransform {\n\n transform(value: unknown): any {\n if (value === null) { return \"Any start date\"; }\n if (value === PermitStartDatePolicyEnum.AfterTheApplicationDate) { return \"After the application date\"; }\n return value;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PermitOpenPolicy } from '../enums/permit-open-policy.enum';\n\n@Pipe({\n name: 'permitOpenPolicy'\n})\nexport class PermitOpenPolicyPipe implements PipeTransform {\n\n\n transform(value: unknown): any {\n if (value === PermitOpenPolicy.NoRestricted) { return \"Not Restricted\"; }\n if (value === PermitOpenPolicy.RestrictedToScheduled) { return \"Restricted to schedule\"; }\n if (value === PermitOpenPolicy.RestrictedToOnlyScheduledDay) { return \"Restricted To Only Schedule Day\"; }\n return value;\n }\n\n}\n","\n \n
      \n \n \n
      \n \n
      \n \n
      \n \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n

      \n \n

      \n
      \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n day{{InductionsAndCheckInFormGroup.controls.minRequiredExpiryForDocuments.value ?\n InductionsAndCheckInFormGroup.controls.minRequiredExpiryForDocuments.value > 1 ? 's' : '' : ''\n }}\n
      \n
      \n
      \n \n \n \n
      \n
      \n

      Contact Information

      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n

      \n \n

      \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n \n \n
      \n
      \n

      \n \n

      \n
      \n
      \n
      \n \n
      \n \n \n
      \n \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n \n \n
      \n
      \n

      \n \n

      \n
      \n
      \n
      \n\n
      ","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { LocationOverrideMode } from 'src/app/enums/location-override-mode-enum';\nimport { PermitOpenPolicy } from 'src/app/enums/permit-open-policy.enum';\nimport { PermitStartDatePolicyEnum } from 'src/app/enums/permit-start-date-policy.enum';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { e168ValidatorNullableCompanyPhoneNumber } from 'src/app/helpers/mobile-format-validator';\nimport { CompanyInductionsAndCheckInConfigurationViewModel, CompanyKioskModeConfigurationViewModel, CompanyPermitConfigurationViewModel, CompanyReportsConfigurationViewModel } from 'src/app/models/company-feature-configuration-viewmodel';\nimport { CompanySiteContactInformationModel } from 'src/app/models/company-site-contact-information.view.model';\nimport { CompanyService } from 'src/app/services/company.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-company-Feature-Configuration',\n templateUrl: './company-Feature-Configuration.component.html',\n styleUrls: ['./company-Feature-Configuration.component.scss']\n})\nexport class CompanyFeatureConfigurationComponent implements OnInit {\n\n permitFormGroup: FormGroup = new FormGroup({\n permitOpenPolicy: new FormControl([Validators.required]),\n permitStartDateOffsetInDays: new FormControl(),\n });\n\n InductionsAndCheckInFormGroup: FormGroup = new FormGroup({\n minRequiredExpiryForDocuments: new FormControl(1),\n visitorCanDisputeCheckIns: new FormControl(),\n contactTitle: new FormControl(),\n contactFullName: new FormControl(),\n contactNumber: new FormControl(),\n });\n\n KioskModeFormGroup: FormGroup = new FormGroup({\n disableLocationRequirementForKioskMode: new FormControl(0),\n });\n\n ReportsFormGroup: FormGroup = new FormGroup({\n enableReportsOnMobileApp: new FormControl(),\n });\n\n ProductPlanFeature = ProductPlanFeature;\n PermitOpenPolicy = PermitOpenPolicy;\n PermitStartDatePolicyEnum = PermitStartDatePolicyEnum;\n\n lastMinExpiry: any;\n\n constructor(private companyService: CompanyService,\n public userService: UserService,\n private modalService: ModalService) {\n this.lastMinExpiry = 1;\n }\n\n ngOnInit(): void {\n this.getCompanyPermitConfiguration();\n this.getCompanyInductionsAndCheckinConfiguration();\n this.getCompanyReportsConfiguration();\n this.getCompanyKioskModeConfiguration();\n }\n\n getCompanyPermitConfiguration() {\n this.companyService.getCompanyPermitConfiguration().subscribe(res => {\n this.permitFormGroup.get('permitOpenPolicy')?.setValue(res.permitOpenPolicy);\n this.permitFormGroup.get('permitStartDateOffsetInDays')?.setValue(res.permitStartDateOffsetInDays);\n }, err => {\n this.modalService.error(err);\n });\n }\n\n onSaveCompanyPermitConfiguration() {\n let model = {\n permitOpenPolicy: this.permitFormGroup.get(\"permitOpenPolicy\").value,\n permitStartDateOffsetInDays: this.permitFormGroup.get(\"permitStartDateOffsetInDays\").value,\n } as CompanyPermitConfigurationViewModel;\n\n this.companyService.updateCompanyPermitConfiguration(model).subscribe(_ => {\n this.modalService.success(\"Company Permit Configuration updated successfully\");\n }, err => {\n this.modalService.error(\"Error in update company permit configuration\");\n });\n }\n\n minRequiredExpiryForDocumentsFocusout(event: any): void {\n const value = event.target.value;\n if (value === '' || value < 1) {\n this.InductionsAndCheckInFormGroup.controls['minRequiredExpiryForDocuments'].setValue(this.lastMinExpiry);\n }\n else{\n this.lastMinExpiry = value;\n }\n }\n\n getCompanyInductionsAndCheckinConfiguration() {\n this.companyService.getCompanyInductionsAndCheckInConfiguration().subscribe(res => {\n let contactInformation: CompanySiteContactInformationModel;\n if (res.contactInformationAsJson) {\n try {\n contactInformation = JSON.parse(res.contactInformationAsJson) as CompanySiteContactInformationModel;\n } catch (e) { }\n }\n\n this.InductionsAndCheckInFormGroup = new FormGroup({\n minRequiredExpiryForDocuments: new FormControl(res.minRequiredExpiryForDocuments ?? this.lastMinExpiry),\n visitorCanDisputeCheckIns: new FormControl(res.visitorCanDisputeCheckIns),\n contactTitle: new FormControl(contactInformation?.contactTitle),\n contactFullName: new FormControl(contactInformation?.contactFullName),\n contactNumber: new FormControl(contactInformation?.contactNumber, [e168ValidatorNullableCompanyPhoneNumber]),\n });\n }, err => {\n this.modalService.error(err);\n });\n }\n\n onSaveInductionsAndCheckInConfiguration() {\n let companyContactInformationAsJson;\n if (this.InductionsAndCheckInFormGroup.get(\"contactTitle\").value ||\n this.InductionsAndCheckInFormGroup.get(\"contactFullName\").value ||\n this.InductionsAndCheckInFormGroup.get(\"contactNumber\").value\n ) {\n companyContactInformationAsJson = JSON.stringify({\n contactTitle: this.InductionsAndCheckInFormGroup.get(\"contactTitle\").value,\n contactFullName: this.InductionsAndCheckInFormGroup.get(\"contactFullName\").value,\n contactNumber: this.InductionsAndCheckInFormGroup.get(\"contactNumber\").value,\n } as CompanySiteContactInformationModel)\n }\n\n let model = {\n minRequiredExpiryForDocuments: this.InductionsAndCheckInFormGroup.get(\"minRequiredExpiryForDocuments\").value,\n visitorCanDisputeCheckIns: this.InductionsAndCheckInFormGroup.get(\"visitorCanDisputeCheckIns\").value as boolean,\n contactInformationAsJson: companyContactInformationAsJson,\n } as CompanyInductionsAndCheckInConfigurationViewModel;\n\n this.companyService.updateCompanyInductionsAndCheckInConfiguration(model).subscribe(_ => {\n this.modalService.success(\"Company Inductions And Checkin Configuration updated successfully\");\n }, err => {\n this.modalService.error(\"Error in update company inductions and checkin configuration\");\n });\n }\n\n getCompanyReportsConfiguration() {\n this.companyService.getCompanyReportsConfiguration().subscribe(res => {\n this.ReportsFormGroup.get('enableReportsOnMobileApp')?.setValue(res.enableReportsOnMobileApp);\n }, err => {\n this.modalService.error(err);\n });\n }\n\n onSaveReportsConfiguration() {\n let model = {\n enableReportsOnMobileApp: this.ReportsFormGroup.get(\"enableReportsOnMobileApp\").value as boolean,\n } as CompanyReportsConfigurationViewModel;\n\n this.companyService.updateCompanyReportsConfiguration(model).subscribe(_ => {\n this.modalService.success(\"Company Reports Configuration updated successfully\");\n }, err => {\n this.modalService.error(\"Error in update company reports configuration\");\n });\n }\n\n getCompanyKioskModeConfiguration() {\n this.companyService.getCompanyKioskModeConfiguration().subscribe(res => {\n this.KioskModeFormGroup.get('disableLocationRequirementForKioskMode')?.setValue(res.disableLocationRequirementForKioskMode);\n }, err => {\n this.modalService.error(err);\n });\n }\n\n onSaveKioskModeConfiguration() {\n let saveValue = LocationOverrideMode.Disabled;\n let formValue = this.KioskModeFormGroup.get('disableLocationRequirementForKioskMode')?.value;\n\n saveValue = (formValue == null || formValue == false || formValue == 0) ? LocationOverrideMode.Disabled :\n ((formValue == true || formValue == 1) ? LocationOverrideMode.OverrideNonDisableModesToOptional :\n LocationOverrideMode.Disabled);\n\n let model = {\n disableLocationRequirementForKioskMode: saveValue ?? LocationOverrideMode.Disabled,\n } as CompanyKioskModeConfigurationViewModel;\n\n this.companyService.updateCompanyKioskModeConfiguration(model).subscribe(_ => {\n this.modalService.success(\"Company Kiosk Mode Configuration updated successfully\");\n }, err => {\n this.modalService.error(\"Error in update company kiosk mode configuration\");\n });\n }\n}\n","import { SiteUserUpdateRequest, SiteUserViewModel } from './../models/company-user-view-model';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteUserService {\n apiUrl = '/api/SiteUser';\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getSiteUsers(siteId: number): Observable {\n return this._http.get(`${this.apiUrl}/get-site-users?siteId=${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n getAllPermissions = (): Observable =>\n this._http.get(`${this.apiUrl}/get-all-permissions`)\n .pipe(catchError(this._errorService.handleError));\n\n addSiteUser(siteId: number, model: SiteUserViewModel): Observable {\n return this._http.post(`${this.apiUrl}/add-site-user?siteId=${siteId}`, model)\n }\n\n removeSiteUser(siteUserId: number, siteId: number): Observable {\n return this._http.delete(`${this.apiUrl}/${siteUserId}`);\n }\n\n updateSiteUser(siteUserId: number, model: SiteUserUpdateRequest): Observable {\n return this._http.post(`${this.apiUrl}/update-site-user?siteUserId=${siteUserId}`, model);\n }\n\n ImportUsers(siteId: number, formData: any): Observable {\n return this._http.post(`/api/SiteUser/import-users/${siteId}`, formData,\n { reportProgress: false, observe: 'events', headers: { \"do-not-modify-content-type\": \"\" } })\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PermissionModeEnum } from \"../enums/permission-mode.enum\";\n\n@Pipe({\n name: 'permissionMode'\n})\nexport class PermissionModePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): unknown {\n if (value === PermissionModeEnum.Permission) { return \"Individual User Permissions Only\"; }\n if (value === PermissionModeEnum.Role) { return \"Roles Only\"; }\n if (value === PermissionModeEnum.Mixed) { return \"Mixed (Roles and Individual User Permissions)\"; }\n return value;\n }\n\n}\n","export enum ImportSource {\n Procore = 0,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ImportSource } from '../enums/import-source.enum';\n\n@Pipe({\n name: 'importSource'\n})\nexport class ImportSourcePipe implements PipeTransform {\n transform(source: ImportSource | null): String{\n switch (source) {\n case ImportSource.Procore:\n return 'Procore';\n default:\n return '1Breadcrumb';\n }\n }\n}\n","
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n {{form.controls.permissionMode.value == PermissionModeEnum.Permission ? \"Roles will be disabled\" :\n (form.controls.permissionMode.value == PermissionModeEnum.Role?\"Permissions assigned directly to users will be revoked.\":\"\")}}\n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      NamePermissionsActions
      \n
      \n \n \n \n
      \n
      \n {{role.name}}\n \n {{ role.importSource | importSource }} Imported\n
      \n
      \n \n
      \n
      {{label}}
      \n
      \n
      \n Full Access\n {{getPermissionCount(role)}}\n \n No\n Permission\n
      \n \n \n \n \n
      \n
      \n There are no roles defined for this company\n
      \n
      \n
      \n\n\n
      \n
      \n
      \n
      \n
      \n Role Permissions\n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      Company Permissions
      \n (Reset)\n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      Site Permissions
      \n (Reset)\n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n Full Access is enabled and all permissions are assigned\n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { PermissionModeEnum } from \"../../../enums/permission-mode.enum\";\nimport { FormBuilder, FormControl, Validators } from \"@angular/forms\";\nimport { CompanyRoleService } from \"../../../services/company-role.service\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { CompanyRoleViewModel } from \"../../../models/company-role.view.model\";\nimport { UserPermission } from \"../../../enums/user-permission.enum\";\nimport { ImportSource } from \"../../../enums/import-source.enum\";\nimport { CheckListItemViewModel } from \"../../../custom-controls/check-list-form-control/check-list-item\";\nimport { SiteUserService } from \"../../../services/site-user.service\";\nimport { BsModalService } from \"ngx-bootstrap/modal\";\nimport { forkJoin } from \"rxjs\";\nimport { CompanyUserService } from \"../../../services/company-user.service\";\nimport { combinePermissions } from \"../../../helpers/permission-helper\";\nimport { UserService } from \"../../../services/user.service\";\nimport { LayoutService } from \"../../../services/layout.service\";\n\n@Component({\n selector: 'obc-permissions-settings',\n templateUrl: './permissions-settings.component.html',\n styleUrls: ['./permissions-settings.component.scss']\n})\nexport class PermissionsSettingsComponent implements OnInit {\n\n inProgress: boolean = false;\n PermissionModeEnum = PermissionModeEnum;\n UserPermissions = UserPermission;\n companyPermissionMode: PermissionModeEnum;\n companyRoles: CompanyRoleViewModel[] = [];\n selectedRoleToUpdateName: CompanyRoleViewModel;\n selectedRoleToUpdatePermissions: CompanyRoleViewModel;\n selectedCompanyRoleName: string;\n bsModalRef: any;\n siteUserPermissions: CheckListItemViewModel[] = [];\n companyUserPermissions: CheckListItemViewModel[] = [];\n isTemplateCompany: boolean = false;\n\n form = this.formBuilder.group({\n permissionMode: new FormControl(PermissionModeEnum.Mixed, [Validators.required]),\n })\n\n roleDefinitionForm = this.formBuilder.group({\n roleName: new FormControl(null, [Validators.required]),\n })\n\n rolePermissionsForm = this.formBuilder.group({\n roleId: new FormControl([Validators.required]),\n fullAccess: new FormControl(false, [Validators.required]),\n sitePermissions: new FormControl([], [Validators.required]),\n companyPermissions: new FormControl([], [Validators.required]),\n })\n\n constructor(\n private formBuilder: FormBuilder,\n public companyRoleService: CompanyRoleService,\n public modalService: ModalService,\n public siteUserService: SiteUserService,\n private bsModalService: BsModalService,\n public companyUserService: CompanyUserService,\n public userService: UserService,\n private layoutService: LayoutService,\n ) {\n }\n\n ngOnInit(): void {\n\n this.isTemplateCompany = this.userService.currentCompany.isTemplate ?? false;\n if (this.isTemplateCompany)\n this.layoutService.header = \"Roles and Permissions\";\n\n this.companyRoleService.getCompanyPermissionMode().subscribe(res => {\n this.form.controls.permissionMode.setValue(res);\n });\n\n const companyRoles = this.companyRoleService.getCompanyRoles();\n const companyPermissions = this.companyUserService.getPermissions();\n const sitePermissions = this.siteUserService.getAllPermissions();\n\n this.inProgress = true;\n forkJoin({\n roles: companyRoles,\n companyPermissions: companyPermissions,\n sitePermissions: sitePermissions\n })\n .subscribe({\n next: (ret) => {\n this.companyRoles = ret[\"roles\"];\n this.prepareSitePermissions({ ...ret['sitePermissions'] });\n this.prepareCompanyPermissions(\n { ...ret['companyPermissions'] },\n ret['sitePermissions'],\n );\n },\n error: (_) => {\n this.inProgress = false;\n },\n complete: () => {\n this.inProgress = false;\n }\n });\n }\n\n prepareCompanyPermissions(companyPermissions, sitePermissions) {\n let companyKeys = Object.keys(companyPermissions);\n let siteKeys = Object.keys(sitePermissions);\n this.companyUserPermissions = companyKeys.filter((companyKey) => {\n return !siteKeys.find((siteKey) => siteKey == companyKey);\n }).map(up => {\n return {\n value: false,\n key: +up,\n label: companyPermissions[up],\n validators: [],\n } as CheckListItemViewModel;\n });\n }\n\n prepareSitePermissions(permissions) {\n let keys = Object.keys(permissions);\n this.siteUserPermissions = keys.map(up => {\n return {\n value: false,\n key: +up,\n label: permissions[up],\n validators: [],\n } as CheckListItemViewModel;\n });\n }\n\n reset() {\n this.selectedCompanyRoleName = undefined;\n this.selectedRoleToUpdateName = undefined;\n this.selectedRoleToUpdatePermissions = undefined;\n this.roleDefinitionForm.reset();\n this.rolePermissionsForm.controls.roleId.setValue(null);\n this.rolePermissionsForm.controls.fullAccess.setValue(false);\n this.resetCompanyPermissions();\n this.resetSitePermissions();\n }\n close() {\n this.bsModalService?.hide();\n }\n\n submitPermissionMode() {\n if (this.form.controls.permissionMode.value == PermissionModeEnum.Role && (this.companyRoles == null || this.companyRoles.length == 0))\n this.modalService.error(\"You need to create roles in the 'Role Definition' tab to use this setting\");\n else {\n this.inProgress = true;\n this.companyRoleService.setCompanyRoles({\n permissionMode: this.form.controls.permissionMode.value,\n }).subscribe({\n next: res => {\n this.companyPermissionMode = res;\n this.modalService.success('Permission mode updated successfully');\n },\n error: (err) => {\n this.modalService.error(err);\n this.inProgress = false;\n },\n complete: () => {\n this.inProgress = false;\n }\n });\n }\n }\n\n upsertCompanyRole(isUpdate: boolean = false) {\n this.inProgress = true;\n (!isUpdate ?\n this.companyRoleService.addCompanyRole({\n roleName: this.roleDefinitionForm.controls.roleName.value,\n })\n :\n this.companyRoleService.updateCompanyRole({\n roleId: this.selectedRoleToUpdateName.companyRoleId,\n roleName: this.selectedCompanyRoleName,\n }))\n .subscribe({\n next: (_) => {\n if (this.selectedRoleToUpdateName)\n this.modalService.success('The role updated successfully');\n else\n this.modalService.success('The new role submitted');\n this.reset();\n this.getCompanyRoles();\n },\n error: (err) => {\n this.modalService.error(err);\n this.inProgress = false;\n },\n complete: () => {\n this.inProgress = false;\n }\n });\n }\n\n getCompanyRoles() {\n this.inProgress = true;\n this.companyRoleService.getCompanyRoles()\n .subscribe({\n next: (res) => {\n this.companyRoles = res;\n this.inProgress = false;\n },\n error: (err) => {\n this.modalService.error(err);\n this.inProgress = false;\n },\n complete: () => {\n this.inProgress = false;\n }\n });\n }\n\n\n displayUpdateRoleNameInput(role: CompanyRoleViewModel) {\n this.selectedRoleToUpdateName = role;\n this.selectedCompanyRoleName = role.name;\n }\n\n displayUpdateRolePermissionsModal(template, role: CompanyRoleViewModel) {\n this.selectedRoleToUpdatePermissions = role;\n this.rolePermissionsForm.controls.roleId.setValue(role.companyRoleId);\n this.rolePermissionsForm.controls.fullAccess.setValue(role.isFullAccess);\n\n this.companyUserPermissions = this.companyUserPermissions.map((item: CheckListItemViewModel) => {\n item.value = (role.permissions & item.key) > 0;\n return item;\n })\n this.siteUserPermissions = this.siteUserPermissions.map((item: CheckListItemViewModel) => {\n item.value = (role.permissions & item.key) > 0;\n return item;\n })\n this.bsModalRef = this.bsModalService.show(template, Object.assign({},\n { class: 'gray modal-lg' })).onHide.subscribe((_) => {\n this.reset();\n });\n }\n\n deleteRole(role: CompanyRoleViewModel) {\n this.modalService.confirm(\"Are you sure you want to remove this role?\", \"Remove Role\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.companyRoleService.deleteCompanyRole({\n roleId: role.companyRoleId,\n })\n .subscribe({\n next: (_) => {\n this.modalService.success('The role deleted successfully');\n this.getCompanyRoles();\n },\n error: (err) => {\n this.modalService.error(err);\n this.inProgress = false;\n },\n complete: () => {\n this.inProgress = false;\n }\n });\n }\n })\n }\n\n getPermissionCount(role: CompanyRoleViewModel) {\n let selectedPermissionsCount = this.siteUserPermissions\n .filter(p => (p.key & role.permissions) > 0).length + this.companyUserPermissions\n .filter(p => (p.key & role.permissions) > 0).length;\n\n if (role.isFullAccess) {\n return 'All Permissions';\n }\n return selectedPermissionsCount + ' Permission(s)';\n }\n\n getPermissionLabels(role: CompanyRoleViewModel) {\n let tips = [];\n this.siteUserPermissions\n .filter(p => (p.key & role.permissions) > 0)\n .forEach(p => tips.push(p.label));\n this.companyUserPermissions\n .filter(p => (p.key & role.permissions) > 0)\n .forEach(p => tips.push(p.label));\n return tips;\n }\n\n\n get hasAnySitePermissionSelected() {\n return !(this.rolePermissionsForm.controls.fullAccess?.value ?? false) && this.siteUserPermissions?.findIndex((item) => item.value == true) > -1;\n }\n\n get hasAnyCompanyPermissionSelected() {\n return !(this.rolePermissionsForm.controls.fullAccess?.value ?? false) && this.companyUserPermissions?.findIndex((item) => item.value == true) > -1;\n }\n\n resetCompanyPermissions() {\n this.companyUserPermissions = this.companyUserPermissions?.map((item) => {\n item.value = false;\n return item;\n });\n }\n\n resetSitePermissions() {\n this.siteUserPermissions = this.siteUserPermissions?.map((item) => {\n item.value = undefined;\n return item;\n });\n }\n\n updateRolePermissions() {\n if (!this.selectedRoleToUpdatePermissions)\n return;\n\n this.bsModalService.hide();\n\n let isFullAccess = this.rolePermissionsForm.controls.fullAccess.value ?? false;\n\n let totalPermissionsKeys = [\n ...this.siteUserPermissions?.filter((key) => isFullAccess ? true : key.value)?.map((key) => key.key),\n ...this.companyUserPermissions?.filter((key) => isFullAccess ? true : key.value)?.map((key) => key.key),\n ];\n\n this.inProgress = true;\n this.companyRoleService.updateRolePermissions({\n roleId: this.selectedRoleToUpdatePermissions?.companyRoleId,\n permissions: totalPermissionsKeys.length > 0 ? combinePermissions(totalPermissionsKeys) :\n UserPermission.None,\n isFullAccess: isFullAccess,\n })\n .subscribe({\n next: (_) => {\n this.modalService.success('The role permissions updated successfully');\n this.getCompanyRoles();\n this.reset();\n },\n error: (err) => {\n this.modalService.error(err);\n this.inProgress = false;\n },\n complete: () => {\n this.inProgress = false;\n }\n });\n }\n}\n","
      \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { UserService } from 'src/app/services/user.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\n\n@Component({\n selector: 'obc-company-settings',\n templateUrl: './company-settings.component.html',\n styleUrls: ['./company-settings.component.css']\n})\nexport class CompanySettingsComponent implements OnInit {\n\n inProgress: boolean = false;\n showTab = [1];\n inProgress$: Subject = new Subject();\n ProductPlanFeature = ProductPlanFeature;\n\n constructor(public userService: UserService, private layoutService: LayoutService) { }\n\n ngOnInit() {\n this.layoutService.header = \"Company Configuration\"\n\n this.inProgress$.subscribe(res => {\n setTimeout(() => {\n this.inProgress = res\n }, 1)\n });\n }\n\n}\n","export enum ProductPlanSubscriptionType {\n Basic = 0,\n Enterprise = 1,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ProductPlanSubscriptionType } from '../enums/product-plan-subscription-type.enum';\n\n@Pipe({\n name: 'subscriptionTypePipe'\n})\nexport class SubscriptionTypePipePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == ProductPlanSubscriptionType.Basic) return 'Basic';\n if (value == ProductPlanSubscriptionType.Enterprise) return 'Enterprise';\n return value?.toString();\n }\n\n}\n","
      \n
      \n
      Add/Edit Product Plans
      \n
      \n
      \n \n
      \n
      \n

      \n \n

      \n
      \n
      \n

      \n Loading ...\n

      \n

      \n Nothing Found\n

      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      #TitleSubscription TypeBilling PeriodActive SitesAverage Check-In Per DayStripe Plan Id
      {{plan.id}}{{plan.title}}{{plan.subscriptionTypeTitle == null ? 'General' : plan.subscriptionTypeTitle}}{{plan.billingPeriodTitle}}\n {{plan.activeSiteCount}}\n Unlimited\n \n {{plan.averageCheckInCountPerDay}}\n Unlimited\n {{plan.stripePlanId}}\n

      \n \n

      \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n
      \n Add\n Edit\n Plan\n \n
      \n
      \n
      \n \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n\n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n\n
      \n
      \n

      \n \n

      \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { FullProductPlanViewmodel, RequestProductPlanModel } from 'src/app/models/product-plan-viewmodel';\nimport { ProductPlanService } from 'src/app/services/product-plan.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { ProductPlanSubscriptionType } from '../../../enums/product-plan-subscription-type.enum';\n\n@Component({\n selector: 'obc-manage-plans',\n templateUrl: './manage-plans.component.html',\n styleUrls: ['./manage-plans.component.css']\n})\nexport class ManagePlansComponent implements OnInit {\n editFormGroup: FormGroup;\n inProgress: boolean = false;\n inEditProgress: boolean = false;\n bsModalRef: BsModalRef;\n plans: FullProductPlanViewmodel[] = null;\n SubscriptionPlans = ProductPlanSubscriptionType;\n\n\n constructor(private layoutService: LayoutService,\n private productPlanService: ProductPlanService,\n private fb: FormBuilder,\n private bsModalService: BsModalService) { }\n\n ngOnInit() {\n this.layoutService.header = \"Manage Plans\";\n this.inProgress = true;\n this.productPlanService.getAllPlans().subscribe(res => {\n this.plans = res;\n this.inProgress = false;\n });\n }\n\n onShowEditModal(template, model: RequestProductPlanModel) {\n this.editFormGroup = this.fb.group({\n id: new FormControl(model?.id ?? 0),\n title: new FormControl(model?.title ?? '', [Validators.required]),\n activeSiteCount: new FormControl(model?.activeSiteCount ?? null),\n averageCheckInCountPerDay: new FormControl(model?.averageCheckInCountPerDay ?? null),\n stripePlanId: new FormControl(model?.stripePlanId ?? '', [Validators.required]),\n pricePerMonth: new FormControl(model?.pricePerMonth ?? null),\n priceUnit: new FormControl(model?.priceUnit ?? 'AUD', [Validators.required]),\n billingPeriod: new FormControl(model?.billingPeriod ?? 0, [Validators.required]),\n subscriptionType: new FormControl(model?.subscriptionType ?? null),\n numberOfQuestions: new FormControl(model?.numberOfQuestions ?? null),\n numberOfUsers: new FormControl(model?.numberOfUsers ?? null),\n supportViaEmail: new FormControl(model?.supportViaEmail ?? false),\n support24x7: new FormControl(model?.support24x7 ?? false),\n personalisedTraining: new FormControl(model?.personalisedTraining ?? false),\n integrationApi: new FormControl(model?.integrationApi ?? false),\n isPublic: new FormControl(model?.isPublic ?? false),\n exportFeature: new FormControl(model?.enableExportFeature ?? false),\n requiredDocumentFieldFeature: new FormControl(model?.enableRequiredDocumentFieldFeature ?? false),\n schaduleReportFeature: new FormControl(model?.enableSchaduleReportFeature ?? false),\n announcementsFeature: new FormControl(model?.enableAnnouncementsFeature ?? false),\n scannablesFeature: new FormControl(model?.enableScannablesFeature ?? false),\n visitorTypesFeature: new FormControl(model?.enableVisitorTypesFeature ?? false),\n siteHostsFeature: new FormControl(model?.enableSiteHostsFeature ?? false),\n automationFeature: new FormControl(model?.enableAutomationFeature ?? false),\n kioskFeature: new FormControl(model?.enableKioskFeature ?? false),\n preCheckInFeature: new FormControl(model?.enablePreCheckInFeature ?? false),\n inventory: new FormControl(model?.enableInventoryFeature ?? false),\n form: new FormControl(model?.enableFormFeature ?? false),\n accessControl: new FormControl(model?.enableAccessControl ?? false),\n siteBriefing: new FormControl(model?.enableSiteBriefing ?? false),\n earlyAccess: new FormControl(model?.enableEarlyAccess ?? false),\n autoRenew: new FormControl(model?.enableSiteBriefingAutoRenew ?? false),\n });\n\n var config = {\n class: \"modal-lg\"\n };\n\n this.bsModalRef = this.bsModalService.show(template, config);\n }\n\n onSave() {\n var model = {\n id: this.editFormGroup.get('id').value,\n title: this.editFormGroup.get('title').value,\n activeSiteCount: this.editFormGroup.get('activeSiteCount').value,\n averageCheckInCountPerDay: this.editFormGroup.get('averageCheckInCountPerDay').value,\n stripePlanId: this.editFormGroup.get('stripePlanId').value,\n pricePerMonth: this.editFormGroup.get('pricePerMonth').value,\n priceUnit: this.editFormGroup.get('priceUnit').value,\n billingPeriod: this.editFormGroup.get('billingPeriod').value,\n subscriptionType: this.editFormGroup.get('subscriptionType').value,\n numberOfQuestions: this.editFormGroup.get('numberOfQuestions').value,\n numberOfUsers: this.editFormGroup.get('numberOfUsers').value,\n supportViaEmail: this.editFormGroup.get('supportViaEmail').value,\n support24x7: this.editFormGroup.get('support24x7').value,\n personalisedTraining: this.editFormGroup.get('personalisedTraining').value,\n integrationApi: this.editFormGroup.get('integrationApi').value,\n isPublic: this.editFormGroup.get('isPublic').value,\n enableExportFeature: this.editFormGroup.get('exportFeature').value,\n enableRequiredDocumentFieldFeature: this.editFormGroup.get('requiredDocumentFieldFeature').value,\n enableSchaduleReportFeature: this.editFormGroup.get('schaduleReportFeature').value,\n enableAnnouncementsFeature: this.editFormGroup.get('announcementsFeature').value,\n enableScannablesFeature: this.editFormGroup.get('scannablesFeature').value,\n enableVisitorTypesFeature: this.editFormGroup.get('visitorTypesFeature').value,\n enableSiteHostsFeature: this.editFormGroup.get('siteHostsFeature').value,\n enableAutomationFeature: this.editFormGroup.get('automationFeature').value,\n enableKioskFeature: this.editFormGroup.get('kioskFeature').value,\n enablePreCheckInFeature: this.editFormGroup.get('preCheckInFeature').value,\n enableInventoryFeature: this.editFormGroup.get('inventory').value,\n enableFormFeature: this.editFormGroup.get('form').value,\n enableAccessControl: this.editFormGroup.get('accessControl').value,\n enableSiteBriefing: this.editFormGroup.get('siteBriefing').value,\n enableEarlyAccess: this.editFormGroup.get('earlyAccess').value,\n enableSiteBriefingAutoRenew: this.editFormGroup.get('autoRenew').value,\n };\n this.inEditProgress = true;\n this.productPlanService.addUpdatePlan(model).subscribe(res => {\n this.inProgress = true;\n this.productPlanService.getAllPlans().subscribe(res => {\n this.plans = res;\n this.inProgress = false;\n });\n this.inEditProgress = false;\n this.bsModalRef.hide();\n }, err => {\n this.inEditProgress = false;\n }, () => {\n\n })\n }\n}\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { SiteService } from 'src/app/services/site.service';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\n\n@Component({\n selector: 'obc-site-automations',\n templateUrl: './site-automations.component.html',\n styleUrls: ['./site-automations.component.css']\n})\nexport class SiteAutomationsComponent implements OnInit, OnDestroy {\n siteId: number = null;\n site: SiteViewModel = null;\n inProgress: boolean = false;\n inProgress$: Subject = new Subject();\n private subscription: any;\n constructor(private route: ActivatedRoute, private layoutService: LayoutService, private siteService: SiteService) { }\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n ngOnInit() {\n this.layoutService.header = \"Site Automations\";\n\n this.subscription = this.route.params.subscribe((params: Params) => {\n this.siteId = params['id'] ? +params['id'] : 0;\n this.inProgress = true;\n this.siteService.getById(this.siteId).subscribe(res => {\n this.site = res;\n this.inProgress = false;\n })\n });\n this.inProgress$.subscribe(res => {\n setTimeout(() => {\n this.inProgress = res\n }, 1)\n });\n }\n}\n","
      \n
      \n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      ","export class CardLayout {\n public id: number;\n public name: string;\n public size: PageSize;\n public layout: PageLayout;\n public width?: string;\n public height?: string;\n public elements: CardLayoutElement[];\n public style?: StyleSetting;\n}\n\nexport class CardLayoutElement {\n id: string;\n name: string;\n position: RectInfo;\n style?: StyleSetting;\n}\n\nexport class StyleSetting {\n bgColor?: string;\n showBorder?: boolean;\n borderStyle?: string;\n fontStyle?: string;\n}\n\nexport class RectInfo {\n width: number;\n height: number;\n top: number;\n left: number;\n}\n\nexport enum PageSize {\n A5 = 0,\n A4 = 1,\n A3 = 2,\n Custom = 100,\n}\n\nexport function getPageSizeName(size: PageSize) {\n switch (size) {\n case PageSize.A3:\n return \"A3\";\n case PageSize.A4:\n return \"A4\";\n case PageSize.A5:\n return \"A5\";\n case PageSize.Custom:\n return \"Custom Size\";\n }\n}\n\nexport function getPageSizeWithLayout(size: PageSize, layout : PageLayout) : {width: number, height: number} {\n var size0 = getPageSize(size);\n if(size0 != null)\n if(layout == PageLayout.Portrait) {\n return size0;\n } else {\n return {width : size0.height, height: size0.width}\n }\n}\n\nexport function getPageSize(size: PageSize) : {width: number, height: number} {\n switch (size) {\n case PageSize.A3:\n return {width : 29.7, height: 42.0 };\n case PageSize.A4:\n return {width : 21.0, height: 29.7 };\n case PageSize.A5:\n return {width : 14.8, height: 21.0 };\n }\n return null;\n}\n\nexport enum PageLayout {\n Portrait = 0,\n Landscape = 1,\n}\n\nexport function getPageLayoutName(layout: PageLayout) {\n switch (layout) {\n case PageLayout.Portrait:\n return \"Portrait\";\n case PageLayout.Landscape:\n return \"Landscape\";\n }\n}","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CardLayout } from '../models/print-layout/print-layout-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CardLayoutService {\n apiUrl: string = \"/api/CardLayout\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n getCardLayouts = (): Observable =>\n this.http.get(`${this.apiUrl}/get-card-layouts`)\n .pipe(catchError(this._errorService.handleError));\n\n addCardLayout = (model: CardLayout): Observable =>\n this.http.post(`${this.apiUrl}/add-card-layout`, model)\n .pipe(catchError(this._errorService.handleError));\n\n removeCardLayout = (id: number): Observable =>\n this.http.get(`${this.apiUrl}/remove-card-layout/${id}`)\n .pipe(catchError(this._errorService.handleError));\n\n updateCardLayout = (model: CardLayout): Observable =>\n this.http.post(`${this.apiUrl}/update-card-layout/${model.id}`, model)\n .pipe(catchError(this._errorService.handleError));\n\n}\n","import { Directive, ElementRef, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport interact from 'interactjs';\nimport { RectInfo } from '../models/print-layout/print-layout-model';\n\n@Directive({\n selector: '[obcDraggable]'\n})\nexport class DraggableDirective implements OnInit {\n @Output() rectInfoChanged: EventEmitter = new EventEmitter();\n _elementPosition: RectInfo;\n\n @Input() rectInfo: RectInfo = new RectInfo();\n\n constructor(private elem: ElementRef) {\n this.elem.nativeElement\n }\n\n ngOnInit() {\n var that = this;\n interact(this.elem.nativeElement)\n .draggable({\n // enable inertial throwing\n inertia: true,\n maxPerElement : 2,\n // keep the element within the area of it's parent\n modifiers: [\n interact.modifiers.restrictRect({\n restriction: 'parent',\n endOnly: true\n })\n ],\n // enable autoScroll\n autoScroll: true,\n\n listeners: {\n // call this function on every dragmove event\n move: (event: any) => this.dragMoveListener(event, that, false),\n\n // call this function on every dragend event\n end(event) {\n // var textEl = event.target.querySelector('p')\n\n // textEl && (textEl.textContent =\n // 'moved a distance of ' +\n // (Math.sqrt(Math.pow(event.pageX - event.x0, 2) +\n // Math.pow(event.pageY - event.y0, 2) | 0))\n // .toFixed(2) + 'px')\n }\n }\n }).resizable({\n // resize from all edges and corners\n edges: { left: true, right: true, bottom: true, top: true },\n\n listeners: {\n move: (event: any) => this.dragMoveListener(event, that, true)\n },\n modifiers: [\n // keep the edges inside the parent\n interact.modifiers.restrictEdges({\n outer: 'parent'\n }),\n\n // minimum size\n interact.modifiers.restrictSize({\n min: { width: 100, height: 50 }\n })\n ],\n\n inertia: true\n });\n }\n\n dragMoveListener(event, that, isResize) {\n var target = event.target\n // keep the dragged position in the data-x/data-y attributes\n var x = (parseFloat(target.getAttribute('data-x')) || 0);\n var y = (parseFloat(target.getAttribute('data-y')) || 0);\n\n // update the element's style\n target.style.width = event.rect.width + 'px'\n target.style.height = event.rect.height + 'px'\n\n that.rectInfo.width = Math.floor(event.rect.width * 10) / 10;\n that.rectInfo.height = Math.floor(event.rect.height * 10) / 10;\n\n if (isResize === true) {\n // translate when resizing from top or left edges\n x += event.deltaRect.left\n y += event.deltaRect.top\n }\n else {\n x += event.dx;\n y += event.dy;\n }\n // translate the element\n target.style.webkitTransform =\n target.style.transform =\n 'translate(' + x + 'px, ' + y + 'px)'\n\n // update the posiion attributes\n // target.setAttribute('data-x', x)\n // target.setAttribute('data-y', y)\n\n that.rectInfo.top = Math.floor(y * 10) / 10;\n that.rectInfo.left = Math.floor(x * 10) / 10;\n // this.rectInfoChanged.emit({\n // left: Math.floor(x * 10) / 10,\n // top: Math.floor(y * 10) / 10,\n // height: Math.floor(that._elementPosition.height * 10) / 10,\n // width: Math.floor(that._elementPosition.width * 10) / 10\n // });\n }\n}\n","
      \n
      \n \n
      \n {{element.name}}
      \n
      \n \n
      \n
      {{element.name}}
      \n
      \n
        \n
      • \n \n
      • \n
      • \n \n
      • \n \n
      \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit, Input } from '@angular/core';\nimport { PageSize, CardLayout, CardLayoutElement, getPageSizeName } from 'src/app/models/print-layout/print-layout-model';\n\n@Component({\n selector: 'obc-draggable-element-page',\n templateUrl: './draggable-element-page.component.html',\n styleUrls: ['./draggable-element-page.component.scss']\n})\nexport class DraggableElementPageComponent implements OnInit {\n _cardLayout: CardLayout;\n _pageSize = PageSize;\n @Input() freeze : boolean = false;\n @Input() set printLayout(p: CardLayout) {\n this._cardLayout = p;\n }\n\n constructor() { }\n\n ngOnInit(): void {\n this.getPageSizeName = getPageSizeName;\n }\n\n removeElement(element : CardLayoutElement) {\n var index = this._cardLayout.elements.map(c => c.id).indexOf(element.id)\n this._cardLayout.elements.splice(index, 1);\n }\n\n openSettingPage(element: CardLayoutElement) {\n }\n\n getPageSizeName : any;\n\n}\n","\n
      \n\n
      \n
      \n

      Layout Config

      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit, Input } from '@angular/core';\nimport { CardLayout, PageSize, PageLayout, getPageSizeName, getPageLayoutName, getPageSize } from 'src/app/models/print-layout/print-layout-model';\nimport { StorageService } from 'src/app/services/storage.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { LocalStorageKey } from '../../../enums/local-storage-key.enum';\n\n@Component({\n selector: 'obc-layout-page',\n templateUrl: './layout-page.component.html',\n styleUrls: ['./layout-page.component.scss']\n})\nexport class LayoutPageComponent implements OnInit {\n inProgress: boolean = false;\n _layout: CardLayout = null;\n _pageSize = PageSize;\n _pageLayout = PageLayout;\n \n @Input() set layout(page: CardLayout) {\n if (page === null) {\n this._layout = new CardLayout();\n this._layout.id = this.newId;\n this._layout.elements = [];\n }\n else\n this._layout = JSON.parse(JSON.stringify(page));\n }\n\n getPageSizeName : any;\n getPageLayoutName : any;\n\n get newId(): number {\n var savedLayouts: CardLayout[] = JSON.parse(this.storageService.get(LocalStorageKey.PrintLayoutStorageKey));\n if (!savedLayouts || savedLayouts.length === 0)\n return 1;\n return Math.max.apply(Math, savedLayouts.map(function (o) { return o.id; })) + 1;\n }\n\n constructor(private storageService: StorageService, private modalService : ModalService) { }\n\n ngOnInit(): void {\n this.getPageSizeName = getPageSizeName;\n this.getPageLayoutName = getPageLayoutName;\n }\n\n updateInsert() {\n this.modalService.hide({saved : true, layout : this._layout});\n }\n\n cancel() {\n this.modalService.hide({saved : false, layout : null});\n }\n\n pageSizeChange() {\n var size = getPageSize(this._layout.size);\n if(size != null)\n if(this._layout.layout == this._pageLayout.Portrait) {\n this._layout.height = size.height.toString();\n this._layout.width = size.width.toString();\n } else {\n this._layout.width = size.height.toString();\n this._layout.height = size.width.toString();\n }\n }\n\n}\n","\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n

      Select Layout:

      \n
      \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n {{currentLayout.name}}{{layoutChanged? '*':''}}\n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Element NameAdd to layout
      {{element.name }}\n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
        \n
      • \n \n
      • \n
      \n \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n\n \n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { CardLayout, PageSize, PageLayout, CardLayoutElement, StyleSetting, getPageSizeWithLayout } from 'src/app/models/print-layout/print-layout-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { StorageService } from 'src/app/services/storage.service';\nimport { finalize } from 'rxjs/operators';\nimport { isEquall } from 'src/app/helpers/general-functions';\nimport { LocalStorageKey } from '../../../enums/local-storage-key.enum';\nimport { CardLayoutService } from 'src/app/services/card-layout.service';\nimport { LayoutService } from 'src/app/services/layout.service';\n\n@Component({\n selector: 'obc-card-designer',\n templateUrl: './card-designer.component.html',\n styleUrls: ['./card-designer.component.scss']\n})\n\nexport class CardDesignerComponent implements OnInit, OnDestroy {\n inProgress = false;\n layoutList: CardLayout[] = [];\n currentLayout: CardLayout = null;//new CardLayout();\n layoutForConfig: CardLayout = new CardLayout();\n designerSelected: boolean = true;\n _elemntRepository: CardLayoutElement[] = [];\n\n get elementRepository(): CardLayoutElement[] {\n //return this._elemntRepository.filter(function (x) { return this?.indexOf(x.id) < 0 }, this.selectedLayout.elements?.map(c => c.id));\n if (!this._elemntRepository) return [];\n if (!this.currentLayout || !this.currentLayout.elements) return this._elemntRepository;\n return this._elemntRepository.filter((l) => this.currentLayout.elements.filter(i => l.id == i.id).length == 0);\n };\n\n constructor(private modalService: ModalService, private layoutService: LayoutService, private cardLayoutService: CardLayoutService) {\n this.loadlayouts();\n }\n\n selectedLayoutId: number;\n modelchange(id) {\n this.selectedLayout = this.layoutList.find(x => x.id == id)\n }\n\n\n set selectedLayout(newModel: CardLayout) {\n console.log(newModel)\n if (newModel == null) {\n this.currentLayout = null;\n return;\n }\n\n if (this.layoutChanged === true) {\n var currentLayoutId = this.currentLayout.id;\n\n this.modalService.confirm('Did you want save layout before leave it ?', 'Save Layout', 'Yes, Save Layout', 'Disacard all changes')\n .subscribe(result => {\n if (result === true) {\n this.inProgress = true;\n this.cardLayoutService.updateCardLayout(this.currentLayout)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n var index = this.layoutList.indexOf(this.layoutList.find(i => i.id == currentLayoutId));\n this.layoutList.splice(index, 1, this.currentLayout);\n this.currentLayout = JSON.parse(JSON.stringify(newModel));\n });\n } else if (result === false) {\n this.currentLayout = JSON.parse(JSON.stringify(newModel));\n }\n })\n return;\n } else {\n this.currentLayout = JSON.parse(JSON.stringify(newModel));\n }\n }\n\n get selectedLayout(): CardLayout {\n if (this.currentLayout != null)\n return this.layoutList.filter(i => i.id == this.currentLayout.id)[0];\n }\n\n loadlayouts() {\n this.inProgress = true;\n this.cardLayoutService.getCardLayouts()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.layoutList = res.cardLayouts;\n this._elemntRepository = res.cardElements.map(element => {\n element.position = { height: 90, left: 0, top: 0, width: 180 };\n return element;\n });\n if (this.layoutList.length > 0) {\n this.selectedLayout = this.layoutList[0];\n this.selectedLayoutId = this.layoutList[0].id;\n }\n });\n }\n\n ngOnInit(): void {\n this.layoutService.header = \"Card Designer\"\n }\n\n addElementToLayout(element: CardLayoutElement) {\n if (!this.selectedLayout.elements)\n this.currentLayout.elements = [];\n var clone = JSON.parse(JSON.stringify(element));\n this.currentLayout.elements.push(clone);\n }\n\n confirmRemoveLayout() {\n this.modalService.confirm('Do you want remove selected layout?', 'Remove Layout', 'Yes', 'Cancel')\n .subscribe(result => {\n if (result === true) {\n this.inProgress = true;\n this.cardLayoutService.removeCardLayout(this.selectedLayout.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n var index = this.layoutList.indexOf(this.selectedLayout);\n this.layoutList.splice(index, 1);\n this.currentLayout = null;\n if (this.layoutList.length > 0) {\n this.selectedLayout = this.layoutList[0];\n }\n else\n this.selectedLayout = null;\n });\n }\n })\n }\n\n get layoutChanged(): boolean {\n if (this.currentLayout == null)\n return false;\n var savedLayout = this.layoutList?.find(c => c.id === this.currentLayout.id);\n var result = isEquall(this.currentLayout, savedLayout);\n return result === false;\n }\n\n saveLayout() {\n this.inProgress = true;\n this.cardLayoutService.updateCardLayout(this.currentLayout)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n var index = this.layoutList.indexOf(this.selectedLayout);\n this.layoutList[index] = JSON.parse(JSON.stringify(this.currentLayout));\n });\n }\n\n openConfigLayout(layoutpage, layout) {\n if (layout == null) {\n layout = { // new layout\n id: 0,\n name: `New Layout ${this.layoutList.length + 1}`,\n size: PageSize.A5,\n width: getPageSizeWithLayout(PageSize.A5, PageLayout.Portrait).width.toString(),\n height: getPageSizeWithLayout(PageSize.A5, PageLayout.Portrait).height.toString(),\n layout: PageLayout.Portrait, elements: []\n }\n }\n this.layoutForConfig = layout;\n this.modalService.show(layoutpage)\n .subscribe(result => {\n console.log('result : ', result);\n if (result === undefined) return;\n if (result.saved === true) {\n if (result.layout.id == 0) // add\n {\n this.inProgress = true;\n this.cardLayoutService.addCardLayout(result.layout)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n result.layout.id = res;\n this.layoutList.push(result.layout);\n this.selectedLayoutId = result.layout.id;\n this.modelchange(result.layout.id);\n })\n }\n else if (result.layout.id != 0) { // update\n this.resizeElements(this.layoutForConfig, result.layout);\n this.inProgress = true;\n this.cardLayoutService.updateCardLayout(result.layout)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n var index = this.layoutList.map(c => c.id).indexOf(this.layoutForConfig.id);\n this.layoutList[index] = JSON.parse(JSON.stringify(result.layout));\n this.currentLayout = JSON.parse(JSON.stringify(result.layout));\n this.selectedLayoutId = result.layout.id;\n this.modelchange(result.layout.id);\n });\n }\n }\n });\n }\n\n resizeElements(origin: CardLayout, changed: CardLayout) {\n if (origin.width != changed.width) {\n var chgangedPercent = (((+changed.width * 100) / +origin.width) / 100);\n changed.elements.forEach(c => c.position.width = c.position.width * chgangedPercent);\n }\n\n if (origin.height != changed.height) {\n var chgangedPercent = (((+changed.height * 100) / +origin.height) / 100);\n changed.elements.forEach(c => c.position.height = c.position.height * chgangedPercent);\n }\n }\n\n ngOnDestroy() {\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { Constants } from 'src/app/enums/constants';\nimport { LayoutService } from 'src/app/services/layout.service';\n\n@Component({\n selector: 'obc-anonymous',\n templateUrl: './anonymous.component.html',\n styleUrls: ['./anonymous.component.css'],\n})\nexport class AnonymousComponent implements OnInit {\n header: string = '';\n constructor() {}\n\n ngOnInit() {\n this.header = Constants.ANONYMOUS_ATTENDANCE_TITLE;\n }\n}\n","\n
      \n
      \n \n
      \n
      ","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-anonymous-check',\n templateUrl: './anonymous-check.component.html',\n styleUrls: ['./anonymous-check.component.css']\n})\nexport class AnonymousCheckComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","\n","\n
      \n
      \n
      \n \n \n {{site.companyName}}\n \n
      \n
      \n
      \n
      \n
      \n Check-In to site '{{site?.name}}'\n
      \n
      \n
      0\">\n

      {{initErrorMessage}}

      \n
      \n \n \n \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { finalize } from 'rxjs/operators';\nimport { SiteService } from 'src/app/services/site.service';\nimport { AnonymousCheckInSiteViewModel } from 'src/app/models/site-viewmodel';\nimport { CheckInMode } from 'src/app/enums/checkin-mode.enum';\n\n\n@Component({\n selector: 'obc-anonymous-checkin',\n templateUrl: './anonymous-checkin.component.html',\n styleUrls: ['./anonymous-checkin.component.scss']\n})\nexport class AnonymousCheckinComponent implements OnInit {\n\n CheckInMode = CheckInMode;\n\n constructor(private route: ActivatedRoute,\n private siteService: SiteService) { }\n\n site: AnonymousCheckInSiteViewModel;\n sessionId: string;\n inProgress: boolean = false;\n initErrorMessage: string = null;\n\n ngOnInit() {\n this.route.params.subscribe((params) => {\n this.sessionId = params['session-id'];\n this.inProgress = true;\n this.siteService.getSiteBySession(this.sessionId)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.site = res ?? {};\n }, err => {\n this.initErrorMessage = err;\n });\n });\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-successfull-anonymous-checkin',\n templateUrl: './successfull-anonymous-checkin.component.html',\n styleUrls: ['./successfull-anonymous-checkin.component.css']\n})\nexport class SuccessfullAnonymousCheckinComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","
      \n
      \n
      \n
      \n Your Check-In Is Successfull\n
      \n
      \n
      \n
      \n","export class BaseIndustryType {\n public type: string;\n public isActive: boolean;\n}\n","import { BaseIndustryType } from './base-industry-type';\n\nexport class IndustryTypeViewModel extends BaseIndustryType\n{\n public id: number;\n}\n","import { BaseIndustryType } from './base-industry-type';\n\nexport class IndustryTypeModel extends BaseIndustryType {\n}\n","
      \n
      \n
      Add/Delete Industry Types
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n\n
      \n \n
      \n \n \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n
      \n
      \n {{errorMessage}}\n \n
      \n
      \n
      \n
      \n

      \n Loading ...\n

      \n

      \n Nothing Found\n

      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n
      #TypeStatus
      {{industryType.id}}{{industryType.type}}\n Enable\n Disable\n \n

      \n \n

      \n
      \n\n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n
      \n Edit Industry Type\n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n \n \n
      \n

      \n \n

      \n
      \n
      \n {{errorEditModalMessage}}\n \n
      \n
      \n
      \n
      \n\n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { IndustryTypeService } from 'src/app/services/industry-type-service';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { IndustryTypeViewModel } from '../../../models/industry-type/industry-type-view-model';\nimport { IndustryTypeModel } from '../../../models/industry-type/industry-type-model';\n\n@Component({\n selector: 'obc-manage-industry-types',\n templateUrl: './manage-industry-types.component.html',\n styleUrls: ['./manage-industry-types.component.css']\n})\nexport class ManageIndustryTypesComponent implements OnInit {\n\n newIndustryFormGroup: FormGroup;\n editIndustryFormGroup: FormGroup;\n inProgress: boolean = false;\n inAddEditProgress: boolean = false;\n industryTypes: IndustryTypeViewModel[] = null;\n selectedIndustryType: IndustryTypeViewModel = null;\n bsModalRef: BsModalRef;\n message: string;\n errorMessage: string;\n errorEditModalMessage: string;\n constructor(private layoutService: LayoutService,\n private IndustryTypeService: IndustryTypeService,\n private fb: FormBuilder,\n private bsModalService: BsModalService,\n ) { }\n\n ngOnInit() {\n this.layoutService.header = \"Manage Industry Types\";\n this.newIndustryFormGroup = this.fb.group({\n type: new FormControl('', [Validators.required]),\n isActive: new FormControl(true, [Validators.required])\n });\n\n this.getIndustryTypes();\n }\n\n private getIndustryTypes() {\n this.inProgress = true;\n this.IndustryTypeService.getIndustryTypes().subscribe(res => {\n this.industryTypes = res;\n this.inProgress = false;\n });\n }\n\n addIndustryType() {\n this.errorMessage = null;\n var newIndustryType = new IndustryTypeModel();\n newIndustryType.type = this.newIndustryFormGroup.get('type').value;\n newIndustryType.isActive = this.newIndustryFormGroup.get('isActive').value;\n\n this.inProgress = true;\n this.IndustryTypeService.addIndustryType(newIndustryType).subscribe(res => {\n var industryType = new IndustryTypeViewModel();\n industryType.id = res;\n industryType.type = newIndustryType.type;\n industryType.isActive = newIndustryType.isActive;\n this.industryTypes.push(industryType);\n this.industryTypes.sort((a, b) => a.type.localeCompare(b.type));\n this.inProgress = false;\n this.newIndustryFormGroup.reset();\n this.newIndustryFormGroup.controls.isActive.setValue(true);\n }, err => {\n this.errorMessage = err;\n this.inProgress = false;\n setTimeout(() => {\n this.errorMessage = null;\n }, 10000)\n\n });\n }\n\n onShowEditModal(template, industryType: IndustryTypeViewModel) {\n this.errorEditModalMessage = null;\n this.selectedIndustryType = industryType;\n this.editIndustryFormGroup = this.fb.group({\n id: new FormControl(industryType.id),\n type: new FormControl(industryType.type, [Validators.required, Validators.maxLength(500)]),\n isActive: new FormControl(industryType.isActive),\n });\n this.bsModalRef = this.bsModalService.show(template);\n }\n\n onSubmitEditForm() {\n if (this.editIndustryFormGroup.valid) {\n var model = {\n id: this.selectedIndustryType.id,\n type: this.editIndustryFormGroup.get(\"type\").value,\n isActive: this.editIndustryFormGroup.get(\"isActive\").value,\n } as IndustryTypeViewModel;\n this.inAddEditProgress = true;\n this.IndustryTypeService.editIndustryType(model).subscribe(res => {\n this.errorEditModalMessage = null;\n this.selectedIndustryType.type = model.type;\n this.selectedIndustryType.isActive = model.isActive;\n this.bsModalRef.hide();\n this.inAddEditProgress = false;\n }, err => {\n this.errorEditModalMessage = err;\n this.inAddEditProgress = false;\n setTimeout(() => {\n this.errorEditModalMessage = null;\n }, 10000)\n\n });\n }\n }\n}\n","import { FormGroup, ValidatorFn, FormBuilder, FormControl } from '@angular/forms';\n\nexport class EditableItem {\n mode: 'edit' | 'view' = 'view';\n formGroup: FormGroup;\n get order() : number {\n return this.model[\"order\"] as number;\n };\n constructor(\n public model: T,\n private validators: { [key: string]: ValidatorFn[] } | {}) {\n this.createFormGroup();\n }\n\n createFormGroup() {\n var keys = Object.keys(this.model);\n this.formGroup = new FormGroup({});\n for (let i = 0; i < keys.length; i++) {\n var key = keys[i];\n var validators = this.validators[key];\n this.formGroup.addControl(keys[i], new FormControl(this.model[key], validators));\n }\n }\n\n get valid(): boolean {\n return this.formGroup.valid;\n }\n\n get currentModel(): T {\n if (!this.valid)\n return null;\n var cm = {} as T;\n var keys = Object.keys(this.model);\n for (let i = 0; i < keys.length; i++) {\n var key = keys[i];\n cm[key] = this.formGroup.get(key).value;\n }\n return cm;\n }\n\n get valueChanges(): boolean {\n var cm = this.currentModel;\n var keys = Object.keys(this.model);\n for (let i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (cm[key] !== this.model[key])\n return true;\n }\n return false;\n }\n\n revertToSavedState() {\n this.createFormGroup();\n }\n\n save() {\n var keys = Object.keys(this.model);\n for (let i = 0; i < keys.length; i++) {\n var key = keys[i];\n this.model[key] = this.currentModel[key];\n }\n return;\n }\n\n switchMode() {\n if (this.mode == 'view')\n this.mode = 'edit';\n else\n this.mode = 'view';\n }\n}\n","export enum AnnouncementProcessStatus {\n WaitingToProcess = 0,\n InProgress = 1,\n Completed = 2,\n}\n","export enum AnnouncementMode {\n Silent = 0,\n NotifyAlways = 1,\n NotifyOnce = 2,\n}\n","export enum SiteAnnouncementDisplayTime {\n AfterCheckin = 0,\n WhileCheckin = 1,\n AnyTime = 2\n}","export enum FileCategory {\n Generic = 0,\n ProfilePicture = 1,\n UserDocuments = 2,\n QuestionAnswerFile = 3,\n AnnouncementFile = 4,\n ScannableItemFile = 5,\n}\n","export const contentAccepts = {\n 5: \"image/*\",\n 0: \".pdf\",\n 1: \"video/*\",\n 3: \"audio/*\",\n};\n","export enum AnnouncementDisplayModeEnum {\n Button = 0,\n Preview = 1\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT Licence.\r\n\r\n/**\r\n * Here we demonstrate how to inject new SAS for an ongoing upload.\r\n * SAS might get expired before a large upload finishes, for this scenario, we want to request a new\r\n * SAS token during the upload instead of starting a new upload.\r\n *\r\n * In this sample, we give a SAS injection sample for browsers like Chrome which supports await/async.\r\n *\r\n * Before executing the sample:\r\n * - Make sure storage account has CORS set up properly\r\n * - Implement method `getNewSasForBlob`\r\n * - Update url in `upload()` method\r\n *\r\n * This sample creates a global function called `upload` that will upload\r\n * data from a file upload form. For example, the following HTML will create\r\n * such a form.\r\n *\r\n *
      \r\n * \r\n *\r\n * For instructions on building this sample for the browser, refer to\r\n * \"Building for Browsers\" in the readme.\r\n *\r\n *\r\n */\r\n\r\nimport {\r\n BlockBlobClient,\r\n AnonymousCredential,\r\n BaseRequestPolicy,\r\n newPipeline,\r\r\n StorageSharedKeyCredential,\r\n BlobUploadCommonResponse\n} from \"@azure/storage-blob\";\r\nimport { FileUploadInfo } from '../models/signed-upload-info-request';\r\nimport { Injectable } from '@angular/core';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SasUploadService {\r\n async upload(file: any, info: FileUploadInfo, onProgress: (event:any) => void): Promise {\r\n const sasStore = new SasStore();\r\n\r\n const pipeline = newPipeline(new AnonymousCredential());\r\n // Inject SAS update policy factory into current pipeline\r\n pipeline.factories.unshift(new SasUpdatePolicyFactory(sasStore));\r\n\r\n const url = info.url;\r\n const blockBlobClient = new BlockBlobClient(url, pipeline);\r\n const fileLength = file.size;\r\n\r\n return await blockBlobClient.uploadBrowserData(file, {\r\n maxSingleShotSize: 4 * 1024 * 1024,\r\n onProgress: (event) => {\r\n if (onProgress)\r\n onProgress({ loaded: event.loadedBytes, total: fileLength });\r\n },\r\n });\r\n }\r\n}\r\n\r\n\r\nclass SasStore {\r\n sasCache: any;\r\n constructor() {\r\n this.sasCache = {};\r\n }\r\n\r\n // Get a valid SAS for blob\r\n async getValidSASForBlob(blobURL) {\r\n if (this.sasCache[blobURL] && this.isSasStillValidInNext2Mins(this.sasCache[blobURL])) {\r\n return this.sasCache[blobURL];\r\n } else {\r\n return (this.sasCache[blobURL] = await this.getNewSasForBlob(blobURL));\r\n }\r\n }\r\n\r\n // Return true if \"se\" section in SAS is still valid in next 2 mins\r\n isSasStillValidInNext2Mins(sas) {\r\n const expiryStringInSas = new URL(`http://hostname${sas}`).searchParams.get(\"se\");\r\n return new Date(expiryStringInSas) - new Date() >= 2 * 60 * 1000;\r\n }\r\n\r\n // Get a new SAS for blob, we assume a SAS starts with a \"?\"\r\n async getNewSasForBlob(blobURL) {\r\n // TODO: You need to implement this\r\n return \"?newSAS\";\r\n }\r\n}\r\n\r\nclass SasUpdatePolicyFactory {\r\n sasStore: any;\r\n constructor(sasStore) {\r\n this.sasStore = sasStore;\r\n }\r\n create(nextPolicy, options) {\r\n return new SasUpdatePolicy(nextPolicy, options, this.sasStore);\r\n }\r\n}\r\n\r\nclass SasUpdatePolicy extends BaseRequestPolicy {\r\n sasStore: any;\r\n constructor(nextPolicy, options, sasStore) {\r\n super(nextPolicy, options);\r\n this.sasStore = sasStore;\r\n }\r\n\r\n async sendRequest(request) {\r\n const urlObj = new URL(request.url);\r\n const sas = await this.sasStore.getValidSASForBlob(`${urlObj.origin}${urlObj.pathname}`);\r\n new URL(`http://hostname${sas}`).searchParams.forEach((value, key) => {\r\n urlObj.searchParams.set(key, value);\r\n });\r\n\r\n // Update request URL with latest SAS\r\n request.url = urlObj.toString();\r\n\r\n return this._nextPolicy.sendRequest(request);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AnnouncementDisplayModeEnum } from '../enums/announcement-display-mode.enum';\n\n@Pipe({\n name: 'announcementDisplayMode'\n})\nexport class AnnouncementDisplayModePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): unknown {\n if (value == AnnouncementDisplayModeEnum.Button) return 'Button';\n if (value == AnnouncementDisplayModeEnum.Preview) return 'Preview';\n\n return 'Button';\n }\n\n}\n","
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n The selected file is not compatible with announcement type or is the unknown format, this format may do not\n work\n properly on the user device.\n
      \n
      \n
      \n
      \n \n \n
      \n\n \n
      \n \n
      \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n\n
      \n \n \n
      \n
      \n Loading...\n
      \n
      \n
      \n \n
      \n {{ model }}\n
      \n
      \n\n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n {{_model.formGroup.get('progress').value}}\n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { EditableItem } from 'src/app/models/editable-item';\nimport { ClientAnnouncementViewModel } from 'src/app/models/announcement-viewmodel';\nimport { AnnouncementService } from 'src/app/services/announcement.service';\nimport { FileStorageService } from 'src/app/services/file-storage.service';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { FileCategory } from 'src/app/enums/file-category.enum';\nimport { contentAccepts } from 'src/app/enums/accept-type.enum';\nimport { AnnouncementDisplayModeEnum } from 'src/app/enums/announcement-display-mode.enum';\nimport { urlValidator } from 'src/app/helpers/url-validator';\nimport { ModalService } from '../../../services/modal.service';\nimport { finalize, map, switchMap, tap } from 'rxjs/operators';\nimport { noop, Observable, Observer, of } from 'rxjs';\nimport { SasUploadService } from '../../../services/sas-store';\nimport { AskMode } from 'src/app/enums/ask-mode';\nimport { error } from 'console';\n\n@Component({\n selector: 'obc-create-announcement',\n templateUrl: './create-announcement.component.html',\n styleUrls: ['./create-announcement.component.css']\n})\nexport class CreateAnnouncementComponent implements OnInit {\n\n defaultFileType: FileType = FileType.Pdf;\n @Input() whiteListFileTypes: FileType[] = [];\n announcementDisplayMode = AnnouncementDisplayModeEnum;\n inProgress: boolean = false;\n announcementType = FileType;\n askMode = AskMode;\n uploadSuccess = true;\n reseted = true;\n announcementGroups$: Observable;\n announcementGroupLoader: boolean = false;\n _model: EditableItem = null;\n @Input() set model(model: EditableItem) {\n this._model = model;\n if (this._model == null) {\n this.createNewEditableObject();\n } else {\n if (this.isFileModel(model.model.type))\n model.formGroup.controls[\"type\"].disable();\n }\n this._model.mode = \"edit\";\n };\n @Input() isActiveStatusChangable?: boolean = true;\n @Output() announcementCreated: EventEmitter = new EventEmitter();\n @Output() announcementUpdated: EventEmitter = new EventEmitter();\n @Output() onTypeChanged: EventEmitter = new EventEmitter();\n constructor(\n private announcementService: AnnouncementService,\n private fileStorageService: FileStorageService,\n private modalService: ModalService,\n private sasUploadService: SasUploadService\n ) { }\n\n ngOnInit() {\n this.getAnnouncementGroups();\n this._model.formGroup.get('type').valueChanges?.subscribe((res) => {\n this.onTypeChanged.emit(res);\n })\n this.onTypeChanged.emit(this.defaultFileType);\n }\n\n private init() {\n this.createNewEditableObject();\n this.getAnnouncementGroups();\n }\n\n private createNewEditableObject() {\n var validators = {\n 'title': [Validators.required]\n };\n this._model = new EditableItem({\n announcementId: null,\n title: null,\n url: null,\n data: null,\n type: this.defaultFileType,\n askMode: this.askMode.AnyTime,\n displayMode: this.announcementDisplayMode.Button,\n isActive: true,\n file: null,\n progress: \"0\",\n groupName: \"\",\n } as ClientAnnouncementViewModel, validators);\n }\n\n private callbackResult(model: ClientAnnouncementViewModel) {\n // send call back response\n this.announcementUpdated.emit(model);\n this.announcementCreated.emit(model);\n this.uploadSuccess = true;\n this.resetForm();\n }\n\n private resetForm() {\n this.reseted = false;\n setTimeout(() => { this.reseted = true; }, 100);\n }\n\n saveChanges(editableModel: EditableItem) {\n this.inProgress = true;\n var model = editableModel.currentModel;\n\n var uploadEventHandler = (event) => {\n if (this.isFileModel(model.type)) {\n let progress = Math.round(100 * event.loaded / event.total);\n editableModel.formGroup.get('progress').setValue(`${progress}%`);\n }\n };\n\n var errorEventHandler = (err) => {\n this.modalService.error(err, \"Unable to save changes\");\n this.inProgress = false;\n }\n\n this.inProgress = true;\n if (model.file != null) { // filedata\n var data = model.file.get('file') as File;\n var signedUploadInfoModel = {\n filename: data.name,\n fileCategory: FileCategory.AnnouncementFile,\n };\n this.fileStorageService.getSignedUploadInfo(signedUploadInfoModel)\n .subscribe({\n next: (uploadInfo) => {\n if (uploadInfo == null) {\n errorEventHandler(\"Unable get file url\");\n this.inProgress = false\n this.uploadSuccess = false;\n }\n else {\n this.sasUploadService.upload(data, uploadInfo, uploadEventHandler)\n .then(\n (uploadResult) => {\n let isSuccessUpload = uploadResult?._response && uploadResult._response.status >= 200 && uploadResult._response.status < 300;\n if (isSuccessUpload) {\n model.dataStorageKey = uploadInfo.storageKey;\n model.file = null;\n this.inProgress = true;\n if (model.announcementId != null) {\n this.announcementService.update(model.announcementId, model).subscribe(res => {\n this.callbackResult(model);\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, \"Unable to update\");\n }, () => {\n this.inProgress = false;\n this.init();\n })\n } else {\n this.announcementService.add(model).subscribe(res => {\n model.announcementId = res;\n this.callbackResult(model);\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, \"Unable to add\");\n }, () => {\n this.inProgress = false;\n this.init();\n })\n }\n\n } else {\n this.modalService.error(\"Unable to upload file\", \"Upload File\");\n }\n }\n ,\n _ => {\n errorEventHandler(\"Unable to save changes\");\n this.inProgress = false\n this.uploadSuccess = false;\n },\n )\n }\n },\n error: (err) => {\n errorEventHandler(err);\n }\n });\n } else { // text data\n model.file = null;\n model.dataStorageKey = null;\n if (model.announcementId) {\n this.announcementService.update(model.announcementId, model).subscribe(res => {\n this.callbackResult(model);\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, \"Unable to update\");\n }, () => {\n this.inProgress = false;\n this.init();\n })\n } else {\n this.announcementService.add(model).subscribe(res => {\n model.announcementId = res;\n this.callbackResult(model);\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, \"Unable to add\");\n }, () => {\n this.inProgress = false;\n this.init();\n })\n }\n\n }\n // if (model.id) {\n // model.file = null;\n // model.dataStorageKey = null;\n // this.announcementService.update(model.id, model).subscribe(res => {\n // this.callbackResult(model);\n // }, err => {\n // this.inProgress = false;\n // this.modalService.error(err, \"Unable to update\");\n // }, () => {\n // this.inProgress = false;\n // this.init();\n // })\n // }\n // else // add\n // {\n\n // }\n }\n\n typeLabels = {\n 0: \"PDF File\",\n 1: \"Video\",\n 2: \"Text\",\n 3: \"Audio\",\n 4: \"Youtube Video\",\n 5: \"Image\",\n 6: \"External Link\",\n };\n\n get types(): number[] {\n var ctype = this._model.formGroup.get('type').value;\n if (this.isUpdateMode)\n return this.textTypes.indexOf(ctype) >= 0 ? this.textTypes : this.fileTypes;\n else {\n if (this.whiteListFileTypes?.length > 0) {\n return this.fileTypes.filter((item) => this.whiteListFileTypes.includes(item));\n }\n return this.textTypes.concat(this.fileTypes);\n }\n }\n\n typeExtensions = {\n 0: [\"pdf\"],\n 1: [\"ogm\", \"wmv\", \"mpg\", \"webm\", \"ogv\", \"mov\", \"asx\", \"mpeg\", \"mp4\", \"m4v\", \"avi\"],\n 3: [\"opus\", \"oga\", \"flac\", \"webm\", \"weba\", \"wav\", \"ogg\", \"m4a\", \"mp3\", \"mid\", \"amc\", \"aiff\", \"wma\", \"au\", \"aac\"],\n 5: [\"xbm\", \"tif\", \"pjp\", \"pjpeg\", \"svg\", \"jpg\", \"jpeg\", \"ico\", \"tiff\", \"git\", \"svg\", \"bmp\", \"png\", \"jfif\", \"webp\"]\n };\n\n getValidFileExtensions(): string {\n return (this.typeExtensions[this._model.formGroup.get('type').value] as [])\n .map((e) => '.' + e)\n .join(',');\n }\n\n isSelectedFileCompatibleWithType(formGroup: FormGroup) {\n var file = formGroup.get('file').value.get('file') as File;\n if (file == null) return true;\n var extension = file.name.split(\".\").reverse()[0].toLowerCase();\n var type = formGroup.get('type').value;\n var extensions = this.typeExtensions[type];\n if (extensions.indexOf(extension) > -1)\n return true;\n return false;\n }\n\n fileTypes: FileType[] = [\n FileType.Audio,\n FileType.Image,\n FileType.Pdf,\n FileType.Video\n ];\n\n textTypes: FileType[] = [\n FileType.ExternalLink,\n FileType.Text,\n FileType.Youtube\n ];\n\n\n isDataModel(type: number) {\n if (this.textTypes.indexOf(type) >= 0)\n return true;\n return false;\n }\n\n\n\n isFileModel(type: number) {\n if (this.fileTypes.indexOf(type) >= 0)\n return true;\n return false;\n }\n\n\n\n onFileChange($event: any, editableModel: EditableItem) {\n if (!$event.target.files) return;\n this.resetTemporyProperties(editableModel);\n const formData = new FormData();\n var file = $event.target.files[0];\n formData.append('file', file, file.name);\n editableModel.formGroup.get('file').setValue(formData);\n }\n\n onAdd(editableModel: EditableItem) {\n if (this.validateModel(editableModel))\n this.saveChanges(editableModel);\n }\n\n onDiscardChanges(editableModel: EditableItem) {\n editableModel.revertToSavedState();\n editableModel.mode = \"view\";\n this.announcementUpdated.emit(null);\n }\n\n validateModel(editableModel: EditableItem): boolean {\n var currentModel = editableModel.currentModel;\n if (this.isFileModel(currentModel.type) && (currentModel.file == null && (currentModel.announcementId == null || currentModel.announcementId == 0))) {\n this.modalService.warn(\"The Type of Announcement selected requires a file to be uploaded in the Data / Link Section. Please upload a file!\", \"Required\");\n return false;\n }\n else if (this.isDataModel(currentModel.type) && !currentModel.data) {\n this.modalService.warn(\"The Type of Announcement selected requires an external link in the Data / Link Section. Please enter text or a URL!\", \"Required\");\n return false;\n }\n else if (currentModel.type == this.announcementType.Youtube ||\n currentModel.type == this.announcementType.ExternalLink) {\n var isvalid = new FormControl(currentModel.data, [urlValidator]).valid;\n if (!isvalid) {\n this.modalService.warn(\"URL is not in correct format(https://domain.com/...) !\", \"Valid Format\");\n return false;\n }\n }\n\n return true;\n }\n\n resetTemporyProperties(editableModel: EditableItem) {\n editableModel.model.file = null;\n editableModel.model.progress = \"0\";\n if (!editableModel.formGroup.get('file'))\n editableModel.formGroup.addControl('file', new FormControl(null));\n if (!editableModel.formGroup.get('progress'))\n editableModel.formGroup.addControl('progress', new FormControl(\"0\"));\n }\n\n getFileInputAccept(type: number) {\n return contentAccepts[type];\n }\n\n get isUpdateMode(): boolean {\n return this._model.model.announcementId > 0;\n }\n getAnnouncementGroups() {\n this.announcementGroups$ = new Observable((observer: Observer) => {\n observer.next(this._model.formGroup.get('groupName').value);\n }).pipe(\n switchMap((groupName: string) => {\n if (groupName) {\n this.announcementGroupLoader = true;\n return this.announcementService.getAnnouncementGroups(groupName).pipe(\n map((data: string[]) => (data && data) || []),\n tap(\n () => noop,\n (err) => {\n var rrr = (err && err.message) || 'Something goes wrong';\n }\n ),\n finalize(() => {\n this.announcementGroupLoader = false;\n })\n );\n }\n\n return of([]);\n })\n );\n }\n onSelectAnnouncementGroup(event) {\n this._model.formGroup.get('groupName').setValue(event.value);\n }\n\n}\n","
      \n \n \n \n {{item.name}} [{{item.siteReference}}]\n Template\n \n Shared By {{item.companyName}}\n \n \n \n
      \n","import { UserService } from 'src/app/services/user.service';\nimport { finalize } from 'rxjs/operators';\nimport { SiteService } from 'src/app/services/site.service';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { LocalStorageKey } from 'src/app/enums/local-storage-key.enum';\nimport { SiteListQueryModel } from 'src/app/models/site-list-query-model';\nimport { SiteDetailsViewModel } from 'src/app/models/site-viewmodel';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { SiteTemplateStatus } from 'src/app/enums/site-template-status.enum';\n\n@Component({\n selector: 'obc-site-selector-withexternal',\n templateUrl: './site-selector-withexternal.component.html',\n styleUrls: ['./site-selector-withexternal.component.scss']\n})\nexport class SiteSelectorWithExternalComponent implements OnInit {\n //variables\n sites: SiteDetailsViewModel[];\n loading: boolean = false;\n sites$: Observable;\n term$ = new BehaviorSubject(null);\n formControl = new FormControl(null, [Validators.required]);\n _required = false;\n _siteId: number = null;\n _siteSupplierId: number = null;\n public selectedSite = new BehaviorSubject(null);\n onlyActiveSites: boolean = true;\n onlyRealSites: boolean = true;\n\n //input-outputs\n @Input() maxItems = 10;\n @Input() excludeList: number[] = [];\n @Input() notSelectedSiteLabel: string = null;\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl.setValidators(Validators.required);\n }\n };\n @Output() siteSelect = new EventEmitter();\n @Output() siteIdSelect = new EventEmitter();\n\n @Input() set siteId(value: number) {\n if (!value) return;\n this._siteId = value;\n this.formControl.setValue(value);\n };\n\n @Input() set siteSupplierId(value: number) {\n if (!value) return;\n this._siteSupplierId = value;\n this.formControl.setValue(value);\n };\n\n constructor(private siteService: SiteService, private userService: UserService) { }\n\n ngOnInit(): void {\n this.formControl.valueChanges.subscribe(res => {\n if (this.sites) {\n if (res == null || res == 0) {\n this.siteSelect.emit(null);\n this.siteIdSelect.emit(null);\n this.selectedSite.next(null);\n } else {\n var site = this.sites.find(x => x.id == res);\n if (site == null) {\n } else {\n this.siteSelect.emit(site);\n this.selectedSite.next(site);\n this.siteIdSelect.emit(site.id);\n this.saveDefaultSite()\n }\n }\n }\n });\n\n setTimeout(() => {\n this.getSiteList();\n }, 250)\n }\n\n createQuery(): SiteListQueryModel {\n var query = {\n activeStatus: this.onlyActiveSites ? SiteActiveStatus.Active : SiteActiveStatus.InActive,\n templateStatus: this.onlyRealSites ? SiteTemplateStatus.Normal : SiteTemplateStatus.Templates,\n pagingInfo: {\n pageNumber: null,\n pageSize: null,\n },\n searchTerm: \"\",\n };\n return query;\n }\n\n getSiteList() {\n this.loading = true;\n\n var query = this.createQuery();\n this.siteService.getAllSites(query)\n .pipe(finalize(() => { this.loading = false; }))\n .subscribe(res => {\n this.setReponse(res.data);\n });\n\n }\n\n private setReponse(res: SiteDetailsViewModel[]) {\n let that = this;\n res = res.filter(site => this.userService.hasAccessToManageSite(site));\n this.sites = res.filter(function (el) {\n return that.excludeList.filter(function (selected_el) {\n return selected_el == el.id;\n }).length == 0\n });\n\n if (this._siteSupplierId != null) {\n var site = this.sites?.filter(x => x.externalSiteSupplierId == this._siteSupplierId)[0];\n if (site != null) {\n this._siteId = site.id;\n this.formControl.setValue(site.id);\n this.selectedSite.next(site);\n }\n }\n\n if (this._siteId == null) // if site set do not change that\n this.loadDefaultSite();\n\n if (this.selectedSite.value == null) {\n var site = this.sites.find(x => x.id == this.formControl.value);\n if (site) {\n this.selectedSite.next(site);\n }\n }\n this.sites$ = of(this.getNthItems(this.sites, this.maxItems));\n this.term$.subscribe(term => {\n if (term) {\n var filteredSites = this.searchSites(term);\n if (term != this.reachToEndTerm)\n this.reachToEnd = false;\n this.sites$ = of(this.getNthItems(filteredSites, this.reachToEnd ? filteredSites.length : this.maxItems));\n } else {\n this.sites$ = of(this.getNthItems(this.sites, this.reachToEnd ? this.sites.length : this.maxItems))\n }\n });\n }\n\n searchSites(term: string) {\n return this.sites.filter((item) => {\n return this.isMatched(term, item);\n });\n }\n\n isMatched(term: string, item: SiteDetailsViewModel): boolean {\n if (!term) return true;\n term = term.toLowerCase();\n return (item.name && item.name.toLowerCase().indexOf(term) > -1) ||\n (item.siteReference && item.siteReference.toLowerCase().indexOf(term) > -1);\n }\n\n getNthItems(array: SiteDetailsViewModel[], n: number): SiteDetailsViewModel[] {\n if (!array || array.length == 0 || n <= 0) return [];\n var max = Math.min(array.length, n);\n var arr = [];\n for (var i = 0; i < max; i++)\n arr.push(array[i]);\n if (this.selectedSite.value && !arr.find(x => x.id == this.selectedSite.value.id))\n arr.push(this.selectedSite.value);\n return arr;\n }\n\n loadDefaultSite() {\n if (!this._required) return;\n\n var selectedSiteId = localStorage\n ? parseInt(localStorage.getItem(LocalStorageKey.LastVisitedSiteId), 10)\n : null;\n\n if (this.sites?.length) {\n if (this.sites.find(x => x.id == selectedSiteId))\n this.formControl.setValue(selectedSiteId);\n else {\n let id = this.sites[0].id;\n this.formControl.setValue(id);\n }\n }\n }\n\n saveDefaultSite() {\n if (localStorage && this.selectedSite?.value) {\n localStorage.setItem(\n LocalStorageKey.LastVisitedSiteId,\n this.selectedSite.value.id.toString()\n );\n }\n }\n\n reachToEnd = false;\n reachToEndTerm = \"\";\n onScrollToEnd() {\n this.reachToEnd = true;\n this.reachToEndTerm = this.term$.value;\n this.term$.next(this.term$.value)\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sort'\n})\nexport class SortPipe implements PipeTransform {\n transform(list: any[], field: string, desc: boolean): any[] {\n if (!Array.isArray(list)) {\n return;\n }\n if (!field)\n return list;\n var fac = desc ? 1 : -1;\n list.sort((a: any, b: any) => {\n var v1;\n var v2;\n var sections = field.split('.');\n sections.forEach(section => {\n if (v1 == null && v2 == null) {\n v1 = a[section];\n v2 = b[section];\n } else {\n v1 = v1[section];\n v2 = v2[section];\n }\n });\n if (v1 == null && v2 == null)\n return 0;\n if (v1 == null && v2 != null)\n return -1 * fac;\n if (v2 == null && v1 != null)\n return 1 * fac;\n\n v1 = v1.toString().toLowerCase();\n v2 = v2.toString().toLowerCase();\n\n if (v1 < v2) {\n return -1 * fac;\n } else if (v1 > v2) {\n return 1 * fac;\n } else {\n return 0;\n }\n });\n return list;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SiteAnnouncementDisplayTime } from '../enums/site-announcement-display-time.enum';\n\n@Pipe({\n name: 'siteAnnouncementDisplayTime'\n})\nexport class SiteAnnouncementDisplayTimePipe implements PipeTransform {\n\n transform(value: any): unknown {\n if (value == SiteAnnouncementDisplayTime.AfterCheckin)\n return \"While Checked In\";\n if (value == SiteAnnouncementDisplayTime.WhileCheckin)\n return \"Check In Page\";\n if (value == SiteAnnouncementDisplayTime.AnyTime)\n return \"Both\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AnnouncementMode } from '../enums/announcement-mode.enum';\n\n@Pipe({\n name: 'announcementMode'\n})\nexport class AnnouncementModePipe implements PipeTransform {\n\n transform(value: unknown): any {\n if (value === AnnouncementMode.Silent) { return \"Silent\"; }\n if (value === AnnouncementMode.NotifyAlways) { return \"Notify Always\"; }\n if (value === AnnouncementMode.NotifyOnce) { return \"Notify Once\"; }\n \n return value;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SiteAnnouncementForceViewMode } from '../enums/site-announcement-force-view-mode';\n\n@Pipe({\n name: 'siteAnnouncementForceViewMode'\n})\nexport class SiteAnnouncementForceViewModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === SiteAnnouncementForceViewMode.Disable) return 'Disable';\n if (value === SiteAnnouncementForceViewMode.MandatoryView) return 'Mandatory View';\n if (value === SiteAnnouncementForceViewMode.MandatoryViewAndSignOff) return 'Mandatory View And SignOff';\n if (value === SiteAnnouncementForceViewMode.SetPlaythroughToMandatory) return 'Set playthrough to mandatory';\n return value?.toString();\n }\n\n}\n","\n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n Display Mode: \n \n \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      TitleTypeDisplay ModeData / LinkGroup Name
      \n {{an.model.title}}\n \n [in\n progress] \n {{getAnnouncementTypeLabel(an.model.type)}}\n
      \n ({{an.model.displayMode | announcementDisplayMode }})\n
      \n
      {{an.model.askMode | askMode}}\n
      \n
      \n {{an.model.data}}\n
      \n
      \n Open Link\n
      \n
      \n
      \n Download\n
      \n
      \n {{an.model.groupName}}\n \n
      \n \n \n \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n Sites of announcement: {{selectAnnouncement.title}}\n \n \n
      \n\n
      \n
      \n \n \n
      \n\n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n\n
      0\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Site
      {{site.siteName}}\n \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n \n Add To All Sites\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n
      \n
      \n \n \n \n \n
      \n
      \n \n \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n\n\n
      \n
      \n \n Add site to announcement\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n
      \n
      \n \n \n \n \n
      \n
      \n \n \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n","import { SitesOfAnnouncementViewModel } from './../../../models/announcement-viewmodel';\nimport { Component, OnInit } from '@angular/core';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { AnnouncementService } from 'src/app/services/announcement.service';\nimport { ClientAnnouncementViewModel, SiteAnnouncementAddModel, SiteAnnouncementUpdateModel, SiteAnnouncementViewModel, SitesOfAnnouncementQueryModel } from 'src/app/models/announcement-viewmodel';\nimport { FormControl, Validators } from '@angular/forms';\nimport { EditableItem } from 'src/app/models/editable-item';\nimport { HttpEventType } from '@angular/common/http';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { AnnouncementProcessStatus } from 'src/app/enums/announcement-process-status.enum';\nimport { ModalService } from '../../../services/modal.service';\nimport { urlValidator } from '../../../helpers/url-validator';\nimport { SiteActiveStatus } from '../../../enums/site-active-status.enum';\nimport { finalize } from 'rxjs/operators';\nimport { AnnouncementMode } from '../../../enums/announcement-mode.enum';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { UserService } from 'src/app/services/user.service';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { ToastrService } from 'ngx-toastr';\nimport { SiteAnnouncementForceViewMode } from 'src/app/enums/site-announcement-force-view-mode';\nimport { SiteAnnouncementDisplayTime } from 'src/app/enums/site-announcement-display-time.enum';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\n\n@Component({\n selector: 'obc-announcement',\n templateUrl: './announcement.component.html',\n styleUrls: ['./announcement.component.css']\n})\nexport class AnnouncementComponent implements OnInit {\n datetimePickerMode = DatetimePickerMode;\n\n inProgress: boolean = false;\n announcementProcessStatuses = AnnouncementProcessStatus;\n announcements: EditableItem[];\n newAnnouncement: EditableItem;\n announcementType = FileType;\n newAnnouncementForAll: EditableItem;\n announcementMode = AnnouncementMode;\n isActiveMode: boolean = true;\n currentCompany: CompanyViewModel;\n SiteAnnouncementForceViewMode = SiteAnnouncementForceViewMode;\n SiteAnnouncementDisplayTime = SiteAnnouncementDisplayTime;\n siteId: number = null;\n sitesOfAnnouncement: SitesOfAnnouncementViewModel[];\n\n constructor(private layoutService: LayoutService,\n private bsModalService: BsModalService,\n private announcementService: AnnouncementService,\n public modalService: ModalService,\n private toastr: ToastrService,\n private userService: UserService\n ) { }\n\n sortColumn: string;\n desc: boolean = true;\n sortBy(column: string) {\n if (column == this.sortColumn) {\n this.desc = !this.desc;\n } else {\n this.sortColumn = column;\n }\n }\n\n ngOnInit() {\n this.layoutService.header = \"Announcements\";\n this.init();\n this.userService.currentCompany$.subscribe(res => this.currentCompany = res);\n }\n\n get isTemplateCompany(): boolean {\n return this.currentCompany?.isTemplate ?? false;\n }\n\n get validators() {\n return {\n 'title': [Validators.required]\n };\n }\n\n private init() {\n this.loadAnnouncements();\n this.newAnnouncement = new EditableItem({\n title: null,\n url: null,\n data: null,\n type: this.announcementType.Pdf,\n isActive: true,\n file: null,\n progress: \"0\",\n groupName: \"\",\n } as ClientAnnouncementViewModel, this.validators);\n this.newAnnouncement.mode = \"view\";\n setTimeout(() => {\n this.newAnnouncement.mode = \"edit\";\n }, 500);\n }\n\n private loadAnnouncements(onlyActiveItems: boolean = null) {\n onlyActiveItems = onlyActiveItems ?? this.isActiveMode;\n this.inProgress = true;\n var state = onlyActiveItems ? SiteActiveStatus.Active : SiteActiveStatus.InActive;\n this.announcementService.getAll(state).subscribe(res => {\n this.announcements = res.map((i) => {\n return new EditableItem(i as ClientAnnouncementViewModel, this.validators);\n });\n }, err => { this.inProgress = false; }, () => { this.inProgress = false; });\n }\n\n\n onActiveChanged(value) {\n this.isActiveMode = value;\n this.loadAnnouncements(value);\n }\n\n saveChanges(editableModel: EditableItem) {\n this.inProgress = true;\n var model = editableModel.currentModel;\n var uploadEventHandler = (event) => {\n if (this.isFileModel(model.type)) {\n if (event.type === HttpEventType.UploadProgress)\n editableModel.formGroup.get('progress').setValue(`${Math.round(100 * event.loaded / event.total)}%`);\n else if (event.type === HttpEventType.Response) {\n editableModel.formGroup.get('progress').setValue(`100%`);\n }\n }\n };\n\n var errorHandler = (err) => {\n this.modalService.error(err, \"unable to save changes\");\n console.log('error : ', err);\n this.inProgress = false;\n this.init();\n }\n\n if (model.id) // update\n this.announcementService.update(model.id, model).subscribe(\n event => { uploadEventHandler(event); },\n err => { errorHandler(err) }, () => {\n this.inProgress = false;\n this.init();\n });\n else // add\n this.announcementService.add(model).subscribe(\n event => { uploadEventHandler(event); },\n err => { errorHandler(err) }, () => {\n this.inProgress = false;\n this.init();\n });\n }\n\n onSwitchMode(editableModel: EditableItem) {\n editableModel.switchMode();\n editableModel.revertToSavedState();\n this.resetTemporyProperties(editableModel);\n }\n\n isDataModel(type: number) {\n if (type == this.announcementType.Text ||\n type == this.announcementType.ExternalLink ||\n type == this.announcementType.Youtube)\n return true;\n return false;\n }\n\n isFileModel(type: number) {\n if (type == this.announcementType.Audio ||\n type == this.announcementType.Image ||\n type == this.announcementType.Pdf ||\n type == this.announcementType.Video\n )\n return true;\n return false;\n }\n\n onFileChange($event: any, editableModel: EditableItem) {\n if (!$event.target.files) return;\n this.resetTemporyProperties(editableModel);\n\n const formData = new FormData();\n var file = $event.target.files[0];\n formData.append('file', file, file.name);\n editableModel.formGroup.get('file').setValue(formData);\n }\n\n onSave(editableModel: EditableItem) {\n if (this.validateModel(editableModel))\n this.saveChanges(editableModel);\n }\n\n onAdd(editableModel: EditableItem) {\n if (this.validateModel(editableModel))\n this.saveChanges(editableModel);\n }\n\n validateModel(editableModel: EditableItem): boolean {\n var currentModel = editableModel.currentModel;\n if (this.isFileModel(currentModel.type) && (currentModel.file == null && currentModel.url == null)) {\n this.modalService.warn(\"The Type of Announcement selected requires a file to be uploaded in the Data / Link Section. Please upload a file!\", \"Required\");\n return false;\n }\n else if (this.isDataModel(currentModel.type) && !currentModel.data) {\n this.modalService.warn(\"The Type of Announcement selected requires an external link in the Data / Link Section. Please enter text or a URL!\", \"Required\");\n return false;\n }\n else if (currentModel.type == this.announcementType.Youtube ||\n currentModel.type == this.announcementType.ExternalLink) {\n var isvalid = new FormControl(currentModel.data, [urlValidator]).valid;\n if (!isvalid) {\n this.modalService.warn(\"URL is not in correct format(https://domain.com/...) !\", \"Valid Format\");\n return false;\n }\n }\n return true;\n }\n\n selectAnnouncement: ClientAnnouncementViewModel;\n bsModalRef: any;\n addToAllSiteModalref: any;\n addSiteToAnnouncementModalref: any;\n onViewSites(template, model: ClientAnnouncementViewModel) {\n this.selectAnnouncement = model;\n this.getSitesOfAnnouncement(model.id);\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: false,\n });\n }\n\n getSitesOfAnnouncement(announcementId) {\n var obj: SitesOfAnnouncementQueryModel = { announcementId: announcementId };\n this.announcementService.getSitesOfAnnouncement(obj).subscribe(res => {\n this.sitesOfAnnouncement = res;\n });\n }\n\n onRemove(model: ClientAnnouncementViewModel) {\n this.modalService.confirm(\"Are you sure you want to delete selected announcement?\").subscribe(del => {\n if (del === true) {\n this.inProgress = true;\n this.announcementService.remove(model.id)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(\n res => {\n if (res == false) // has multiple related record\n {\n this.modalService.info(\"This announcement has multiple relations to another records, announcement status set to in-active\")\n .subscribe(modalRes => {\n this.init();\n })\n }\n else\n this.init();\n },\n err => {\n this.modalService.error(err)\n .subscribe(modalRes => {\n this.init();\n })\n }, () => {\n });\n }\n });\n }\n\n resetTemporyProperties(editableModel: EditableItem) {\n editableModel.model.file = null;\n editableModel.model.progress = \"0\";\n if (!editableModel.formGroup.get('file'))\n editableModel.formGroup.addControl('file', new FormControl(null));\n if (!editableModel.formGroup.get('progress'))\n editableModel.formGroup.addControl('progress', new FormControl(\"0\"));\n }\n\n onAnnouncementCreated($event) {\n this.init();\n }\n\n onAnnouncementUpdated($event) {\n if ($event != null)\n this.init();\n }\n\n isModelDataUrl(type: FileType) {\n return type == this.announcementType.Youtube ||\n type == this.announcementType.ExternalLink;\n }\n\n getAnnouncementTypeLabel(type: FileType) {\n if (type == this.announcementType.ExternalLink)\n return \"External Link\";\n else\n return this.announcementType[type];\n }\n\n removeFromAllSitesOfCompany(id: number) {\n this.modalService.confirm('Are you sure you want to delete selected announcement from all sites?', 'Delete').subscribe(del => {\n if (del === true) {\n this.inProgress = true;\n this.announcementService.RemoveAnnouncementFromAllSitesOfCompany(id).subscribe(\n res => {\n if (res.success) {\n this.toastr.info(res.message);\n this.getSitesOfAnnouncement(id);\n }\n else\n this.modalService.error(res.message);\n },\n err => {\n this.modalService.error(err);\n }, () => {\n this.inProgress = false;\n this.init();\n });\n }\n });\n }\n\n openAddToAllSitesOfCompanyModal(template, selectedAnnouncement: ClientAnnouncementViewModel) {\n this.newAnnouncementForAll = new EditableItem({\n announcementId: selectedAnnouncement.id,\n validFrom: null,\n validTo: null,\n mode: this.announcementMode.Silent,\n forceViewMode: this.SiteAnnouncementForceViewMode.Disable,\n displayTime: this.SiteAnnouncementDisplayTime.AfterCheckin,\n } as SiteAnnouncementUpdateModel, {\n });\n this.addToAllSiteModalref = this.modalService.show(template, 'modal-lg');\n }\n\n addToAllSitesOfCompanyModal() {\n var validTo = this.newAnnouncementForAll.formGroup.get('validTo').value;\n var validFrom = this.newAnnouncementForAll.formGroup.get('validFrom').value;\n\n if (this.newAnnouncementForAll.formGroup.get('displayTime').value == this.SiteAnnouncementDisplayTime.WhileCheckin) {\n this.newAnnouncementForAll.formGroup.get('mode').setValue(this.announcementMode.Silent);\n }\n if (validTo && validFrom && Date.parse(validTo) <= Date.parse(validFrom))\n this.modalService.error('The beginning date of validation cannot be after end date of validation!')\n .subscribe(modalRes => {\n this.init();\n });\n else {\n this.modalService.hide(this.addToAllSiteModalref);\n this.inProgress = true;\n this.announcementService.AddAnnouncementToAllSitesOfCompany(this.newAnnouncementForAll.formGroup.value).subscribe(\n res => {\n if (res.success) {\n this.toastr.info(res.message);\n this.getSitesOfAnnouncement(this.newAnnouncementForAll.formGroup.get(\"announcementId\").value);\n }\n else\n this.modalService.error(res.message);\n },\n err => {\n this.modalService.error(err);\n }, () => {\n this.inProgress = false;\n this.init();\n });\n }\n }\n\n onChangeSelectedSite(site) {\n this.siteId = site.id;\n }\n\n openAddSitesToAnnouncement(template, selectedAnnouncement: ClientAnnouncementViewModel) {\n this.newAnnouncementForAll = new EditableItem({\n siteId: this.siteId,\n announcementId: selectedAnnouncement.id,\n validFrom: null,\n validTo: null,\n mode: this.announcementMode.Silent,\n forceViewMode: this.SiteAnnouncementForceViewMode.Disable,\n displayTime: this.SiteAnnouncementDisplayTime.AfterCheckin,\n } as SiteAnnouncementAddModel, {\n });\n this.addToAllSiteModalref = this.modalService.show(template, 'modal-lg');\n }\n\n addSiteToAnnouncementClick() {\n var validTo = this.newAnnouncementForAll.formGroup.get('validTo').value;\n var validFrom = this.newAnnouncementForAll.formGroup.get('validFrom').value;\n\n if (this.newAnnouncementForAll.formGroup.get('displayTime').value == this.SiteAnnouncementDisplayTime.WhileCheckin) {\n this.newAnnouncementForAll.formGroup.get('mode').setValue(this.announcementMode.Silent);\n }\n if (validTo && validFrom && Date.parse(validTo) <= Date.parse(validFrom))\n this.modalService.error('The beginning date of validation cannot be after end date of validation!')\n .subscribe(modalRes => {\n this.init();\n });\n else {\n this.modalService.hide(this.addToAllSiteModalref);\n this.inProgress = true;\n this.announcementService.addSiteAnnouncement(this.newAnnouncementForAll.formGroup.value).subscribe(\n res => {\n this.getSitesOfAnnouncement(this.newAnnouncementForAll.formGroup.get(\"announcementId\").value);\n },\n err => {\n this.inProgress = false;\n this.modalService.error(err);\n\n }, () => {\n this.inProgress = false;\n this.init();\n });\n }\n }\n\n RemoveSiteFromAnnouncement(site) {\n this.modalService.confirm('Are you sure you want to delete selected site from announcement?', 'Delete').subscribe(del => {\n if (del === true) {\n this.inProgress = true;\n this.announcementService.removeSiteAnnouncement(site.siteAnnouncementId).subscribe(res => {\n this.getSitesOfAnnouncement(site.announcementId);\n }, err => {\n this.inProgress = false;\n },\n () => {\n this.inProgress = false;\n this.init();\n });\n }\n });\n }\n}\n\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-announcement-manager',\n templateUrl: './announcement-manager.component.html',\n styleUrls: ['./announcement-manager.component.css']\n})\nexport class AnnouncementManagerComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError } from 'rxjs/operators';\nimport { throwError } from 'rxjs';\nimport { ScannableGroupModel } from '../models/scannable-group-model';\nimport { Observable } from 'rxjs';\nimport { ErrorService } from './error.service';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScannableService {\n\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n public addGroup(model: ScannableGroupModel) {\n return this.http.post(`/api/scannable/add-group`, model)\n .pipe(catchError((error) => throwError(error)))\n }\n\n public removeGroup(id: number) {\n return this.http.get(`/api/scannable/remove-group/${id}`)\n .pipe(catchError((error) => throwError(error)))\n }\n\n public getGroups(): Observable {\n return this.http.get(`/api/scannable/get-groups`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n public getItems(id: number) {\n return this.http.get(`/api/scannable/get-items/${id}`)\n .pipe(catchError((error) => throwError(error)))\n }\n\n public addItem(model: any) {\n return this.http.post(`/api/scannable/add-item`, model)\n .pipe(catchError((error) => throwError(error)))\n }\n\n public updateItem(id: number, model: any) {\n return this.http.post(`/api/scannable/update-item/${id}`, model)\n .pipe(catchError((error) => throwError(error)))\n }\n\n public removeItem(id: number) {\n return this.http.get(`/api/scannable/remove-item/${id}`)\n .pipe(catchError((error) => throwError(error)))\n }\n\n public updateGroup(id: number, model: any) {\n return this.http.post(`/api/scannable/update-group/${id}`, model)\n .pipe(catchError((error) => throwError(error)))\n }\n}\n","
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n

      \n Loading ...\n

      \n

      \n Nothing Found\n

      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      NameDescriptionUrlFileGroup
      \n \n
      \n {{item.name}}\n \n {{item.description}}\n \n Open Url\n \n \n \n {{getGroupName(item)}} {{getGroupLabel(item)}}\n \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n
      \n Edit Item\n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { ScannableService } from 'src/app/services/scannable.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { finalize } from 'rxjs/operators';\nimport { FileCategory } from 'src/app/enums/file-category.enum';\nimport { FileStorageService } from 'src/app/services/file-storage.service';\nimport { HttpEventType } from '@angular/common/http';\nimport { urlValidator } from 'src/app/helpers/url-validator';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { FileUploadAcceptType } from 'src/app/enums/file-upload-accept-type';\n\n@Component({\n selector: 'obc-scannable-items',\n templateUrl: './scannable-items.component.html',\n styleUrls: ['./scannable-items.component.css']\n})\nexport class ScannableItemsComponent implements OnInit {\n FileUploadAcceptType = FileUploadAcceptType;\n inProgress = false;\n inEditProgress = false;\n formGroup = new FormGroup({\n name: new FormControl(null, [Validators.required]),\n description: new FormControl(null, []),\n url: new FormControl(null, [urlValidator]),\n file: new FormControl(null, []),\n scannableGroupId: new FormControl(null, [Validators.required]),\n });\n items = [];\n groups = [];\n filterListTerm: string = null;\n\n resetFormGroup() {\n var id = this.formGroup.controls['scannableGroupId'].value;\n this.formGroup.reset();\n this.formGroup.controls['scannableGroupId'].setValue(id);\n }\n\n constructor(private scannableService: ScannableService,\n private bsModalService: BsModalService,\n private fileStorageService: FileStorageService,\n private layoutService: LayoutService,\n private router: Router,\n private route: ActivatedRoute,\n private modalService: ModalService) { }\n\n ngOnInit() {\n this.getGroups();\n this.layoutService.header = \"Manage Scannable Items\";\n this.route.params\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe((param: Params) => {\n var groupId = +param['id'];\n this.formGroup.controls['scannableGroupId'].setValue(groupId);\n this.getItems(groupId);\n });\n }\n\n getGroups() {\n this.inProgress = true;\n this.scannableService.getGroups()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.groups = res;\n if (this.formGroup.controls['scannableGroupId'].value == null && this.groups && this.groups.length)\n this.formGroup.controls['scannableGroupId'].setValue(this.groups[0].id);\n this.getItems();\n })\n }\n\n changeGroup(groupId?: number) {\n var id = groupId ?? this.formGroup.controls['scannableGroupId'].value;\n if (!id)\n return;\n this.router.navigate([`scannables/${id}/items`], { skipLocationChange: false });\n }\n\n getItems(groupId?: number) {\n var id = groupId ?? this.formGroup.controls['scannableGroupId'].value;\n if (!id)\n return;\n\n this.inProgress = true;\n this.scannableService.getItems(id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.items = res;\n })\n }\n\n uploadEventHandler = (event) => {\n if (true) { // this.isFileModel(model.type)\n if (event.type === HttpEventType.UploadProgress) {\n //editableModel.formGroup.get('progress').setValue(`${Math.round(100 * event.loaded / event.total)}%`);\n }\n else if (event.type === HttpEventType.Response) {\n //editableModel.formGroup.get('progress').setValue(`100%`);\n }\n } else {\n }\n };\n\n onAddItem() {\n var signedUploadInfoModel = this.formGroup.controls['file'].value != null ? {\n fileCategory: FileCategory.ScannableItemFile,\n filename: this.formGroup.controls['file'].value.name,\n } : null;\n\n var model = {\n id: null,\n name: this.formGroup.controls['name'].value,\n description: this.formGroup.controls['description'].value,\n url: this.formGroup.controls['url'].value,\n storageKey: null,\n scannableGroupId: this.formGroup.controls['scannableGroupId'].value,\n };\n\n if (signedUploadInfoModel != null) {\n var file = this.formGroup.controls['file'].value;\n var uploadSuccess = true;\n this.inProgress = true;\n this.fileStorageService.getSignedUploadInfo(signedUploadInfoModel)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(uploadInfo => {\n var form = new FormData();\n form.append(\"file\", file);\n this.inProgress = true;\n this.fileStorageService.uploadFile(form, uploadInfo)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(\n event => { this.uploadEventHandler(event); },\n error => {\n this.modalService.error(error, \"unable to add item\");\n this.inProgress = false;\n }, () => {\n if (uploadSuccess) {\n model.storageKey = uploadInfo.storageKey;\n this.addItem(model);\n } else {\n this.inProgress = false;\n }\n }\n )\n })\n } else {\n this.addItem(model);\n }\n }\n\n addItem(model: any) {\n this.inProgress = true;\n this.scannableService.addItem(model)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.items.push(res);\n this.resetFormGroup();\n });\n }\n\n getGroupName(item) {\n return this.groups.find(i => i.id == item.scannableGroupId).name;\n }\n\n getGroupLabel(item) {\n return this.groups.find(i => i.id == item.scannableGroupId).label;\n }\n\n onRemoveItem(item: any) {\n this.modalService.confirm(`Are you sure you want to delete '${item.name}'`, \"Delete Item\", \"Yes, I'm Sure\", \"Cancel\").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.scannableService.removeItem(item.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.items.splice(this.items.indexOf(item), 1);\n }, err => {\n if (err.status == 547) {\n this.modalService.error(\"This scannable item is used in user attendance or ...\", \"You can't remove this scannable item\").subscribe(res => {\n this.getItems();\n });\n }\n }, () => {\n });\n }\n })\n }\n\n editFormGroup: FormGroup;\n bsModalRef: any;\n onShowUpdateItem(template, item) {\n this.editFormGroup = new FormGroup({\n id: new FormControl(item.id, [Validators.required]),\n name: new FormControl(item.name, [Validators.required]),\n description: new FormControl(item.description, []),\n url: new FormControl(item.url, [urlValidator]),\n file: new FormControl(null, []),\n removeFile: new FormControl(false, []),\n scannableGroupId: new FormControl(item.scannableGroupId, [Validators.required]),\n });\n this.bsModalRef = this.bsModalService.show(template);\n }\n\n onUpdateItem() {\n var removeFile = this.editFormGroup.controls['removeFile'].value;\n var signedUploadInfoModel = this.editFormGroup.controls['file'].value != null && !removeFile ? {\n fileCategory: FileCategory.ScannableItemFile,\n filename: this.editFormGroup.controls['file'].value.name,\n } : null;\n\n var model = {\n id: this.editFormGroup.controls['id'].value,\n name: this.editFormGroup.controls['name'].value,\n description: this.editFormGroup.controls['description'].value,\n url: this.editFormGroup.controls['url'].value,\n storageKey: null,\n scannableGroupId: this.editFormGroup.controls['scannableGroupId'].value,\n removeFile: removeFile,\n };\n\n if (signedUploadInfoModel != null) {\n var file = this.editFormGroup.controls['file'].value;\n var uploadSuccess = true;\n this.inEditProgress = true;\n this.fileStorageService.getSignedUploadInfo(signedUploadInfoModel)\n .pipe(finalize(() => this.inEditProgress = false))\n .subscribe(uploadInfo => {\n var form = new FormData();\n form.append(\"file\", file);\n this.inEditProgress = true;\n this.fileStorageService.uploadFile(form, uploadInfo)\n .pipe(finalize(() => this.inEditProgress = false))\n .subscribe(\n event => { this.uploadEventHandler(event); },\n error => {\n this.modalService.error(error, \"unable to edit item\");\n this.inProgress = false;\n }, () => {\n if (uploadSuccess) {\n model.storageKey = uploadInfo.storageKey;\n this.updateItem(model);\n } else {\n this.inProgress = false;\n }\n }\n )\n })\n } else {\n this.updateItem(model);\n }\n }\n\n updateItem(model) {\n this.inEditProgress = true;\n this.scannableService.updateItem(model.id, model)\n .pipe(finalize(() => this.inEditProgress = false))\n .subscribe(res => {\n var item = this.items.find(i => i.id == model.id);\n var index = this.items.indexOf(item);\n this.items.splice(index, 1, res);\n this.bsModalRef.hide();\n });\n }\n\n\n}\n","
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n

      \n Loading ...\n

      \n

      \n Nothing Found\n

      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      NameLabelAllow Multi ScanItems Count
      \n {{group.name}}\n \n {{group.label}}\n \n {{group.allowMultiScan ? \"Yes\" : \"No\"}}\n \n {{group.count}}\n \n
      \n \n Items\n \n \n \n \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n\n
      \n \n
      \n Edit Group\n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormControl, Validators, FormBuilder } from '@angular/forms';\nimport { ScannableService } from 'src/app/services/scannable.service';\nimport { finalize } from 'rxjs/operators';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ScannableGroupModel } from '../../../models/scannable-group-model';\nimport { LayoutService } from 'src/app/services/layout.service';\n\n@Component({\n selector: 'obc-scannable-groups',\n templateUrl: './scannable-groups.component.html',\n styleUrls: ['./scannable-groups.component.css']\n})\nexport class ScannableGroupsComponent implements OnInit {\n formGroup = new FormGroup({\n name: new FormControl(null, [Validators.required]),\n label: new FormControl(null, [Validators.required]),\n allowMultiScan: new FormControl(false, [Validators.required]),\n });\n\n editFormGroup: FormGroup;\n inProgress = false;\n inEditProgress = false;\n errorEditModalMessage = \"\";\n groups: ScannableGroupModel[] = [];\n sites: any[] = [];\n selectedGroup: ScannableGroupModel;\n bsModalRef: any;\n constructor(private scannableService: ScannableService,\n private bsModalService: BsModalService,\n private modalService: ModalService,\n private layoutService: LayoutService,\n private fb: FormBuilder) { }\n\n ngOnInit() {\n this.layoutService.header = \"Manage Scannable Group\";\n this.formGroup = this.fb.group({\n name: new FormControl(null, [Validators.required]),\n label: new FormControl(null, [Validators.required]),\n allowMultiScan: new FormControl(false, [Validators.required]),\n });\n this.getGroups();\n }\n\n getGroups() {\n this.inProgress = true;\n this.scannableService.getGroups()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.groups = res;\n });\n }\n\n addGroup() {\n var model = {\n name: this.formGroup.controls['name'].value,\n label: this.formGroup.controls['label'].value,\n allowMultiScan: this.formGroup.controls['allowMultiScan'].value,\n } as ScannableGroupModel;\n this.inProgress = true;\n this.scannableService.addGroup(model)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.resetFormGroup();\n this.getGroups();\n });\n }\n\n resetFormGroup() {\n this.formGroup.reset();\n }\n\n onRemoveGroup(group) {\n this.modalService.confirm(`Are you sure you want to delete '${group.name}' and it's items`, \"Delete Group\", \"Yes, I'm Sure\", \"Cancel\").subscribe(res => {\n if (res) {\n this.scannableService.removeGroup(group.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.getGroups();\n }, err => {\n if (err.status == 547) {\n this.modalService.error(\"This scannable group is used in user attendance or ...\", \"You can't remove this scannable group\").subscribe(res => {\n this.getGroups();\n });\n }\n }, () => {\n });\n }\n })\n }\n\n onUpdateGroup() {\n var model = {\n name: this.editFormGroup.controls['name'].value,\n label: this.editFormGroup.controls['label'].value,\n allowMultiScan: this.editFormGroup.controls['allowMultiScan'].value,\n };\n var id = +this.editFormGroup.controls['id'].value;\n this.inProgress = true;\n this.scannableService.updateGroup(id, model)\n .pipe(finalize(() => {\n this.inProgress = false;\n this.bsModalRef.hide();\n }))\n .subscribe(res => {\n this.selectedGroup.name = model.name;\n this.selectedGroup.label = model.label;\n this.selectedGroup.allowMultiScan = model.allowMultiScan;\n });\n }\n\n onShowEditModal(template, group) {\n this.selectedGroup = group;\n this.editFormGroup = new FormGroup({\n id: new FormControl(this.selectedGroup.id, [Validators.required]),\n name: new FormControl(this.selectedGroup.name, [Validators.required]),\n label: new FormControl(this.selectedGroup.label, [Validators.required]),\n allowMultiScan: new FormControl(this.selectedGroup.allowMultiScan, [Validators.required]),\n });\n this.bsModalRef = this.bsModalService.show(template);\n }\n\n onManageSitesModal(template, group) {\n\n }\n\n onRemoveSite(site) {\n\n }\n}\n","export enum MultipleCheckinType {\n Disable = 0,\n Enable = 1,\n EnableForThisCompany = 2\n}\n","export enum AutomaticCheckInMode {\n Disable = 0,\n EnableForRegularUsers = 1,\n EnableForFrequentUsers = 2\n}\n","export enum MaxPeopleOnSiteMode {\n Disable = 0,\n Warning = 1,\n Reject = 2,\n}\n","export enum AutoCheckOutType {\n Disable = 0,\n Optional = 1,\n Mandatory = 2,\n}\n","export enum ImportRecordState {\n Valid = 0,\n Invalid = 1,\n Corrupted = 2,\n}\n","export enum QrCodeCheckinMode {\n Disable = 0,\n Anonymous = 1,\n AnonymousFlutterWeb = 2,\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'nicyNull'\n})\nexport class NicyNullPipe implements PipeTransform {\n\n transform(value: any): any {\n return value != null ? value : \"[NOT SPECIFIED]\";\n }\n\n}\n","export enum CheckinLocationMode {\n Disable = 0,\n Optional = 1,\n Mandatory = 2,\n MandatoryOnSite = 3,\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { CheckinLocationMode } from '../enums/checkin-location-mode.enum';\n\n@Pipe({\n name: 'checkinLocationMode'\n})\nexport class CheckinLocationModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === CheckinLocationMode.Disable) return \"Disable\";\n if (value === CheckinLocationMode.Optional) return \"Optional\";\n if (value === CheckinLocationMode.Mandatory) return \"Mandatory\";\n if (value === CheckinLocationMode.MandatoryOnSite) return \"Mandatory (on-site only)\";\n return value?.toString() ?? '?';\n }\n\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {AutomaticCheckInMode} from '../enums/automatic-checkin-mode';\n\n@Pipe({\n name: 'automaticCheckinMode'\n})\nexport class AutomaticCheckinModePipe implements PipeTransform {\n\n transform(value: unknown, isShortName: boolean = false): any {\n if(isShortName) {\n if (value === AutomaticCheckInMode.Disable) { return \"Disable\"; }\n if (value === AutomaticCheckInMode.EnableForFrequentUsers) { return \"Enable For Frequent Users\"; }\n if (value === AutomaticCheckInMode.EnableForRegularUsers) { return \"Enable\"; }\n } else {\n if (value === AutomaticCheckInMode.Disable) { return \"Disable\"; }\n if (value === AutomaticCheckInMode.EnableForFrequentUsers) { return \"Enable For Frequent Users (Requires One Self Check-In)\"; }\n if (value === AutomaticCheckInMode.EnableForRegularUsers) { return \"Enable (Requires One Self Check-In)\"; }\n }\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { QrCodeCheckinMode } from '../enums/qr-code-checkin-mode';\n\n@Pipe({\n name: 'qRCodeCheckinMode'\n})\nexport class QRCodeCheckinModePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): unknown {\n if (value === QrCodeCheckinMode.Disable) return \"Disable\"\n else if (value === QrCodeCheckinMode.Anonymous) return \"Quick (Without Login)\"\n else if (value === QrCodeCheckinMode.AnonymousFlutterWeb) return \"Full (With Login)\"\n else return \"All\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AccompanierMode } from '../enums/accompanier-mode';\n\n@Pipe({\n name: 'accompanierMode'\n})\nexport class AccompanierModePipe implements PipeTransform {\n\n transform(value: unknown): any {\n if (value === AccompanierMode.Disable) { return \"Do not collect\"; }\n if (value === AccompanierMode.OptionalNameAndMobile) { return \"Collect Number of People and Optional Names\"; }\n if (value === AccompanierMode.NameAndOptionalMobile) { return \"Collect All Names and Optional Mobile Numbers\"; }\n if (value === AccompanierMode.NameAndMobile) { return \"Collect All Names and Mobile Numbers\"; }\n return value;\n }\n}\n","
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      Import sites data in CSV file format (comma seperated)\n \n Download\n Sample File\n \n
      \n\n
      \n
      \n \n \n
      \n
      \n
      \n {{importData.message}}\n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n Import Data\n
      \n \n
      \n
      \n
      \n
      \n \n \n #{{index+1}}\n \n
      \n
      \n \n \n \n \n {{site.name}}\n \n [{{site.siteReference}}]\n
      \n
      \n {{site.description}}\n
      \n
      \n
      \n
      \n \n Address:\n \n \n {{site.address}}\n \n \n
      \n
      \n
      \n
      \n \n Latitude:\n \n {{site.latitude}}\n
      \n
      \n \n Longitude:\n \n {{site.longitude}}\n
      \n
      \n
      \n
      \n \n Public\n Site: {{site.isPublicSite ? \"Yes\":\"No\"}}\n \n
      \n
      \n \n Site\n Radius: \n {{site.siteRadius}} 0\"> m\n \n \n
      \n
      \n \n Time\n Zone: {{site.timezone ? site.timezone : \"[BASE ON COMPANY TIMEZONE]\"}}\n \n
      \n
      \n \n Site\n Supervisor Email Address: {{site.siteSupervisorEmailAddress |\n nicyNull}}\n \n
      \n
      \n \n Max\n People On Site Mode: {{maxPeopleOnSiteModes[site.maxPeopleOnSiteMode]}}\n \n
      \n
      \n \n Max\n People On Site: \n {{site.maxPeopleOnSite}}\n (Vistors +\n Accompaniers)\n \n \n
      \n
      \n \n End\n Time Of Day: {{site.forceCheckOutTime}}\n \n
      \n
      \n \n Force Check Out After Time Period: {{site.forceCheckOutAfterMinute}}\n minutes\n Disable\n \n
      \n
      \n \n Notify\n Near Users: {{site.enableNotifyNearUser ? \"Yes\":\"No\"}}\n \n
      \n
      \n \n Location Required Mode On Check In/Out? {{site.checkinLocationMode |\n checkinLocationMode}}\n \n
      \n
      \n \n Automatic\n CheckIn: \n {{site.autoCheckInType | automaticCheckinMode}}\n \n \n
      \n
      \n \n Automatic\n CheckOut: \n {{autoCheckOutTypes[site.autoCheckOutType]}}\n \n \n
      \n
      \n
      \n \n Automatic\n Check Out Threshold: \n {{site.geofencingThresholdInMinutes}} minutes\n \n \n
      \n
      \n \n Enable {{constants.ANONYMOUS_ATTENDANCE_TITLE}} Checkin: \n {{site.qrCodeCheckinMode | qRCodeCheckinMode}}\n \n \n
      \n
      \n \n Auto Check Out {{constants.ANONYMOUS_ATTENDANCE_TITLE}} After: \n {{site.forceCheckOutAnonymousAfterInMinute}} minutes\n \n \n
      \n\n
      \n \n Accompanying\n Persons Info: \n {{site?.accompanierMode | accompanierMode}}\n \n \n
      \n
      \n \n Multiple\n Checkin: \n {{multipleCheckinTypes[site.multipleCheckinType]}}\n \n \n
      \n
      \n \n Enable Delayed Answer For CheckIn: \n {{site?.enableDelayedAnswerForCheckIn | yesNo}}\n \n \n
      \n
      \n \n Enable Delayed Answer For CheckOut: \n {{site?.enableDelayedAnswerForCheckOut | yesNo}}\n \n \n
      \n
      \n \n Delayed Answer For CheckIn Threshold In Hour: \n {{site?.delayedAnswerForCheckInThresholdInHour | nicyNull}}\n \n \n
      \n
      \n \n Delayed Answer For CheckOut Threshold In Hour: \n {{site?.delayedAnswerForCheckOutThresholdInHour | nicyNull}}\n \n \n
      \n
      \n \n Delayed Answer Notification Frequency In Minute: \n {{site?.delayedAnswerNotificationFrequencyInMinute | nicyNull}}\n \n \n
      \n
      \n \n Delayed Answer Notification After CheckOut Notify Count: \n {{site?.delayedAnswerNotificationAfterCheckOutNotifyCount | nicyNull}}\n \n \n
      \n
      \n \n Automatic Check In Delay (Minute): \n {{site?.autoCheckInDelayInMinute | nicyNull}}\n \n \n
      \n
      \n \n Check-In Approval Mode: \n {{getCheckinApprovalModeFriendlyMode(site?.checkInApprovalMode) | nicyNull}}\n \n \n
      \n
      \n \n Override Check-In Location To Optional Mode In Kiosk: \n {{getcheckInLocationOverrideInKioskMode(site?.checkInLocationOverrideInKioskMode) | nicyNull}}\n \n \n
      \n\n \n
      \n
      \n #{{index+1}}\n
      \n
        \n
      • \n {{error.errorMessage}}\n
      • \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { FormControl, Validators } from '@angular/forms';\nimport { SiteService } from 'src/app/services/site.service';\nimport { ImportSiteModel, ImportSiteResponse } from 'src/app/models/site-viewmodel';\nimport { AccompanierMode } from 'src/app/enums/accompanier-mode';\nimport { MultipleCheckinType } from 'src/app/enums/multiple-checkin-type.enum';\nimport { AutomaticCheckInMode } from 'src/app/enums/automatic-checkin-mode';\nimport { MaxPeopleOnSiteMode } from 'src/app/enums/max-people-on-site-mode.enum';\nimport { AutoCheckOutType } from 'src/app/enums/auto-check-out-type.enum';\nimport { finalize } from 'rxjs/operators';\nimport { ImportRecordState } from 'src/app/enums/import-record-status.enum';\nimport { AddressLookupService } from 'src/app/services/address-lookup.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { Constants } from 'src/app/enums/constants';\nimport {\n getCheckinApprovalModeFriendlyMode,\n getcheckInLocationOverrideInKioskModeFriendlyMode\n} from 'src/app/helpers/friendly-label';\nimport { CheckInApprovalMode } from 'src/app/enums/check-in-approval-mode.enum';\nimport { QrCodeCheckinMode } from 'src/app/enums/qr-code-checkin-mode';\nimport { LocationOverrideMode } from 'src/app/enums/location-override-mode-enum';\nimport { FileUploadAcceptType } from 'src/app/enums/file-upload-accept-type';\n\n@Component({\n selector: 'app-import-sites',\n templateUrl: './import-sites.component.html',\n styleUrls: ['./import-sites.component.scss']\n})\nexport class ImportSitesComponent implements OnInit {\n FileUploadAcceptType = FileUploadAcceptType;\n fileFormControl = new FormControl(null, [Validators.required]);\n importData: ImportSiteResponse;\n get sites(): ImportSiteModel[] {\n if (this.importData == null) return [];\n return this.importData.sites;\n };\n accompanierModes = AccompanierMode;\n multipleCheckinTypes = MultipleCheckinType;\n automaticCheckInModes = AutomaticCheckInMode;\n maxPeopleOnSiteModes = MaxPeopleOnSiteMode;\n autoCheckOutTypes = AutoCheckOutType;\n importRecordStates = ImportRecordState;\n qrCodeCheckinMode = QrCodeCheckinMode;\n public constants = Constants;\n\n geolocations = [];\n inProgress = false;\n constructor(private layoutService: LayoutService,\n private siteService: SiteService,\n private modalService: ModalService,\n private addressLookupService: AddressLookupService\n ) { }\n\n ngOnInit() {\n this.layoutService.header = \"Import Sites\",\n this.fileFormControl.valueChanges.subscribe(res => {\n if (res == null) return;\n let formData = new FormData();\n formData.append(\"file\", res, res.name);\n\n this.import(formData, false);\n });\n }\n\n import(formData, isImport) {\n formData.append(\"geo-location\", JSON.stringify(this.geolocations));\n this.inProgress = true;\n this.siteService.ValidateImportSites(formData, isImport)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n if (res.type == 4 && res.ok) {\n if (isImport) {\n this.importData = res.body;\n if (!this.importData.valid)\n this.modalService.error(this.importData.message ? this.importData.message : \"unbale to import sites\");\n } else {\n this.importData = res.body;\n }\n }\n });\n }\n\n get isDataValid(): boolean {\n if (this.sites == null || this.sites.length == 0) return false;\n return this.sites.find(i => i.validationStatus != this.importRecordStates.Valid) == null;\n }\n\n get isImportModelValid(): boolean {\n if (this.sites == null || this.sites.length == 0) return false;\n for (let index1 = 0; index1 < this.sites.length; index1++) {\n const site = this.sites[index1];\n if (site.errorMessages == null || site.errorMessages.length == 0) continue;\n for (let index2 = 0; index2 < site.errorMessages.length; index2++) {\n const error = site.errorMessages[index2];\n if (error.memberNames == null || error.memberNames.length == 0)\n continue;\n else\n return false;\n }\n }\n return true;\n }\n\n clear() {\n this.fileFormControl.setValue(null);\n this.importData = null;\n }\n\n onClearForm() {\n this.clear();\n }\n\n onImport() {\n let formData = new FormData();\n formData.append(\"file\", this.fileFormControl.value, this.fileFormControl.value.name);\n\n this.import(formData, true);\n }\n\n fieldIsValid(site: ImportSiteModel, name: string): boolean {\n return site.errorMessages == null || !(site.errorMessages?.find(err => err.memberNames != null && err.memberNames?.find(f => f.toLowerCase() == name.toLowerCase()) != null) != null);\n }\n\n isValidSite(site: ImportSiteModel): boolean {\n if (site.errorMessages == null || site.errorMessages.length == 0) return true;\n for (let index2 = 0; index2 < site.errorMessages.length; index2++) {\n const error = site.errorMessages[index2];\n if (error.memberNames == null || error.memberNames.length == 0)\n continue;\n else\n return false;\n }\n return true;\n }\n\n showGetGoegrathicData(site: ImportSiteModel) {\n // valid model\n if (this.isValidSite(site))\n return false;\n\n // another errors\n for (let index1 = 0; index1 < this.sites.length; index1++) {\n const site = this.sites[index1];\n if (site.errorMessages == null || site.errorMessages.length == 0) continue;\n for (let index2 = 0; index2 < site.errorMessages.length; index2++) {\n const error = site.errorMessages[index2];\n if (error.memberNames == null || site.errorMessages.length == 0) continue;\n for (let index3 = 0; index3 < error.memberNames.length; index3++) {\n const member = error.memberNames[index3];\n if (member.toLowerCase() != \"latitude\" && member.toLowerCase() != \"longitude\")\n return false;\n }\n }\n }\n\n return true;\n }\n\n getCheckinApprovalModeFriendlyMode(mode?: CheckInApprovalMode): string {\n return mode != null && mode != undefined ? getCheckinApprovalModeFriendlyMode(mode) : null;\n }\n getcheckInLocationOverrideInKioskMode(mode?: LocationOverrideMode): string {\n return mode != null && mode != undefined ? getcheckInLocationOverrideInKioskModeFriendlyMode(mode) : null;\n }\n getLocation(site: ImportSiteModel) {\n this.inProgress = true;\n this.addressLookupService.getLocation(site.address)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n site.latitude = res.latitude;\n site.longitude = res.longitude;\n\n for (let index2 = 0; index2 < site.errorMessages.length; index2++) {\n const error = site.errorMessages[index2];\n if (error.memberNames == null || site.errorMessages.length == 0) continue;\n // remove lat error\n ['Latitude', 'Longitude'].forEach((e) => {\n var index = error.memberNames.indexOf(e);\n if (index >= 0)\n error.memberNames.splice(index, 1);\n })\n }\n\n this.geolocations.push({\n latitude: res.latitude,\n longitude: res.longitude,\n index: this.sites.indexOf(site)\n });\n }, err => {\n this.modalService.error(\"unable to retrive geographic location at this time\")\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {ScheduleReportMode} from \"../enums/schedule-report-mode\";\n\n@Pipe({\n name: 'scheduleReportMode'\n})\nexport class ScheduleReportModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == ScheduleReportMode.ScheduleReport)\n return \"Scheduled Report\";\n if (value == ScheduleReportMode.HashCode)\n return \"Magic Link\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {ScheduleReportType} from \"../enums/schedule-report-type\";\n\n@Pipe({\n name: 'scheduleReportType'\n})\nexport class ScheduleReportTypePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == ScheduleReportType.InventoryReport)\n return \"Inventory Report\";\n if (value == ScheduleReportType.ActivityReport)\n return \"Activity Report\";\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ReportDeliveryType } from '../enums/report-type.enum';\n\n@Pipe({\n name: 'reportDeliveryType'\n})\nexport class ReportDeliveryTypePipe implements PipeTransform {\n\n transform(value: any): string {\n return value == ReportDeliveryType.Email ? \"Email\" : (value?.toString() ?? \"?\");\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ReportPeriodType } from '../enums/report-type.enum';\n\n@Pipe({\n name: 'reportPeriodType'\n})\nexport class ReportPeriodTypePipe implements PipeTransform {\n\n transform(value: any): string {\n return value == ReportPeriodType.Daily ? \"Daily\" :\n value == ReportPeriodType.Weekly ? \"Weekly\" :\n value == ReportPeriodType.Monthly ? \"Monthly\" :\n (value?.toString() ?? \"?\");\n }\n\n}\n","\n
      \n
      \n My Scheduled Reports\n
      \n
      \n
      \n
      There are no scheduled reports!
      \n
      \n
      \n
      \n
      \n {{report.scheduleReportMode | scheduleReportMode}} - {{report.scheduleReportType | scheduleReportType}}\n
      \n
      \n
      \n
      \n \n {{report.type | reportDeliveryType}}\n
      Subject: {{report.parameters.email.subject}}
      \n
      Email Address:
      \n
        \n
      • \n \n Company Supervisor Email\n
      • \n
      • \n Site Supervisor Email\n
      • \n
      • {{email}}
      • \n
      \n
      \n
      \n
      \n
      \n \n {{report.parameters.period | reportPeriodType}}\n
      \n
      \n
      Time: {{report.parameters?.timeSpan}}
      \n
      \n
      \n
      \n
      Days:
      \n \n
        \n
      • \n {{day | numberToWeekday}}\n
      • \n
      \n
      \n
      \n
      \n
      Days:
      \n \n
        \n
      • \n {{day}}\n
      • \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n Next Run: {{report.nextExecutionDateTime | datetime}}\n
      \n
      Site:\n {{report.parameters.siteId ? report.parameters.siteName : 'All Sites'}}\n
      \n
      User: {{report.parameters.mobile}}\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { ReportPeriodType } from 'src/app/enums/report-type.enum';\nimport { ScheduleReportMode } from 'src/app/enums/schedule-report-mode';\nimport { ScheduleReportType } from 'src/app/enums/schedule-report-type';\nimport { SaveScheduledReportViewmodel, ScheduledReportViewModel } from 'src/app/models/save-scheduled-report-model';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\n\n@Component({\n selector: 'obc-my-scheduled-reports',\n templateUrl: './my-scheduled-reports.component.html',\n styleUrls: ['./my-scheduled-reports.component.scss']\n})\nexport class MyScheduledReportsComponent implements OnInit {\n inProgress: boolean = false;\n reports: ScheduledReportViewModel[];\n ReportPeriodType = ReportPeriodType;\n ScheduleReportType = ScheduleReportType;\n ScheduleReportMode = ScheduleReportMode;\n \n constructor(\n private siteAttendanceService: SiteAttendanceService,\n private layoutService: LayoutService,\n private modalService: ModalService\n ) { }\n\n ngOnInit(): void {\n this.layoutService.header = 'My Scheduled Reports';\n this.loadReports();\n }\n\n private loadReports() {\n this.inProgress = true;\n this.siteAttendanceService.getMyScheduledReport()\n .subscribe(result => {\n this.reports = result;\n this.inProgress = false;\n });\n }\n\n removeReport(report: ScheduledReportViewModel) {\n this.modalService.confirm('Are you sure you want to delete this report?')\n .subscribe(confirmResult => {\n if (confirmResult == true) {\n this.inProgress = true;\n this.siteAttendanceService.deleteMyScheduledReport(report.id)\n .subscribe(result => {\n this.inProgress = false;\n this.loadReports();\n });\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { UserPermission } from '../enums/user-permission.enum';\nimport { RouteDataModel } from '../models/route-data-model';\nimport { UserService } from './user.service';\n\nclass BasePermissionGuardService {\n constructor(protected userService: UserService, protected router: Router) {\n\n }\n\n handleNoAccess(routerState: RouterStateSnapshot, redirectUrl?: string) {\n if (!this.userService.info.value)\n return;\n this.router.navigate([redirectUrl ?? '/no-access'], { queryParams: { returnPath: routerState.url } });\n }\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SecureGuardService {\n\n constructor(private userService: UserService, private router: Router) {\n\n }\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n if (!this.userService.info.value) {\n this.router.navigate(['landing'], { queryParams: { returnPath: routerState.url } });\n return false;\n } else\n return true;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionGuardService extends BasePermissionGuardService {\n\n constructor(userService: UserService, router: Router) {\n super(userService, router);\n }\n\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n var routeData = route.data as RouteDataModel;\n\n if (!this.userService.hasUserPermissionForCompany(routeData.permission)) {\n this.handleNoAccess(routerState);\n return false;\n } else\n return true;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OverLappedPermissionGuardService extends BasePermissionGuardService {\n\n constructor(userService: UserService, router: Router) {\n super(userService, router);\n }\n\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n var routeData = route.data as RouteDataModel;\n if (!this.userService.hasUserAnyOfPermissions(routeData.permissions)) {\n this.handleNoAccess(routerState);\n return false;\n } else\n return true;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SitesPageGuardService extends BasePermissionGuardService {\n\n constructor(userService: UserService, router: Router) {\n super(userService, router);\n }\n\n\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n var permissions = [UserPermission.AdjustSiteLocation,\n UserPermission.ModifySite,\n UserPermission.ManageAutomations,\n UserPermission.ManageSiteAnnouncement,\n UserPermission.ManageSiteQuestion];\n if (!this.userService.hasUserAnyOfPermissions(permissions)) {\n this.handleNoAccess(routerState, \"/dashboard\");\n return false;\n } else\n return true;\n }\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyAdminGuardService extends BasePermissionGuardService {\n\n constructor(userService: UserService, router: Router) {\n super(userService, router);\n }\n\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n if (!this.userService.currentCompanyId) {\n this.router.navigate(['/not-found'], { queryParams: { returnPath: routerState.url } });\n }\n else {\n if (!this.userService.isCompanyAdminUser()) {\n this.handleNoAccess(routerState);\n return false;\n } else\n return true;\n }\n }\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteAdminGuardService extends BasePermissionGuardService {\n\n constructor(userService: UserService, router: Router) {\n super(userService, router);\n }\n\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n if (!this.userService.currentCompanyId) {\n this.router.navigate(['/not-found'], { queryParams: { returnPath: routerState.url } });\n }\n else {\n if (!this.userService.hasAdminPermissionOnAnySite()) {\n this.handleNoAccess(routerState);\n return false;\n } else\n return true;\n }\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GodUserGuardService extends BasePermissionGuardService {\n\n constructor(userService: UserService, router: Router) {\n super(userService, router);\n }\n\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n var routeData = route.data as RouteDataModel;\n\n if (!this.userService.isGodUser() ||\n (routeData.godPermission && !this.userService.hasGodUserPermissionForCompany(routeData.godPermission))) {\n this.handleNoAccess(routerState);\n return false;\n } else\n return true;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyOwnerGuardService extends BasePermissionGuardService {\n\n constructor(userService: UserService, router: Router) {\n super(userService, router);\n }\n\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n if (!this.userService.isCompanyOwnerUser()) {\n this.router.navigate(['/not-found'], { queryParams: { returnPath: routerState.url } });\n // this.handleNoAccess(routerState);\n // return false;\n } else\n return true;\n }\n}\n","
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n Print Instructions\n \n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      MobileNameFamilyAccess LevelActions
      \n \n
      {{user.mobile | mobile}}{{user.firstName}}{{user.lastName}}\n \n
      \n
      {{u.label}}
      \n
      \n
      \n
      \n 0\">\n Roles:\n
      \n
      {{getRoles(user)}}
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      {{u.label}}
      \n
      \n
      \n Has All Permissions\n
      \n {{getPermissionCount(user)}}\n Permission(s)\n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n \n Add Site User to {{site.name}} [{{site.siteReference}}]\n \n \n Edit Site User of {{site.name}} [{{site.siteReference}}]\n \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n Please enter a valid\n mobile number.\n \n \n \n \n \n
      \n
      \n \n \n \n \n \n \n \n \n\n
      \n
      \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n Roles\n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n

      \n \n \n

      \n
      \n
      \n \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n\n\n
      \n
      \n
      \n
      \n\n
      \n
      \n \n
      \n
      \n
      \n
      \n

      \n Import site user data in CSV file format (comma seperated)\n Download Sample File\n

      \n
      \n
      \n \n \n
      \n
      \n
      \n {{importData.message}}\n
      \n
      \n
      \n
      \n {{importData.message}}\n
      \n
      \n
      \n
      \n
      \n
      ","import { ModalService } from '../../../services/modal.service';\nimport { formGroupToModel } from 'src/app/helpers/general-functions';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { finalize } from 'rxjs/operators';\nimport { Component, OnInit } from '@angular/core';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { SiteTemplateStatus } from 'src/app/enums/site-template-status.enum';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { BaseSiteViewModel, SiteViewModel } from 'src/app/models/site-viewmodel';\nimport {\n CompanyUserViewModel,\n ImportCompanyUserResponse,\n SiteUserUpdateRequest,\n SiteUserViewModel\n} from 'src/app/models/company-user-view-model';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { CheckListItemViewModel } from 'src/app/custom-controls/check-list-form-control/check-list-item';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { e168Validator2, mobileIsValid } from 'src/app/helpers/mobile-format-validator';\nimport { combinePermissions } from 'src/app/helpers/permission-helper';\nimport { SiteUserService } from 'src/app/services/site-user.service';\nimport { SiteAttendancePermissionService } from '../../../services/site-attendance-permission.service';\nimport { SiteAttendancePermissionUser } from '../../../models/site-attendance-permission-models/site-attendance-permission-user.model';\nimport { SiteListQueryModel } from 'src/app/models/site-list-query-model';\nimport { PermissionModeEnum } from \"../../../enums/permission-mode.enum\";\nimport { CompanyRoleViewModel } from \"../../../models/company-role.view.model\";\nimport { CompanyRoleService } from \"../../../services/company-role.service\";\nimport { FileUploadAcceptType } from 'src/app/enums/file-upload-accept-type';\n\n@Component({\n selector: 'obc-site-user',\n templateUrl: './site-user.component.html',\n styleUrls: ['./site-user.component.scss']\n})\nexport class SiteUserComponent implements OnInit {\n FileUploadAcceptType = FileUploadAcceptType;\n PermissionModeEnum = PermissionModeEnum;\n companyPermissionMode: PermissionModeEnum;\n userPermissions = UserPermission;\n sites: SiteViewModel[] = [];\n siteId: number;\n public site: BaseSiteViewModel;\n inProgress: boolean;\n filterListTerm: string;\n siteUsers: SiteUserViewModel[] = [];\n bsModalRef: any;\n selectedUser = new UserBasicInfoViewModel();\n filterUserBy = UserAutoCompleteFilterByFields;\n siteUserFormGroup: FormGroup = null;\n siteUserPermissions: CheckListItemViewModel[] = [];\n editMode: boolean = false;\n\n constructor(\n private siteUserService: SiteUserService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n public companyRoleService: CompanyRoleService,\n private siteAttendancePermissionService: SiteAttendancePermissionService) { }\n\n ngOnInit(): void {\n this.initData();\n this.fileFormControl.valueChanges.subscribe(res => {\n if (res == null) return;\n let formData = new FormData();\n formData.append(\"file\", res, res.name);\n this.import(formData);\n });\n }\n createQuery(): SiteListQueryModel {\n return {\n activeStatus: SiteActiveStatus.All,\n templateStatus: SiteTemplateStatus.Normal,\n pagingInfo: null,\n searchTerm: null,\n };\n }\n\n getShowQrCodeWithInstruction(site: BaseSiteViewModel) {\n return `/General/site-instructions/${site.id}/${site.secretCode}`;\n }\n\n initData() {\n this.inProgress = true;\n this.siteUserService.getAllPermissions()\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(ret => {\n let keys = Object.keys(ret);\n this.siteUserPermissions = keys.map(up => {\n return {\n key: up,\n label: ret[up]\n } as CheckListItemViewModel;\n });\n });\n this.companyRoleService.getCompanyPermissionMode()\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.companyPermissionMode = res;\n });\n }\n\n private getSiteUsers() {\n this.inProgress = true;\n this.siteUserService.getSiteUsers(this.siteId)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n this.siteUsers = res;\n });\n }\n\n isMobileValid(mobile: string): boolean {\n return (mobile !== undefined && mobileIsValid(mobile));\n }\n\n get selectedSiteName(): string {\n if (this.sites && this.sites.length)\n return this.sites.find(s => s.id == this.siteId).name;\n }\n\n deleteUser(user: SiteUserViewModel) {\n this.modalService.confirm(\"Are you sure you want remove site user?\", \"Remove Site User\", \"Yes\", \"No\")\n .subscribe(confirm => {\n if (confirm) {\n this.inProgress = true;\n this.siteUserService.removeSiteUser(user.id, this.siteId)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(res => {\n if (res) {\n let index = this.siteUsers.indexOf(user);\n this.siteUsers.splice(index, 1);\n }\n });\n }\n });\n }\n\n fillCompanyUser(cUser: UserBasicInfoViewModel, formGroup: FormGroup) {\n if (cUser.id) {\n this.selectedUser = cUser;\n\n formGroup.controls['id'].setValue(cUser.id);\n formGroup.controls['mobile'].setValue(cUser.mobile);\n formGroup.controls['firstName'].setValue(cUser.firstName);\n formGroup.controls['lastName'].setValue(cUser.lastName);\n }\n }\n\n onAddSiteUser(template: any) {\n this.editMode = false;\n this.selectedUser = new UserBasicInfoViewModel();\n this.siteUserFormGroup = new FormGroup({\n id: new FormControl(),\n siteId: new FormControl(this.siteId),\n firstName: new FormControl(),\n mobile: new FormControl(null, [Validators.required, e168Validator2]),\n lastName: new FormControl(),\n isAdmin: new FormControl(false),\n permissions: new FormControl([]),\n isFrequentUser: new FormControl(false),\n companyRoles: new FormControl([]),\n });\n this.bsModalRef = this.bsModalService.show(template, Object.assign({}, { class: 'gray modal-lg' }));\n }\n\n onUpdateSiteUser(template: any, user: SiteUserViewModel) {\n this.editMode = true;\n this.siteUserFormGroup = new FormGroup({\n id: new FormControl(user.id),\n firstName: new FormControl(user.firstName),\n mobile: new FormControl(user.mobile, [Validators.required, e168Validator2]),\n lastName: new FormControl(user.lastName),\n isAdmin: new FormControl(user.isAdmin),\n companyRoles: new FormControl(user.companyRoles),\n permissions: new FormControl(this.siteUserPermissions\n\n .map((item: CheckListItemViewModel) => { item.value = (user.permissions & item.key) > 0; return item; })),\n //addToFrequentUsers: new FormControl(user.isFrequentUser),\n });\n this.bsModalRef = this.bsModalService.show(template, Object.assign({}, { class: 'gray modal-lg' }));\n }\n\n addSiteUser() {\n let siteUser = formGroupToModel(this.siteUserFormGroup) as SiteUserViewModel;\n if (siteUser.isAdmin)\n siteUser.permissions = UserPermission.None;\n else\n siteUser.permissions = combinePermissions((this.siteUserFormGroup.controls[\"permissions\"].value as CheckListItemViewModel[])\n ?.filter((item) => item.value)\n .map(x => x.key))\n ?? UserPermission.None;\n\n this.inProgress = true;\n this.siteUserService.addSiteUser(this.siteId, siteUser)\n .pipe(finalize(() => {\n this.inProgress = false;\n this.bsModalRef.hide();\n }))\n .subscribe(res => {\n this.modalService.success('Site user added successfully');\n this.siteUsers.push(res);\n }, err => {\n this.modalService.error(err.error);\n });\n }\n\n updateSiteUser() {\n this.inProgress = true;\n let model = {\n isAdmin: this.siteUserFormGroup.controls['isAdmin'].value,\n roles: this.siteUserFormGroup.controls.companyRoles?.value?.map((item) => item.companyRoleId) ?? [],\n permissions: this.siteUserFormGroup.controls['isAdmin'].value ?\n UserPermission.None : combinePermissions(\n (this.siteUserFormGroup.controls['permissions'].value as CheckListItemViewModel[])\n .filter(c => c.value)\n .map(x => x.key))\n } as SiteUserUpdateRequest;\n this.siteUserService.updateSiteUser(+this.siteUserFormGroup.controls['id'].value, model)\n .pipe(finalize(() => {\n this.inProgress = false;\n this.bsModalRef.hide();\n }))\n .subscribe(res => {\n let index = this.siteUsers.findIndex(x => x.id == +this.siteUserFormGroup.controls['id'].value);\n this.siteUsers[index] = res;\n this.modalService.success('Site user updated successfully');\n });\n }\n\n siteIdChanged(siteId: number) {\n this.siteId = siteId;\n this.getSiteUsers();\n }\n\n getPermissionTooltip(user: SiteUserViewModel) {\n return this.siteUserPermissions\n .filter(p => (p.key & user.permissions) > 0);\n }\n\n getPermissionCount(user: SiteUserViewModel) {\n return this.siteUserPermissions\n .filter(p => (p.key & user.permissions) > 0).length;\n }\n getRoles(user: CompanyUserViewModel) {\n let tips = user.companyRoles?.map(p => p.name) ?? [];\n return tips.join(\", \");\n }\n\n addToFrequentUsers(user: SiteUserViewModel) {\n this.modalService.confirm(`Are you sure you want to add this user as frequent user to ${this.site.name}?`)\n .subscribe(accept => {\n if (accept) {\n this.siteAttendancePermissionService.addSinglePerson({ siteId: this.siteId, mobile: user.mobile, } as SiteAttendancePermissionUser)\n .subscribe(_ => this.getSiteUsers());\n }\n });\n }\n\n modalHandle: any;\n openImportUserModal(template) {\n this.modalHandle = this.bsModalService.show(template);\n }\n\n // import users\n importData: ImportCompanyUserResponse;\n fileFormControl = new FormControl(null, [Validators.required]);\n clear() {\n this.fileFormControl.setValue(null);\n this.importData = null;\n }\n\n onClearForm() {\n this.clear();\n }\n\n import(formData) {\n this.inProgress = true;\n this.siteUserService.ImportUsers(this.siteId, formData)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n if (res.type == 4 && res.ok) {\n if (res.body.valid) {\n this.modalHandle.hide();\n this.initData();\n } else\n this.importData = res.body;\n }\n });\n }\n\n updateRoles(roles: CompanyRoleViewModel[]) {\n this.siteUserFormGroup.controls.companyRoles.setValue(roles);\n }\n}\n","
      \n
      \n
      \n You've been successfully checked out!\n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n

      \n \n

      \n \n\n
      \n
      \n
      \n {{supplierCheckinData.supplierName}}\n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n\n

      \n \n

      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n

      {{status.user.firstName}} {{status.user.lastName}}

      \n
      \n
      \n

      {{status.user.mobile | mobile}}

      \n
      \n

      You are check-in at:

      \n
      \n
      \n
      \n Site\n {{status.siteAttendance.siteName}}\n
      \n
      \n Entry\n {{status.siteAttendance.checkInDate | datetime}}\n
      \n
      \n \n
      \n \n
      \n
      \n

      Announcements

      \n
      \n \n \n
      \n
      \n
      \n\n \n
      \n
      \n

      Supplier Documents

      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n

      {{status.supplierItems.supplierName}}

      \n
      \n
      \n \n \n\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { ModalService } from './../../../services/modal.service';\nimport { SiteAttendanceService } from './../../../services/site-attendance.service';\n// import { AnnouncementViewmodel, BaseAnnouncementViewmodel, SiteWithAnnouncementViewModel } from './../../../models/announcement-viewmodel';\nimport { LoaderComponent } from './../../../custom-controls/loader/loader.component';\nimport { SiteQuestionService } from './../../../services/site-question.service';\nimport { Component, OnInit } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { AnonymousUserProfileWithStatusViewmodel } from 'src/app/models/anonymous-user-profile-with-status-viewmodel';\nimport { UserService } from 'src/app/services/user.service';\nimport { SiteAttendanceQuestionAnswer } from 'src/app/models/attendance-request/site-attendance-question-answer';\nimport { SiteQuestionsViewModel } from 'src/app/models/sitequestion-viewmodel';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { AnnouncementService } from 'src/app/services/announcement.service';\nimport {\n AnonymousCheckOutAttendanceRequestModel,\n RequestAttendanceMode\n} from 'src/app/models/attendance-request/attendance-request-viewmodel';\nimport { AnonymousUserAttendanceCheckInsViewmodel } from 'src/app/models/anonymous-user-attendance-check-ins-viewmodel';\nimport { AttendanceFieldWithValue, FieldPermission } from 'src/app/models/attendance-field-model';\nimport {SiteQuestionViewModel} from \"../../../models/site-question-viewmodel\";\nimport {CustomFormControl} from \"../../../models/custom-formcontrol\";\nimport {FormArray} from \"@angular/forms\";\nimport {\n convertDocumentToFormControl,\n getUploadedDocumentsFromFormArray, isSetSupplierCheckinData,\n setDocumentFormControlForQuestions\n} from \"../../../helpers/general-functions\";\nimport {SupplierCheckinViewModel} from \"../../../models/supplier-checkin-view-model\";\nimport {RequiredDocumentViewModel} from \"../../../models/user-document-type\";\nimport {SupplierCheckinModel} from \"../../../models/supplier-checkin-model\";\n\n@Component({\n selector: 'obc-anonymous-checkout',\n templateUrl: './anonymous-checkout.component.html',\n styleUrls: ['./anonymous-checkout.component.scss']\n})\nexport class AnonymousCheckoutComponent implements OnInit {\n\n\n _questions: SiteQuestionViewModel[] = null;\n questions$: BehaviorSubject = new BehaviorSubject(this._questions);\n questionContainerValidation$: BehaviorSubject<{\n valid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n }> = new BehaviorSubject<{\n valid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n }>({valid: true, answers: []});\n questionContainerValid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n set questions(model: SiteQuestionViewModel[]) {\n this._questions = model;\n this._questions = setDocumentFormControlForQuestions(this._questions);\n this.questions$.next(this._questions);\n }\n\n /*Supplier Data*/\n supplierCheckinData: SupplierCheckinViewModel;\n _supplierQuestions: SiteQuestionViewModel[] = null;\n supplierRequiredDocumentFormControls: CustomFormControl[] = [];\n supplierRequiredDocumentFormArray: FormArray;\n supplierQuestions$: BehaviorSubject = new BehaviorSubject(this._supplierQuestions);\n supplierQuestionContainerValidation$: BehaviorSubject<{\n valid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n }> = new BehaviorSubject<{\n valid: boolean;\n answers: SiteAttendanceQuestionAnswer[];\n }>({valid: true, answers: []});\n supplierQuestionContainerValid: boolean;\n supplierAnswers: SiteAttendanceQuestionAnswer[];\n set supplierQuestions(model: SiteQuestionViewModel[]) {\n this._supplierQuestions = model;\n this._supplierQuestions = setDocumentFormControlForQuestions(this._supplierQuestions);\n this.supplierQuestions$.next(this._supplierQuestions);\n }\n\n\n model = new BehaviorSubject(null);\n inprocess = false;\n reloadHandle: any = null;\n AnnouncementType = FileType;\n questionValidator$: BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[] }> =\n new BehaviorSubject({ valid: false, answers: [] });\n\n requiredDocumentFormControls: CustomFormControl[] = [];\n requiredDocumentFormArray: FormArray;\n\n _mode: 'view' | 'answer' = \"view\";\n get mode() {\n return this._mode;\n }\n set mode(value: any) {\n this._mode = value;\n if (this._mode == \"view\")\n this.activeReloadStatus();\n else\n this.clearReloadStatus();\n }\n // questions = new BehaviorSubject(null);\n\n\n /*Supplier Data*/\n // supplierQuestionValidator$: BehaviorSubject<{ valid: boolean, answers: SiteAttendanceQuestionAnswer[] }> =\n // new BehaviorSubject({ valid: false, answers: [] });\n // supplierQuestions = new BehaviorSubject(null);\n // supplierRequiredDocumentFormControls: CustomFormControl[] = [];\n // supplierRequiredDocumentFormArray: FormArray;\n\n constructor(private userService: UserService,\n private announcementSertvice: AnnouncementService,\n private siteAttendanceService: SiteAttendanceService,\n private modalService: ModalService,\n private siteQuestionService: SiteQuestionService) { }\n\n ngOnInit() {\n this.getAnonymousCheckInStatus();\n\n this.questionContainerValidation$.subscribe((res) => {\n this.questionContainerValid = res.valid;\n this.answers = res.answers;\n });\n\n this.supplierQuestionContainerValidation$.subscribe((res) => {\n this.supplierQuestionContainerValid = res.valid;\n this.supplierAnswers = res.answers;\n });\n\n this.mode = \"view\";\n }\n\n private activeReloadStatus() {\n this.clearReloadStatus();\n this.reloadHandle = setInterval(() => {\n this.getAnonymousCheckInStatus();\n }, 5 * 60 * 1000);\n }\n\n private clearReloadStatus() {\n if (this.reloadHandle)\n clearInterval(this.reloadHandle);\n }\n\n nocheckinFound = false;\n selectedStatus: AnonymousUserAttendanceCheckInsViewmodel = null;\n private getAnonymousCheckInStatus() {\n this.inprocess = true;\n this.clearReloadStatus();\n this.userService.getAnonymousUserProfileWithCheckIns()\n .pipe(finalize(() => {\n this.inprocess = false;\n this.activeReloadStatus();\n }))\n .subscribe(res => {\n this.model.next(res);\n if (res != null && res.userAttendances && res.userAttendances.length)\n this.nocheckinFound = false;\n else\n this.nocheckinFound = true;\n }, err => {\n if (err.status == 404) {\n this.nocheckinFound = true;\n //this.modalService.error(\"No Check-in Found\");\n }\n });\n }\n\n onCheckOut(status: AnonymousUserAttendanceCheckInsViewmodel, loader: LoaderComponent) {\n loader.show = true;\n this.selectedStatus = status;\n this.siteQuestionService.GetQuestionsToCheckOutForAnonymousUser(status.siteAttendance.anonymousCheckInKey)\n .pipe(finalize(() => loader.show = false))\n .subscribe(res => {\n if (res == null) {\n this.getAnonymousCheckInStatus();\n return;\n }\n\n this.questions = res.siteQuestions;\n this.supplierCheckinData = res.supplierCheckinData;\n this.supplierQuestions = res.supplierCheckinData?.siteQuestions\n this.mode = 'answer';\n\n this.questions$.next(this._questions);\n this.supplierQuestions$.next(this._supplierQuestions);\n\n this.ResetAll();\n\n }, err => this.getAnonymousCheckInStatus());\n }\n\n checkout(loader: LoaderComponent) {\n loader.show = true;\n const model = {\n Mode: RequestAttendanceMode.Self,\n answers: this.answers,\n latitude: null,\n longtitude: null,\n documents: getUploadedDocumentsFromFormArray(this.requiredDocumentFormArray),\n supplierCheckOutData: {\n supplierAnswers: this.supplierAnswers,\n supplierDocuments: getUploadedDocumentsFromFormArray(this.supplierRequiredDocumentFormArray),\n } as SupplierCheckinModel\n } as AnonymousCheckOutAttendanceRequestModel;\n this.siteAttendanceService.AnonyousCheckOut(this.selectedStatus.siteAttendance.anonymousCheckInKey, model)\n .pipe(finalize(() => loader.show = false))\n .subscribe(res => {\n if (res.success)\n this.modalService.info(\"You Are Successfully Checked Out\", \"Check-Out\").subscribe(res => {\n this.getAnonymousCheckInStatus();\n this.mode = \"view\";\n })\n else\n this.modalService.error(res.message, \"Check-Out Failed\");\n });\n }\n\n // resetQuestionContainer(res: SiteQuestionViewModel[]) {\n // this.questions.next(res);\n // }\n // resetSupplierQuestionContainer(res: SiteQuestionViewModel[]) {\n // this.supplierQuestions.next(res);\n // }\n\n onAcceptSupplier(){\n this.getAnonymousCheckInStatus();\n }\n\n ResetAll() {\n this.requiredDocumentFormControls = [];\n this.supplierRequiredDocumentFormControls = [];\n\n let res = convertDocumentToFormControl([], (this._questions?.filter(question => question.documentFormControl != null)?.map(question => question.documentFormControl) ?? []));\n this.requiredDocumentFormArray = res?.formArray;\n this.requiredDocumentFormControls = res?.controls;\n\n let supRes = convertDocumentToFormControl([], (this._supplierQuestions?.filter(question => question.documentFormControl != null)?.map(question => question.documentFormControl) ?? []));\n this.supplierRequiredDocumentFormArray = supRes?.formArray;\n this.supplierRequiredDocumentFormControls = supRes?.controls;\n }\n\n get isFormValid(): boolean {\n\n let isValidDocuments = this.requiredDocumentFormArray == null ||\n this.requiredDocumentFormArray.controls.every(c => {\n let control = (c as CustomFormControl);\n let doc = control.item as RequiredDocumentViewModel;\n return doc.questionId == null ? c.valid : true;\n });\n\n let isValidSupplierDocuments = this.supplierRequiredDocumentFormArray == null ||\n this.supplierRequiredDocumentFormArray.controls.every(c => {\n let control = (c as CustomFormControl);\n let doc = control.item as RequiredDocumentViewModel;\n return doc.questionId == null ? c.valid : true;\n });\n\n return this.questionContainerValid && this.supplierQuestionContainerValid && isValidDocuments && isValidSupplierDocuments;\n }\n\n isSetSupplierCheckinData() {\n return isSetSupplierCheckinData(this.supplierCheckinData);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { RouteDataModel } from '../models/route-data-model';\nimport { UserService } from './user.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FeatureGuardService {\n isTemplateCompany: boolean;\n\n constructor(private userService: UserService, private router: Router) {\n this.userService.currentCompany$.subscribe(res => this.isTemplateCompany = res?.isTemplate ?? false);\n\n }\n canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot): boolean | Promise | Observable {\n var routeData = route.data as RouteDataModel;\n if (!this.userService.hasCompanyFeature(routeData.feature)) {\n if (routeData.allowForTemplates == true && this.isTemplateCompany == true)\n return true;\n\n if (this.userService.info.value)\n this.router.navigate(['/no-access'], { queryParams: { returnPath: routerState.url } });\n return false;\n } else\n return true;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Pipe({\n name: 'toFormGroup'\n})\nexport class ToFormGroupPipe implements PipeTransform {\n\n transform(value: any, args?: any): FormGroup {\n return value as FormGroup;\n }\n\n}\n","
      \n
      \n \n \n Additional Hosts\n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      MobileFirst NameLast Name
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { e168Validator, e168Validator2 } from 'src/app/helpers/mobile-format-validator';\nimport { CompanyHostModel } from 'src/app/models/quick-setup-models/company-host';\n\n@Component({\n selector: 'obc-additional-company-host',\n templateUrl: './additional-company-host.component.html',\n styleUrls: ['./additional-company-host.component.scss']\n})\nexport class AdditionalCompanyHostComponent implements OnInit {\n\n ctrl: FormGroup;\n hosts = new FormArray([]);\n constructor() { }\n\n ngOnInit() {\n this.initFormGroup();\n }\n\n initFormGroup() {\n this.ctrl = new FormGroup({\n mobile: new FormControl(null, [e168Validator2]),\n firstName: new FormControl(null),\n lastName: new FormControl(null)\n })\n }\n\n onAdd() {\n this.hosts.controls.unshift(this.ctrl);\n this.initFormGroup();\n }\n\n onRemove(ctrl: AbstractControl) {\n this.hosts.controls.splice(this.hosts.controls.indexOf(ctrl), 1);\n }\n\n getHosts() : CompanyHostModel[] {\n var ret = [];\n for (let index = 0; index < this.hosts.controls.length; index++) {\n const element = this.hosts.controls[index];\n ret.push(element.value);\n }\n return ret;\n }\n\n toFormGroup(ctrl: AbstractControl): FormGroup {\n return ctrl as FormGroup;\n }\n\n get valid(): boolean {\n for (let index = 0; index < this.hosts.controls.length; index++) {\n const element = this.hosts.controls[index];\n if(!element.valid) return false;\n }\n return true;\n }\n\n}\n","
      \n
      \n \n \n Venues ({{sites.controls.length}} of\n {{userService.currentCompany.maxSites - userService.currentCompany.currentActiveSites}})\n \n
      \n
      \n
      \n

      please add new venue(s)

      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { FileUploadAcceptType } from 'src/app/enums/file-upload-accept-type';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { removeContentTypeFromBase64, toBase64 } from 'src/app/helpers/general-functions';\nimport { urlValidator } from 'src/app/helpers/url-validator';\nimport { MinimalSiteModel } from 'src/app/models/quick-setup-models/minimal-site-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-minimal-add-site',\n templateUrl: './minimal-add-site.component.html',\n styleUrls: ['./minimal-add-site.component.scss']\n})\nexport class MinimalAddSiteComponent implements OnInit {\n ctrl: FormGroup;\n ProductPlanFeature = ProductPlanFeature;\n FileUploadAcceptType = FileUploadAcceptType;\n\n sites = new FormArray([]);\n\n constructor(public userService: UserService,\n private modalService: ModalService) {\n }\n\n ngOnInit() {\n this.initFormGroup();\n }\n\n initFormGroup() {\n this.ctrl = new FormGroup({\n name: new FormControl(null, [Validators.required]),\n address: new FormControl(null, [Validators.required]),\n logoFile: new FormControl(null, []),\n menuPdfFile: new FormControl(null, []),\n serviceOrderingWebSite: new FormControl(null, [urlValidator]),\n })\n }\n\n onAdd() {\n let newFormGroup = new FormGroup({\n name: new FormControl(this.ctrl.controls.name.value, [Validators.required]),\n address: new FormControl(this.ctrl.controls.address.value, [Validators.required]),\n logoFile: new FormControl(this.ctrl.controls.logoFile.value, []),\n menuPdfFile: new FormControl(this.ctrl.controls.menuPdfFile.value, []),\n serviceOrderingWebSite: new FormControl(this.ctrl.controls.serviceOrderingWebSite.value, [urlValidator]),\n })\n\n this.sites.controls.unshift(newFormGroup);\n this.initFormGroup();\n }\n\n onRemove(row: FormGroup) {\n this.modalService.confirm(\"Are You Sure You Want Remove this Site?\", \"Remove Site\").subscribe(res => {\n if (res)\n this.sites.controls.splice(this.sites.controls.indexOf(row), 1);\n })\n }\n\n async getSites(): Promise {\n let ret = [];\n for (let index = 0; index < this.sites.controls.length; index++) {\n const element = this.sites.controls[index] as FormGroup;\n let entry = {\n name: element.controls.name.value,\n address: element.controls.address.value.address,\n longitude: element.controls.address.value.longitude,\n latitude: element.controls.address.value.latitude,\n logoBase64: element.controls.logoFile.value == null ? null : removeContentTypeFromBase64((await toBase64(element.controls.logoFile.value)) as string),\n menuPdfBase64: element.controls.menuPdfFile.value == null ? null : removeContentTypeFromBase64((await toBase64(element.controls.menuPdfFile.value)) as string),\n serviceOrderingWebSite: element.controls.serviceOrderingWebSite.value,\n } as MinimalSiteModel;\n ret.push(entry);\n }\n return ret;\n }\n\n get canAddSite(): number {\n return this.userService.currentCompany.maxSites - (this.userService.currentCompany.currentActiveSites + this.sites.controls.length);\n }\n\n get valid(): boolean {\n if (!this.sites.controls?.length)\n return false;\n for (let index = 0; index < this.sites.controls.length; index++) {\n const element = this.sites.controls[index];\n if (!element.valid)\n return false;\n }\n return true;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { finalize } from 'rxjs/operators';\nimport { CompanyHostModel } from 'src/app/models/quick-setup-models/company-host';\nimport { MinimalSiteModel } from 'src/app/models/quick-setup-models/minimal-site-model';\nimport { QuickSetupModel } from 'src/app/models/quick-setup-models/quick-setup-model';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteService } from 'src/app/services/site.service';\n\n@Component({\n selector: 'obc-quick-setup',\n templateUrl: './quick-setup.component.html',\n styleUrls: ['./quick-setup.component.scss']\n})\nexport class QuickSetupComponent implements OnInit {\n inprogress: boolean = false;\n constructor(private layoutSerivce: LayoutService,\n private modalService : ModalService,\n private router : Router,\n private siteService: SiteService) { }\n\n ngOnInit() {\n this.layoutSerivce.header = \"Quick Setup\"\n }\n\n onQuickSetup(hosts: CompanyHostModel[], psites:Promise) {\n psites.then(sites=> {\n this.inprogress = true;\n this.siteService.quickSetup({\n hosts: hosts,\n sites: sites,\n } as QuickSetupModel).pipe(finalize(() => this.inprogress = false))\n .subscribe(res => {\n this.router.navigateByUrl('/sites');\n }, err => {\n this.modalService.error(err ?? \"Unbale to quick Setup\");\n console.log(err);\n })\n })\n\n }\n}\n","\n
      \n \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n\n\n\n","export enum SendMessageStatus {\n Success = 0,\n Warning = 1,\n Failed = 2,\n}\n","
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n {{totalCount}} people are checked in {{selectedSite?.name}} now.\n
      \n
      \n \n \n {{resultMessage}}\n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { SiteService } from 'src/app/services/site.service';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { finalize } from 'rxjs/operators';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SendMessageStatus } from 'src/app/enums/send-message-status';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-emergency-alarm',\n templateUrl: './emergency-alarm.component.html',\n styleUrls: ['./emergency-alarm.component.scss']\n})\nexport class EmergencyAlarmComponent implements OnInit {\n inProgress: boolean = false;\n selectedSite: SiteViewModel;\n totalCount: number;\n message: string;\n resultMessage: string = '';\n UserPermission = UserPermission;\n isAllSiteMode: boolean = false;\n isCompanyAdminOrGod: boolean = false;\n\n @Output() close: EventEmitter = new EventEmitter();\n\n constructor(\n private siteAttendanceService: SiteAttendanceService,\n private modalService: ModalService,\n private userService: UserService) { }\n\n ngOnInit(): void {\n this.isCompanyAdminOrGod = this.userService.isCompanyAdminUser();\n }\n\n getTotalCountOfCheckInSiteUser() {\n this.inProgress = true;\n this.siteAttendanceService.getTotalCountCheckInSite(this.selectedSite.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.totalCount = res;\n }, err => console.log(err));\n }\n\n sendMessage() {\n if (!this.message || this.message.trim() == '') {\n this.resultMessage = 'Please enter a message';\n return false;\n }\n this.inProgress = true;\n this.siteAttendanceService.sendEmergencyAlarm(this.selectedSite?.id, this.message)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => {\n if (result.status == SendMessageStatus.Success) {\n this.modalService.success(result.message);\n this.reset();\n }\n else if (result.status == SendMessageStatus.Warning) {\n this.modalService.warn(result.message);\n this.reset();\n }\n else if (result.status == SendMessageStatus.Failed) {\n this.modalService.error(result.message);\n }\n },\n error => this.resultMessage = \"We can't send message, please try again\")\n }\n changeSite($event: SiteViewModel) {\n this.totalCount = undefined;\n this.selectedSite = $event;\n if (this.selectedSite)\n this.getTotalCountOfCheckInSiteUser();\n }\n\n closeModal() {\n this.close.emit(true);\n }\n\n reset() {\n this.resultMessage = '';\n this.message = '';\n }\n\n onAllSiteModeSelected(value: boolean) {\n this.isAllSiteMode = value;\n this.totalCount = undefined;\n\n if (value)\n this.selectedSite = null;\n }\n}\n","
      \n
      \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n\n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      ","import { ModalService } from 'src/app/services/modal.service';\nimport { SiteAttendanceService } from 'src/app/services/site-attendance.service';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { SiteService } from './../../services/site.service';\nimport { Component, OnInit } from '@angular/core';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { SiteTemplateStatus } from 'src/app/enums/site-template-status.enum';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { finalize } from 'rxjs/operators';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { SendPushNotificationModel } from 'src/app/models/send-push-notification-model';\nimport { LayoutService } from \"../../services/layout.service\";\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-host-push-notification',\n templateUrl: './host-push-notification.component.html',\n styleUrls: ['./host-push-notification.component.scss']\n})\nexport class HostPushNotificationComponent implements OnInit {\n inProgress: boolean;\n isSmsMode: boolean = false;\n sites: SiteViewModel[] = [];\n UserPermission = UserPermission;\n isAllSiteMode: boolean = false;\n isCompanyAdminOrGod: boolean = false;\n\n formGroup: FormGroup = new FormGroup({\n siteId: new FormControl(null),\n subject: new FormControl(null, [Validators.required]),\n message: new FormControl(null, [Validators.required]),\n })\n constructor(\n private siteService: SiteService,\n private modalService: ModalService,\n private layoutService: LayoutService,\n private SiteAttendanceService: SiteAttendanceService,\n private userService: UserService) { }\n\n ngOnInit() {\n this.layoutService.header = \"Send Push Notification\";\n this.isCompanyAdminOrGod = this.userService.isCompanyAdminUser();\n\n this.inProgress = true;\n this.siteService.getAllPermissionedSites(UserPermission.SendPushNotification, SiteActiveStatus.Active, SiteTemplateStatus.Normal)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.sites = res;\n this.reset();\n });\n }\n\n onChangeMode(value) {\n this.isSmsMode = value;\n }\n\n private reset() {\n this.formGroup.reset();\n\n }\n\n get selectedSiteName(): string {\n if (this.formGroup.controls.siteId.value == null)\n return \"All Sites\";\n if (this.sites && this.sites.length)\n return this.sites.find(s => s.id == this.formGroup.controls.siteId.value).name;\n }\n\n isFormGroupValid = () => this.formGroup.valid &&\n (this.isAllSiteMode || this.formGroup.controls?.siteId?.value != null)\n\n onSendPushNotification() {\n this.SiteAttendanceService.sendHostPushNotification({\n subject: this.formGroup.controls.subject.value,\n message: this.formGroup.controls.message.value,\n } as SendPushNotificationModel, this.formGroup.controls.siteId.value).subscribe(res => {\n this.modalService.success(this.formGroup.controls.siteId.value ? \"Push Notification Sent to site attendees successfully\" : \"Push Notification Sent to all site attendees successfully\");\n this.reset();\n }, err => {\n console.log(err);\n this.modalService.error(\"Unable to Send Push Notification at This Time\");\n })\n }\n onAllSiteModeSelected(value: boolean) {\n this.isAllSiteMode = value;\n if (value)\n this.formGroup.controls.siteId.setValue(null);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CompanyEmployeeViewModel } from '../models/company-user-view-model';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CompanyEmployeeService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n apiUrl = '/api/employee';\n\ngetCurrentCompanyEmployees = (): Observable =>\n this._http.get(`${this.apiUrl}/get-current-company-employees`)\n .pipe(catchError(this._errorService.handleError));\n\n addEmployee = (user: CompanyEmployeeViewModel): Observable =>\n this._http.post(`${this.apiUrl}/add-company-employee`, user)\n .pipe(catchError(this._errorService.handleError));\n\n removeEmployee = (id: number): Observable =>\n this._http.get(`${this.apiUrl}/delete-company-employee/${id}`)\n .pipe(catchError(this._errorService.handleError));\n\n ImportUsers(formData: any): Observable {\n return this._http.post(`${this.apiUrl}/import-users`, formData,\n { reportProgress: false, observe: 'events', headers: { \"do-not-modify-content-type\": \"\" } })\n .pipe(catchError(this._errorService.handleError));\n }\n\n getEmployeeDocuments(employeeId: number): Observable {\n return this._http.get(`${this.apiUrl}/get-employee-docs/${employeeId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","
      \n \n \n {{item.regionName}}\n \n \n
      \n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {FormControl} from \"@angular/forms\";\nimport {BehaviorSubject, Observable, of} from \"rxjs\";\nimport {finalize} from \"rxjs/operators\";\nimport {RegionService} from \"../../services/region.service\";\nimport {RegionViewModel} from \"../../models/region/region-model\";\nimport {LocalStorageKey} from \"../../enums/local-storage-key.enum\";\n\n@Component({\n selector: 'obc-region-selector',\n templateUrl: './region-selector.component.html',\n styleUrls: ['./region-selector.component.scss']\n})\nexport class RegionSelectorComponent implements OnInit {\n\n maxItems: number = 10;\n\n // input & outputs {\n @Output() regionSelect = new EventEmitter();\n @Output() regionIdSelect = new EventEmitter();\n @Output() onRegionLoaded= new EventEmitter();\n\n public selectedRegion = new BehaviorSubject(null);\n\n _regionId: number = null;\n @Input() set regionId(value: number) {\n this._regionId = value;\n this.formControl.setValue(value);\n };\n\n\n regions: RegionViewModel[];\n regionGroups: any[];\n\n constructor(private regionService: RegionService) {\n }\n\n\n formControl = new FormControl(null);\n loading: boolean = false;\n regions$: Observable;\n term$ = new BehaviorSubject(null)\n\n ngOnChanges () {\n }\n\n ngOnInit() {\n this.formControl.valueChanges.subscribe(res => {\n\n if (this.regions) {\n if (res == null || res == 0) {\n this.regionSelect.emit(null);\n this.regionIdSelect.emit(null);\n this.selectedRegion.next(null);\n } else {\n let region = this.regions.find(x => x.regionId == res);\n if (region == null) {\n } else {\n this.regionSelect.emit(region);\n this.selectedRegion.next(region);\n this.regionIdSelect.emit(region.regionId);\n }\n }\n }\n });\n\n setTimeout(() => {\n this.getAccessableRegions();\n }, 250)\n }\n\n getAccessableRegions() {\n this.loading = true;\n this.regionService.getAccessableRegions()\n .pipe(finalize(() => this.loading = false))\n .subscribe(res => {\n this.setResponse(res.data);\n })\n\n }\n\n private setResponse(res: RegionViewModel[]) {\n\n this.regions = res;\n\n if (this.selectedRegion.value == null) {\n let region = this.regions.find(x => x.regionId == this.formControl.value);\n if (region) {\n this.selectedRegion.next(region);\n }\n }\n this.regions$ = of(this.regions);\n this.onRegionLoaded.emit(this.regions);\n }\n\n\n isMatched(term: string, item: RegionViewModel): boolean {\n if (!term) return true;\n term = term.toLowerCase();\n return (item.regionName && item.regionName.toLowerCase().indexOf(term) > -1)\n }\n\n reset() {\n this.formControl.reset();\n this.regions = [];\n }\n\n reachToEnd = false;\n reachToEndTerm = \"\";\n\n onScrollToEnd() {\n this.reachToEnd = true;\n this.reachToEndTerm = this.term$.value;\n this.term$.next(this.term$.value)\n }\n}\n","
      \n
      \n \n
      \n
      \n
      \n \n
      \n \n \n Export Employees\n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      MobileNameFamilyEmployee No.RegionActions
      \n \n
      {{employee.mobile | mobile}}{{employee.firstName}}{{employee.lastName}}{{employee.employeeNo}}{{employee.regionName}}\n All Regions\n \n View Documents\n \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n\n\n
      \n
      \n {{employeeToViewDocuments.firstName}} {{employeeToViewDocuments.lastName}}\n ({{employeeToViewDocuments.mobile}}) (#{{employeeToViewDocuments.employeeNo}})\n \n \n
      \n
      \n \n
      \n
      \n\n
      \n
      \n\n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n\n \n {{ doc.documentTypeTitle }}\n {{doc.title}} \n Expire: {{doc.expireDate | date}}\n \n \n CheckIn: {{doc.checkInDate | date}}\n \n
      \n
      \n
      \n \n \n \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n \n

      \n Employee has no documents!\n

      \n
      \n \n

      \n Searching User Documents ...\n

      \n
      \n
      \n
      \n
      \n\n\n \n \n \n \n Please enter a valid mobile number.\n \n \n \n \n \n \n \n \n \n \n
      \n \n
      \n \n \n \n \n \n \n \n \n \n \n \n
      \n\n\n
      \n
      \n \n
      \n
      \n
      \n
      \n

      \n Import company employee data in CSV file format (comma seperated)\n Download Sample File\n

      \n
      \n
      \n \n \n
      \n
      \n
      \n {{importData.message}}\n
      \n
      \n
      \n
      \n {{importData.message}}\n
      \n
      \n
      \n
      \n
      \n
      \n","import { CompanyEmployeeViewModel } from './../../../models/company-user-view-model';\nimport { Component, OnInit } from '@angular/core';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { CompanyEmployeeService } from 'src/app/services/company-employee.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { finalize } from 'rxjs/operators';\nimport { UserService } from 'src/app/services/user.service';\nimport { mobileIsValid } from 'src/app/helpers/mobile-format-validator';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { forkJoin } from 'rxjs';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { FileUploadAcceptType } from 'src/app/enums/file-upload-accept-type';\n\n\n@Component({\n selector: 'obc-company-employee',\n templateUrl: './company-employee.component.html',\n styleUrls: ['./company-employee.component.scss']\n})\nexport class CompanyEmployeeComponent implements OnInit {\n FileUploadAcceptType = FileUploadAcceptType;\n ProductPlanFeature = ProductPlanFeature;\n inProgress: boolean = false;\n addNewMode: boolean = false;\n filterUserBy = UserAutoCompleteFilterByFields;\n companyEmployees: CompanyEmployeeViewModel[] = [];\n companyEmployee: CompanyEmployeeViewModel = null;\n employeeToViewDocuments: CompanyEmployeeViewModel = null;\n inEdit = {};\n filterListTerm: string;\n selectedUser: UserBasicInfoViewModel;\n\n _currentCompany: CompanyViewModel = null;\n constructor(public userService: UserService,\n private companyEmployeeService: CompanyEmployeeService,\n private bsModalService: BsModalService,\n private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.initComponentData();\n this.userService.currentCompany$.subscribe(c => this._currentCompany = c);\n this.fileFormControl.valueChanges.subscribe(res => {\n if (res == null) return;\n let formData = new FormData();\n formData.append(\"file\", res, res.name);\n this.import(formData);\n });\n }\n\n onRegionSelect(value) {\n if (!this.companyEmployee) return;\n this.companyEmployee.regionId = value;\n }\n\n get currentCompany(): CompanyViewModel {\n return this._currentCompany;\n }\n\n get currentCompanyId(): number {\n if (this._currentCompany == null)\n return null;\n else\n return this._currentCompany.id;\n }\n\n get currentCompanyName(): string {\n if (this._currentCompany == null)\n return null;\n else\n return this._currentCompany.title;\n }\n\n initComponentData() {\n this.inProgress = true;\n const companyEmployees = this.companyEmployeeService.getCurrentCompanyEmployees();\n\n forkJoin({\n users: companyEmployees,\n })\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(ret => {\n this.companyEmployees = ret[\"users\"] as CompanyEmployeeViewModel[];\n });\n }\n\n onNewCompanyEmployee() {\n this.cancel();\n this.addNewMode = true;\n this.companyEmployee = new CompanyEmployeeViewModel();\n this.companyEmployee.companyId = this.currentCompanyId;\n this.companyEmployee.userId = null;\n this.companyEmployee.employeeNo = '';\n this.selectedUser = new UserBasicInfoViewModel();\n }\n\n fillCompanyEmployee(cUser: UserBasicInfoViewModel) {\n if (cUser.id) this.selectedUser = cUser;\n }\n\n addCompanyEmployee() {\n if (!this.isValidate()) return;\n this.inProgress = true;\n this.companyEmployeeService.addEmployee(this.companyEmployee)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => {\n this.initComponentData();\n this.cancel();\n },\n error => { this.modalService.error(error) });\n }\n\n delete(employee) {\n this.modalService.confirm(\"Are you sure you want to delete employee? \", \"Delete \").subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.companyEmployeeService.removeEmployee(employee.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(result => this.initComponentData(),\n error => { this.modalService.error(error) });\n }\n })\n }\n\n bsModalRef: any;\n editUserPermissionFormGroup: FormGroup;\n\n isValidate() {\n if (!this.companyEmployee.companyId)\n return false;\n\n if (!this.companyEmployee.userId && this.isValidMobile === false)\n return false;\n\n // if (!this.companyEmployee.employeeNo) {\n // this.modalService.warn('Employee No is required.');\n // return false;\n // }\n\n var duplicated = this.companyEmployees.find(c => c.userId === this.companyEmployee.userId && c.companyId === this.companyEmployee.companyId);\n if (duplicated) {\n this.modalService.warn('this user added before.');\n return false;\n }\n\n return true;\n }\n\n get isValidMobile(): boolean {\n return (this.companyEmployee.mobile !== undefined && mobileIsValid(this.companyEmployee.mobile));\n }\n\n cancel() {\n this.addNewMode = false;\n }\n\n // import users\n importData: any;\n fileFormControl = new FormControl(null, [Validators.required]);\n clear() {\n this.fileFormControl.setValue(null);\n this.importData = null;\n }\n\n onClearForm() {\n this.clear();\n }\n\n import(formData) {\n this.inProgress = true;\n this.companyEmployeeService.ImportUsers(formData)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n if (res.type == 4 && res.ok) {\n if (res.body.valid) {\n this.modalHandle.hide();\n this.initComponentData();\n } else\n this.importData = res.body;\n }\n });\n }\n\n modalHandle: any;\n openImportEmployeeModal(template) {\n this.modalHandle = this.bsModalService.show(template);\n }\n\n inDocProgress = false;\n docs: any[] = null;\n onViewEmployeeDocuments(employee: CompanyEmployeeViewModel, template) {\n this.inDocProgress = true;\n let employeeId = employee.id;\n this.employeeToViewDocuments = employee;\n this.docs = null;\n this.modalHandle = this.bsModalService.show(template);\n this.companyEmployeeService.getEmployeeDocuments(employeeId)\n .pipe(finalize(() => this.inDocProgress = false))\n .subscribe(res => {\n this.docs = res;\n }, err => { this.modalService.error(err) })\n }\n}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { DocumentExpiryStatus } from '../../enums/document-expiry-status.enum';\nimport { FormBuilder } from '@angular/forms';\nimport { LayoutService } from '../../services/layout.service';\nimport { AttendanceDocumentReportViewModel } from 'src/app/models/attendance-document-report-viewmodel';\nimport { UserService } from 'src/app/services/user.service';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { GridColumn, GridConfig, InitialFilter } from \"../../models/grid/grid.config\";\nimport { Table } from \"../../enums/table.enum\";\nimport { EnumToArrayPipe } from \"../../pipes/enum-to-array.pipe\";\n\n@Component({\n selector: 'obc-document-report',\n templateUrl: './document-report.component.html',\n styleUrls: ['./document-report.component.scss']\n})\n\nexport class DocumentReportComponent implements OnInit {\n showAllCards: boolean = true;\n @ViewChild('grid') grid: any;\n\n initialFilters: InitialFilter[] = [\n {\n key: 'documentExpiryStatus',\n value: this.enumToArrayPipe.transform(DocumentExpiryStatus),\n displayInFilterRenderer: true,\n },\n {\n key: 'checkInDate',\n value: null,\n displayInFilterRenderer: true,\n },\n {\n key: 'showAllCards',\n value: this.showAllCards,\n displayInFilterRenderer: true,\n }\n ]\n\n constructor(\n private formBuilder: FormBuilder,\n private layoutService: LayoutService,\n public userService: UserService,\n private enumToArrayPipe: EnumToArrayPipe,\n ) { }\n\n async ngOnInit() {\n this.layoutService.header = 'Card Report';\n this.prepareGridConfig();\n }\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n prepareGridConfig() {\n let currentDate = new Date();\n currentDate.setFullYear(currentDate.getFullYear() - 1);\n let filterCheckInDateRanges = { from: currentDate, to: null };\n this.initialFilters.find(x => x.key == \"checkInDate\").value = filterCheckInDateRanges;\n\n this.gridConfig = new GridConfig({\n apiUrl: '/api/SiteAttendance/attendance-document-report',\n tableType: Table.CardReport,\n displayGeneralSearch: true,\n generalSearchPlaceholder: \"Filter Result by Mobile, First Name, Last Name, Site\",\n initialFilters: this.initialFilters,\n csvReportUrl: '/api/SiteAttendance/export-attendance-document-report-csv-as-job',\n });\n this.gridColumns = [\n {\n name: \"Full Name\", key: \"fullName\",\n type: FilterType.Text, enableSort: true,\n enableFilter: false,\n propertyNameInQuery: 'names',\n visible: true,\n },\n {\n name: \"Supplier\", key: \"supplierName\",\n sortBy: \"supplier\",\n type: FilterType.Supplier, enableSort: true, enableFilter: true,\n propertyNameInQuery: 'suppliers',\n visible: true,\n },\n {\n name: \"Mobile\", key: \"mobile\", type: FilterType.Mobile, enableSort: true, enableFilter: true,\n propertyNameInQuery: 'userIds',\n visible: true,\n },\n {\n name: \"Site\", key: \"siteName\",\n sortBy: \"site\",\n type: FilterType.Site, enableSort: true, enableFilter: true,\n propertyNameInQuery: 'siteIds',\n visible: true,\n },\n {\n name: \"Check In Time\", key: \"checkInDate\", type: FilterType.DateTimeRange, enableSort: true, enableFilter: true,\n propertyNameInQuery: 'checkInDateRange',\n visible: true,\n isArray: false,\n },\n {\n name: \"Type\", key: \"cardType\",\n type: FilterType.DocumentType, enableSort: true, enableFilter: true,\n propertyNameInQuery: 'documentTypeIds',\n visible: true,\n },\n {\n name: \"Title\", key: \"title\", type: FilterType.SingleText, enableSort: true, enableFilter: true,\n propertyNameInQuery: 'titles',\n visible: false,\n },\n {\n name: \"Expiry Status\",\n key: \"documentExpiryStatus\",\n sortBy: \"expirayStatus\",\n type: FilterType.DocumentExpiryStatus,\n enableSort: true,\n enableFilter: true,\n visible: true,\n propertyNameInQuery: 'documentExpiryStatuses',\n },\n {\n name: \"Expiration Date\",\n key: \"expirationDate\",\n type: FilterType.DateTimeRange,\n enableSort: true,\n enableFilter: true,\n visible: true,\n propertyNameInQuery: 'expirationDateRanges',\n isArray: false,\n },\n {\n name: \"File\", key: \"documentLinks\", type: FilterType.File, enableSort: false, enableFilter: false,\n displayFunction: (_) => { return 'View Documents' },\n visible: true,\n },\n ];\n }\n\n onActiveChanged(value) {\n this.showAllCards = value;\n this.initialFilters.find(x => x.key == \"showAllCards\").value = this.showAllCards;\n this.grid.initialFilters = this.initialFilters;\n this.grid.loadData(0);\n }\n}\n\n\n","
      \n
      \n
      \n
      Card Report
      \n \n \n
      \n \n Display Mode: \n \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n","export enum LinkToCompanyStatus\n{\n NotLinked = 0,\n Pending = 1,\n Linked = 2,\n}\n","
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Supplier\n \n Business InfoLink to Company\n \n \n \n
      \n \n
      \n {{supplier.name}}\n \n
      \n \n {{supplier.email}}\n \n {{supplier.mobile}}\n \n {{supplier.contactName}}\n \n
      \n \n
        \n
      • \n {{ biz.name }} \n \n (Abn: {{ biz.abn }}\n ,\n Acn: {{ biz.acn }}\n ,\n License Number: {{ biz.licenseNumber }})\n \n
      • \n
      \n
      \n \n Link\n \n
      \n Linked to {{ supplier.linkToCompanyTitle }}\n
      \n \n Unlink\n \n
      \n
      \n
      \n
      Status: Pending
      \n
      Email: {{ supplier.linkToCompanyEmail }}
      \n
      Mobile: {{ supplier.linkToCompanyMobile }}
      \n \n \n
      \n
      \n
      \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n Add/Update Supplier\n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n \n Send Invitation To {{selectedSupplier.name}}\n \n \n
      \n
      \n
      Please Enter the contact details for {{selectedSupplier.name}}.\n
      \n These details will be used to verify their account.\n
      \n\n \n \n\n
      \n
      \n \n
      \n
      \n
      \n
      ","import { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { CompanySupplierModel, CompanySupplierQuery, CompanySupplierViewModel } from 'src/app/models/supplier-models';\nimport { CompanySupplierService } from 'src/app/services/company-supplier.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService, State } from 'src/app/services/modal.service';\nimport { OnInit, Component } from '@angular/core';\nimport { e168ValidatorNullable } from 'src/app/helpers/mobile-format-validator';\nimport { LinkToCompanyStatus } from \"../../enums/link_to_company_status\";\nimport { LinkToCompanyRequestModel, UnlinkToCompanyRequestModel } from \"../../models/link_to_company_request_model\";\nimport { convertObjectToUrlParameters } from 'src/app/helpers/extract-params-from-model';\n\n@Component({\n selector: 'obc-company-supplier',\n templateUrl: './company-supplier.component.html',\n styleUrls: ['./company-supplier.component.scss']\n})\nexport class CompanySupplierComponent implements OnInit {\n\n LinkToCompanyStatus = LinkToCompanyStatus;\n selectedSupplier: CompanySupplierViewModel;\n onlyActiveSites: boolean = true;\n\n formGroup = new FormGroup({\n id: new FormControl(null, []),\n name: new FormControl(null, [Validators.required]),\n email: new FormControl(null, [Validators.email]),\n mobile: new FormControl(null, [e168ValidatorNullable]),\n contactName: new FormControl(null),\n });\n inProgress: boolean = false;\n isInUpdating: boolean = false;\n suppliers = new BehaviorSubject([]);\n supplierFilter: string = '';\n\n\n constructor(private companySupplierService: CompanySupplierService,\n private layoutService: LayoutService,\n private modalService: ModalService, private bsModalService: BsModalService) {\n }\n\n ngOnInit() {\n this.getSuppliers();\n this.layoutService.header = \"Manage Suppliers\";\n }\n\n onActiveChanged(value) {\n if (this.onlyActiveSites == value) // don't call api if value has not changed\n return;\n\n if (this.isInUpdating)\n return;\n\n this.isInUpdating = true;\n this.onlyActiveSites = value;\n this.getSuppliers();\n }\n\n get filteredSuppliers() {\n let supplierFilter = (this.supplierFilter ?? '').toLowerCase();\n return this.suppliers.value?.filter(s =>\n (supplierFilter ?? '').length == 0 ||\n s.name.toLowerCase().indexOf(supplierFilter.toLowerCase()) >= 0 ||\n ((s.companySupplierBusinesses ?? []).some(b =>\n (b.abn ?? '').indexOf(supplierFilter) >= 0 ||\n (b.acn ?? '').indexOf(supplierFilter) >= 0 ||\n (b.name ?? '').toLowerCase().indexOf(supplierFilter) >= 0)));\n }\n\n getSuppliers() {\n this.inProgress = true;\n this.companySupplierService.getSuppliers({ showArchivedSuppliers: !this.onlyActiveSites } as CompanySupplierQuery, null)\n .pipe((finalize(() => { this.inProgress = false; this.isInUpdating = false; })))\n .subscribe(res => {\n this.suppliers.next(res.data);\n });\n }\n\n\n addSupplier() {\n this.inProgress = true;\n this.companySupplierService.addSupplier(\n this.getSupplierModel()\n )\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.getSuppliers();\n this.bsModalHandle.hide();\n }, err => {\n this.modalService.error(err?.error ?? \"Unknown Error\")\n });\n }\n\n updateSupplier() {\n this.inProgress = true;\n var id = +this.formGroup.controls.id.value;\n this.companySupplierService.updateSupplier(\n id,\n this.getSupplierModel(),\n )\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.getSuppliers();\n this.formGroup.reset();\n this.bsModalHandle.hide();\n }, err => {\n this.modalService.error(err?.error ?? \"Unknown Error\")\n });\n }\n\n onEditSupplier(template: any, supplier: CompanySupplierViewModel) {\n this.formGroup.controls.id.setValue(supplier.id);\n this.formGroup.controls.name.setValue(supplier.name);\n this.formGroup.controls.email.setValue(supplier.email);\n this.formGroup.controls.mobile.setValue(supplier.mobile);\n this.formGroup.controls.contactName.setValue(supplier.contactName);\n this.openUpsertModal(template);\n }\n\n deleteSupplier(supplier: CompanySupplierViewModel) {\n this.modalService.confirm(`Are you sure you want to deactivate ${supplier.name}? This will remove the supplier and their documents from all sites and make them inactive.`, \"Deactivate Supplier Confirmation\", 'Deactivate', 'Cancel', null, null, true).subscribe(confirm => {\n if (confirm) {\n this.inProgress = true;\n this.companySupplierService.deleteSupplier(\n supplier.id\n )\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.getSuppliers();\n }, err => {\n this.modalService.error(err?.error ?? \"Unknown Error\")\n });\n }\n })\n }\n\n activateSupplier(supplier: CompanySupplierViewModel) {\n this.modalService.confirm(`Are you sure you want to activate ${supplier.name}?`, \"Activate Supplier Confirmation\", 'Activate', 'Cancel', 'btn-warning', 'btn-default').subscribe(confirm => {\n if (confirm) {\n this.inProgress = true;\n this.companySupplierService.activateSupplier(supplier.id)\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(_ => {\n this.getSuppliers();\n });\n }\n });\n }\n\n private getSupplierModel(): CompanySupplierModel {\n return {\n name: this.formGroup.controls.name.value,\n email: this.formGroup.controls.email.value,\n mobile: this.formGroup.controls.mobile.value,\n contactName: this.formGroup.controls.contactName.value,\n } as CompanySupplierModel;\n }\n\n onAddSupplier(template: any) {\n this.formGroup.reset();\n this.openUpsertModal(template);\n }\n\n bsModalHandle: any;\n\n openUpsertModal(template) {\n this.bsModalHandle = this.bsModalService.show(template);\n }\n\n openInvitationModal(template, supplier: CompanySupplierViewModel) {\n this.selectedSupplier = supplier;\n this.invitationEmail.setValue(supplier.email);\n this.invitationMobile.setValue(supplier.mobile);\n this.bsModalHandle = this.bsModalService.show(template);\n }\n\n unlinkSupplierFromCompany(supplier: CompanySupplierViewModel) {\n this.modalService.confirm(\"Do You Want to Unlink supplier?\", \"Unlink Supplier\").subscribe(confirm => {\n if (confirm) {\n this.inProgress = true;\n this.companySupplierService.unlinkSupplierFromCompany(\n { companySupplierId: supplier.id } as UnlinkToCompanyRequestModel\n )\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.getSuppliers();\n this.bsModalHandle.hide();\n }, err => {\n this.modalService.error(err?.error ?? \"Unknown Error\")\n });\n }\n })\n }\n\n invitationMobile: FormControl = new FormControl(null, [\n Validators.required,\n Validators.maxLength(15),\n Validators.minLength(10)\n ]);\n invitationEmail: FormControl = new FormControl(null, [\n Validators.required,\n Validators.email\n ]);\n\n sendInvitationToCompany() {\n this.inProgress = true;\n this.companySupplierService.linkSupplierToCompany(\n {\n companySupplierId: this.selectedSupplier?.id,\n email: this.invitationEmail.value,\n mobile: this.invitationMobile.value,\n } as LinkToCompanyRequestModel,\n )\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.getSuppliers();\n this.bsModalHandle.hide();\n }, err => {\n this.modalService.error(err?.error ?? \"Unknown Error\")\n });\n }\n\n validateInvitationFields() {\n return this.invitationMobile.valid && this.invitationEmail.valid;\n }\n\n cancelSupplierLinking(supplier: CompanySupplierViewModel) {\n this.modalService.confirm('Are you sure you want to cancel linking process?')\n .subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.companySupplierService.cancelSupplierLinking(supplier.id)\n .subscribe(_ => {\n this.inProgress = false;\n this.getSuppliers();\n },\n err => {\n this.inProgress = false;\n this.modalService.error(err?.error ?? \"Unknown Error\")\n });\n }\n });\n }\n\n resendSupplierEmail(supplier: CompanySupplierViewModel) {\n this.modalService.confirm('Are you sure you want to resend invitation?')\n .subscribe(res => {\n if (res) {\n this.inProgress = true;\n this.companySupplierService.resendSupplierLinkingInvitation(supplier.id)\n .subscribe(_ => {\n this.inProgress = false;\n this.getSuppliers();\n },\n () => {\n this.inProgress = false;\n });\n }\n });\n }\n\n exportCSVReport() {\n var model = {\n pagingInfo: null,\n query: {\n term: this.supplierFilter,\n showArchivedSuppliers: !this.onlyActiveSites\n } as CompanySupplierQuery,\n };\n\n const params = convertObjectToUrlParameters(model);\n return window.open('/api/CompanySupplier/report-csv/?' + params);\n }\n\n}\n","\n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n\n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n\n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      NameAbnAcnLicense Number
      {{business.name}}{{business.abn}}{{business.acn}}{{business.licenseNumber}}\n \n
      \n
      \n
      \n \n
      \n\n
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n \n \n \n \n
      \n
      \n\n\n
      \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      TypeViewTitleExpirtion Date
      {{getTypeLabel(document.userDocumentTypeId)}}\n View\n {{document.title}}{{document.expireDate | date:\"short\"}}\n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { BehaviorSubject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { UserBusinessComponent } from 'src/app/custom-controls/user-business/user-business.component';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { getFileExtenstion, toBase64 } from 'src/app/helpers/general-functions';\nimport { CompanySupplierViewModel, CompanySupplierQuery } from 'src/app/models/supplier-models';\nimport { CompanySupplierBusinessModel, CompanySupplierBusinessViewModel, CompanySupplierDocumentViewModel, UserBusinessViewModel } from 'src/app/models/user-business-viewmodel';\nimport { UserDocumentType } from 'src/app/models/user-document-type';\nimport { CompanySupplierService } from 'src/app/services/company-supplier.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserDocumentTypeService } from 'src/app/services/user-document-type.service';\n\n@Component({\n selector: 'obc-edit-company-supplier',\n templateUrl: './edit-company-supplier.component.html',\n styleUrls: ['./edit-company-supplier.component.scss']\n})\nexport class EditCompanySupplierComponent implements OnInit {\n datetimePickerMode = DatetimePickerMode;\n selectedTab = new BehaviorSubject<\"business\" | \"document\">(\"document\");\n selectedBusiness: UserBusinessViewModel;\n license: string;\n get supplierId(): number {\n return this.formControl.value;\n };\n suppliers = new BehaviorSubject([]);\n businesses = new BehaviorSubject([]);\n documentTypes = new BehaviorSubject([]);\n documents = new BehaviorSubject([]);\n formControl = new FormControl();\n inProgress = false;\n @ViewChild('lookupUserBusiness') lookupUserBusiness: UserBusinessComponent;\n\n canAddBusiness(): boolean { return (this.selectedBusiness?.name?.length > 0 || this.license?.length > 0); }\n\n documentFormGroup = new FormGroup({\n title: new FormControl(null, []),\n expireDate: new FormControl(null, []),\n file: new FormControl(null, [Validators.required]),\n userDocumentType: new FormControl(null, [Validators.required])\n })\n\n constructor(\n private route: ActivatedRoute,\n private modalService: ModalService,\n private layoutService: LayoutService,\n private companySupplierService: CompanySupplierService,\n private userDocumentTypeService: UserDocumentTypeService,\n ) { }\n\n ngOnInit() {\n this.layoutService.header = \"Supplier Businesses and Documents\";\n\n // this.selectedTab.subscribe(res => {\n // if (res == 'business' && this.suppliers.value)\n // this.getBusinesses(this.supplierId);\n // else if (res == 'document' && this.suppliers.value) {\n // this.getUserDocumentTypes();\n // this.getDocuments();\n // }\n // })\n\n this.formControl.valueChanges.subscribe(res => {\n this.getBusinesses(this.supplierId);\n this.getUserDocumentTypes();\n this.getDocuments();\n });\n\n this.companySupplierService.getSuppliers(null, null)\n .subscribe(res => {\n this.suppliers.next(res.data);\n this.route.params\n\n .subscribe(res => {\n this.formControl.setValue(+res['id']);\n })\n })\n }\n\n inGettingBussiness = false;\n getBusinesses(supplierId: number) {\n this.inProgress = true;\n if (this.inGettingBussiness == true || supplierId == null) return;\n this.inGettingBussiness = true;\n this.companySupplierService.getBusinesses(supplierId, {\n pagingInfo: {\n\n },\n query: null,\n })\n .pipe(finalize(() => {\n this.inGettingBussiness = false;\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.businesses.next(res.data)\n })\n }\n\n temporaryAddBusiness(business: UserBusinessViewModel) {\n if (business.mode == \"UserValue\")\n this.selectedBusiness = null;\n else\n this.selectedBusiness = business;\n }\n\n addBusiness() {\n var supplierId = this.formControl.value;\n this.inProgress = true;\n var business = {\n abn: this.selectedBusiness?.abn,\n acn: this.selectedBusiness?.acn,\n name: this.selectedBusiness?.name,\n licenseNumber: this.license,\n } as CompanySupplierBusinessModel;\n this.companySupplierService.addBusiness(supplierId, business)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.businesses.value.push(res);\n this.selectedBusiness = null;\n this.license = '';\n this.lookupUserBusiness.resetAll();\n }, err => {\n this.modalService.error(err.error)\n })\n }\n\n removeBusiness(business: CompanySupplierBusinessViewModel) {\n var supplierId = this.formControl.value;\n this.inProgress = true;\n this.companySupplierService.removeBusiness(supplierId, business.id)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n var index = this.businesses.value.indexOf(business);\n this.businesses.value.splice(index, 1);\n })\n }\n\n inGettingDocumentTypes = false;\n getUserDocumentTypes() {\n if (this.inGettingDocumentTypes == true) return;\n this.inGettingDocumentTypes = true;\n this.inProgress = true;\n this.userDocumentTypeService.getAll()\n .pipe(finalize(() => {\n this.inGettingDocumentTypes = false;\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.documentTypes.next(res)\n })\n }\n\n async addDocument() {\n var supplierId = this.formControl.value;\n var file = this.documentFormGroup.controls.file.value as File;\n var model = {\n content: (await toBase64(file)) as string,\n fileType: getFileExtenstion(file.name),\n title: this.documentFormGroup.controls.title.value,\n expireDate: this.documentFormGroup.controls.expireDate.value,\n userDocumentTypeId: this.documentFormGroup.controls.userDocumentType.value.id,\n }\n this.inProgress = true;\n this.companySupplierService.addDocument(supplierId, model)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.documents.value.push(res);\n this.documentFormGroup.reset();\n }, err => {\n this.modalService.error(err.error)\n })\n }\n\n getDocuments() {\n var supplierId = this.supplierId;\n if (!supplierId) return;\n this.inProgress = true;\n this.companySupplierService.getDocuments(supplierId)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.documents.next(res.data);\n })\n }\n\n removeDocument(document) {\n var supplierId = this.supplierId;\n this.inProgress = true;\n this.companySupplierService.removeDocument(supplierId, document.id)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n var index = this.documents.value.indexOf(document);\n this.documents.value.splice(index, 1);\n })\n }\n getTypeLabel(userDocumentTypeId: number) {\n return this.documentTypes.value.find(x => x.id == userDocumentTypeId)?.title;\n }\n}\n","export enum AssignToolType {\n User = 1,\n Location = 2,\n SelectedSiteLocation = 3,\n}\n","
      \n \n \n \n \n \n\n \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { ToolDynamicFieldType } from 'src/app/enums/tool-dynamic-field-type.enum';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { ToolDynamicFieldViewModel } from 'src/app/models/inventory/tool-dynamic-field-model';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\n\n\n@Component({\n selector: 'obc-text-tool-field-renderer',\n templateUrl: './text-tool-field-renderer.component.html',\n styleUrls: ['./text-tool-field-renderer.component.scss']\n})\nexport class TextToolFieldRendererComponent implements OnInit {\n @Input() type: ToolDynamicFieldType;\n @Input() control: CustomFormControl;\n toolDynamicFieldType = ToolDynamicFieldType;\n get item(): ToolDynamicFieldViewModel {\n return this.control?.item;\n }\n get fieldType(): string {\n if (this.type == this.toolDynamicFieldType.Number)\n return \"number\";\n else if (this.type == this.toolDynamicFieldType.Text)\n return \"text\";\n }\n DatetimePickerMode = DatetimePickerMode;\n constructor() {\n }\n\n ngOnInit() {\n }\n}\n","
      \n \n
      0\">\n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormArray, FormControl } from '@angular/forms';\nimport { DropzoneSourceType } from 'src/app/enums/dropzone-source-type';\nimport { getFileExtenstion, toBase64 } from 'src/app/helpers/general-functions';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { InventoryDynamicFieldFile } from 'src/app/models/inventory/inventory-dynamic-field-values';\nimport { ToolDynamicFieldViewModel } from 'src/app/models/inventory/tool-dynamic-field-model';\nimport { QuestionAnswerFileFormat } from 'src/app/models/questionParameters/question-answer-file-format';\nimport { FileUploadAcceptType } from \"../../../../enums/file-upload-accept-type\";\nimport { SafePipe } from \"../../../../pipes/safe-pipe\";\nimport { ModalService } from \"../../../../services/modal.service\";\n\n@Component({\n selector: 'obc-image-tool-field-renderer',\n templateUrl: './image-tool-field-renderer.component.html',\n styleUrls: ['./image-tool-field-renderer.component.scss'],\n providers: [\n SafePipe\n ]\n})\nexport class ImageToolFieldRendererComponent implements OnInit {\n DropzoneSourceType = DropzoneSourceType;\n formArray = new FormArray([]);\n _control: CustomFormControl;\n images : InventoryDynamicFieldFile[] = [];\n fileAcceptType: FileUploadAcceptType;\n\n @Input() set control(c: CustomFormControl) {\n this._control = c;\n switch(c.item.fileType){\n case QuestionAnswerFileFormat.AnyFile:\n this.fileAcceptType = FileUploadAcceptType.Any;\n break;\n case QuestionAnswerFileFormat.Image:\n this.fileAcceptType = FileUploadAcceptType.Image;\n break;\n case QuestionAnswerFileFormat.PDF:\n this.fileAcceptType = FileUploadAcceptType.PDF;\n break;\n default:\n this.fileAcceptType = FileUploadAcceptType.Any;\n break;\n }\n this.images = this.item.tempData ? JSON.parse(JSON.stringify(this.item.tempData)) as InventoryDynamicFieldFile[] : []; // clone images\n this.formArray.clear();\n this.addImageInput();\n this.updateValues();\n };\n get item(): ToolDynamicFieldViewModel {\n return this._control?.item;\n }\n constructor(private modalService: ModalService,) { }\n\n ngOnInit() {\n }\n\n removeImageInput(control: FormControl) {\n var index = this.formArray.controls.indexOf(control);\n if (index >= 0) {\n this.formArray.controls.splice(index, 1);\n this.updateValues();\n }\n }\n\n addImageInput() {\n var nc = new FormControl(null);\n nc.valueChanges.subscribe(res => {\n this.updateValues();\n })\n this.formArray.controls.push(nc);\n }\n\n async updateValues() {\n this._control.setValue(null);\n var list = [];\n for (let index = 0; index < this.formArray.controls.length; index++) {\n const c = this.formArray.controls[index];\n // update here\n if (c.value) {\n var file = c.value;\n var body = (await toBase64(file)) as string;\n var fileAsBase64 = body.split(';base64,')[1];\n var fileExtension = getFileExtenstion(file.name);\n list.push({\n fileAsBase64: fileAsBase64,\n fileExtension: fileExtension,\n fileSize: file.size,\n fileName: file.name,\n })\n }\n }\n\n var value = {\n files : list,\n images : this.images,\n }\n\n this._control.setValue(value);\n }\n\n removeImage(image) {\n this.modalService.confirm(\"Are you sure you want to delete?\").subscribe(del => {\n if (del === true) {\n let index = this.images.indexOf(image);\n this.images.splice(index, 1);\n }\n });\n }\n}\n","
      \n \n
      \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, Validators } from '@angular/forms';\nimport { ToolDynamicFieldType } from 'src/app/enums/tool-dynamic-field-type.enum';\nimport { CustomFormControl } from 'src/app/models/custom-formcontrol';\nimport { InventoryDynamicFieldValues } from 'src/app/models/inventory/inventory-dynamic-field-values';\nimport { ExtendedToolDynamicFieldValueModel, ToolDynamicFieldViewModel } from 'src/app/models/inventory/tool-dynamic-field-model';\n\n@Component({\n selector: 'obc-tool-field-renderer',\n templateUrl: './tool-field-renderer.component.html',\n styleUrls: ['./tool-field-renderer.component.scss']\n})\nexport class ToolFieldRendererComponent implements OnInit {\n formArray = new FormArray([]);\n ToolDynamicFieldType = ToolDynamicFieldType;\n _fields: ToolDynamicFieldViewModel[] = [];\n @Input() set fields(value: ToolDynamicFieldViewModel[]) {\n if (value == null)\n value = [];\n //if (!(value?.length > 0)) return;\n this.formArray.clear();\n this._fields = value;\n for (let index = 0; index < value.length; index++) {\n const field = value[index];\n var validators = [];\n if (field.isRequired)\n validators.push(Validators.required);\n if (field.type != ToolDynamicFieldType.File)\n this.formArray.push(new CustomFormControl(null, field, validators));\n else if (field.type == ToolDynamicFieldType.File) {\n this.formArray.push(new CustomFormControl(null, field, validators));\n }\n\n\n }\n this.updateFormValues();\n }\n _values: InventoryDynamicFieldValues[] = [];\n @Input() set values(value: InventoryDynamicFieldValues[]) {\n this._values = value;\n this.updateFormValues();\n }\n\n updateFormValues() {\n for (let index = 0; index < this.formArray.length; index++) {\n const control = this.formArray.controls[index] as CustomFormControl;\n const item = control.item as ToolDynamicFieldViewModel;\n var value = this._values?.find(x => x.dynamicFieldId == item.id);\n if (value) {\n if (item.type != ToolDynamicFieldType.File)\n control.setValue(value.value);\n else if (item.type == ToolDynamicFieldType.File) {\n // temporary images to control\n item.tempData = value.images;\n }\n }\n }\n }\n\n get fields(): ToolDynamicFieldViewModel[] {\n return this._fields;\n }\n\n get valid(): boolean {\n if (this.formArray?.controls.length > 0) {\n for (let index = 0; index < this.formArray?.controls.length; index++) {\n const element = this.formArray?.controls[index];\n var item = this.getCustomFormControlItem(element);\n if (item.type != ToolDynamicFieldType.File) {\n if (!element.valid)\n return false;\n } else {\n var value = element.value;\n if (item.isRequired && !(value?.files?.length > 0 || value?.images?.length > 0))\n return false;\n }\n }\n }\n return true;\n }\n\n public getFieldValues(): ExtendedToolDynamicFieldValueModel[] {\n var ans: ExtendedToolDynamicFieldValueModel[] = [];\n if (this.formArray?.controls.length > 0) {\n for (let index = 0; index < this.formArray?.controls.length; index++) {\n const item = this.getCustomFormControlItem(this.formArray.controls[index]);\n const control = this.formArray?.controls[index];\n var value = item.type == ToolDynamicFieldType.File ? (control.value?.files?.length > 0 ? JSON.stringify(control.value?.files) : null) : control.value;\n var images = item.type == ToolDynamicFieldType.File ? (control.value?.images?.length > 0 ? control.value?.images : null) : null;\n ans.push({\n dynamicFieldId: item.id,\n value: value,\n images: images,\n uniqueKey: item.uniqueKey,\n } as ExtendedToolDynamicFieldValueModel)\n }\n }\n return ans;\n }\n\n constructor() { }\n\n ngOnInit() {\n }\n\n getCustomFormControlItem(control: AbstractControl) {\n return this.toToolDynamicFieldModel(this.toCustomFormControl(control).item);\n }\n\n toToolDynamicFieldModel(item: any): ToolDynamicFieldViewModel {\n return item as ToolDynamicFieldViewModel;\n }\n\n toCustomFormControl(control: AbstractControl): CustomFormControl {\n return control as CustomFormControl;\n }\n\n}\n","
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n \n
      \n \n
      \n
      \n \n
      \n
      0\">\n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n\n\n
      \n
      \n
      Additional Info
      \n
      \n
      \n
      \n
      \n
      \n {{key.fieldName}}: {{key.value}}\n
      \n\n
      \n
      \n
      \n
      \n
      \n","import {Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BehaviorSubject, forkJoin } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { AssignToolType } from 'src/app/enums/assign-tool-type.enum';\nimport { getFileExtenstion, toBase64 } from 'src/app/helpers/general-functions';\nimport { ToolCategoryViewModel } from 'src/app/models/inventory/tool-category-model';\nimport { ToolDynamicFieldValueModel } from 'src/app/models/inventory/tool-dynamic-field-model';\nimport { ToolFullInfoViewModel } from 'src/app/models/inventory/tool-full-info-view-model';\nimport { ToolStatusViewModel } from 'src/app/models/inventory/tool-status-model';\nimport { BaseToolModel, TemporarilyToolModel, ToolModel } from 'src/app/models/inventory/tool-view-model';\nimport { RegionViewModel } from 'src/app/models/region/region-model';\nimport { UploadFileInfo } from 'src/app/models/requiredDocumentAnswer';\nimport { BaseSiteViewModel } from 'src/app/models/site-viewmodel';\nimport { UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { InventoryService } from 'src/app/services/inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { ToolFieldRendererComponent } from '../tool-field-renderers/tool-field-renderer/tool-field-renderer.component';\nimport { InventoryLocationSelectorModel } from \"../../../models/inventory/inventory-location-selector-model\";\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\nimport {\n CompanyAssetConfiguration, CompanyAssetConfigurationQueryViewModel,\n SiteAssetConfigurationQueryViewModel\n} from 'src/app/models/site-asset/site-asset-view-model';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { FileUploadAcceptType } from \"../../../enums/file-upload-accept-type\";\n\n@Component({\n selector: 'app-upsert-inventory-asset',\n templateUrl: './upsert-inventory-asset.component.html',\n styleUrls: ['./upsert-inventory-asset.component.scss']\n})\nexport class UpsertInventoryAssetComponent implements OnInit {\n _asset: ToolFullInfoViewModel = null;\n FileUploadAcceptType = FileUploadAcceptType;\n @Input() set isTemporarilyAsset(value: boolean) {\n this.isTempAsset = value;\n this.updateOnChangeTempStatus();\n }\n\n isTempAsset: boolean = false;\n @Input() parentSelectedSite: BaseSiteViewModel;\n @Input() externalSiteSupplierId: number;\n @Input() showSubmitButton: boolean = true;\n @ViewChild('assetName') assetName: ElementRef;\n\n @Input() set asset(value: ToolFullInfoViewModel) {\n this._asset = value;\n this.updateFormValues();\n }\n\n get editMode(): boolean {\n return this._asset != null;\n }\n\n @Output() closeMe = new EventEmitter();\n\n selectedSiteId: number;\n AssignToolType = AssignToolType;\n inProgress: boolean = false;\n categories = new BehaviorSubject([]);\n statuses = new BehaviorSubject([]);\n assetConfiguration = new BehaviorSubject(null);\n //locations = new BehaviorSubject([]);\n showRegionSelectorComponent: boolean = false;\n newLocation: string;\n\n formGroup = new FormGroup({\n categoryId: new FormControl(null, [Validators.required]),\n regionId: new FormControl(null),\n name: new FormControl(null, [Validators.required]),\n statusId: new FormControl(null, [Validators.required]),\n image: new FormControl(null, []),\n toUserId: new FormControl(null, []),\n toLocationId: new FormControl(null, []),\n assignType: new FormControl(AssignToolType.Location)\n })\n\n constructor(private inventoryService: InventoryService,\n private modalService: ModalService,\n public userService: UserService, private siteAssetService: SiteAssetService) {\n }\n\n _currentCompany: CompanyViewModel = null;\n get currentCompany(): CompanyViewModel {\n return this._currentCompany;\n }\n\n get currentCompanyId(): number {\n if (this._currentCompany == null)\n return null;\n else\n return this._currentCompany.id;\n }\n\n ngOnInit() {\n this.userService.currentCompany$.subscribe(c => this._currentCompany = c);\n this.formGroup.controls.assignType.valueChanges.subscribe(_ => this.resetUserLocation());\n this.formGroup.controls.image.valueChanges.subscribe(async _ => await this.updateMainImageSource());\n this.selectedSiteId = this.parentSelectedSite?.id;\n\n this.inProgress = true;\n const q: SiteAssetConfigurationQueryViewModel ={siteId:this.selectedSiteId,siteSupplierId:this.externalSiteSupplierId};\n (this.selectedSiteId ?\n this.siteAssetService.getSiteAssetsConfiguration(q) :\n this.siteAssetService.getCompanyAssetsConfiguration(\n {companyId: this._currentCompany?.id} as CompanyAssetConfigurationQueryViewModel\n ))\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.assetConfiguration.next(res);\n if ((this.isTempAsset && this.assetConfiguration.value.isRequiredShortTermAssetImage) || (!this.isTempAsset && this.assetConfiguration.value.isRequiredAssetImage))\n {\n this.formGroup.get('image').setValidators([Validators.required]);\n this.formGroup.controls['image'].updateValueAndValidity();\n }\n else{\n this.formGroup.get('image').setValidators([]);\n this.formGroup.controls['image'].updateValueAndValidity();\n }\n });\n\n if (!this.isTempAsset) {\n this.inProgress = true;\n forkJoin({\n categories: this.inventoryService.getToolCategories(),\n statuses: this.inventoryService.getToolStatuses(),\n //locations : this.inventoryService.getInventorySiteLocations()\n })\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.categories.next(res.categories.data);\n this.statuses.next(res.statuses.data);\n\n if (!this.editMode) {\n this.formGroup.controls.categoryId.setValue(res.categories.data[0]?.id);\n this.formGroup.controls.statusId.setValue(res.statuses.data[0]?.id);\n }\n });\n }\n\n }\n\n updateOnChangeTempStatus() {\n if (this.isTempAsset) {\n this.formGroup.controls['categoryId'].clearValidators();\n this.formGroup.controls['statusId'].clearValidators();\n }\n else {\n this.formGroup.controls['categoryId'].setValidators([Validators.required]);\n this.formGroup.controls['statusId'].setValidators([Validators.required]);\n }\n }\n\n updateFormValues() {\n if (this._asset) {\n this.formGroup.controls.categoryId.setValue(this._asset.categoryId);\n this.formGroup.controls.name.setValue(this._asset.name);\n this.formGroup.controls.statusId.setValue(+this._asset.currentStatusId);\n this.formGroup.controls.regionId.setValue(this._asset.regionId);\n //this.formGroup.controls.image.setValue(this._asset.);\n //this.formGroup.controls.toUserId.setValue();\n //this.formGroup.controls.toLocationId.setValue();\n //this.formGroup.controls.assignType.setValue();\n this.updateMainImageSource();\n }\n }\n\n async onEditAsset() {\n if (!this.isEditFormValid()) {\n this.modalService.error(\"All Required Data Not Entered\")\n return;\n }\n var mainImageFileInfo: UploadFileInfo = null;\n if (this.formGroup.controls.image.value) {\n var file = this.formGroup.controls.image.value;\n var body = (await toBase64(file)) as string;\n var fileAsBase64 = body.split(';base64,')[1];\n var fileExtension = getFileExtenstion(file.name);\n mainImageFileInfo = {\n fileAsBase64: fileAsBase64,\n fileExtension: fileExtension,\n } as UploadFileInfo;\n }\n var fieldValues = this.toolFieldRenderer.getFieldValues();\n\n var model = {\n categoryId: this.formGroup.controls.categoryId.value,\n name: this.formGroup.controls.name.value,\n mainImageFileInfo: mainImageFileInfo,\n toolDynamicFieldValues: fieldValues,\n regionId: this.formGroup.controls.regionId.value\n } as BaseToolModel;\n this.inProgress = true;\n this.inventoryService.updateWebTool(this._asset.id, model)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res.success == true)\n this.closeMe.emit();\n else\n this.modalService.error(res.message);\n })\n }\n\n public async createQueryModel() {\n var file = this.formGroup.controls.image.value;\n var body = file == null ? null : (await toBase64(file)) as string;\n var fileAsBase64 = body == null ? null : body.split(';base64,')[1];\n var fileExtension = file == null ? null : getFileExtenstion(file.name);\n\n\n if (this.isTempAsset) {\n if (file != null)\n return {\n name: this.formGroup.controls.name.value,\n mainImageFileInfo: {\n fileAsBase64: fileAsBase64,\n fileExtension: fileExtension,\n } as UploadFileInfo,\n } as TemporarilyToolModel;\n return {\n name: this.formGroup.controls.name.value,\n mainImageFileInfo: null as UploadFileInfo,\n } as TemporarilyToolModel;\n }\n\n var fieldValues = this.toolFieldRenderer?.getFieldValues()?.map((f) => {\n return {\n dynamicFieldId: f.dynamicFieldId,\n value: f.value,\n uniqueKey: f.uniqueKey,\n } as ToolDynamicFieldValueModel;\n })\n let toUserId = this.formGroup.controls.toLocationId.value == null && this.newLocation == null ? this.formGroup.controls.toUserId.value : null;\n let toLocationId = this.formGroup.controls.toUserId.value == null && this.newLocation == null ? this.formGroup.controls.toLocationId.value : null;\n let newLocationName = this.formGroup.controls.toLocationId.value == null && this.formGroup.controls.toUserId.value == null ? this.newLocation : null;\n return {\n categoryId: this.formGroup.controls.categoryId.value,\n regionId: this.formGroup.controls.regionId.value,\n name: this.formGroup.controls.name.value,\n toolStatusId: this.formGroup.controls.statusId.value,\n toLocationId: toLocationId,\n toUserId: toUserId,\n toSiteId: this.selectedSiteId,\n newLocationTitle: newLocationName,\n mainImageFileInfo: file ==null?null: {\n fileAsBase64: fileAsBase64,\n fileExtension: fileExtension,\n } as UploadFileInfo,\n toolDynamicFieldValues: fieldValues,\n } as ToolModel;\n }\n\n async onAddAsset() {\n let model = await this.createQueryModel();\n\n if (this.showSubmitButton == true) {\n this.inProgress = true;\n this.inventoryService.addWebTool(model)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res.success == true)\n this.closeMe.emit();\n else\n this.modalService.error(res.message);\n })\n } else return model;\n\n }\n\n getCurrentCategory() {\n return this.categories?.value.find(x => x.id == this.formGroup.controls.categoryId.value)\n }\n\n @ViewChild('toolFieldRenderer') toolFieldRenderer: ToolFieldRendererComponent;\n\n public isAddFormValid() {\n return this.formGroup?.valid &&\n this.toolFieldRenderer?.valid &&\n (this.formGroup?.controls?.toUserId?.value != null ||\n this.formGroup?.controls?.toLocationId?.value != null ||\n this.newLocation != null);\n }\n\n public isTempAddFormValid() {\n return this.formGroup.valid;\n }\n\n isEditFormValid() {\n return this.formGroup.controls.categoryId.valid &&\n this.formGroup.controls.name.valid &&\n this.toolFieldRenderer?.valid == true;\n }\n\n resetUserLocation() {\n this.formGroup.controls.toLocationId.setValue(null);\n this.formGroup.controls.toUserId.setValue(null);\n this.selectedSiteId = null;\n this.newLocation = null;\n }\n\n onUserChange($event: UserBasicInfoViewModel) {\n this.resetUserLocation();\n if ($event?.id)\n this.formGroup.controls.toUserId.setValue($event.id);\n }\n\n onLocationChange($event: InventoryLocationSelectorModel) {\n this.resetUserLocation();\n this.formGroup.controls.toLocationId.setValue($event?.selectedLocation?.id);\n this.selectedSiteId = $event?.selectedSite?.siteId;\n }\n\n onAddNewLocation(newLocation: InventoryLocationSelectorModel) {\n this.resetUserLocation();\n this.selectedSiteId = newLocation.selectedSite?.siteId;\n this.newLocation = newLocation.newLocationTitle;\n }\n\n imageSource = null;\n\n async updateMainImageSource() {\n\n if (this.formGroup.controls.image.value) {\n var file = this.formGroup.controls.image.value;\n this.imageSource = (await toBase64(file)) as string;\n return;\n }\n this.imageSource = null;\n }\n\n onRegionSelect(value) {\n this.formGroup.controls.regionId.setValue(value);\n }\n\n onRegionLoaded(regions: RegionViewModel[]) {\n this.showRegionSelectorComponent = regions && regions.length > 0;\n }\n get showAssetAdditionalInfo(): boolean {\n return this._asset?.additionalData?.length > 0;\n }\n onViewAssetAdditionalInfo(template: any) {\n this.modalService.show(template);\n }\n}\n","
      \n
      \n
      \n \n
      \n
      Assign History
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n {{tool.name}}\n
      \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0 && pagingInfo.totalCount > pagingInfo.pageSize\">\n \n \n \n \n
      StatusAssign DateFromTo
      \n {{item.statusTitle}}\n \n {{item.assignDateTime | datetime}}\n \n \n {{item.fromUser}} ({{item.fromUserMobile}})\n\n \n \n
      \n
      \n {{ item.fromLocationSite }}\n
      \n
      \n {{item.fromLocation}}\n
      \n
      \n
      \n
      \n \n {{item.toUser}}\n ({{item.toUserMobile}})\n \n \n
      \n
      \n {{ item.toLocationSite }}\n
      \n
      \n {{item.toLocation}}\n
      \n
      \n
      \n
      \n
      \n No records found.\n
      \n
      \n \n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {ToolAssignHistoryRequestModel} from 'src/app/models/inventory/tool-assign-history-request-model';\nimport {ToolAssignHistoryViewModel} from 'src/app/models/inventory/tool-assign-history-view-model';\nimport {ToolFullInfoViewModel} from 'src/app/models/inventory/tool-full-info-view-model';\nimport {BasePagingModel, pagingModel} from 'src/app/models/paging_model';\nimport {InventoryService} from 'src/app/services/inventory.service';\nimport {ModalService} from 'src/app/services/modal.service';\nimport {getPageSizeByUrl} from \"../../../../helpers/general-functions\";\n\n@Component({\n selector: 'obc-tool-assign-history',\n templateUrl: './tool-assign-history.component.html',\n styleUrls: ['./tool-assign-history.component.scss']\n})\nexport class ToolAssignHistoryComponent implements OnInit {\n @Output() public hide = new EventEmitter();\n\n @Input() tool: ToolFullInfoViewModel;\n inProgress: boolean = false;\n pagingInfo: pagingModel = {\n pageNumber: 0,\n pageSize: getPageSizeByUrl() ?? 10,\n totalCount: 0,\n }\n report: ToolAssignHistoryViewModel[];\n constructor(private inventoryService: InventoryService, private modalService: ModalService) { }\n\n ngOnInit(): void {\n if (this.tool == null || this.tool == undefined) {\n this.modalService.error(\"Select a tool\");\n return;\n }\n this.getToolHistory(0);\n }\n\n getToolHistory(pageNumber?: number) {\n if (pageNumber != null && pageNumber != undefined)\n this.pagingInfo.pageNumber = pageNumber;\n var requestModel = this.createRequestModel();\n this.inProgress = true;\n\n this.inventoryService.getToolAssignHistory(requestModel).subscribe(\n res => {\n if (res.success) {\n this.pagingInfo.totalCount = res.data.totalCount;\n this.report = res.data.data;\n } else {\n this.modalService.error(res.message);\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n\n createRequestModel(): ToolAssignHistoryRequestModel {\n var query = {\n toolId: this.tool?.id,\n pagingInfo: {\n pageNumber: this.pagingInfo.pageNumber,\n pageSize: this.pagingInfo.pageSize,\n },\n } as ToolAssignHistoryRequestModel;\n return query;\n }\n onPageChange(paginationInfo: BasePagingModel) {\n this.pagingInfo.pageSize = paginationInfo.pageSize;\n this.getToolHistory(paginationInfo.pageNumber);\n }\n}\n","
      \n
      \n
      \n \n
      \n
      \n
      Asset Report
      \n
      \n \n
      \n
      \n
      \n
      \n \n\n \n
      \n {{ item.regionName }}\n All Regions\n
      \n
      \n\n \n \n {{ item.currentAssignedUser }}\n \n \n ({{ item.currentAssignedUserMobile }})\n \n \n\n \n \n {{ item.currentAssignedLocationSite }}\n \n \n - {{ item.currentAssignedLocation }}\n \n \n\n \n \n \n \n \n\n \n
      0\">\n
        \n \n
      • \n {{ field.fieldName }}:\n \n {{ field.value }}\n \n \n {{ field.value | date}}\n \n \n
      • \n
        \n
      \n
      \n
      \n\n \n
      0\">\n
        \n \n
      • \n {{ field.fieldName }}:\n \n {{ field.value }}\n \n \n {{ field.value | date}}\n \n \n
      • \n
        \n
      \n
      \n
      \n\n
      \n\n
      \n
      \n
      \n
      \n\n\n
      \n
      \n
      \n Submit New\n Edit Asset\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n\n \n \n\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { finalize } from 'rxjs/operators';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { TableSetting } from 'src/app/models/table-setting';\nimport { TableSettingService } from 'src/app/services/table-setting.service';\nimport { ToolFullInfoViewModel } from 'src/app/models/inventory/tool-full-info-view-model';\nimport { InventoryService } from 'src/app/services/inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { AsyncResult } from 'src/app/models/helper-models';\nimport { InventoryDynamicFieldValues } from 'src/app/models/inventory/inventory-dynamic-field-values';\nimport { ToolDynamicFieldType } from 'src/app/enums/tool-dynamic-field-type.enum';\nimport { UserService } from 'src/app/services/user.service';\nimport { ToolCategoryViewModel } from 'src/app/models/inventory/tool-category-model';\nimport { ToolDynamicFieldViewModel } from 'src/app/models/inventory/tool-dynamic-field-model';\nimport { TextOperator } from 'src/app/enums/text-operator.enum';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { GridColumn, GridConfig, GridTemplate, InitialFilter } from \"../../../../models/grid/grid.config\";\nimport { AttendanceDocumentReportViewModel } from \"../../../../models/attendance-document-report-viewmodel\";\n\n@Component({\n selector: 'obc-tool-report',\n templateUrl: './inventory-tool-report.component.html',\n styleUrls: ['./inventory-tool-report.component.scss'],\n})\nexport class InventoryToolReportComponent implements OnInit {\n datetimePickerMode = DatetimePickerMode;\n\n ProductPlanFeature = ProductPlanFeature;\n Table = Table;\n inProgress: boolean = false;\n\n report: ToolFullInfoViewModel[] = null;\n\n filterUserBy = UserAutoCompleteFilterByFields;\n filterListTerm: string;\n\n columnCount: number = 11;\n\n selectedItemToViewHistory: ToolFullInfoViewModel;\n toolCategories: ToolCategoryViewModel[] = [];\n selectedCategory: ToolCategoryViewModel;\n selectedDynamicField: ToolDynamicFieldViewModel;\n selectedAssignDynamicField: ToolDynamicFieldViewModel;\n TextOperator = TextOperator;\n filterModel: any = [];\n\n initialFilters: InitialFilter[] = [];\n\n tableSetting: TableSetting = null;\n\n constructor(\n private layoutService: LayoutService,\n private tableSettingService: TableSettingService,\n private route: ActivatedRoute,\n private inventoryService: InventoryService,\n private bsModalService: BsModalService,\n private modalService: ModalService,\n public userService: UserService,\n ) {\n }\n\n ngOnInit() {\n\n this.route.params.subscribe((_: Params) => {\n this.layoutService.header = 'Asset Report';\n });\n\n this.prepareGridConfig();\n }\n\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: `/api/inventory/${this.userService.currentCompanyId}/tool-report`,\n tableType: Table.AssetReport,\n displayGeneralSearch: true,\n initialFilters: this.initialFilters,\n displayDynamicAssignFieldsFilter: true,\n displayDynamicFieldsFilter: true,\n generalSearchPlaceholder: \"Filter result by Name and Searchable Fields\",\n csvReportUrl: `/api/inventory/${this.userService.currentCompanyId}/export-tool-report-csv-as-job`,\n apiResultCallback: (res) => {\n res.data.data.forEach((item) => {\n if (item.dynamicFieldValues) {\n let allDynamicFieldValues = [...item.assignDynamicFieldValues, ...item.dynamicFieldValues];\n allDynamicFieldValues.forEach((innerItem)=> {\n if (innerItem.type === ToolDynamicFieldType.File && innerItem.images.length > 0) {\n innerItem.imagesURLs = [];\n innerItem.images.forEach((image) => {\n innerItem.imagesURLs.push(image.url);\n });\n }\n });\n }\n });\n return {\n data: res?.data?.data,\n totalCount: res?.data?.totalCount,\n }\n }\n });\n this.gridColumns = [\n {\n name: \"Main Image\",\n key: \"mainImageUrl\",\n type: FilterType.Image,\n enableSort: false,\n enableFilter: false,\n visible: false,\n },\n {\n name: \"Asset Category\",\n key: \"categoryTitle\",\n sortBy: \"category\",\n type: FilterType.InventoryCategory,\n propertyNameInQuery: 'categoryIds',\n },\n {\n name: \"Asset Name\",\n key: \"name\",\n type: FilterType.SingleText,\n propertyNameInQuery: 'name',\n isArray: false,\n },\n {\n name: \"Region\",\n key: \"regionName\",\n sortBy: \"region\",\n gridTemplate: new GridTemplate().ComponentTemplateName('regionName'),\n type: FilterType.SingleText,\n propertyNameInQuery: 'regionName',\n isArray: false,\n },\n {\n name: \"Assigned Date\",\n type: FilterType.DateTimeRange,\n key: \"assignDate\",\n propertyNameInQuery: 'assignDateRange',\n isArray: false,\n },\n {\n name: \"Current User\",\n key: \"currentAssigneduser\",\n type: FilterType.User,\n gridTemplate: new GridTemplate().ComponentTemplateName('currentAssignedUser')\n .CsvFields([\n 'currentAssignedUserMobile',\n 'currentAssignedUser',\n ]),\n propertyNameInQuery: 'currentAssignedUserIds',\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.currentAssignedUserMobile == undefined || item.currentAssignedUserMobile?.toString()?.trim() == '';\n });\n }\n },\n {\n name: \"Current Location\",\n key: \"currentAssignedLocation\",\n type: FilterType.InventoryLocation,\n gridTemplate: new GridTemplate().ComponentTemplateName('currentAssignedLocation')\n .CsvFields([\n 'currentAssignedLocation',\n 'currentAssignedLocationSite',\n ]),\n propertyNameInQuery: 'currentAssignedLocationIds',\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.currentAssignedLocation == undefined || item.currentAssignedLocation?.toString()?.trim() == '';\n });\n }\n },\n {\n name: \"Status\",\n key: \"currentStatusTitle\",\n sortBy: \"currentStatus\",\n type: FilterType.InventoryToolStatus,\n propertyNameInQuery: 'currentStatusIds',\n },\n {\n name: \"Fields\",\n key: 'dynamicFieldValues',\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('includeDynamicFieldsTemplate'),\n propertyNameInQuery: \"includeDynamicFields\",\n hasIncludeFilter: true,\n isArray: false,\n visible: false,\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.dynamicFieldValues == undefined || item.dynamicFieldValues?.length == 0;\n });\n }\n },\n {\n name: \"Current Assignment Fields\",\n key: 'assignDynamicFieldValues',\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('includeAssignmentDynamicFieldsTemplate'),\n propertyNameInQuery: \"includeAssignmentDynamicFields\",\n hasIncludeFilter: true,\n isArray: false,\n visible: false,\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.assignDynamicFieldValues == undefined || item.assignDynamicFieldValues?.length == 0;\n });\n }\n },\n {\n name: \"Details\",\n key: 'viewDetails',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails'),\n visible: true,\n }\n ];\n }\n\n\n upsertAssetModalRef: any = null;\n currentAsset: ToolFullInfoViewModel = null;\n\n openUpsertAssetModal(template: any, asset?: ToolFullInfoViewModel) {\n this.currentAsset = asset;\n this.upsertAssetModalRef = this.bsModalService.show(template, {\n class: 'modal-lg',\n backdrop: 'static',\n });\n }\n\n hideUpsertAssetModal() {\n this.upsertAssetModalRef.hide();\n this.grid.loadData(0);\n }\n\n openModal(template, item: ToolFullInfoViewModel) {\n this.selectedItemToViewHistory = item;\n this.modalService.show(template, 'modal-lg');\n }\n\n closeModal(_: AsyncResult) {\n this.modalService.hide();\n }\n\n onRemoveAsset(assetId: number) {\n this.modalService.confirm(\"Are you sure you want to delete selected asset?\").subscribe(del => {\n if (del === true) {\n this.inProgress = true;\n this.inventoryService.removeAsset(assetId)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe({\n next: res => {\n if (res.success) {\n this.modalService.info(\"The asset removed successfully\");\n this.grid.loadData(0);\n } else\n this.modalService.error(res.message);\n },\n error: _ => {\n this.modalService.error(\"Request Failed!\")\n },\n complete: () => {\n this.inProgress = false;\n }\n });\n }\n });\n }\n\n showImages(field: InventoryDynamicFieldValues) {\n return (\n field.value &&\n (field.value?.length ?? 0) > 0 &&\n field.type == ToolDynamicFieldType.File\n );\n }\n\n showText(field: InventoryDynamicFieldValues) {\n return (\n field.value &&\n (field.value?.length ?? 0) > 0 &&\n (field.type == ToolDynamicFieldType.Number ||\n field.type == ToolDynamicFieldType.Text)\n );\n }\n\n showDate(field: InventoryDynamicFieldValues) {\n return field.value && (field.value?.length ?? 0) > 0 && field.type == ToolDynamicFieldType.Date;\n }\n\n isShowTemplateColumns(mainColumn, detailColumn) {\n return this.grid.isShowTemplateColumns(mainColumn, detailColumn);\n }\n}\n","export enum FormScope {\n Company = 1,\n Site = 2,\n}\n","export enum ItemsMixtureTypeEnum\n{\n Question = 0,\n Document = 1,\n Announcement = 2\n}\n","
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n
      ","import { Component, Input, Output, TemplateRef, EventEmitter, OnInit, forwardRef } from '@angular/core';\nimport { CdkDragDrop, CdkDragStart, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n\tselector: 'obc-multiple-drag-drop-sortable',\n\ttemplateUrl: './multiple-drag-drop-sortable.component.html',\n\tstyleUrls: ['./multiple-drag-drop-sortable.component.scss'],\n\tproviders: [{\n\t\tprovide: NG_VALUE_ACCESSOR,\n\t\tuseExisting: forwardRef(() => MultipleDragDropSortableComponent),\n\t\tmulti: true\n\t}]\n})\nexport class MultipleDragDropSortableComponent implements OnInit, ControlValueAccessor {\n\n\tconstructor() { }\n\n\twriteValue(value: any): void {\n\t\tthis.items = value;\n\t\tthis.updateChanges();\n\t}\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouched = fn;\n\t}\n\tsetDisabledState?(isDisabled: boolean): void {\n\t}\n\tupdateChanges() {\n\t\tthis.onChange(this.items);\n\t}\n\n\tonChange: (_: any) => void = (_: any) => { };\n\tonTouched: () => void = () => { };\n\n\n\t@Input() template: TemplateRef;\n\t@Input() displayOnly: boolean = false;\n\t@Output() onChangeOrder: EventEmitter = new EventEmitter();\n\t@Output() onScrollEvent: EventEmitter = new EventEmitter();\n\n\tmessages: string;\n\titems: any;\n\n\tngOnInit() {\n\t}\n\n\tonScrollEventInternal(event) {\n\t\tthis.onScrollEvent.emit(event);\n\t}\n\n\tdrop(event: CdkDragDrop) {\n\t\t// If current element has \".selected\"\n\t\tlet itemSelected = event.item.element.nativeElement.classList.contains(\"selected\");\n\t\tif (false && itemSelected) {\n\t\t\tthis.multiDrag.dropListDropped(event);\n\t\t}\n\t\t// If dont have \".selected\" (normal case)\n\t\telse {\n\t\t\tif (event.previousContainer === event.container) {\n\t\t\t\tif (itemSelected) {\n\t\t\t\t\tlet previousIndex = event.previousIndex;\n\t\t\t\t\tlet currentIndex = event.currentIndex;\n\t\t\t\t\twhile (event.container.data.some(d => (d as any).isSelected)) {\n\t\t\t\t\t\tlet index = event.container.data.findIndex(d => (d as any).isSelected);\n\t\t\t\t\t\tlet item = event.container.data[index];\n\t\t\t\t\t\tmoveItemInArray(event.container.data, index, currentIndex);\n\t\t\t\t\t\tcurrentIndex = event.container.data.indexOf(item);\n\t\t\t\t\t\t(item as any).isSelected = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmoveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttransferArrayItem(event.previousContainer.data,\n\t\t\t\t\tevent.container.data,\n\t\t\t\t\tevent.previousIndex,\n\t\t\t\t\tevent.currentIndex);\n\t\t\t}\n\t\t}\n\t}\n\n\t/* TWO OBJECTS */\n\n\t// Multi Select\n\tmultiSelect = { // Put \".selected\" on elements when clicking after longPress or Ctrl+Click\n\t\t// Initial Variables\n\t\tlongPressTime: 500, // in ms unit\n\t\tverifyLongPress: 0,\n\t\tmultiSelect: false,\n\t\tverifyDragStarted: false,\n\t\tctrlMode: false,\n\t\tfirstContainer: null as unknown as HTMLElement,\n\n\t\tselectDrag(el: HTMLElement) {\n\t\t\twhile (!el.classList.contains(\"cdk-drag\")) {\n\t\t\t\tel = el.parentElement as HTMLElement;\n\t\t\t}\n\t\t\treturn el;\n\t\t},\n\n\t\tdragStarted() {\n\t\t\tthis.verifyDragStarted = true; // shows to mouseDown and mouseUp that Drag started\n\t\t\tclearTimeout(this.verifyLongPress); // cancel longPress\n\t\t},\n\n\t\tdragEnded() {\n\t\t\tthis.verifyDragStarted = false; // show mouseDown and mouseUp that Drag is over\n\t\t},\n\n\t\tdropListDropped(e: CdkDragDrop) {\n\t\t\tlet el = e.item.element.nativeElement;\n\t\t\tif (el.classList.contains(\"selected\")) { // the dragged element was of the \"selected\" class\n\t\t\t\tthis.multiSelect = false; // disable multiSelect\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Multi Drag\n\tmultiDrag = { // Adjusts clicked items that have \".selected\" to organize together\n\t\t// Initial Variables\n\t\tdragList: [\"\"], // has the value of the selected items in sequence from listData\n\t\tdragListCopy: [\"\"], // a copy of the listData, but with the selected elements marked with \"DragErase\" to delete later\n\t\tdragErase: Symbol(\"DragErase\") as any, // a symbol to have unique value when deleting\n\n\t\t// dragStarted(e: CdkDragStart) {\n\t\t// \tif (e.source.element.nativeElement.classList.contains(\"selected\")) { // If the dragged element has \".selected\"\n\t\t// \t\t//prepare\n\t\t// \t\tlet listData = e.source.dropContainer.data; // get list data value\n\t\t// \t\tthis.dragList = []; // reset the dragList\n\t\t// \t\tthis.dragListCopy = [...listData]; // copy listData into variable\n\t\t// \t\tlet DOMdragEl = e.source.element.nativeElement; // dragged element\n\t\t// \t\tlet DOMcontainer = Array.from(DOMdragEl.parentElement!.children); // container where all draggable elements are\n\t\t// \t\tlet DOMdragElIndex = DOMcontainer.indexOf(DOMdragEl); // index of the dragged element\n\t\t// \t\tlet allSelected = document.querySelectorAll(\".selected\"); // get all the \".selected\"\n\n\t\t// \t\t// Goes through all \".selected\"\n\t\t// \t\t// allSelected.forEach((eli) => {\n\t\t// \t\t// \t// get index of current element\n\t\t// \t\t// \tlet CurrDOMelIndexi = DOMcontainer.indexOf(eli);\n\n\t\t// \t\t// \t// Add listData of current \".selected\" to dragList\n\t\t// \t\t// \tthis.dragList.push(listData[CurrDOMelIndexi]);\n\n\t\t// \t\t// \t// Replaces current position in dragListCopy with \"DragErase\" (to erase exact position later)\n\t\t// \t\t// \tthis.dragListCopy[CurrDOMelIndexi] = this.dragErase;\n\n\t\t// \t\t// \t// Put opacity effect (by CSS class \".hide\") on elements (after starting Drag)\n\t\t// \t\t// \tif (DOMdragElIndex !== CurrDOMelIndexi) {\n\t\t// \t\t// \t\teli.classList.add(\"hide\");\n\t\t// \t\t// \t}\n\t\t// \t\t// });\n\n\t\t// \t}\n\t\t// },\n\n\t\tdropListDropped(e: CdkDragDrop) {\n\n\t\t\tif (e.previousContainer === e.container) { // If in the same container\n\n\t\t\t\tlet posAdjust = e.previousIndex < e.currentIndex ? 1 : 0; // Adjusts the placement position\n\t\t\t\tthis.dragListCopy.splice(e.currentIndex + posAdjust, 0, ...this.dragList); // put elements in dragListCopy\n\t\t\t\tthis.dragListCopy = this.dragListCopy.filter((el) => (el !== this.dragErase)); // remove the \"DragErase\" from the list\n\n\t\t\t\t// Pass item by item to final list\n\t\t\t\tfor (let i = 0; i < e.container.data.length; i++) {\n\t\t\t\t\te.container.data[i] = this.dragListCopy[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\telse { // If in different containers\n\n\t\t\t\t// remove the \"DragErase\" from the list\n\t\t\t\tthis.dragListCopy = this.dragListCopy.filter((el) => (el !== this.dragErase));\n\n\t\t\t\t// Pass item by item to initial list\n\t\t\t\tfor (let i = 0; i < e.previousContainer.data.length; i++) {\n\t\t\t\t\te.previousContainer.data[i] = this.dragListCopy[i];\n\t\t\t\t}\n\t\t\t\tfor (let i = 0; i < this.dragList.length; i++) {\n\t\t\t\t\te.previousContainer.data.pop();\n\t\t\t\t}\n\n\t\t\t\tlet otherListCopy = [...e.container.data]; // list of new container\n\t\t\t\totherListCopy.splice(e.currentIndex, 0, ...this.dragList); // put elements in otherListCopy\n\n\t\t\t\t// Pass item by item to final list\n\t\t\t\tfor (let i = 0; i < otherListCopy.length; i++) {\n\t\t\t\t\te.container.data[i] = otherListCopy[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove \".hide\"\n\t\t\tlet allHidden = document.querySelectorAll(\".hide\");\n\t\t\tallHidden.forEach((el) => {\n\t\t\t\tel.classList.remove(\"hide\");\n\t\t\t});\n\t\t\t// Remove \".selected\" after 300ms\n\t\t\tsetTimeout(() => {\n\t\t\t\tlet allSelected = document.querySelectorAll(\".selected\");\n\t\t\t\tallSelected.forEach((el) => {\n\t\t\t\t\tel.classList.remove(\"selected\", \"last\");\n\t\t\t\t});\n\t\t\t}, 300);\n\n\t\t\tthis.dragListCopy = []; // reset the dragListCopy\n\t\t\tthis.dragList = []; // reset the dragList\n\t\t},\n\t}\n\t/* END TWO OBJECTS */\n\n\tchangeOrderTimer = null;\n\tonChangeOrderInternal(e) {\n\n\t\t//HACK: Sortable call onChange on drag event\n\t\tif (this.changeOrderTimer)\n\t\t\tclearTimeout(this.changeOrderTimer);\n\n\t\tthis.changeOrderTimer = setTimeout(() => {\n\n\t\t\tthis.items = e.container.data;\n\t\t\tthis.onChange(e.container.data);\n\n\t\t\tif (this.onChangeOrder)\n\t\t\t\tthis.onChangeOrder.emit(e.container.data);\n\t\t\tif (this.changeOrderTimer) clearTimeout(this.changeOrderTimer);\n\t\t}, 500);\n\n\t}\n}\n\n\n","\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { SiteAnnouncementForceViewMode } from 'src/app/enums/site-announcement-force-view-mode';\nimport { FileType } from \"../../../enums/file-type.enum\";\n\n@Component({\n selector: 'obc-announcement-force-view-mode-selector',\n templateUrl: './announcement-force-view-mode-selector.component.html',\n styleUrls: ['./announcement-force-view-mode-selector.component.scss']\n})\nexport class AnnouncementForceViewModeSelectorComponent implements OnInit {\n\n @Input() type: FileType = FileType.Pdf;\n @Input() forceViewMode: SiteAnnouncementForceViewMode;\n SiteAnnouncementForceViewMode = SiteAnnouncementForceViewMode;\n FileType = FileType;\n\n @Output() onSelect: EventEmitter = new EventEmitter();\n constructor() { }\n\n ngOnInit(): void {}\n\n emitOutput() {\n this.onSelect.emit(this.forceViewMode);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { OptionalMandatoryState } from '../enums/site-document-state.enum';\n\n@Pipe({\n name: 'optionalMandatory'\n})\nexport class OptionalMandatoryPipe implements PipeTransform {\n\n transform(value: unknown): any {\n if (value === OptionalMandatoryState.Optional) { return \"Optional\"; }\n if (value === OptionalMandatoryState.Mandatory) { return \"Mandatory\"; }\n return value;\n }\n\n}\n","","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { OptionalMandatoryState } from 'src/app/enums/site-document-state.enum';\n\n@Component({\n selector: 'obc-optional-mandatory-selector',\n templateUrl: './optional-mandatory-selector.component.html',\n})\nexport class OptionalMandatorySelectorComponent implements OnInit {\n\n @ViewChild('selector') selector: NgSelectComponent;\n @Input() set state(value: OptionalMandatoryState) {\n if (value == undefined || value == null)\n this.selectedState = OptionalMandatoryState.Optional;\n else\n this.selectedState = value;\n }\n @Output() onChangeSelectedState: EventEmitter = new EventEmitter();\n optionalMandatoryState = OptionalMandatoryState;\n selectedState: OptionalMandatoryState = OptionalMandatoryState.Optional;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n onChangeState() {\n this.onChangeSelectedState.emit(this.selectedState);\n }\n}\n","
      \n
      \n {{title}}\n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n
      \n Document\n Add
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n
      \n

      There is no document to add

      \n
      \n {{queze?.title}}\n \n \n \n \n \n
      \n
      \n
      \n
      \n
      ","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RequiredDocument } from 'src/app/models/induction-viewmodel';\nimport { UserDocumentType } from 'src/app/models/user-document-type';\n\n@Component({\n selector: 'app-document-selector',\n templateUrl: './document-selector.component.html',\n styleUrls: []\n})\nexport class DocumentSelectorComponent implements OnInit {\n title = \"Select Document(s)\";\n filterTerm = null;\n\n @Input() documents: UserDocumentType[] = [];\n @Input() addedDocuments: RequiredDocument[] = [];\n @Output() addDocument = new EventEmitter();\n @Output() public hide = new EventEmitter();\n\n get availableDocuments(): UserDocumentType[] {\n return this.documents.filter((x) =>\n this.addedDocuments.some(ad => ad.documentTypeId == x.id) == false\n );\n };\n constructor() { }\n\n ngOnInit() {\n }\n\n onAddDocument(doc: UserDocumentType) {\n var question = this.availableDocuments.find(x => x.id == doc.id);\n if (question && this.addDocument) {\n this.addDocument.emit({ documentTypeId: doc.id, state: doc.state } as RequiredDocument);\n }\n }\n\n}\n","
      \n
      \n {{title}}\n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n
      \n Announcement\n Add
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n
      \n

      There is no announcement to add

      \n
      \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AnnouncementViewModel } from 'src/app/models/announcement-viewmodel';\nimport { AnnouncementModel } from 'src/app/models/induction-viewmodel';\nimport { SiteAnnouncementForceViewMode } from \"../../enums/site-announcement-force-view-mode\";\n\n@Component({\n selector: 'app-announcement-selector',\n templateUrl: './announcement-selector.component.html',\n styleUrls: []\n})\nexport class AnnouncementSelectorComponent implements OnInit {\n title = \"Select Announcement(s)\";\n filterTerm = null;\n SiteAnnouncementForceViewMode = SiteAnnouncementForceViewMode;\n @Input() announcements: AnnouncementViewModel[] = [];\n @Input() addedAnnouncements: AnnouncementModel[] = [];\n @Output() addAnnouncement = new EventEmitter();\n @Output() public hide = new EventEmitter();\n\n get availableAnnouncements(): AnnouncementViewModel[] {\n\n let filteredArray = this.announcements.filter((array_el) => {\n return this.addedAnnouncements.filter((anotherOne_el) => {\n return anotherOne_el.announcementId == array_el.announcementId;\n }).length == 0\n });\n\n return filteredArray.filter(function (x) { return x.isActive });\n };\n\n constructor() { }\n\n ngOnInit() {\n }\n\n setState(announcement, $event) {\n announcement.forceViewMode = $event\n }\n\n onAdd(announcement: AnnouncementViewModel) {\n var pendingAnnouncement = this.announcements.find(x => x.id == announcement.id);\n pendingAnnouncement.forceViewMode = announcement.forceViewMode;\n if (pendingAnnouncement && this.addAnnouncement) {\n this.addAnnouncement.emit(pendingAnnouncement);\n }\n }\n}\n","
      \n \n
      \n
      \n \n
      \n\n\n
      \n
      \n
      \n
      \n \n \n \n You are able to change the order of items such as Questions, Documents & Announcements by\n dragging them.\n \n \n
      \n
      \n \n Item(s)\n \n
      \n 0\">\n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n
      \n

      \n Please Select Items\n

      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n\n\n \n\n\n\n \n \n \n \n \n \n\n\n\n
      \n
      \n \n
      \n
      \n \n \n\n \n \n \n \n \n \n\n \n\n
      \n \n ({{item.announcementState | siteAnnouncementForceViewMode}})\n \n
      \n\n \n \n\n \n
      \n \n \n\n
      \n {{getDocumentById(item.id)?.title}}\n
      \n
      \n \n ({{item.documentState | optionalMandatory}})\n \n
      \n\n \n \n\n \n
      \n
      \n
      \n
      \n\n \n \n\n\n \n \n\n\n \n \n\n","import { Component, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core';\nimport { AnnouncementModel, RequiredDocument } from \"../../models/induction-viewmodel\";\nimport { UserDocumentType } from \"../../models/user-document-type\";\nimport { QuestionViewModel } from \"../../models/question-viewmodel\";\nimport { AnnouncementViewModel } from \"../../models/announcement-viewmodel\";\nimport { FormControl, FormGroup } from \"@angular/forms\";\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\nimport { ModalService } from \"../../services/modal.service\";\nimport { forkJoin } from \"rxjs\";\nimport { SiteActiveStatus } from \"../../enums/site-active-status.enum\";\nimport { UserDocumentTypeService } from \"../../services/user-document-type.service\";\nimport { QuestionService } from \"../../services/question.service\";\nimport { AnnouncementService } from \"../../services/announcement.service\";\nimport { Orderable } from 'src/app/models/orderable-model';\nimport { MixtureItemModel } from 'src/app/models/mixture-item-model';\nimport { ItemsMixtureTypeEnum } from 'src/app/enums/items-mixture-type.enum';\nimport { InductionService } from \"../../services/induction-service\";\nimport { FormService } from \"../../services/form.service\";\nimport { OptionalMandatoryState } from 'src/app/enums/site-document-state.enum';\nimport { SiteAnnouncementForceViewMode } from \"../../enums/site-announcement-force-view-mode\";\nimport { ToastrService } from 'ngx-toastr';\nimport { FormType } from 'src/app/enums/form-type';\n\n@Component({\n selector: 'obc-items-mixture',\n templateUrl: './items-mixture.component.html',\n styleUrls: ['./items-mixture.component.scss']\n})\nexport class ItemsMixtureComponent implements OnInit {\n\n @Output('items') public result = new EventEmitter();\n\n formGroup: FormGroup;\n allDocuments: UserDocumentType[] = [];\n selectedDocuments: UserDocumentType[] = [];\n allQuestions: QuestionViewModel[] = [];\n allAnnouncements: AnnouncementViewModel[] = [];\n\n questionModalRef: BsModalRef;\n documentModalRef: BsModalRef;\n announcementModalRef: BsModalRef;\n\n @Input() orderableItems: Orderable[];\n @Input() displayOnly: boolean = false;\n @Input() inductionId: number;\n @Input() formId: number;\n @Input() showAddDocumentButton: boolean = true;\n @Input() formType: FormType;\n\n items: MixtureItemModel[] = [];\n\n ItemsMixtureTypeEnum = ItemsMixtureTypeEnum;\n\n constructor(private inductionService: InductionService,\n private formService: FormService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private documentTypeService: UserDocumentTypeService,\n private questionService: QuestionService,\n private announcementService: AnnouncementService,\n private toastrService: ToastrService,\n ) { }\n\n isXLarge: boolean = false;\n winSize: number;\n @HostListener('window:resize', ['$event'])\n onResize(event?) {\n this.winSize = window.innerWidth;\n this.isXLarge = window.innerWidth >= 1200;\n }\n\n scrollTop: number = 0;\n scrollLocked: boolean = false;\n onScroll(event) {\n if (this.scrollLocked)\n return\n\n this.scrollTop = document.getElementById(event.target.id).scrollTop;\n }\n scrollToByElementId() {\n setTimeout(() => {\n document.getElementById('question-container1').scrollTo(0, this.scrollTop);\n this.scrollLocked = false;\n }, 100);\n }\n\n get selectedDocumentIds() {\n return this.items.filter(p => p.type == ItemsMixtureTypeEnum.Document && p.isSelected).map(p => p.id);\n }\n get selectedAnnouncementIds() {\n return this.items.filter(p => p.type == ItemsMixtureTypeEnum.Announcement && p.isSelected).map(p => p.id);\n }\n get selectedQuestionIds() {\n return this.items.filter(p => p.type == ItemsMixtureTypeEnum.Question && p.isSelected).map(p => p.id);\n }\n\n ngOnInit(): void {\n\n this.onResize();\n\n this.formGroup = new FormGroup({\n items: new FormControl([]),\n });\n\n let _this = this;\n\n forkJoin({\n selectedDocs: this.documentTypeService.getSelectable(),\n allDocs: this.documentTypeService.GetAllCompaniesUserDocumentTypes(),\n questions: this.questionService.getQuestions(),\n announcements: this.announcementService.getAll(SiteActiveStatus.All)\n }).subscribe(res => {\n this.allDocuments = (res.allDocs);\n this.selectedDocuments = (res.selectedDocs);\n this.allQuestions = res.questions.map(x => new QuestionViewModel(x));\n this.allAnnouncements = (res.announcements);\n })\n\n this.orderableItems?.forEach(function (item, _) {\n _this.items?.push({\n id: item.id,\n type: item.type,\n order: item.order,\n documentState: item.documentState,\n announcementState: item.announcementState,\n } as MixtureItemModel)\n });\n this.items.sort((a, b) => a.order > b.order ? 1 : a.order < b.order ? -1 : 0);\n\n this.formGroup.controls['items'].setValue(this.items)\n }\n\n getAddedQuestions() {\n const questions = this.items?.filter(item => item.type == ItemsMixtureTypeEnum.Question)\n return questions ? questions.map(x => x.id) : [];\n }\n\n getAddedAnnouncements() {\n const announcements = this.items?.filter(item => item.type == ItemsMixtureTypeEnum.Announcement)\n return announcements ? announcements.map(x => {\n let announcement = this.getAnnouncementById(x.id);\n return {\n announcementId: announcement.id,\n state: announcement.state,\n displayOrder: announcement.order\n } as AnnouncementModel\n }) : [];\n }\n\n getAddedDocuments() {\n const documents = this.items?.filter(item => item.type == ItemsMixtureTypeEnum.Document);\n return documents ? documents.map(x => {\n let doc = this.getDocumentById(x.id);\n return {\n documentTypeId: doc.id,\n state: doc.state,\n displayOrder: doc.order,\n } as RequiredDocument\n }) : [];\n }\n\n onShowAddQuestionsModal(template) {\n this.questionModalRef = this.bsModalService.show(template);\n }\n\n onShowAddDocumentsModal(template) {\n this.documentModalRef = this.bsModalService.show(template);\n }\n\n onShowAddAnnouncementsModal(template) {\n this.announcementModalRef = this.bsModalService.show(template, { class: 'modal-lg' });\n }\n\n removeSelectedAnnouncementConfirmation(announcementId: number) {\n this.modalService\n .confirm(\"Are you sure you want to delete selected announcement?\")\n .subscribe(del => {\n if (del === true) {\n this.removeSelectedAnnouncement(announcementId);\n }\n });\n }\n\n removeSelectedAnnouncement(announcementId: number) {\n const index = this.items?.findIndex(item => item.id == announcementId && item.type == ItemsMixtureTypeEnum.Announcement);\n if (index > -1) {\n this.scrollLocked = true;\n\n this.items?.splice(index, 1);\n this.setValuesAndEmit();\n this.reDrawSortable();\n }\n }\n\n removeSelectedQuestionConfirmation(questionId: number) {\n this.modalService\n .confirm(\"Are you sure you want to delete selected question?\")\n .subscribe(del => {\n if (del === true) {\n this.removeSelectedQuestion(questionId);\n }\n });\n }\n\n removeSelectedQuestion(questionId: number) {\n const index = this.items?.findIndex(item => item.id == questionId && item.type == ItemsMixtureTypeEnum.Question);\n if (index > -1) {\n this.scrollLocked = true;\n\n this.items?.splice(index, 1);\n this.setValuesAndEmit();\n this.reDrawSortable();\n }\n }\n\n removeSelectedDocumentConfirmation(documentId: number) {\n this.modalService\n .confirm(\"Are you sure you want to delete selected document?\")\n .subscribe(del => {\n if (del === true) {\n this.removeSelectedDocument(documentId);\n }\n });\n }\n\n removeSelectedDocument(documentId: number) {\n const index = this.items?.findIndex(item => item.id === documentId && item.type === ItemsMixtureTypeEnum.Document);\n if (index > -1) {\n this.scrollLocked = true;\n\n this.items?.splice(index, 1);\n this.setValuesAndEmit();\n this.reDrawSortable();\n }\n }\n\n addDocument(doc: RequiredDocument) {\n if (doc != null) {\n const index = this.items.findIndex(item => item.id == doc.documentTypeId && item.type == ItemsMixtureTypeEnum.Document);\n\n if (index === -1) {\n this.scrollLocked = true;\n\n this.items.push({\n id: doc.documentTypeId,\n type: ItemsMixtureTypeEnum.Document,\n order: this.getMaxOrderIndex(),\n documentState: doc.state\n } as MixtureItemModel);\n this.reDrawSortable();\n this.setValuesAndEmit();\n }\n }\n }\n\n addAnnouncement(res: AnnouncementViewModel) {\n if (res != null) {\n\n const index = this.items.findIndex(item => item.id == res.id && item.type == ItemsMixtureTypeEnum.Announcement);\n if (index === -1) {\n this.scrollLocked = true;\n\n this.items.push({\n id: res.id,\n type: ItemsMixtureTypeEnum.Announcement,\n order: this.getMaxOrderIndex(),\n documentState: res.state,\n announcementState: res.forceViewMode,\n } as MixtureItemModel);\n this.reDrawSortable();\n this.setValuesAndEmit();\n }\n }\n }\n\n addQuestion(res: QuestionViewModel) {\n if (res != null) { \n if(res.isSensitive && this.formType == FormType.SiteBriefing) \n this.toastrService.warning('The answers of sensitive questions will not be seen by end users.');\n const index = this.items.findIndex(item => item.id == res.id && item.type == ItemsMixtureTypeEnum.Question);\n if (index === -1) {\n this.scrollLocked = true;\n\n this.items.push({\n id: res.id,\n type: ItemsMixtureTypeEnum.Question,\n order: this.getMaxOrderIndex(),\n } as MixtureItemModel);\n\n this.reDrawSortable();\n this.setValuesAndEmit();\n }\n }\n }\n\n getMaxOrderIndex() {\n let orderIndex = Object.assign([], this.items).sort(function (a, b) {\n return b.order - a.order;\n });\n\n return orderIndex.length > 0 ? orderIndex[0].order + 1 : 0;\n }\n\n onCloseAddQuestionsModal() {\n this.questionModalRef.hide();\n }\n\n onCloseAddDocumentsModal() {\n this.documentModalRef.hide();\n }\n\n onCloseAddAnnouncementsModal() {\n this.announcementModalRef.hide();\n }\n\n getAnnouncementById(announcementId: number) {\n return this.allAnnouncements.find(x => x.id == announcementId);\n }\n\n getQuestionById(questionId: number) {\n return this.allQuestions.find(x => x.id == questionId);\n }\n\n getDocumentById(documentId: number) {\n return this.allDocuments.find(x => x.id == documentId);\n }\n\n onChangedOrder() {\n let tmpItems = this.formGroup.controls['items'].value;\n for (let i = 0; i < this.formGroup.controls['items'].value.length; i++) {\n tmpItems[i].order = i;\n tmpItems[i].isSelected = false;\n }\n this.items = tmpItems;\n this.setValuesAndEmit();\n }\n\n setValuesAndEmit() {\n this.formGroup.controls['items'].setValue(this.items);\n if (this.displayOnly)\n this.sendOrdersToServer();\n else\n this.result.emit(this.items);\n }\n\n sendOrdersToServer() {\n if (this.inductionId && this.displayOnly) {\n this.inductionService.changeItemsOrder(this.inductionId, this.formGroup.controls['items'].value)\n .subscribe(_ => {\n });\n } else if (this.formId && this.displayOnly) {\n this.formService.changeItemsOrder(this.formId, this.formGroup.controls['items'].value)\n .subscribe(_ => {\n });\n }\n }\n\n updateState(id: number, newState: OptionalMandatoryState, itemsMixtureTypeEnum: ItemsMixtureTypeEnum) {\n let item = this.items.find(item => item.id == id && item.type == itemsMixtureTypeEnum);\n item.documentState = newState == OptionalMandatoryState.Mandatory ? OptionalMandatoryState.Mandatory : OptionalMandatoryState.Optional;\n this.setValuesAndEmit();\n }\n updateAnnouncementState(id: number, newState: SiteAnnouncementForceViewMode, itemsMixtureTypeEnum: ItemsMixtureTypeEnum) {\n let item = this.items.find(item => item.id == id && item.type == itemsMixtureTypeEnum);\n item.announcementState = newState;\n this.setValuesAndEmit();\n }\n\n\n showObcSortable: boolean = true;\n\n reDrawSortable() {\n this.showObcSortable = false;\n setTimeout(() => {\n this.showObcSortable = true;\n }\n , 50);\n\n this.scrollToByElementId();\n }\n\n onRemoveSelected() {\n this.modalService.confirm(\"Are you sure you want to delete selected items?\").subscribe(del => {\n if (del === true) {\n this.selectedDocumentIds.forEach((item) => {\n this.removeSelectedDocument(item);\n });\n\n this.selectedAnnouncementIds.forEach((item) => {\n this.removeSelectedAnnouncement(item);\n });\n\n this.selectedQuestionIds.forEach((item) => {\n this.removeSelectedQuestion(item);\n });\n }\n });\n }\n\n\n}\n","export enum FormAskMode{\n AnyTime = 0,\n WhileCheckedIn = 1,\n AfterCheckOut = 2\n}","export enum CompanySiteScope {\n Company = 1,\n Site = 2\n}\n","export enum FormApprovalMode {\n AutoApprove = 0,\n HostApprove = 1,\n}\n","export enum AssetOperationFormCategoryType {\n All = 1,\n Specific = 2\n}\n","export enum PermitClosurePolicy {\n OnlyIfOnHold = 0,\n OnHoldOrOpen = 1,\n}","export enum ExpiryMode {\n Custom = 0,\n NoExpiry = 1,\n EndDay = 2,\n EndWeek = 3,\n EndMonth = 4,\n EndYear = 5\n}\n\nexport enum FormExpiryMode {\n NoExpiry = ExpiryMode.NoExpiry,\n EndDay = ExpiryMode.EndDay,\n EndWeek = ExpiryMode.EndWeek,\n EndMonth = ExpiryMode.EndMonth,\n}\n\nexport enum ExpiryUnit {\n Hour = 0,\n Day = 1,\n Week = 2,\n Month = 3,\n Year = 4\n}\n","export enum AutoRenew\n{\n NotRenew = 0,\n Renew = 1\n}","\n \n
      \n \n
      \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: '[obc-radio-form-group]',\n templateUrl: './radio-form-group.component.html',\n styleUrls: ['./radio-form-group.component.scss'],\n})\nexport class RadioFormGroupComponent implements OnInit {\n @Input() options!: T[];\n @Input() title: string;\n @Input() labels: string[];\n @Input() formGroup: FormGroup;\n @Input() controlName: FormGroup;\n @Input() labelTooltip: string;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
      \n
      \n
      \n Do you want to limit visitors based on types?\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      ","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { deepCloneJson } from 'src/app/helpers/general-functions';\nimport { CheckedVisitorType } from 'src/app/models/visitor-type';\nimport { VisitorTypeService } from 'src/app/services/visitor-type.service';\nimport { FormControl } from \"@angular/forms\";\n\n@Component({\n selector: 'app-visitor-type-selector',\n templateUrl: './visitor-type-selector.component.html',\n styleUrls: ['./visitor-type-selector.component.scss']\n})\nexport class VisitorTypeSelectorComponent implements OnInit {\n visitorTypes: CheckedVisitorType[];\n limited: boolean = false;\n\n @Input() displayAsSingleSelectBox: boolean = false;\n @Input() emptyItemText: string = 'Please select a visitor';\n\n _selectedVisitorIds: number[] = [];\n\n @Input()\n set selectedVisitorIds(value: number[]) {\n this._selectedVisitorIds = deepCloneJson(value);\n if ((value?.length ?? 0) > 0) {\n if (this.displayAsSingleSelectBox) {\n this.selectedVisitorType.setValue(value[0]);\n }\n this.limited = true;\n }\n }\n\n selectedVisitorType: FormControl = new FormControl();\n\n @Output() selectedVisitorIdsChange = new EventEmitter();\n constructor(private visitorTypeService: VisitorTypeService) { }\n\n\n emitChanges() {\n if (!this.displayAsSingleSelectBox) {\n var value = this.visitorTypes.filter(x => x.checked).map(x => x.id);\n this.selectedVisitorIdsChange.emit(value);\n } else {\n this.selectedVisitorIdsChange.emit(this.visitorTypes.find((vt) => vt.id == this.selectedVisitorType.value));\n }\n }\n\n ngOnInit() {\n this.visitorTypeService.cacheGetAllVisitorTypes().subscribe(res => {\n this.visitorTypes = res.map(x => {\n return {\n id: x.id,\n title: x.title,\n checked: this._selectedVisitorIds?.some(y => x.id == y)\n } as CheckedVisitorType;\n });\n })\n this.selectedVisitorType.valueChanges.subscribe((res) => {\n if (res === null || res === undefined) {\n this.selectedVisitorType.setValue(null, { emitEvent: false });\n }\n })\n }\n\n\n onSwitchStateChange($event) {\n this.limited = $event;\n if ($event == false) {\n for (let index = 0; index < this.visitorTypes.length; index++) {\n const element = this.visitorTypes[index];\n element.checked = false;\n }\n }\n\n this.emitChanges();\n }\n\n}\n","
      \n
      \n \n {{modalHeader}}\n \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n\n \n \n \n \n
      \n
      \n
      ","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { InductionModel } from 'src/app/models/induction-viewmodel';\nimport { InductionService } from 'src/app/services/induction-service';\nimport { finalize } from 'rxjs/operators';\nimport { SiteAttendanceInductionViewModel } from 'src/app/models/site-attendance-induction-view-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { FormService } from 'src/app/services/form.service';\nimport { FormModel } from 'src/app/models/form/form-model';\nimport { FormDataViewModel } from 'src/app/models/form/form-data-view-model';\n\n@Component({\n selector: 'obc-preview-upsert',\n templateUrl: './preview-upsert.component.html',\n styleUrls: ['./preview-upsert.component.scss']\n})\nexport class PreviewUpsertComponent implements OnInit {\n\n @Input() previewType: 'induction' | 'form';\n @Input() inductionModel: InductionModel = {};\n @Input() formModel: FormModel = {};\n @Input() modalHeader: string = '';\n @Output() public hide = new EventEmitter();\n\n inductionViewModel: SiteAttendanceInductionViewModel = {};\n formViewModel: FormDataViewModel = {};\n inProgress: boolean;\n\n constructor(private inductionService: InductionService,\n private formService: FormService,\n private modalService: ModalService) { }\n\n ngOnInit(): void {\n\n switch (this.previewType) {\n case 'induction': {\n\n this.inProgress = true;\n this.inductionService.previewInduction(this.inductionModel)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n if (res.success) {\n this.inductionViewModel = res.data;\n } else {\n this.modalService.error(res.message);\n }\n }, _ => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n });\n\n break;\n }\n case 'form': {\n \n this.inProgress = true;\n this.formService.previewForm(this.formModel)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n if (res.success) {\n this.formViewModel = res.data;\n } else {\n this.modalService.error(res.message);\n }\n }, _ => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n });\n break;\n }\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormScope } from '../enums/form-scope';\nimport { FormType } from '../enums/form-type';\n\n@Pipe({\n name: 'formScope'\n})\nexport class FormScopePipe implements PipeTransform {\n\n transform(value: unknown , formType: FormType): string {\n if (value === FormScope.Company)\n return formType == FormType.SiteBriefing ? 'Automatically add to all sites' : 'Company Wide';\n if (value === FormScope.Site)\n return formType == FormType.SiteBriefing ? 'Manually add to specific sites' : 'Site Specific';\n return value?.toString();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormApplyFor } from '../enums/form-apply-for';\n\n@Pipe({\n name: 'formApplyFor'\n})\nexport class FormApplyForPipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === FormApplyFor.AnyPerson) return \"Anyone\";\n if (value === FormApplyFor.Individual) return \"Individual\";\n if (value === FormApplyFor.Supplier) return \"Supplier\";\n return value?.toString();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormAskMode } from '../enums/form-ask-mode.enum';\n\n@Pipe({\n name: 'formAskMode'\n})\nexport class FormAskModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === FormAskMode.AnyTime) return \"Any time\";\n if (value === FormAskMode.WhileCheckedIn) return \"While checked-in\";\n if (value === FormAskMode.AfterCheckOut) return \"After check-out\";\n return value?.toString();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ExpiryMode } from '../enums/expiry-mode.enum';\n\n@Pipe({\n name: 'expiryMode'\n})\nexport class ExpiryModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == ExpiryMode.Custom) return \"Custom\";\n if (value == ExpiryMode.NoExpiry) return \"No Expiry\";\n if (value == ExpiryMode.EndDay) return \"End of the day\";\n if (value == ExpiryMode.EndWeek) return \"End of the week\";\n if (value == ExpiryMode.EndMonth) return \"End of the month\";\n if (value == ExpiryMode.EndYear) return \"End of the year\";\n return value?.toString() ?? \"?\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormApprovalMode } from \"../enums/form-approval-mode\";\n\n@Pipe({\n name: 'formApprovalMode'\n})\nexport class FormApprovalModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === FormApprovalMode.AutoApprove) return \"Auto Approve\";\n if (value === FormApprovalMode.HostApprove) return \"Host Approve\";\n return value?.toString();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PermitClosurePolicy } from '../enums/permit-closure-policy.enum';\n\n@Pipe({\n name: 'permitClosurePolicy'\n})\n\nexport class PermitClosurePolicyPipe implements PipeTransform {\n transform(value: unknown): any {\n if (value === PermitClosurePolicy.OnlyIfOnHold) { return \"Must be On-Hold to Close\"; }\n if (value === PermitClosurePolicy.OnHoldOrOpen) { return \"Can Close while Open or On-Hold\"; }\n return value;\n }\n}\n","
      \n
      \n
      \n
      \n
      \n {{ formToEdit ? 'Edit Form' : 'Add Form'}}\n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n\n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n \n
      \n
      \n \n \n \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n Loading...\n
      \n
      \n
      \n \n
      \n {{ model }}\n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n \n
      \n
      \n
      \n
      \n
      \n\n \n\n \n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { noop, Observable, Observer, of } from 'rxjs';\nimport { finalize, map, switchMap, tap } from 'rxjs/operators';\nimport { FormAskMode } from 'src/app/enums/form-ask-mode.enum';\nimport { FormScope } from 'src/app/enums/form-scope';\nimport { FormModel } from 'src/app/models/form/form-model';\nimport { FormViewModel, FullFormViewModel } from 'src/app/models/form/form-view-model';\nimport { FormService } from 'src/app/services/form.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { FormType } from \"src/app/enums/form-type\";\nimport { FormApplyFor } from \"src/app/enums/form-apply-for\";\nimport { CompanySiteScope } from \"src/app/enums/company-site-scope\";\nimport { FormApprovalMode } from \"src/app/enums/form-approval-mode\";\nimport { ToolCategoryViewModel } from 'src/app/models/inventory/tool-category-model';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { AssetOperationFormCategoryType } from 'src/app/enums/asset-operation-form-category-type.enum';\nimport { CompareWithFn } from '@ng-select/ng-select/lib/ng-select.component';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { PermitClosurePolicy } from 'src/app/enums/permit-closure-policy.enum';\nimport { CheckListItemViewModel } from 'src/app/custom-controls/check-list-form-control/check-list-item';\nimport { documentKindValidator } from 'src/app/helpers/mobile-format-validator';\nimport { OptionalMandatoryState } from 'src/app/enums/site-document-state.enum';\nimport { EnumToArrayPipe } from 'src/app/pipes/enum-to-array.pipe';\nimport { PermitStatus } from \"src/app/enums/permit-status\";\nimport { DocumentKindService } from 'src/app/services/document-kind.service';\nimport { SupplierDocumentKindViewModel } from 'src/app/models/supplier-document/supplier-document-kind-viewmodel';\nimport { getSelectedIdList } from 'src/app/helpers/general-functions';\nimport { FormExpiryMode } from 'src/app/enums/expiry-mode.enum';\nimport { AutoRenew } from 'src/app/enums/auto-renew.enum';\nimport { UserService } from 'src/app/services/user.service';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\n\n@Component({\n selector: 'obc-upsert-form',\n templateUrl: './upsert-form.component.html',\n styleUrls: ['./upsert-form.component.scss']\n})\nexport class UpsertFormComponent implements OnInit {\n @ViewChild('formCategorySelect') formCategorySelector: NgSelectComponent\n @Output() public hide = new EventEmitter();\n\n documentKindCheckList: CheckListItemViewModel[] = [];\n\n formScope = FormScope;\n formType = FormType;\n expiryMode = FormExpiryMode;\n formApplyFor = FormApplyFor;\n formAskMode = FormAskMode;\n FormApprovalMode = FormApprovalMode;\n inProgress: boolean;\n\n formGroup: FormGroup;\n formGroups$: Observable;\n formGroupLoader: boolean = false;\n\n permitInUseForm: FormViewModel;\n permitOnholdForm: FormViewModel;\n permitCloseForm: FormViewModel;\n isEnablePermitZone = false;\n isEnablePermitSchedule = false;\n\n formCategoriesLoading: boolean = false;\n\n formCategoriesLoadInitiated: boolean = false;\n _formCategories: ToolCategoryViewModel[] = [];\n _isAutoRenewEnabled: boolean = false\n PermitClosurePolicy = PermitClosurePolicy;\n PermitStatus = PermitStatus;\n OptionalMandatoryState = OptionalMandatoryState;\n optionalMandatoryState: OptionalMandatoryState;\n //workflowList: WorkflowDefinitionViewModel[];\n documentKindList: SupplierDocumentKindViewModel[];\n\n\n get formCategories(): ToolCategoryViewModel[] {\n if (this._formCategories.length == 0 && !this.formCategoriesLoadInitiated) {\n this.setFormCategories();\n }\n return this._formCategories\n }\n\n get isAutoRenewEnabled(): boolean {\n return this._isAutoRenewEnabled\n }\n AssetOperationFormCategoryType = AssetOperationFormCategoryType\n AutoRenew = AutoRenew\n\n @Input() set form(value: FullFormViewModel) {\n this.resetFormGroup(value);\n }\n\n formToEdit: FullFormViewModel;\n\n get isEditMode(): boolean {\n return this.formToEdit?.id > 0\n }\n\n getFormTypes(): string[] {\n let activeTypes = this.formService.getActiveFormTypes();\n return this.enumToArrayPipe.transform(this.formType)\n .filter(type => activeTypes.some(ac => ac == FormType[type]));\n }\n\n getIsAutoRenewEnabled() {\n this._isAutoRenewEnabled = this.userService.hasCompanyFeature(ProductPlanFeature.SiteBriefingAutoRenew);\n }\n\n getExpiryModes(): string[] {\n return this.enumToArrayPipe.transform(FormExpiryMode);\n }\n\n _permitInUseFormId: number;\n @Input() set permitInUseFormId(value: number) {\n if (value === undefined || value === null)\n return;\n this._permitInUseFormId = value;\n }\n\n get permitInUseFormId(): number {\n return this._permitInUseFormId;\n }\n\n _permitOnholdFormId: number;\n @Input() set permitOnholdFormId(value: number) {\n if (value === undefined || value === null)\n return;\n this._permitOnholdFormId = value;\n }\n\n get permitOnholdFormId(): number {\n return this._permitOnholdFormId;\n }\n\n _permitCloseFormId: number;\n @Input() set permitCloseFormId(value: number) {\n if (value === undefined || value === null)\n return;\n this._permitCloseFormId = value;\n }\n\n get permitCloseFormId(): number {\n return this._permitCloseFormId;\n }\n\n _assetOperatorFormId: number;\n @Input() set assetOperatorFormId(value: number) {\n if (value === undefined || value === null)\n return;\n this._assetOperatorFormId = value;\n }\n\n get assetOperatorFormId(): number {\n return this._assetOperatorFormId;\n }\n get currentFormType() {\n return this.formGroup.controls['type'].value;\n }\n get currentAutoRenew() {\n return this.formGroup.controls['expiryMode'].value;\n }\n\n constructor(private formService: FormService,\n private modalService: ModalService,\n private manageInventoryService: ManageInventoryService,\n private cdr: ChangeDetectorRef,\n private bsModalService: BsModalService,\n private userService: UserService,\n private enumToArrayPipe: EnumToArrayPipe,\n private documentKindService: DocumentKindService,\n\n ) {\n }\n\n ngOnInit() {\n this.getFormGroups();\n this.getDocumentKindList();\n this.getIsAutoRenewEnabled();\n }\n\n showDocumentKindSection() {\n return this.currentFormType == FormType.SupplierDocumentReview &&\n (this.documentKindList?.length > 1 || (this.documentKindList?.length == 1 && this.formToEdit != null && this.documentKindList[0].id != this.formToEdit?.documentKindIdList[0]));\n }\n\n onSelectForm($event, formType: string) {\n switch (formType) {\n case 'PermitInUseForm':\n this.formGroup.controls.permitInUseFormId.setValue($event);\n break;\n case 'PermitOnholdForm':\n this.formGroup.controls.permitOnholdFormId.setValue($event);\n break;\n case 'PermitCloseForm':\n this.formGroup.controls.permitCloseFormId.setValue($event);\n break;\n case 'OperatorRegistrationForm':\n this.formGroup.controls.assetOperatorFormId.setValue($event);\n break;\n default:\n }\n }\n\n resetFormGroup(form: FullFormViewModel = null) {\n this.documentKindService.prepareDocumentKindCheckList(form?.documentKindIdList)\n .subscribe(res => {\n this.documentKindCheckList = res;\n\n this.formGroup = new FormGroup({\n name: new FormControl(form?.name ?? '', [Validators.required]),\n buttonTitle: new FormControl(form?.buttonTitle ?? '', []),\n scope: new FormControl(form?.scope ?? FormScope.Company, [Validators.required]),\n applyFor: new FormControl(form?.applyFor ?? FormApplyFor.AnyPerson, [Validators.required]),\n type: new FormControl(form?.type ?? FormType.Generic, [Validators.required]),\n askMode: new FormControl(form?.askMode ?? FormAskMode.WhileCheckedIn, [Validators.required]),\n approvalMode: new FormControl(form?.approvalMode ?? FormApprovalMode.AutoApprove, [Validators.required]),\n items: new FormControl(form?.items ?? []),\n visitorTypeIds: new FormControl(form?.visitorTypeIds ?? []),\n groupName: new FormControl(form?.groupName ?? ''),\n isEnable: new FormControl(form?.isEnable ?? true),\n allowUsersToAttachAdditionalDocuments: new FormControl(form?.allowUsersToAttachAdditionalDocuments ?? false),\n isEnableSupplierFormExpiryDate: new FormControl(form?.isEnableSupplierFormExpiryDate ?? false),\n permitInUseFormId: new FormControl(form?.permitInUseFormId ?? []),\n permitOnholdFormId: new FormControl(form?.permitOnholdFormId ?? []),\n permitCloseFormId: new FormControl(form?.permitCloseFormId ?? []),\n permitClosurePolicy: new FormControl(form?.permitClosurePolicy ?? PermitClosurePolicy.OnlyIfOnHold),\n permitStatusAfterApproval: new FormControl(form?.permitStatusAfterApproval ?? PermitStatus.OnHold),\n assetOperatorFormId: new FormControl(form?.assetOperatorFormId ?? []),\n isEnablePermitZone: new FormControl(form?.isEnablePermitZone ?? false),\n isEnablePermitSchedule: new FormControl(form?.isEnablePermitSchedule ?? false),\n assetOperationFormCategoryType: new FormControl(form?.assetOperationFormCategoryType ?? AssetOperationFormCategoryType.All),\n assetOperationFormCategories: new FormControl(form?.assetOperationFormCategories ?? [], form?.assetOperationFormCategoryType == AssetOperationFormCategoryType.Specific ? Validators.required : null),\n documentKinds: new FormControl(this.documentKindCheckList ?? null, form?.type == FormType.SupplierDocumentReview ? documentKindValidator : null),\n optionalMandatoryState: new FormControl(form?.optionalMandatoryState ?? OptionalMandatoryState.Mandatory),\n expiryMode: new FormControl(form?.expiryMode ?? FormExpiryMode.EndDay),\n autoRenew: new FormControl(form?.autoRenew ?? AutoRenew.NotRenew)\n\n });\n\n this._permitInUseFormId = form?.permitInUseFormId;\n this._permitOnholdFormId = form?.permitOnholdFormId;\n this._permitCloseFormId = form?.permitCloseFormId;\n this._assetOperatorFormId = form?.assetOperatorFormId;\n\n this.formToEdit = form;\n\n this.formGroup.get('type').valueChanges\n .subscribe((res) => {\n if (res == FormType.SupplierDocumentReview) {\n this.formGroup.get('documentKinds').addValidators(documentKindValidator);\n }\n else {\n this.formGroup.get('documentKinds').clearValidators();\n this.formGroup.get('documentKinds').setValue(null);\n }\n this.formGroup.get('documentKinds').updateValueAndValidity();\n })\n\n this.formGroup.get('assetOperationFormCategoryType').valueChanges.subscribe(() => {\n this.cdr.detectChanges();\n let assetOperationFormCategoryType = this.formGroup.get('assetOperationFormCategoryType');\n let assetOperationFormCategories = this.formGroup.get('assetOperationFormCategories')\n if (assetOperationFormCategoryType.value == AssetOperationFormCategoryType.Specific) {\n this.formCategorySelector.element.focus();\n assetOperationFormCategories.setValidators(Validators.required);\n }\n else {\n assetOperationFormCategories.clearValidators();\n }\n assetOperationFormCategories.updateValueAndValidity();\n\n })\n });\n }\n\n get formCategorySelectCompareFn(): CompareWithFn {\n return (a, b) => a.id == b.id\n }\n\n get isFormGroupValid(): boolean {\n return this.formGroup.valid;\n }\n\n createFormModel() {\n let form = {\n name: this.formGroup.controls['name'].value,\n buttonTitle: this.formGroup.controls['buttonTitle'].value,\n scope: (this.currentFormType == this.formType.AssetRegistration || this.currentFormType == this.formType.Generic || this.currentFormType == this.formType.SiteBriefing) ? this.formGroup.controls['scope'].value : CompanySiteScope.Company,\n applyFor: this.formGroup.controls['applyFor'].value,\n type: this.currentFormType,\n askMode: this.formGroup.controls['askMode'].value,\n approvalMode: this.formGroup.controls['approvalMode'].value,\n groupName: this.formGroup.controls['groupName'].value,\n isEnable: this.formGroup.controls['isEnable'].value,\n items: this.formGroup.controls['items'].value,\n visitorTypeIds: this.formGroup.controls['visitorTypeIds'].value,\n isEnableSupplierFormExpiryDate: this.formGroup.controls['isEnableSupplierFormExpiryDate'].value,\n allowUsersToAttachAdditionalDocuments: this.formGroup.controls['allowUsersToAttachAdditionalDocuments'].value,\n\n permitInUseFormId: (this.currentFormType != this.formType.Permit || this.formGroup.controls['permitInUseFormId'].value == null) ? null : this.formGroup.controls['permitInUseFormId'].value.id,\n permitOnholdFormId: (this.currentFormType != this.formType.Permit || this.formGroup.controls['permitOnholdFormId'].value == null) ? null : this.formGroup.controls['permitOnholdFormId'].value.id,\n permitCloseFormId: (this.currentFormType != this.formType.Permit || this.formGroup.controls['permitCloseFormId'].value == null) ? null : this.formGroup.controls['permitCloseFormId'].value.id,\n permitClosurePolicy: this.currentFormType == this.formType.Permit ? this.formGroup.controls['permitClosurePolicy'].value : null,\n permitStatusAfterApproval: this.currentFormType == this.formType.Permit ? this.formGroup.controls['permitStatusAfterApproval'].value : null,\n assetOperatorFormId: (this.currentFormType != this.formType.AssetRegistration || this.formGroup.controls['assetOperatorFormId'].value == null) ? null : this.formGroup.controls['assetOperatorFormId'].value.id,\n isEnablePermitZone: this.currentFormType != this.formType.Permit ? false : this.formGroup.controls['isEnablePermitZone'].value,\n isEnablePermitSchedule: this.currentFormType != this.formType.Permit ? false : this.formGroup.controls['isEnablePermitSchedule'].value,\n assetOperationFormCategories: this.formGroup.controls['assetOperationFormCategories'].value?.map((item => item.id)),\n assetOperationFormCategoryType: this.formGroup.controls['assetOperationFormCategoryType'].value,\n optionalMandatoryState: this.formGroup.controls['optionalMandatoryState'].value,\n expiryMode: this.currentFormType == this.formType.SiteBriefing ? this.formGroup.controls['expiryMode'].value : null,\n autoRenew: this.currentFormType == this.formType.SiteBriefing ? this.formGroup.controls['autoRenew'].value : null\n } as FormModel;\n\n switch (form.type) {\n case FormType.Generic:\n form.applyFor = FormApplyFor.Individual;\n break;\n case FormType.SupplierDocumentReview:\n form.askMode = FormAskMode.AnyTime;\n form.scope = CompanySiteScope.Company;\n form.applyFor = FormApplyFor.Supplier;\n form.documentKindIdList = getSelectedIdList(this.documentKindCheckList);\n break;\n case FormType.Permit:\n form.askMode = FormAskMode.AnyTime;\n form.scope = CompanySiteScope.Site;\n break;\n }\n\n return form;\n }\n\n formModel: FormModel;\n bsModalRef: BsModalRef;\n\n onModalPreview(template: any) {\n this.formModel = this.createFormModel();\n\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-xl\",\n backdrop: true,\n ignoreBackdropClick: false,\n })\n }\n\n addForm() {\n\n let form = this.createFormModel();\n\n // if (!form.items?.length) {\n // this.modalService.error('Form must have at least one question or document or announcement!');\n // return;\n // }\n\n this.inProgress = true;\n let subscription;\n if (this.formToEdit) {\n subscription = this.formService.editForm(this.formToEdit.id, form)\n }\n else\n subscription = this.formService.addForm(form);\n\n subscription.subscribe(\n res => {\n if (res.success) {\n this.hide.emit();\n } else {\n this.modalService.error(res.message);\n this.inProgress = false;\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n\n onSelectedVisitorTypeChange($event) {\n this.formGroup.controls.visitorTypeIds.setValue($event);\n }\n\n getDocumentKindList() {\n this.documentKindService.list()\n .subscribe(res => {\n this.documentKindList = res;\n this.documentKindService.prepareDocumentKindCheckList(this.formToEdit?.documentKindIdList)\n .subscribe(res => {\n this.documentKindCheckList = res;\n this.formGroup?.controls.documentKinds.setValue(this.documentKindCheckList);\n });\n });\n }\n\n\n getFormGroups() {\n this.formGroups$ = new Observable((observer: Observer) => {\n observer.next(this.formGroup.get('groupName').value);\n }).pipe(\n switchMap((groupName: string) => {\n if (groupName) {\n this.formGroupLoader = true;\n return this.formService.getFormGroups(groupName).pipe(\n map((data: string[]) => (data && data) || []),\n tap(\n () => noop,\n (err) => {\n let rrr = (err && err.message) || 'Something goes wrong';\n }\n ),\n finalize(() => {\n this.formGroupLoader = false;\n })\n );\n }\n\n return of([]);\n })\n );\n }\n\n onSelectFormGroup(event) {\n this.formGroup.get('groupName').setValue(event.value);\n }\n\n orderedItems(items) {\n this.formGroup.controls['items'].setValue(items);\n }\n\n get isVisitorTypeFieldVisible(): boolean {\n let formType = this.formGroup.controls.type.value;\n return [\n FormType.SupplierDocumentReview,\n FormType.SupplierForm,\n FormType.AssetRegistration,\n FormType.AssetOperator,\n FormType.AssetOperation,\n ].includes(formType) == false;\n }\n\n setFormCategories() {\n this.formCategoriesLoadInitiated = true;\n this.formCategoriesLoading = true;\n this.manageInventoryService.getToolCategories().pipe(finalize(() => this.formCategoriesLoading = false))\n .subscribe(res => {\n this._formCategories = res;\n }, err => {\n this.modalService.error('Getting form categories failed!')\n }, () => {\n this.formCategoriesLoading = false;\n })\n }\n}\n","
      \n
      \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n \n Display Mode: \n \n \n \n
      \n
      \n
      \n

      \n Loading ...\n

      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Name\n
      \n Type\n \n \n
      \n
      Visitor TypesGroupButton Title\n \n
      \n There is no form!\n
      \n \n
      \n {{form.name}}\n (Disable)\n \n {{form.type | formType}}\n ({{form.scope | formScope:form.type}})\n ({{form.askMode |\n formAskMode}})\n ({{form.applyFor |\n formApplyFor}})\n \n \n \n \n
        \n
      • \n {{getVisitorType(id)?.title}}\n
      • \n
      \n
      \n \n All Visitors\n \n
      \n
      \n {{form.groupName}}\n \n {{form.buttonTitle}}\n \n
      \n \n \n \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n\n\n \n\n\n
      \n
      \n
      \n
      \n Clone Form\n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n
      \n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { forkJoin, Subject } from 'rxjs';\nimport { FormScope } from 'src/app/enums/form-scope';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { AnnouncementViewModel } from 'src/app/models/announcement-viewmodel';\nimport { FullFormViewModel } from 'src/app/models/form/form-view-model';\nimport { QuestionViewModel } from 'src/app/models/question-viewmodel';\nimport { UserDocumentType } from 'src/app/models/user-document-type';\nimport { VisitorType } from 'src/app/models/visitor-type';\nimport { AnnouncementService } from 'src/app/services/announcement.service';\nimport { FormService } from 'src/app/services/form.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { QuestionService } from 'src/app/services/question.service';\nimport { UserDocumentTypeService } from 'src/app/services/user-document-type.service';\nimport { VisitorTypeService } from 'src/app/services/visitor-type.service';\nimport { FormType } from \"../../../enums/form-type\";\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { FilterList } from 'src/app/models/filter-list';\nimport { CloneFormQueryModel } from 'src/app/models/induction-viewmodel';\nimport { finalize } from 'rxjs/operators';\n\n@Component({\n selector: 'obc-form-manage',\n templateUrl: './form-manage.component.html',\n styleUrls: ['./form-manage.component.scss']\n})\n\nexport class FormManageComponent implements OnInit, OnDestroy {\n formScope = FormScope;\n formType = FormType;\n inProgress: boolean;\n upsertModalRef: BsModalRef;\n\n forms: FullFormViewModel[];\n formToEdit: FullFormViewModel;\n\n questions: QuestionViewModel[] = [];\n visitorTypes: VisitorType[] = [];\n announcements: AnnouncementViewModel[] = [];\n documents: UserDocumentType[] = [];\n\n inProgress$: Subject = new Subject();\n onlyActiveForms: boolean = true;\n\n formsList = new BehaviorSubject([]);\n formsFilter: string = '';\n cloneName: string;\n cloneButtonTitle: string;\n formIdToClone: number;\n filterFormTypes = [];\n filters = [\n { data: this.filterFormTypes, name: 'Type', type: FilterType.FormType },\n ] as FilterList[];\n FilterType = FilterType;\n subscription: Subscription;\n\n constructor(private formService: FormService,\n private questionService: QuestionService,\n private documentTypeService: UserDocumentTypeService,\n private announcementService: AnnouncementService,\n private visitorTypeService: VisitorTypeService,\n private layoutService: LayoutService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n ) { }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n ngOnInit(): void {\n this.layoutService.header = \"Forms\";\n this.loadForms();\n this.InitPage();\n\n //To handle backdrop-click\n this.subscription = this.bsModalService.onHide.subscribe((_) => {\n this.loadForms();\n })\n }\n\n get filteredForms() {\n let formsFilter = (this.formsFilter ?? '').toLowerCase();\n let selectedTypes = this.filters.find(x => x.name == 'Type')?.data.map(({ key }) => key);\n return this.formsList.value?.filter(\n (s) =>\n ((formsFilter ?? '').length == 0 ||\n s.name?.toLowerCase().indexOf(formsFilter) >= 0 ||\n s.buttonTitle?.toLowerCase().indexOf(formsFilter) >= 0)\n &&\n (selectedTypes.length == 0 || (selectedTypes.length > 0 && selectedTypes.some(q => q == s.type)))\n );\n }\n\n onRemoveFilter(currentItems: any[], removeItem = null) {\n currentItems.splice(currentItems.findIndex(p => p.key !== removeItem.key) - 1, 1);\n }\n\n onUpdateFilter(currentItems: any[], newItems: any[]) {\n currentItems.splice(0, currentItems.length, ...newItems);\n }\n\n private InitPage() {\n forkJoin({\n questions: this.questionService.getQuestions(),\n documents: this.documentTypeService.getAll(),\n announcements: this.announcementService.getAll(SiteActiveStatus.All),\n visitorTypes: this.visitorTypeService.cacheGetAllVisitorTypes(),\n }).subscribe(res => {\n this.questions = res.questions.map(x => new QuestionViewModel(x));\n this.visitorTypes = res.visitorTypes;\n this.announcements = res.announcements;\n this.documents = res.documents;\n })\n }\n\n\n loadForms() {\n this.inProgress = true;\n\n this.formService.getAllForms().subscribe(\n res => {\n if (res.success) {\n this.forms =\n this.onlyActiveForms == true\n ? res.data.filter((f) => f.isEnable == true)\n : res.data.filter((f) => f.isEnable == false);\n this.formsList = new BehaviorSubject(this.forms);\n } else {\n this.modalService.error(res.message);\n this.inProgress = false;\n }\n }, err => {\n this.modalService.error(err.message);\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n\n onModalAutomation(template: any) {\n this.upsertModalRef = this.bsModalService.show(template, { class: 'modal-lg' });\n }\n\n onModalUpsertForm(template: any, formToEdit?: FullFormViewModel) {\n this.formToEdit = formToEdit;\n this.upsertModalRef = this.bsModalService.show(template, { class: 'modal-xl modal-full-width', ignoreBackdropClick: true, });\n }\n\n closeQuestionModal() {\n this.upsertModalRef.hide();\n }\n\n onRemoveForm(formId: number) {\n this.modalService.confirm('Are you sure you want to remove selected form?', 'Remove').subscribe(del => {\n if (del === true) {\n this.inProgress = true;\n this.formService.removeForm(formId).subscribe(\n res => {\n if (res.success) {\n this.loadForms();\n } else {\n this.modalService.error(res.message);\n this.inProgress = false;\n }\n }, err => {\n this.modalService.error(err);\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n });\n }\n\n getVisitorType(visitorTypeId: number) {\n return this.visitorTypes.find(x => x.id == visitorTypeId);\n }\n\n onActiveChanged(value, isActiveMode) {\n if (isActiveMode)\n this.onlyActiveForms = value;\n this.loadForms();\n }\n\n onCloneForm(template, formId: number) {\n this.formIdToClone = formId;\n this.modalService.show(template, 'modal-xl modal-full-width');\n }\n closeCloneModal() {\n this.modalService.hide();\n this.cloneName = '';\n this.cloneButtonTitle = '';\n }\n cloneForm() {\n if (!this.cloneName?.length) {\n this.modalService.error('Enter form name!');\n return;\n }\n\n this.inProgress = true;\n this.formService.cloneForm({\n formId: this.formIdToClone,\n name: this.cloneName,\n buttonTitle: this.cloneButtonTitle,\n } as CloneFormQueryModel)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(result => {\n this.inProgress = false;\n if (!result)\n this.modalService.error('Clone form failed!');\n else {\n this.loadForms();\n this.closeCloneModal();\n }\n });\n }\n}\n","export enum InductionAskMode {\n AnyTime = 0,\n CheckIn = 1,\n PreCheckIn = 2,\n OffSite = 3,\n}\n","import { SiteRequiredFieldState } from \"../models/site-required-field-viewmodel\";\n\nexport enum OffsiteSupplierCollectionModeEnum {\n MandatoryAllSuppliers = SiteRequiredFieldState.mandatory,\n MandatorySiteSuppliers = SiteRequiredFieldState.validatedMandatory,\n Optional = SiteRequiredFieldState.optional,\n Disabled = SiteRequiredFieldState.ignore,\n SiteSettings = 4,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ExpiryUnit } from '../enums/expiry-mode.enum';\n\n@Pipe({\n name: 'expiryUnit'\n})\nexport class ExpiryUnitPipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == ExpiryUnit.Hour) return \"Hour(s)\";\n if (value == ExpiryUnit.Day) return \"Day(s)\";\n if (value == ExpiryUnit.Week) return \"Week(s)\";\n if (value == ExpiryUnit.Month) return \"Month(s)\";\n if (value == ExpiryUnit.Year) return \"Year(s)\";\n return value?.toString() ?? \"?\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { InductionAskMode } from '../enums/induction-ask-mode.enum';\n\n@Pipe({\n name: 'inductionAskMode'\n})\nexport class InductionAskModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == InductionAskMode.AnyTime) return \"Any Time\";\n if (value == InductionAskMode.CheckIn) return \"Check In\";\n if (value == InductionAskMode.PreCheckIn) return \"Pre Check In\";\n if (value == InductionAskMode.OffSite) return \"Offsite\";\n return value?.toString() ?? \"?\";\n }\n\n}\n","
      \n
      \n
      \n
      \n
      \n {{ inductionToEdit ? 'Edit Induction' : 'Add Induction'}}\n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n 0)\"\n required class=\"form-control\" formControlName=\"mode\">\n \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n \n
      \n
      \n
      \n
      \n
      \n\n \n\n \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { finalize } from 'rxjs/operators';\nimport { AskMode } from 'src/app/enums/ask-mode';\nimport { CompanySiteScope } from 'src/app/enums/company-site-scope';\nimport { InductionAskMode } from 'src/app/enums/induction-ask-mode.enum';\nimport { InductionMode } from 'src/app/enums/site-induction-mode.enum';\nimport { InductionModel, InductionViewModel } from 'src/app/models/induction-viewmodel';\nimport { InductionService } from 'src/app/services/induction-service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { OffsiteSupplierCollectionModeEnum } from \"../../../enums/offsite-supplier-collection-mode.enum\";\nimport { ExpiryMode, ExpiryUnit } from 'src/app/enums/expiry-mode.enum';\n\n@Component({\n selector: 'app-upsert-induction',\n templateUrl: './upsert-induction.component.html',\n styleUrls: [ './upsert-induction.component.scss' ]\n})\nexport class UpsertInductionComponent implements OnInit {\n @Output() public hide = new EventEmitter();\n\n InductionScopeEnum = CompanySiteScope;\n AskModeEnum = InductionAskMode;\n InductionMode = InductionMode;\n inProgress: boolean;\n expiryModeEnum = ExpiryMode;\n expiryUnitEnum = ExpiryUnit;\n\n formGroup: FormGroup;\n isActiveFormControl = new FormControl();\n\n @Input() set induction(value: InductionViewModel) {\n this.resetFormGroup(value);\n }\n\n inductionToEdit: InductionViewModel;\n offsiteSupplierCollectionModeEnum = OffsiteSupplierCollectionModeEnum;\n\n constructor(private inductionService: InductionService,\n private modalService: ModalService,\n private bsModalService: BsModalService) {\n }\n\n ngOnInit() {\n }\n\n resetFormGroup(induction: InductionViewModel = null) {\n this.isActiveFormControl.setValue(induction ? (induction.mode != InductionMode.Disable) : true);\n this.formGroup = new FormGroup({\n title: new FormControl(induction?.title ?? '', [ Validators.required ]),\n askMode: new FormControl(induction?.askMode ?? AskMode.AnyTime, [ Validators.required ]),\n scope: new FormControl(induction?.scope ?? CompanySiteScope.Company, [ Validators.required ]),\n items: new FormControl(induction?.items ?? []),\n visitorTypeIds: new FormControl(induction?.visitorTypeIds ?? []),\n mode: new FormControl(induction?.mode ?? InductionMode.Auto),\n isMandatory: new FormControl(induction?.isMandatory ?? true, [ Validators.required ]),\n isActive: this.isActiveFormControl,\n allowUsersToAttachAdditionalDocuments: new FormControl(induction?.allowUsersToAttachAdditionalDocuments ?? false),\n expiryMode: new FormControl(induction?.expiryMode ?? ExpiryMode.EndDay, [ Validators.required ]),\n expiryCount: new FormControl(induction?.expiryCount , [ Validators.min(1) ]),\n expiryUnit: new FormControl(induction?.expiryUnit ?? ExpiryUnit.Day, [ Validators.required ]),\n });\n this.inductionToEdit = induction;\n }\n\n get isFormGroupValid(): boolean {\n let b1 = this.formGroup.valid;\n let b2 = this.formGroup.controls.isActive.value == true && this.formGroup.controls.mode.value > 0;\n let b3 = this.formGroup.controls.isActive.value == false;\n return b1 &&\n (\n (b2)\n ||\n (b3)\n )\n }\n\n createInductionModel() {\n let ivm = {\n title: this.formGroup.controls['title'].value,\n scope: this.formGroup.controls['scope'].value,\n askMode: this.formGroup.controls['askMode'].value,\n visitorTypeIds: this.formGroup.controls['visitorTypeIds'].value,\n items: this.formGroup.controls['items'].value,\n mode: this.formGroup.controls['isActive'].value ? (this.formGroup.controls['mode'].value) : InductionMode.Disable,\n isMandatory: this.formGroup.controls['isMandatory'].value,\n allowUsersToAttachAdditionalDocuments: this.formGroup.controls['allowUsersToAttachAdditionalDocuments'].value,\n expiryMode: this.formGroup.controls['expiryMode'].value,\n expiryCount: this.formGroup.controls['expiryMode'].value === this.expiryModeEnum.Custom ? this.formGroup.controls['expiryCount'].value : null,\n expiryUnit: this.formGroup.controls['expiryMode'].value === this.expiryModeEnum.Custom ? this.formGroup.controls['expiryUnit'].value : null,\n } as InductionModel;\n\n if(!ivm.items?.length) {\n this.modalService.error('Induction must have at least one question or document or announcement!');\n return null;\n }\n return ivm;\n }\n\n addInduction() {\n let ivm = this.createInductionModel();\n if(!ivm)\n return;\n\n this.inProgress = true;\n if(this.inductionToEdit) {\n this.inductionService.editInduction(this.inductionToEdit.id, ivm)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n if(res.success) {\n this.hide.emit();\n }\n }, _ => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n });\n } else\n this.inductionService.addInduction(ivm)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(_ => {\n this.hide.emit();\n }, _ => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n });\n }\n\n\n inductionModel: InductionModel;\n bsModalRef: BsModalRef;\n\n onModalPreview(template: any) {\n this.inductionModel = this.createInductionModel();\n if(this.inductionModel) {\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-xl\",\n backdrop: true,\n ignoreBackdropClick: false,\n })\n }\n }\n\n\n onSelectedVisitorTypeChange($event) {\n this.formGroup.controls.visitorTypeIds.setValue($event);\n }\n\n orderedItems(items) {\n this.formGroup.controls['items'].setValue(items);\n }\n\n toggleAttachAdditionalDocuments() {\n this.formGroup.controls['allowUsersToAttachAdditionalDocuments']\n .setValue(!this.formGroup.controls['allowUsersToAttachAdditionalDocuments'].value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CompanySiteScope } from '../enums/company-site-scope';\n\n@Pipe({\n name: 'companySiteScope'\n})\nexport class CompanySiteScopePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === CompanySiteScope.Company) return \"Company\";\n if (value === CompanySiteScope.Site) return \"Site\";\n return value?.toString();\n }\n\n}\n","
      \n
      \n \n
      \n \n Display Mode: \n \n \n \n
      \n
      \n
      \n

      \n Loading ...\n

      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      NameScopeVisitor TypesExpiryApproval ModePerform\n \n
      \n There is no induction!\n
      \n {{group.title}}\n ({{group.inductionKey}})\n \n ({{group.isMandatory ? 'Mandatory':'Optional'}})\n \n {{group.scope | companySiteScope}}\n \n \n \n
      \n \n
      \n
      \n \n All Visitors\n \n
      \n
      \n {{group.expiryMode | expiryMode}}\n {{group.expiryCount}} {{group.expiryUnit | expiryUnit}}\n \n {{getModeTitle(group.mode)}}\n \n {{group.askMode | inductionAskMode}}\n \n
      \n \n \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n \n\n\n\n\n
      \n
      \n
      \n
      \n Clone Induction\n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n 0 ? cloneInduction() : null\">\n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n
      \n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription, forkJoin } from 'rxjs';\nimport { finalize } from 'rxjs/internal/operators/finalize';\nimport { ExpiryMode } from 'src/app/enums/expiry-mode.enum';\nimport { InductionMode } from 'src/app/enums/site-induction-mode.enum';\nimport { AsyncResult } from 'src/app/models/helper-models';\nimport { CloneInductionQueryModel, InductionViewModel } from 'src/app/models/induction-viewmodel';\nimport { QuestionViewModel } from 'src/app/models/question-viewmodel';\nimport { UserDocumentType } from 'src/app/models/user-document-type';\nimport { VisitorType } from 'src/app/models/visitor-type';\nimport { AnnouncementService } from 'src/app/services/announcement.service';\nimport { InductionService } from 'src/app/services/induction-service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { QuestionService } from 'src/app/services/question.service';\nimport { UserDocumentTypeService } from 'src/app/services/user-document-type.service';\nimport { VisitorTypeService } from 'src/app/services/visitor-type.service';\n\n@Component({\n selector: 'obc-induction-manage',\n templateUrl: './induction-manage.component.html',\n styleUrls: ['./induction-manage.component.scss']\n})\nexport class InductionManageComponent implements OnInit, OnDestroy {\n inProgress: boolean;\n showDetailsConfig: any = {};\n upsertModalRef: BsModalRef;\n onlyActiveInductions: boolean = true;\n\n inductions: InductionViewModel[];\n inductionToEdit: InductionViewModel;\n inductionToClone: InductionViewModel;\n\n documents: UserDocumentType[] = [];\n questions: QuestionViewModel[] = [];\n visitorTypes: VisitorType[] = [];\n subscription: Subscription;\n expiryModeEnum = ExpiryMode;\n\n constructor(private inductionService: InductionService,\n private documentTypeService: UserDocumentTypeService,\n private questionService: QuestionService,\n private visitorTypeService: VisitorTypeService,\n private announcementService: AnnouncementService,\n private layoutService: LayoutService,\n private bsModalService: BsModalService,\n private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.layoutService.header = \"Inductions\";\n this.loadInductions();\n this.InitPage();\n\n //To handle backdrop-click\n this.subscription = this.bsModalService.onHide.subscribe((_) => {\n this.loadInductions();\n })\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n private InitPage() {\n forkJoin({\n visitorTypes: this.visitorTypeService.cacheGetAllVisitorTypes(),\n }).subscribe(res => {\n this.visitorTypes = (res.visitorTypes);\n })\n }\n\n loadInductions() {\n this.inProgress = true;\n this.inductionService.getInductions()\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(inds => this.inductions = this.onlyActiveInductions == true ? inds.filter(f => f.mode != InductionMode.Disable) : inds.filter(f => f.mode == InductionMode.Disable));\n }\n\n onModalUpsertInduction(template: any, induction?: InductionViewModel) {\n this.inductionToEdit = induction;\n this.upsertModalRef = this.bsModalService.show(template, {\n ignoreBackdropClick: true,\n class: 'modal-xl modal-full-width'\n });\n }\n\n closeQuestionModal(_: AsyncResult) {\n this.upsertModalRef.hide();\n }\n\n onRemoveInduction(induction: InductionViewModel) {\n this.inProgress = true;\n this.inductionService.removeInduction(induction)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(result => {\n if (!result.success)\n this.modalService.error(result.message ?? 'Remove induction failed!');\n else\n this.loadInductions();\n });\n }\n\n getModeTitle(mode: InductionMode) {\n switch (mode) {\n case InductionMode.Disable: return \"Disable\";\n case InductionMode.Auto: return \"Automatic\";\n case InductionMode.HostApprove: return \"Host Approval\";\n }\n }\n\n getVisitorType(visitorTypeId: number) {\n return this.visitorTypes.find(x => x.id == visitorTypeId);\n }\n\n showInductionDetails(ind: InductionViewModel) {\n this.showDetailsConfig[ind.id] = !(this.showDetailsConfig[ind.id] ?? false);\n }\n\n onActiveChanged(value, isActiveMode) {\n if (isActiveMode)\n this.onlyActiveInductions = value;\n this.loadInductions();\n }\n\n\n cloneName: string = '';\n onModalClone(template: any, induction?: InductionViewModel) {\n this.inductionToClone = induction;\n this.modalService.show(template, 'modal-lg');\n }\n closeCloneModal() {\n this.modalService.hide();\n this.cloneName = '';\n }\n cloneInduction() {\n this.inProgress = true;\n this.inductionService.cloneInduction({\n inductionId: this.inductionToClone?.id,\n name: this.cloneName\n } as CloneInductionQueryModel)\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe(result => {\n this.inProgress = false;\n this.loadInductions();\n if (result)\n this.modalService.error('Clone induction failed!');\n else {\n this.closeCloneModal();\n }\n });\n }\n}\n","export enum OnboardingType {\n Quick = 1,\n Full = 2\n}\n","export enum MessageQueryType {\n OnboardingEmailHistory = 0,\n}\n","export enum SupplierDocumentReviewFormSelectionMode {\n withForm = \"Select a form\",\n withoutForm = \"Continue without form\"\n}","
      \n
      \n \n {{modalTitle}}\n \n
      \n \n
      \n
      \n
      \n \n \n
      \n \n \n \n \n \n \n \n \n
      \n \n\n
      \n \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n\n\n \n \n\n\n\n \n \n","import {Component, EventEmitter, HostListener, Input, OnInit, Output, Renderer2, ViewChild} from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { FormScope } from 'src/app/enums/form-scope';\nimport { SupplierDocumentReviewMode } from 'src/app/enums/supplier-document-review-mode.enum';\nimport { SupplierDocumentReviewFormSelectionMode } from 'src/app/enums/supplier-documnet-review-form-selection-mode.enum';\nimport { FormViewModel } from 'src/app/models/form/form-view-model';\nimport { ServerResult } from 'src/app/models/server-result-data';\nimport { ApproveDeclineSiteSupplierDocumentVersion } from 'src/app/models/supplier-document/site-supplier-document-type-models';\nimport { SiteSupplierVersionFormReviewModel } from 'src/app/models/supplier-document/site-supplier-version-form-review-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SupplierDocumentService } from 'src/app/services/supplier-document.service';\nimport { FormApplyFor } from \"../../../enums/form-apply-for\";\nimport { FormRegisterFor } from \"../../../enums/form-register-for\";\nimport { FormType } from \"../../../enums/form-type\";\nimport { ISiteSupplierDocumentTypeVersion } from \"../../../models/supplier-document/site-supplier-document-type\";\nimport { SupplierPermitsService } from \"../../../services/supplier-permits.service\";\nimport { FormDataRendererComponent } from '../../form-manage/form-data-renderer/form-data-renderer.component';\nimport { WorkflowInfoViewModel } from 'src/app/models/workflow/workflow-info-viewmodel';\nimport { FormService } from 'src/app/services/form.service';\n\n@Component({\n selector: 'obc-supplier-document-review',\n templateUrl: './supplier-document-review.component.html',\n styleUrls: ['./supplier-document-review.component.scss']\n})\nexport class SupplierDocumentReviewComponent implements OnInit {\n SupplierDocumentReviewModeEnum = SupplierDocumentReviewMode\n @Output() public hide = new EventEmitter();\n @Output() public resultOfApproveReject = new EventEmitter();\n @Input() selectedSiteSupplierDocument: ISiteSupplierDocumentTypeVersion;\n @Input() supplierDocumentReviewMode: SupplierDocumentReviewMode;\n @ViewChild(\"formDataRenderer\") public formDataRenderer: FormDataRendererComponent;\n @Input() formType: FormType = FormType.SupplierDocumentReview;\n @Input() hashLink: string;\n @Input() siteSupplierId: number;\n @Input() supplierId: number;\n @Input() siteId: number;\n @Input() isReadonly: boolean = false;\n @Input() workflowModel: WorkflowInfoViewModel;\n\n loadFromWorkflow: boolean = false;\n\n FormTypeEnum = FormType;\n FormApplyFor = FormApplyFor;\n\n inProgress: boolean = false;\n formScope = FormScope;\n form: FormViewModel;\n isFormValid: boolean;\n registerFor: FormRegisterFor = FormRegisterFor.Supplier;\n showSelectForm: boolean\n supplierDocumentReviewFromSelectionMode = SupplierDocumentReviewFormSelectionMode\n supplierDocumentReviewFromSelectionModeValue = SupplierDocumentReviewFormSelectionMode.withForm\n formSelectionMode: FormControl\n showPicPanel: boolean = true;\n\n\n constructor(\n private supplierDocumentService: SupplierDocumentService,\n private supplierPermitsService: SupplierPermitsService,\n private formService: FormService,\n private modalService: ModalService,\n private renderer: Renderer2,\n ) {\n this.formSelectionMode = new FormControl({});\n this.formSelectionMode.setValue(SupplierDocumentReviewFormSelectionMode.withForm);\n this.renderer.addClass(document.body, 'no-scroll');\n }\n\n ngOnInit(): void {\n this.onResize();\n\n this.formSelectionMode.valueChanges.subscribe((value) => {\n this.formService.isFormDirty.next(false);\n this.toggleShowPic();\n if(value == this.supplierDocumentReviewFromSelectionMode.withoutForm) {\n this.unloadPDF();\n this.loadPDF();\n }\n });\n\n if (this.workflowModel && this.workflowModel.id) {\n this.loadFromWorkflow = true;\n if (this.workflowModel?.currentActivity?.formsToFill?.length > 0) {\n this.workflowModel.hasForm = true;\n this.form = this.workflowModel.currentActivity.formsToFill[0];\n this.form.name = this.form.buttonTitle && this.form.buttonTitle.length > 0 ? this.form.buttonTitle : this.form.name;\n\n }\n\n }\n }\n\n onlyShowForm(): boolean {\n return (this.form &&\n (this.loadFromWorkflow || this.formSelectionMode.value == SupplierDocumentReviewFormSelectionMode.withForm) &&\n !this.showPicPanel);\n }\n onlyShowFiles(): any {\n return (!this.form ||\n (!this.loadFromWorkflow && this.formSelectionMode.value != this.supplierDocumentReviewFromSelectionMode.withForm));\n }\n showFormAndFile(): any {\n\n return (this.form &&\n (this.loadFromWorkflow || this.formSelectionMode.value == SupplierDocumentReviewFormSelectionMode.withForm) &&\n this.showPicPanel);\n\n }\n\n viewFormSelector() {\n return ((this.loadFromWorkflow && this.workflowModel?.currentActivity?.formsToFill?.length > 1) ||\n (!this.loadFromWorkflow && this.supplierDocumentReviewMode != SupplierDocumentReviewMode.Disabled &&\n this.formSelectionMode.value == SupplierDocumentReviewFormSelectionMode.withForm))\n }\n\n get modalTitle(): string {\n return this.formType == this.FormTypeEnum.Permit ? 'Permit Form' : (this.selectedSiteSupplierDocument != null ? 'Review Supplier Document' : 'Form')\n }\n\n onSelectForm(form: FormViewModel) {\n this.form = form;\n this.toggleShowPic();\n this.unloadPDF();\n this.formService.isFormDirty.next(false);\n }\n\n validateForm(formIsValid: boolean) {\n\n this.isFormValid = formIsValid\n }\n\n get isReviewFormValid(): boolean {\n return (this.isFormValid && this.formSelectionMode.value == SupplierDocumentReviewFormSelectionMode.withForm) ||\n this.formSelectionMode.value == SupplierDocumentReviewFormSelectionMode.withoutForm\n }\n\n approveDecline(isApprove: boolean) {\n return new Promise((resolve, reject) => {\n this.inProgress = true;\n var formAnswers = null;\n if (this.formSelectionMode.value == SupplierDocumentReviewFormSelectionMode.withForm) {\n formAnswers = this.formDataRenderer.getFormResponse();\n formAnswers.siteSupplierDocumentVersionId = this.selectedSiteSupplierDocument.lastSupplierVersionId;\n }\n var query = {\n formDataModel: formAnswers,\n ApproveDeclineSiteSupplierDocumentVersion: {\n isApproved: isApprove,\n siteSupplierDocumentVersionId: this.selectedSiteSupplierDocument.lastSupplierVersionId,\n expirationDate: this.selectedSiteSupplierDocument.expirationDate\n } as ApproveDeclineSiteSupplierDocumentVersion,\n } as SiteSupplierVersionFormReviewModel;\n\n this.supplierDocumentService\n .siteSupplierVersionFormReview(query)\n .subscribe(res => {\n if (res.success) {\n resolve(res);\n this.formService.isFormDirty.next(false);\n\n } else {\n this.modalService.error(res.message);\n reject();\n }\n }, err => {\n this.modalService.error(err, \"Failed\");\n reject();\n\n }, () => {\n this.inProgress = false;\n })\n });\n }\n\n onApproveDeclineSiteSupplierVersionAndFillForm(isApprove: boolean) {\n this.approveDecline(isApprove)\n .then(res => {\n this.hide.emit();\n this.resultOfApproveReject.emit();\n })\n .catch();\n }\n\n saveFromWorkflow() {\n return new Promise((resolve, reject) => {\n this.inProgress = true;\n var formAnswers = this.formDataRenderer.getFormResponse();\n\n let siteSupplierId = this.hashLink ? null : this.siteSupplierId;\n\n this.supplierPermitsService.submitFormData(formAnswers, this.hashLink, siteSupplierId).subscribe(res => {\n if (res.success) {\n resolve();\n }\n else {\n this.modalService.error(res.message);\n reject();\n }\n }, err => {\n this.modalService.error(err, \"Failed\");\n reject();\n }, () => {\n this.inProgress = false;\n })\n });\n }\n\n onSubmitPermitForm() {\n this.saveFromWorkflow()\n .then(res => {\n this.hide.emit();\n this.resultOfApproveReject.emit();\n })\n .catch();\n }\n\n showTabPage: boolean = false;\n @HostListener('window:resize', ['$event'])\n onResize(event?) {\n setTimeout(() => {\n this.showTabPage = false;\n if (window.innerWidth < 1200)\n this.showTabPage = true;\n\n this.showPicPanel = true;\n if (this.selectedSiteSupplierDocument == null || this.selectedSiteSupplierDocument.files == null || this.selectedSiteSupplierDocument.files.length == 0) {\n this.showPicPanel = false;\n }\n }, 500);\n }\n\n\n toggleShowPic() {\n this.inProgress = true;\n this.showPicPanel = !this.showPicPanel;\n setTimeout(() => {\n this.showPicPanel = !this.showPicPanel;\n this.inProgress = false;\n }, 50);\n }\n\n pdfIsLoaded = true;\n loadPDF() {\n if(!this.pdfIsLoaded) {\n setTimeout(() => {\n this.pdfIsLoaded = true;\n }, 100)\n }\n }\n unloadPDF() {\n this.pdfIsLoaded = false;\n if(!this.showTabPage) {\n this.loadPDF();\n }\n }\n\n ngOnDestroy() {\n this.renderer.removeClass(document.body, 'no-scroll');\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { MessageQueryModel, MessageShowModel } from '../models/message-query-model';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getMesasgeHistory(request: MessageQueryModel): Observable {\n return this._http.post(`api/company/get-message-history`, request)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","\n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      DateSent DateToSubjectContentSiteSupplier
      \n There are no messages.\n
      \n {{msg.registerDateTime | datetime}}\n {{msg.doneDateTime | datetime}}\n {{msg.to | mobile}}\n {{msg.to}}\n {{msg.subject}}\n \n {{msg.siteName}}{{msg.supplierName}}
      \n
      \n
      \n
      \n\n\n
      \n
      \n Content\n \n
      \n
      \n
      \n
      \n\n
      \n\n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { finalize } from 'rxjs/operators';\nimport { MessageType } from 'src/app/enums/message-type.enum';\nimport { MessageQueryModel, MessageShowModel } from 'src/app/models/message-query-model';\nimport { MessageService } from 'src/app/services/message.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-message-history',\n templateUrl: './message-history.component.html',\n styleUrls: ['./message-history.component.scss']\n})\nexport class MessageHistoryComponent implements OnInit {\n\n @Input() request: MessageQueryModel;\n inProgress: boolean;\n messageList: MessageShowModel[];\n\n MessageType = MessageType;\n currentMessage: MessageShowModel;\n modalRef: any;\n\n constructor(private messageService: MessageService,\n private modalService: BsModalService) { }\n\n ngOnInit(): void {\n this.loadData();\n }\n loadData() {\n if (this.request) {\n this.inProgress = true;\n this.messageService.getMesasgeHistory(this.request)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => this.messageList = res);\n }\n }\n\n showContent(msg: MessageShowModel, template: any) {\n this.currentMessage = msg;\n this.modalRef = this.modalService.show(template, { class: 'modal-lg' });\n setTimeout(() => {\n document.getElementById('contentElement').innerHTML = this.currentMessage.body\n }, 0);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ExternalSitePermission } from '../enums/external-site-permission';\n\n@Pipe({\n name: 'externalSitePermission'\n})\nexport class ExternalSitePermissionPipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == ExternalSitePermission.ViewActivity) return 'View Activity';\n if (value == ExternalSitePermission.NoPermission) return 'No Permission';\n if (value == ExternalSitePermission.DefineQuestions) return 'Questions';\n if (value == ExternalSitePermission.DefineAnnouncements) return 'Announcements';\n if (value == ExternalSitePermission.DefineForms) return 'Forms';\n if (value == ExternalSitePermission.DefineInductions) return 'Inductions';\n return value?.toString() ?? '?';\n }\n\n}\n","\n
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n
      {{ siteMode ? 'Site Selection' : 'Supplier Selection' }}
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n \n \n
      \n\n
      \n \n\n \n \n
      \n\n
      \n\n
      \n\n
      \n\n
      \n
      \n
      \n
      List of Site Suppliers
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n\n 0; \">\n \n \n\n \n \n \n \n \n \n \n \n\n \n
      \n
      \n {{ !siteMode ? 'Site' : 'Supplier' }}\n \n \n \n
      \n
      Documents/Permits/AssetsPermissionsLast Request Email
      \n \n
      \n \n
      {{ item.supplierName }}
      \n
      \n
      {{ item.supplierEmailAddress }}
      \n
      {{ item.supplierMobile | mobile }}
      \n
      \n
      \n \n {{ item.siteName }}\n \n\n \n \n \n \n \n \n
      \n
      \n\n\n
      \n
      \n View\n
      \n There are no supplier documents.\n
      \n
      \n
      {{(item.siteSupplierDocumentTypes ?\n item.siteSupplierDocumentTypes.length\n : 0)}}\n Document(s)\n
      \n
      \n Approved: \n {{getSupplierDocumentListCount(item,SiteSupplierDocumentStatus.Approved)}}\n \n Rejected: \n {{getSupplierDocumentListCount(item,SiteSupplierDocumentStatus.Declined)}}\n \n 0?'text-danger':''}}\">\n Pending: 0?'danger':'secondary'}}\">\n {{getSupplierDocumentListCount(item,SiteSupplierDocumentStatus.Pending)}}\n \n \n Others: \n {{getSupplierDocumentListCount(item)}}\n \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n
      \n View\n
      \n There are no permits.\n
      \n
      \n
      {{getPermitCount(item)}} Permit(s)
      \n
      \n Approved: \n {{getPermitCount(item,FormDataStatus.Approved)}}\n \n Rejected: \n {{getPermitCount(item,FormDataStatus.Rejected)}}\n \n 0?'text-danger':''}}\">\n Pending: 0?'danger':'secondary'}}\">\n {{getPermitCount(item,FormDataStatus.PendingApproval)}}\n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n View\n
      \n There are no assets.\n
      \n
      \n
      {{getAssetCount(item)}} Asset(s)
      \n
      \n Approved: \n {{getAssetCount(item,SiteAssetRequestApproveStatus.Approved)}}\n \n Rejected: \n {{getAssetCount(item,SiteAssetRequestApproveStatus.Rejected)}}\n \n 0?'text-danger':''}}\">\n Pending: 0?'danger':'secondary'}}\">\n {{getAssetCount(item,SiteAssetRequestApproveStatus.Pending)}}\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n Not Linked\n \n \n No Permissions\n
        \n \n
      • \n {{ExternalSitePermission[p] | externalSitePermission}}\n
      • \n
        \n
      \n \n
      \n
      \n
      \n {{ item.lastEmailAddress }}\n
      \n
      \n ({{ item.lastEmailSendDate | datetime}})\n
      \n \n \n
      \n \n
      \n
      \n \n
      \n\n \n \n \n\n \n \n \n
      \n No item\n
      \n \n \n
      \n\n
      \n
      \n\n\n
      \n
      \n
      \n\n
      \n \n \n \n
      \n\n
      \n \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n\n
      \n\n
      \n\n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      Send Supplier Link To:
      \n \n \n \n
      \n \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n Supplier Link\n
      \n
      \n \n
      \n
      \n
      \n\n\n
      \n
      \n \n Update Supplier Document Type Name\n \n \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n\n \n \n\n\n\n
      \n
      \n
        \n
        \n \n
        \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n Edit Permissions\n
      \n
      \n
      \n \n {{ExternalSitePermission.ViewActivity | externalSitePermission}}\n
      \n
      \n \n {{ExternalSitePermission.DefineQuestions | externalSitePermission}}\n
      \n
      \n \n {{ExternalSitePermission.DefineAnnouncements | externalSitePermission}}\n
      \n
      \n \n {{ExternalSitePermission.DefineForms | externalSitePermission}}\n
      \n
      \n \n {{ExternalSitePermission.DefineInductions | externalSitePermission}}\n
      \n \n
      \n
      \n
      \n\n\n\n
      \n
      \n \n Update Supplier\n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n
      \n
      \n Content\n \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n
      \n","import { Component, HostListener, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { OptionalMandatoryState } from \"../../enums/site-document-state.enum\";\nimport {\n SiteSupplierDocumentTypeModel,\n SiteSupplierDocumentTypeViewModel\n} from \"../../models/supplier-document/site-supplier-document-type-view-model.model\";\nimport { SiteSupplierViewModel } from 'src/app/models/supplier-document/site-supplier-view-model.model';\nimport { debounceTime } from \"rxjs/operators\";\nimport { SupplierDocumentService } from \"../../services/supplier-document.service\";\nimport { SupplierDocumentTypeViewModel } from \"../../models/supplier-document/supplier-document-models\";\nimport { ModalService } from \"../../services/modal.service\";\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { LayoutService } from \"../../services/layout.service\";\nimport { SiteSupplierHashLinkModel } from \"../../models/supplier-document/site-supplier-hash-link-model.model\";\nimport { ApproveDeclineSiteSupplierDocumentVersion } from \"../../models/supplier-document/site-supplier-document-type-models\";\nimport { SiteSupplierDocumentStatus } from 'src/app/enums/site-supplier-document-status';\nimport { BehaviorSubject } from 'rxjs';\nimport { ExternalSitePermission } from 'src/app/enums/external-site-permission';\nimport { clone, getPageSizeByUrl } from 'src/app/helpers/general-functions';\nimport { FormDataStatus } from 'src/app/enums/form-data-status';\nimport { SiteAssetRequestApproveStatus } from 'src/app/enums/site-asset-request-approve-status.enum';\nimport { OnboardingType } from 'src/app/enums/onboarding-type.enum';\nimport { CompanySupplierService } from 'src/app/services/company-supplier.service';\nimport { SiteSupplierAccessViewModel } from 'src/app/models/link_to_company_request_model';\nimport { CompanySupplierModel } from 'src/app/models/supplier-models';\nimport { e168ValidatorNullable } from 'src/app/helpers/mobile-format-validator';\nimport { MessageQueryModel } from 'src/app/models/message-query-model';\nimport { MessageQueryType } from 'src/app/enums/message-query-type.enum';\nimport { UserService } from 'src/app/services/user.service';\nimport { PagingRequest } from 'src/app/models/paging-request-model';\nimport { SiteSupplierRequestModel } from 'src/app/models/supplier-document/site-supplier-doc-type-forms-view-model';\nimport { PaginationInfo } from 'src/app/models/pagination-info';\nimport { BasePagingAndSortingModel } from 'src/app/models/paging_model';\nimport { SortOrder } from 'src/app/enums/sort-order-enum';\n\n@Component({\n selector: 'obc-supplier-documents',\n templateUrl: './supplier-documents.component.html',\n styleUrls: ['./supplier-documents.component.scss']\n})\nexport class SupplierDocumentsComponent implements OnInit {\n inProgress: boolean = false;\n totalCount: number;\n paginationInfo: BasePagingAndSortingModel = {\n pageNumber: 0,\n pageSize: getPageSizeByUrl() ?? 20,\n sortBy: '',\n sortOrder: SortOrder.ASC\n };\n // if site is global\n siteMode: boolean = false;\n SortOrder = SortOrder;\n\n SiteSupplierDocumentStatus = SiteSupplierDocumentStatus;\n pageYOffset: number;\n SelectedSiteSupplierForSupplierLinkOperations: SiteSupplierViewModel;\n selectedAccordionItemId: number;\n supplierDocumentFilter: string\n showMarkdownEditor: boolean;\n emailHistoryRequest: MessageQueryModel;\n modalRef: any;\n @HostListener('window:scroll', ['$event']) onScroll(_) {\n this.pageYOffset = window.pageYOffset;\n }\n\n selectedSiteSupplierDocument: SiteSupplierDocumentTypeViewModel;\n SiteActiveStatus = SiteActiveStatus;\n newForm: boolean = false;\n displayForm: boolean = false;\n siteId: number;\n selectedSiteSupplierId: number;\n selectedSupplierId: number;\n selectedSiteId: number;\n\n selectedSupplierDocumentType: SupplierDocumentTypeViewModel;\n UserPermission = UserPermission;\n ExternalSitePermission = ExternalSitePermission;\n FormDataStatus = FormDataStatus;\n SiteAssetRequestApproveStatus = SiteAssetRequestApproveStatus;\n supplierFormControl = new FormControl();\n supplierDocumentFormControl = new FormControl();\n supplierDocumentStatus: OptionalMandatoryState = OptionalMandatoryState.Optional;\n siteSupplierAccessViewModel: SiteSupplierAccessViewModel\n\n sampleMandatorySiteDocumentState: OptionalMandatoryState = OptionalMandatoryState.Mandatory;\n renameNoneStandardSupplierDocumentTypeFormControl = new FormControl(null, [Validators.required]);\n allSiteSupplierDocumentTypes: SiteSupplierViewModel[] = [];\n hasSupplierReviewForm: boolean;\n selectedSiteSupplierDocumentTypes: SiteSupplierViewModel;\n selectedDocumentTypes: SupplierDocumentTypeViewModel[] = [];\n selectedSites: number[] = [];\n selectedSuppliers: number[] = [];\n selectedSupplierIds: number[] = [];\n\n firstEmail = false;\n email = new FormControl();\n emailSubject = new FormControl();\n emailBody = new FormControl();\n addOffsiteTemplate = new FormControl(true);\n mobile = new FormControl();\n offsiteEmailTemplate = new FormControl();\n\n selectedFormDataId: number;\n bsModalRef: BsModalRef;\n siteSupplierToEditExternalSitePermissions: SiteSupplierViewModel;\n\n OnboardingType = OnboardingType\n onboardingFormControl: FormControl\n\n bsModalHandle: any;\n updateSupplierFormGroup: FormGroup;\n generalSearcControl = new FormControl();\n\n @ViewChild('supplierSelector') supplierSelector;\n @ViewChild('supplierDocumentSelector') supplierDocumentSelector;\n\n\n constructor(\n private route: ActivatedRoute,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private supplierDocumentService: SupplierDocumentService,\n private layoutService: LayoutService,\n private router: Router,\n private companySupplierService: CompanySupplierService,\n private userService: UserService,\n ) {\n this.onboardingFormControl = new FormControl();\n this.onboardingFormControl.setValue(OnboardingType.Quick);\n this.onboardingFormControl.valueChanges.subscribe(res => {\n let emailInfo = res == OnboardingType.Full ?\n this.SelectedSiteSupplierForSupplierLinkOperations.fullOnboardingEmailInfoViewModel :\n this.SelectedSiteSupplierForSupplierLinkOperations.quickOnboardingEmailInfoViewModel;\n\n this.emailBody.setValue(emailInfo.body);\n this.emailSubject.setValue(emailInfo.subject);\n\n this.resetMarkdownEditor();\n })\n\n this.updateSupplierFormGroup = new FormGroup({\n id: new FormControl(null, []),\n name: new FormControl(null, [Validators.required]),\n email: new FormControl(null, [Validators.email]),\n mobile: new FormControl(null, [e168ValidatorNullable]),\n });\n }\n\n ngOnInit(): void {\n this.generalSearcControl.valueChanges.pipe(\n debounceTime(500),\n ).subscribe((searchTerm) => {\n this.supplierDocumentFilter = searchTerm;\n if (searchTerm == '' || (searchTerm != null && searchTerm.length >= 2)) {\n this.paginationInfo.pageNumber = 0;\n this._calSiteSupplierDocumentTypes();\n }\n });\n\n this.layoutService.header = \"Assign Document Type to Supplier\"\n this.supplierFormControl.valueChanges.subscribe(_ => {\n if (!this.siteMode) {\n this.resetSearchTermValue();\n this._calSiteSupplierDocumentTypes();\n }\n });\n\n this.route.params.subscribe((params: Params) => {\n const supplierId = params['supplierId'] ? +params['supplierId'] : null;\n if (params['siteId']) {\n this.siteMode = true;\n this.changeSiteId(+params['siteId']);\n }\n\n if (supplierId && supplierId > 0) {\n this.supplierFormControl.setValue(supplierId);\n }\n });\n //To handle backdrop-click\n // this.bsModalService.onHide.subscribe((_) => {\n // this.refresh();\n // });\n\n // this.bsModalRef.content.onClose.subscribe((_) => {\n // this.refresh();\n // });\n }\n\n toggleSort() {\n if (this.paginationInfo.sortOrder == null)\n this.paginationInfo.sortOrder = SortOrder.ASC;\n else if (this.paginationInfo.sortOrder == SortOrder.ASC) this.paginationInfo.sortOrder = SortOrder.DESC;\n else if (this.paginationInfo.sortOrder == SortOrder.DESC) this.paginationInfo.sortOrder = null;\n this.paginationInfo.pageNumber = 0;\n this._calSiteSupplierDocumentTypes();\n }\n\n changeSiteId(value) {\n if (this.siteId != value) {\n this.siteId = value;\n this.resetSearchTermValue();\n this._calSiteSupplierDocumentTypes();\n }\n }\n\n resetSearchTermValue() {\n this.generalSearcControl.setValue('', { emitEvent: false });\n this.supplierDocumentFilter = '';\n }\n\n onSelectSiteOrSupplier(id) {\n\n if (!this.siteMode)\n this.siteId = id;\n\n let foundItem = this.allSiteSupplierDocumentTypes.find(item => item?.siteId == this.siteId && item?.supplierId == this.supplierFormControl.value);\n if (foundItem) {\n this._loadItem(foundItem);\n } else {\n this.selectedSiteSupplierDocumentTypes = null;\n this.selectedDocumentTypes = [];\n // this.supplierDocumentSelector?.updateSelector(this.selectedDocumentTypes);\n }\n }\n\n onSelectSupplierDocumentType(documentType) {\n this.selectedSupplierDocumentType = documentType;\n }\n\n forceToResetValues = new BehaviorSubject(true);\n\n removeSiteSupplierDocumentType(ss: SiteSupplierViewModel, ssdt: SiteSupplierDocumentTypeViewModel,) {\n\n const index = ss.siteSupplierDocumentTypes.indexOf(ssdt);\n if (index > -1) {\n ss.siteSupplierDocumentTypes.splice(index, 1);\n }\n\n this.forceToResetValues.next(false);\n\n this.selectedDocumentTypes = ss.siteSupplierDocumentTypes.filter(x => {\n return x.supplierDocumentTypeId;\n }).map(x => {\n return { id: x.supplierDocumentTypeId, name: x.supplierDocumentTypeName } as SupplierDocumentTypeViewModel\n })\n\n setTimeout(() => {\n this.forceToResetValues.next(true);\n }, 100)\n }\n\n documentTypeStatusChanged(value, item?: SiteSupplierDocumentTypeViewModel) {\n if (item) {\n item.mode = value ? OptionalMandatoryState.Mandatory : OptionalMandatoryState.Optional;\n } else {\n this.supplierDocumentStatus = value ? OptionalMandatoryState.Mandatory : OptionalMandatoryState.Optional;\n }\n }\n\n onAssignDocumentTypeToSupplier() {\n let selectedSupplierDocumentType = this.selectedSupplierDocumentType;\n let newItem = {\n supplierDocumentTypeId: selectedSupplierDocumentType.id,\n supplierDocumentTypeName: selectedSupplierDocumentType.name,\n mode: this.supplierDocumentStatus\n } as SiteSupplierDocumentTypeViewModel;\n\n this.selectedSiteSupplierDocumentTypes = this.selectedSiteSupplierDocumentTypes || {\n siteId: this.siteId,\n supplierId: this.supplierFormControl.value,\n siteSupplierDocumentTypes: []\n } as SiteSupplierViewModel;\n\n let foundItem = this.selectedSiteSupplierDocumentTypes.siteSupplierDocumentTypes.find(item => item?.supplierDocumentTypeId == selectedSupplierDocumentType.id);\n if (foundItem) {\n this.selectedSiteSupplierDocumentTypes.siteSupplierDocumentTypes = this.selectedSiteSupplierDocumentTypes.siteSupplierDocumentTypes.map(\n function (item) {\n return item.supplierDocumentTypeId == selectedSupplierDocumentType.id ? newItem : item;\n });\n } else {\n this.selectedSiteSupplierDocumentTypes.siteSupplierDocumentTypes.push(newItem);\n }\n\n this.selectedDocumentTypes = [...this.selectedDocumentTypes, selectedSupplierDocumentType];\n }\n\n onSaveSDT() {\n let siteId = this.siteId;\n let supplierId = this.supplierFormControl.value;\n\n if (!(siteId && supplierId)) {\n this._clearForm();\n return;\n }\n\n let dataToServer = {\n siteId: siteId,\n supplierId: supplierId,\n supplierDocumentTypes: this.selectedSiteSupplierDocumentTypes?.siteSupplierDocumentTypes\n } as SiteSupplierDocumentTypeModel;\n\n let foundItem = this.allSiteSupplierDocumentTypes.find(item => item?.siteId == siteId && item?.supplierId == supplierId);\n if (foundItem) {\n let result = this.supplierDocumentService.editSiteSupplierDocumentTypes(this.selectedSiteSupplierId, dataToServer);\n result.subscribe(_ => {\n this._calSiteSupplierDocumentTypes();\n this.closeNewSiteSupplierModal();\n }, err => {\n this.modalService.error(err, \"Unable to edit\");\n })\n } else {\n let result = this.supplierDocumentService.addSiteSupplierDocumentTypes(dataToServer);\n result.subscribe(_ => {\n this._calSiteSupplierDocumentTypes();\n this.closeNewSiteSupplierModal();\n }, err => {\n this.modalService.error(err, \"Unable to add\");\n })\n }\n\n this._clearForm();\n }\n\n async onSiteSupplierStatusChange(value: boolean, item: SiteSupplierViewModel) {\n let modalResult = true;\n if (value === false) {\n modalResult = await this.modalService.confirm(`Are you sure you want to remove ${!this.siteMode ? 'site' : 'supplier'} for this ${!this.siteMode ? 'supplier' : 'site'}?`, `Remove ${item.supplierName}`).toPromise();\n }\n if (modalResult) {\n let result = this.supplierDocumentService.editSiteSupplierDocumentTypeEnableStatus(item.siteSupplierId, value);\n result.subscribe(res => {\n if (res.success)\n this._calSiteSupplierDocumentTypes();\n else\n this.modalService.error(res.message);\n this.bsModalHandle.hide();\n }, err => {\n this.modalService.error(err, \"Unable to remove this item\");\n });\n }\n }\n\n onRemoveSDT(item: SiteSupplierViewModel) {\n this.modalService.confirm(\"Are You Sure?\", `Delete ${item.supplierName}`).subscribe(result => {\n if (result) {\n if (item.siteSupplierId === this.selectedSiteSupplierId)\n this.selectedSiteSupplierId = null;\n\n let result = this.supplierDocumentService.removeSiteSupplierDocumentTypes(item.siteSupplierId);\n result.subscribe(res => {\n if (res.success) {\n this.paginationInfo.pageNumber = 0;\n this._calSiteSupplierDocumentTypes();\n }\n else\n this.modalService.error(res.message);\n }, err => {\n this.modalService.error(err, \"Unable to delete this item\");\n });\n }\n })\n }\n\n onEditSDT(item: SiteSupplierViewModel) {\n this.siteId = item.siteId;\n this._loadItem(item);\n }\n\n currentLink = null;\n refViewHashLink: any;\n\n onViewHashLink(item: SiteSupplierViewModel, template: any) {\n this.SelectedSiteSupplierForSupplierLinkOperations = item;\n this.currentLink = item.supplierHashLink;\n let email = item.lastEmailAddress;\n if (!email?.length)\n email = item.supplierEmailAddress;\n this.email.setValue(email);\n this.emailBody.setValue(item.supplierEmailBody);\n this.emailSubject.setValue(item.supplierEmailSubject);\n this.addOffsiteTemplate.setValue(item.isOffsiteEnabled);\n this.refViewHashLink = this.bsModalService.show(template, { class: 'modal-lg' });\n this.firstEmail = item.lastEmailAddress?.length > 0;\n this.onboardingFormControl.setValue(item.onboardingType ?? OnboardingType.Quick);\n this.mobile.setValue(item.mobile);\n this.offsiteEmailTemplate.setValue(item.offsiteEmailTemplate);\n }\n\n\n _clearForm() {\n this.displayForm = false;\n this.newForm = false;\n if (this.siteMode)\n this.supplierFormControl.setValue(null);\n else\n this.siteId = null;\n this.selectedSiteSupplierDocumentTypes = null;\n this.selectedSiteSupplierId = null;\n this.selectedDocumentTypes = [];\n }\n newSiteSuplierModalRef: any;\n _openNewForm(template: any) {\n this._clearForm();\n // this.displayForm = true;\n // this.newForm = true;\n if (this.siteMode)\n this.supplierFormControl.setValue(null);\n else\n this.siteId = null;\n\n this.newSiteSuplierModalRef = this.modalService.show(template);\n }\n\n closeNewSiteSupplierModal() {\n this._clearForm();\n this.modalService.hide();\n }\n\n _loadItem(item: SiteSupplierViewModel) {\n if (this.siteMode) {\n this.supplierFormControl.setValue(item.supplierId)\n }\n\n this.selectedDocumentTypes = [];\n let tmpItem: SiteSupplierViewModel = JSON.parse(JSON.stringify(item))\n this.displayForm = true;\n this.newForm = false;\n this.scrollToTop();\n this.selectedSiteSupplierId = tmpItem.siteSupplierId;\n this.selectedSiteSupplierDocumentTypes = tmpItem;\n tmpItem.siteSupplierDocumentTypes.map((item) => this.selectedDocumentTypes.push(\n { id: item.supplierDocumentTypeId, name: item.supplierDocumentTypeName } as SupplierDocumentTypeViewModel))\n this.newForm = false;\n this.selectedDocumentTypes = [...this.selectedDocumentTypes];\n // this.supplierDocumentSelector?.updateSelector(this.selectedDocumentTypes);\n }\n\n _calSiteSupplierDocumentTypes() {\n if (this.inProgress)\n return;\n this.inProgress = true;\n this.paginationInfo.sortBy = this.siteMode ? 'supplier' : 'site';\n\n let request = {\n pagingInfo: this.paginationInfo,\n query:\n {\n siteId: this.siteMode ? this.siteId : null,\n supplierId: this.siteMode ? null : this.supplierFormControl?.value,\n supplierSearchTerm: this.siteMode ? this.supplierDocumentFilter : null,\n siteSearchTerm: this.siteMode ? null : this.supplierDocumentFilter,\n }\n } as PagingRequest;\n (this.siteMode ?\n this.supplierDocumentService.getSiteSupplierDocumentTypesBySiteWithStatistics(request) :\n this.supplierDocumentService.getSiteSupplierDocumentTypes(request))\n .subscribe(res => {\n this.inProgress = false;\n if (res != null && res) {\n this.totalCount = res.totalCount;\n\n this.hasSupplierReviewForm = res.info.hasSupplierReviewForm;\n this.allSiteSupplierDocumentTypes = res.data ?? [];\n this.allSiteSupplierDocumentTypes.map((item) => item.siteSupplierDocumentTypes.sort((a, b) => (a.mode < b.mode) ? 1 : -1))\n this.selectedSupplierIds = res.data?.map(item => item.supplierId);\n this._clearForm();\n this.selectedSites = this.allSiteSupplierDocumentTypes.map((item) => item.siteId);\n } else {\n this.allSiteSupplierDocumentTypes = [];\n this.hasSupplierReviewForm = false;\n this._clearForm();\n }\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, \"Unable to get information\");\n }, () => {\n this.inProgress = false;\n });\n }\n\n onPagingUpdate(pagingInfo: PaginationInfo) {\n this.paginationInfo.pageNumber = pagingInfo.pageNumber;\n this.paginationInfo.pageSize = pagingInfo.pageSize;\n this._calSiteSupplierDocumentTypes();\n }\n\n scrollToTop() {\n window.scrollTo(0, 0)\n }\n onEmailBodyChanged(value, emailBodyType: string) {\n if (emailBodyType == 'emailBodyRichBox')\n this.emailBody.setValue(value);\n if (emailBodyType == 'offsiteEmailBodyRichBox')\n this.offsiteEmailTemplate.setValue(this.addOffsiteTemplate.value ? value : '');\n }\n\n onIncludeOffsiteInductionChange(value) {\n if (value.currentTarget.checked)\n this.offsiteEmailTemplate.setValue(this.SelectedSiteSupplierForSupplierLinkOperations.offsiteEmailTemplate);\n else\n this.offsiteEmailTemplate.setValue(\"\");\n }\n\n resetMarkdownEditor() {\n this.showMarkdownEditor = false;\n setTimeout(() => {\n this.showMarkdownEditor = true;\n }, 100);\n }\n\n onSendEmail() {\n if (!this.SelectedSiteSupplierForSupplierLinkOperations?.siteSupplierId)\n return;\n if (!this.email?.value) {\n this.modalService.error(\"Please enter supplier email address!\");\n return;\n }\n if (this.emailBody?.value.length > this.userService.editorMaxLength.value) {\n this.modalService.error('Text field length exceeded the maximum limit. Please reduce the length of your input and try again.');\n return;\n }\n this.supplierDocumentService.sendEmail({\n toEmailAddress: this.email?.value,\n supplierLinkBody: this.emailBody?.value,\n supplierLinkSubject: this.emailSubject?.value,\n siteSupplierId: this.SelectedSiteSupplierForSupplierLinkOperations?.siteSupplierId,\n onboardingType: this.onboardingFormControl.value,\n mobile: this.mobile?.value,\n addOffsiteTemplate: this.addOffsiteTemplate.value,\n siteId: this.SelectedSiteSupplierForSupplierLinkOperations.siteId,\n companySupplierId: this.SelectedSiteSupplierForSupplierLinkOperations.supplierId,\n offsiteTemplateBody: this.addOffsiteTemplate.value ? this.offsiteEmailTemplate.value : ''\n } as SiteSupplierHashLinkModel)\n .subscribe(_ => {\n this._calSiteSupplierDocumentTypes();\n this.refViewHashLink.hide();\n }, err => {\n this.modalService.error(err, \"Unable to send email\");\n });\n }\n\n onApproveDeclineSiteSupplierVersion(isApprove: boolean, documentType: SiteSupplierDocumentTypeViewModel) {\n if (!documentType)\n return;\n this.supplierDocumentService.approveDeclineSiteSupplierVersion({\n isApproved: isApprove,\n siteSupplierDocumentVersionId: documentType.lastSupplierVersionId\n } as ApproveDeclineSiteSupplierDocumentVersion)\n .subscribe(_ => {\n this._calSiteSupplierDocumentTypes();\n }, err => {\n this.modalService.error(err, \"Unable to change status\");\n });\n }\n\n isInViewMode(item: SiteSupplierViewModel) {\n return !(item && this.siteId == item.siteId && this.supplierFormControl.value == item.supplierId)\n }\n\n isPending(item: SiteSupplierDocumentTypeViewModel) {\n return item.status == SiteSupplierDocumentStatus.Pending;\n }\n\n isDocumentTypeIsVisible(index, docType: SiteSupplierDocumentTypeViewModel, siteSupplier: SiteSupplierViewModel) {\n return (docType.status == SiteSupplierDocumentStatus.Pending || (index < 5)) || (siteSupplier != null && siteSupplier._showAll);\n }\n\n hasHiddenItems(siteSupplier: SiteSupplierViewModel): boolean {\n let ret = false;\n for (let index = 0; index < siteSupplier.siteSupplierDocumentTypes?.length; index++) {\n const element = siteSupplier.siteSupplierDocumentTypes[index];\n ret = !this.isDocumentTypeIsVisible(index, element, null);\n if (ret == true)\n return true;\n }\n return ret;\n }\n\n isDocumentTypeIsVisibleInEditMode(index, docType: SiteSupplierDocumentTypeViewModel, siteSupplier: SiteSupplierViewModel) {\n return (!docType.id || (index < 5)) || (siteSupplier != null && siteSupplier._showAll);\n }\n\n hasHiddenItemsInEditMode(siteSupplier: SiteSupplierViewModel): boolean {\n let ret = false;\n for (let index = 0; index < siteSupplier.siteSupplierDocumentTypes?.length; index++) {\n const element = siteSupplier.siteSupplierDocumentTypes[index];\n ret = !this.isDocumentTypeIsVisibleInEditMode(index, element, null);\n if (ret == true)\n return true;\n }\n return ret;\n }\n\n bsModalRefRenameDOT: any = null;\n bsModalRefEditPermission: any;\n selectedSiteSupplierForRename: SiteSupplierViewModel = null;\n selectedSiteSupplierDocumentTypeForRename: SiteSupplierDocumentTypeViewModel = null;\n\n onEditNoneStandardSupplierDocumentType(siteSupplier: SiteSupplierViewModel, docType: SiteSupplierDocumentTypeViewModel, template: any) {\n this.renameNoneStandardSupplierDocumentTypeFormControl.setValue(docType.supplierDocumentTypeName);\n this.selectedSiteSupplierForRename = siteSupplier;\n this.selectedSiteSupplierDocumentTypeForRename = docType;\n this.bsModalRefRenameDOT = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: false,\n })\n }\n\n updateNoneStandardSupplierDocumentType() {\n const model = {\n title: this.renameNoneStandardSupplierDocumentTypeFormControl.value,\n siteSupplierId: this.selectedSiteSupplierForRename.siteSupplierId,\n siteSupplierDocumentTypeId: this.selectedSiteSupplierDocumentTypeForRename.id\n };\n\n this.supplierDocumentService.renameSiteSupplierDocumentType(model)\n .subscribe(_ => {\n this.bsModalRefRenameDOT.hide();\n this._calSiteSupplierDocumentTypes();\n }, err => {\n this.modalService.error(err);\n })\n }\n\n onOpenformReview(template: any, item: SiteSupplierDocumentTypeViewModel, supplierId: number, siteId: number) {\n this.selectedSupplierId = supplierId;\n this.selectedSiteId = siteId;\n this.selectedSiteSupplierDocument = item;\n this.bsModalRef = this.bsModalService.show(template, { class: \"modal-lg\" })\n }\n\n onSupplierDocumentFilterChange() {\n\n }\n refresh() {\n this._calSiteSupplierDocumentTypes();\n this.bsModalRef?.hide();\n }\n\n onViewFilledForm(template: any, formDataId: number) {\n this.selectedFormDataId = formDataId;\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: false,\n })\n }\n\n getSupplierDocumentListCount(item: SiteSupplierViewModel, status: SiteSupplierDocumentStatus = null) {\n const types = item.siteSupplierDocumentTypes;\n return status == null ?\n types.filter(d => d.status != SiteSupplierDocumentStatus.Approved && d.status != SiteSupplierDocumentStatus.Pending && d.status != SiteSupplierDocumentStatus.Declined).length :\n types.filter(d => d.status == status).length;\n }\n getPermitCount(item: SiteSupplierViewModel, status?: FormDataStatus) {\n var countArray = item.permitStatistics.filter(d => status == null || d.status == status).map(d => d.count);\n return countArray.length ? countArray.reduce((a, b) => a + b) : 0;\n }\n\n getAssetCount(item: SiteSupplierViewModel, status?: SiteAssetRequestApproveStatus) {\n let countArray = item.assetStatistics.filter(d => status == null || d.status == status).map(d => d.count);\n return (countArray.length ? countArray.reduce((a, b) => a + b) : 0) +\n (status == SiteAssetRequestApproveStatus.Approved ? (item.assetStatistics.find(d => d.status == SiteAssetRequestApproveStatus.AutoApproved)?.count ?? 0) : 0);\n }\n\n onAccordionClick(selectedItemId: number, isOpen: boolean) {\n if (isOpen == true)\n this.selectedAccordionItemId = selectedItemId;\n }\n\n hasSiteSupplierPermission(permission: any, siteSupplierPermission: ExternalSitePermission) {\n let perm = typeof permission == 'number' ? permission : ExternalSitePermission[permission] as any;\n return (perm & siteSupplierPermission) > 0;\n }\n\n openExternalPermissionModal(template, siteSupplier: SiteSupplierViewModel) {\n this.siteSupplierToEditExternalSitePermissions = clone(siteSupplier);\n this.bsModalRefEditPermission = this.bsModalService.show(template);\n }\n\n updateExternalSitePermissionsValue(permission: ExternalSitePermission, e) {\n let isChecked = e.target.checked;\n this.siteSupplierToEditExternalSitePermissions.externalSitePermissions = isChecked ?\n (this.siteSupplierToEditExternalSitePermissions.externalSitePermissions | permission) :\n (this.siteSupplierToEditExternalSitePermissions.externalSitePermissions & ~permission);\n if ((this.siteSupplierToEditExternalSitePermissions.externalSitePermissions & ExternalSitePermission.ViewActivity) == 0)\n this.siteSupplierToEditExternalSitePermissions.externalSitePermissions = ExternalSitePermission.NoPermission;\n }\n\n updateExternalSitePermissions() {\n this.supplierDocumentService.updateExternalSitePermissions(this.siteSupplierToEditExternalSitePermissions.siteSupplierId, this.siteSupplierToEditExternalSitePermissions.externalSitePermissions)\n .subscribe((res) => {\n this.bsModalRefEditPermission.hide();\n this.refresh();\n });\n }\n getmanageItemsRouteLink(item: SiteSupplierViewModel) {\n return '/manage-site-supplier/' + item.siteSupplierId\n + '/' + item.supplierId + '/' + item.siteId + '/'\n + this.router.url.replace(/^\\/+|\\/+$/g, '').replace(/\\//g, \"_\")\n // trim \"/\" and replace \"-\" with \"_\"\n }\n\n openUpsertModal(template) {\n this.bsModalHandle = this.bsModalService.show(template);\n }\n\n selectedSupplierViewModel: SiteSupplierViewModel;\n onEditSupplier(template: any, supplier: SiteSupplierViewModel) {\n this.updateSupplierFormGroup.controls.id.setValue(supplier.supplierId);\n this.updateSupplierFormGroup.controls.name.setValue(supplier.supplierName);\n this.updateSupplierFormGroup.controls.email.setValue(supplier.supplierEmailAddress);\n this.updateSupplierFormGroup.controls.mobile.setValue(supplier.supplierMobile);\n this.selectedSupplierViewModel = supplier;\n this.openUpsertModal(template);\n }\n updateSupplier() {\n this.inProgress = true;\n var id = +this.updateSupplierFormGroup.controls.id.value;\n this.companySupplierService.updateSupplier(\n id,\n this.getSupplierModel(),\n )\n .subscribe( _ => {\n this.inProgress = false;\n this._calSiteSupplierDocumentTypes();\n this.updateSupplierFormGroup.reset();\n this.bsModalHandle.hide();\n }, _ => {\n this.inProgress = false;\n this.modalService.error(\"unable to update supplier\");\n });\n }\n private getSupplierModel(): CompanySupplierModel {\n return {\n name: this.updateSupplierFormGroup.controls.name.value,\n email: this.updateSupplierFormGroup.controls.email.value,\n mobile: this.updateSupplierFormGroup.controls.mobile.value,\n } as CompanySupplierModel;\n }\n\n showEmailHistory(supplier: any, template: any) {\n this.emailHistoryRequest = {\n companyId: this.userService.currentCompanyId,\n siteId: supplier.siteId,\n supplierId: supplier.supplierId,\n type: MessageQueryType.OnboardingEmailHistory,\n } as MessageQueryModel;\n this.modalRef = this.bsModalService.show(template, { class: 'modal-lg' });\n }\n}\n","export enum SiteSupplierAccessMode {\n Invalid = 0,\n SiteHost = 1,\n SupplierHost = 2,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormDataStatus } from \"../enums/form-data-status\";\n\n@Pipe({\n name: 'filledFormStatus'\n})\nexport class FilledFormStatusPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): unknown {\n if (value === FormDataStatus.NotRequired) return \"Not Required\";\n if (value === FormDataStatus.Approved) return \"Approved\";\n if (value === FormDataStatus.PendingApproval) return \"Pending Approval\";\n if (value === FormDataStatus.Rejected) return \"Rejected\";\n return value?.toString();\n }\n\n}\n","
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n\n 0\">\n \n \n \n \n \n \n \n \n \n\n \n\n \n \n \n \n \n
      \n Name\n \n Status\n \n Start Date\n \n End Date\n
      \n \n \n \n {{ item.name }}\n \n {{ item.filledFormStatus | filledFormStatus }}\n \n {{ item.startDate | date }}\n \n {{ item.endDate | date }}\n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n
        \n
        \n \n \n
        \n
      \n
      \n
      \n
      \n\n\n
      \n
        \n \n \n
      \n
      \n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { ModalService } from \"../../services/modal.service\";\nimport { UserService } from \"../../services/user.service\";\nimport { finalize } from \"rxjs/operators\";\nimport { FormType } from \"../../enums/form-type\";\nimport { SupplierPermitsService } from \"../../services/supplier-permits.service\";\nimport { PermitsInfo, PermitViewModel } from \"../../models/form/permits-info-model\";\nimport { FormDataStatus } from \"../../enums/form-data-status\";\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'obc-anonymous-permit',\n templateUrl: './anonymous-permit.component.html',\n styleUrls: ['./anonymous-permit.component.scss']\n})\nexport class AnonymousPermitComponent implements OnInit {\n\n @Input() siteSupplierId: number;\n @Input() siteId: number;\n @Input() siteSupplierHashLink: string;\n\n inProgress = false;\n permitsInfo: PermitsInfo;\n permitsList: PermitViewModel[] = [];\n selectedFormDataId: number;\n FormDataStatus = FormDataStatus;\n FormType = FormType;\n modalRef: any;\n\n constructor(public supplierPermitService: SupplierPermitsService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n public userService: UserService,\n ) {\n }\n\n get isSupplierUser() {\n return this.siteSupplierHashLink?.length > 0;\n }\n\n ngOnInit() {\n this.fetchPermitList();\n }\n fetchPermitList() {\n this.inProgress = true;\n let siteSupplierId = this.siteSupplierHashLink ? null : this.siteSupplierId;\n this.supplierPermitService.getPermitList(this.siteSupplierHashLink, siteSupplierId)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res) {\n this.permitsInfo = res.permitsInfo;\n this.permitsList = [...this.permitsInfo.permits, ...this.permitsInfo.pendingPermits];\n } else\n this.modalService.error('Error in fetching permit forms')\n }, err => {\n this.modalService.error(err)\n })\n }\n\n onApplyNewPermit(template: any) {\n this.modalService.show(template, \"modal-lg\")\n }\n\n onHidePopup() {\n this.modalService.hide();\n }\n\n onViewFormDetails(template, formDataId: number) {\n this.selectedFormDataId = formDataId;\n this.modalRef = this.bsModalService.show(template, { class: \"modal-lg\" });\n }\n\n onApproveOrRejectPermit() {\n this.fetchPermitList();\n this.modalRef.hide();\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'obc-temporarily-asset-icon',\n templateUrl: './temporarily-asset-icon.component.html',\n styleUrls: ['./temporarily-asset-icon.component.scss']\n})\nexport class TemporarilyAssetIconComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","Short Term\n","\n \n\n
      \n
      \n
      \n \n
      \n
      \n
      {{isCheckinRequested == true ? 'Check-in':'Check-out'}} Asset
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n \n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { finalize } from 'rxjs/operators';\nimport { SiteAssetCheckInOutModel } from 'src/app/models/site-asset/site-asset-check-in-out-model';\nimport { BaseSiteViewModel } from 'src/app/models/site-viewmodel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\nimport { InventoryLocationSelectorModel } from '../../../models/inventory/inventory-location-selector-model';\nimport { SiteAssetViewModel } from \"../../../models/site-asset/site-asset-view-model\";\n\n@Component({\n selector: 'obc-site-asset-check-in-out',\n templateUrl: './site-asset-check-in-out.component.html',\n styleUrls: ['./site-asset-check-in-out.component.scss'],\n})\nexport class SiteAssetCheckInOutComponent implements OnInit {\n @Input() isCheckinRequested: boolean;\n @Input() selectedSiteAsset: SiteAssetViewModel;\n @Input() selectedSite: BaseSiteViewModel;\n @Input() externalSiteSupplierId: number;\n @Input() displayAsApproveRejectButton: boolean = true;\n\n @Output() hide = new EventEmitter();\n @Output() onRefresh = new EventEmitter();\n\n inProgress: boolean = false;\n isUpdateLocationRequested: boolean = false;\n newLocation: string;\n toLocationId: number;\n\n constructor(\n private siteAssetService: SiteAssetService,\n private modalService: ModalService,\n private toastrService: ToastrService,\n ) {\n }\n\n ngOnInit(): void {\n }\n\n get isFormValid(): boolean {\n return (\n this.isUpdateLocationRequested == false ||\n this.toLocationId > 0 ||\n (this.newLocation != null && this.newLocation?.trim() != '')\n );\n }\n\n onActiveChanged(value) {\n this.isUpdateLocationRequested = value;\n if (this.isUpdateLocationRequested == false) {\n this.toLocationId = null;\n this.newLocation = null;\n }\n }\n\n onLocationChange($event: InventoryLocationSelectorModel) {\n this.toLocationId = $event?.selectedLocation?.id;\n this.newLocation = null;\n }\n\n onAddNewLocation(newLocation: InventoryLocationSelectorModel) {\n this.toLocationId = null;\n this.newLocation = newLocation?.newLocationTitle;\n }\n\n submit() {\n if (this.selectedSiteAsset.isTemporarilyAsset) {\n this.modalService.confirm(`Are you sure you want to ${this.isCheckinRequested ? 'check in' : 'check out'}?`, 'Confirm').subscribe(result => {\n if (result) {\n this.submitConfirmed();\n }\n })\n } else\n this.submitConfirmed();\n }\n\n submitConfirmed() {\n this.inProgress = true;\n\n let model =\n this.isUpdateLocationRequested == true\n ? ({\n toLocationId: this.toLocationId,\n newLocation: this.newLocation,\n } as SiteAssetCheckInOutModel)\n : null;\n\n var request = this.isCheckinRequested\n ? this.siteAssetService.checkInAsset(this.selectedSiteAsset.siteAssetId, model)\n : this.siteAssetService.checkOutAsset(this.selectedSiteAsset.siteAssetId, model);\n\n request\n .pipe(\n finalize(() => {\n this.inProgress = false;\n })\n )\n .subscribe(\n (res) => {\n if (res) {\n this.toastrService.success(\n this.isCheckinRequested == true\n ? 'The Asset checked in successfully'\n : 'The Asset checked out successfully'\n );\n } else {\n this.toastrService.error(\n `The asset is already checked ${this.isCheckinRequested == true ? 'in' : 'out'\n }!`\n );\n }\n this.onRefresh.emit();\n if (res) this.hide.emit();\n },\n (err) => {\n this.modalService.error(err ?? 'Request Failed!');\n }\n );\n }\n}\n\n","export enum RegisterAssetMode {\n SelectAsset,\n CreateAsset,\n CreateTemporarilyAsset\n}\n\nexport enum RegisterAssetAsType {\n Company,\n CompanySupplier\n}\n","
      \n \n \n {{item.title}}\n \n \n
      ","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { GlobalViewModel } from 'src/app/models/global-viewmodel';\nimport { SearchAssetToRegisterModel, SearchToolsQueryModel } from 'src/app/models/inventory/search-tools-query-model';\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\n\n\n@Component({\n selector: 'obc-asset-selector',\n templateUrl: './asset-selector.component.html',\n styleUrls: ['./asset-selector.component.scss']\n})\nexport class AssetSelectorComponent implements OnInit {\n @Input() maxItems = 10;\n\n _required = false;\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl.setValidators(Validators.required);\n }\n };\n\n @Input() siteId: number;\n @Input() excludeList: number[] = [];\n @Input() notSelectedSiteLabel: string = null;\n\n // input & outputs {\n @Output() onLoadAssets = new EventEmitter();\n @Output() assetSelect = new EventEmitter();\n @Output() assetIdSelect = new EventEmitter();\n public selectedAsset = new BehaviorSubject(null);\n\n _assetId: number = null;\n @Input() set assetId(value: number) {\n if (!value) return;\n this._assetId = value;\n this.formControl.setValue(value);\n };\n\n\n assets: GlobalViewModel[];\n siteGroups: any[];\n\n constructor(private siteAssetService: SiteAssetService) { }\n\n\n formControl = new FormControl(null, [Validators.required]);\n loading: boolean = false;\n assets$: Observable;\n term$ = new BehaviorSubject(null)\n\n ngOnInit() {\n this.formControl.valueChanges.subscribe(res => {\n if (this.assets) {\n if (res == null || res == 0) {\n this.assetSelect.emit(null);\n this.assetIdSelect.emit(null);\n this.selectedAsset.next(null);\n } else {\n var site = this.assets.find(x => x.id == res);\n if (site == null) {\n } else {\n this.assetSelect.emit(site);\n this.selectedAsset.next(site);\n this.assetIdSelect.emit(site.id);\n }\n }\n }\n });\n\n setTimeout(() => {\n this.getAssetList();\n }, 250)\n }\n\n getAssetList() {\n this.loading = true;\n let model = {\n searchTerm: '',\n siteId: this.siteId,\n } as SearchAssetToRegisterModel;\n this.siteAssetService.searchToolsToRegister(model)\n .pipe(finalize(() => this.loading = false))\n .subscribe(res => {\n this.setReponse(res);\n this.onLoadAssets?.emit(res);\n })\n }\n\n private filterExcludes(res: GlobalViewModel[]) {\n let that = this;\n return res.filter(function (el) {\n return that.excludeList.filter(function (selected_el) {\n return selected_el == el.id;\n }).length == 0\n });\n }\n\n private setReponse(res: GlobalViewModel[]) {\n this.assets = this.filterExcludes(res);\n\n if (this.selectedAsset.value == null) {\n var asset = this.assets.find(x => x.id == this.formControl.value);\n if (asset) {\n this.selectedAsset.next(asset);\n }\n }\n\n this.assets$ = of(this.getNthItems(this.assets, this.maxItems));\n this.term$.subscribe(term => {\n term = term ?? '';\n if (this.reachToEndTerm != term) {\n let model = {\n searchTerm: term,\n siteId: this.siteId,\n } as SearchAssetToRegisterModel\n this.siteAssetService.searchToolsToRegister(model)\n .subscribe(filteredSites => {\n this.reachToEndTerm == term;\n this.assets = this.filterExcludes(filteredSites);\n this.reachToEnd = false;\n this.assets$ = of(this.getNthItems(this.assets, this.maxItems));\n this.onLoadAssets?.emit(filteredSites);\n });\n }\n else {\n this.assets$ = of(this.getNthItems(this.assets, this.reachToEnd ? this.assets.length : this.maxItems))\n }\n });\n }\n\n getNthItems(array: GlobalViewModel[], n: number): GlobalViewModel[] {\n if (!array || array.length == 0 || n <= 0) return [];\n var max = Math.min(array.length, n);\n var arr = [];\n for (var i = 0; i < max; i++)\n arr.push(array[i]);\n if (this.selectedAsset.value && !arr.find(x => x.id == this.selectedAsset.value.id))\n arr.push(this.selectedAsset.value);\n return arr;\n }\n\n getSiteLabel(asset: GlobalViewModel) {\n return asset.title;\n }\n\n searchAssets(term: string) {\n return this.assets.filter((item) => {\n return this.isMatched(term, item);\n });\n }\n\n clearInput() {\n this.formControl.setValue(null);\n }\n\n isMatched(term: string, item: GlobalViewModel): boolean {\n if (!term) return true;\n term = term.toLowerCase();\n return (item.title && item.title.toLowerCase().indexOf(term) > -1);\n }\n\n reset() {\n this.formControl.reset();\n this.assets = [];\n }\n\n reachToEnd = false;\n reachToEndTerm = \"\";\n onScrollToEnd() {\n this.reachToEnd = true;\n this.reachToEndTerm = this.term$.value;\n this.term$.next(this.term$.value)\n }\n\n}\n","
      \n
      \n
      \n \n
      \n
      \n
      Register Asset
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n
      \n \n \n
      \n
      \n
      \n\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      ","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { AssetOperatorMode } from 'src/app/enums/asset-operator-mode.enum';\nimport { ManageSiteAssetMode } from 'src/app/enums/manage-site-asset-mode.enum';\nimport { RegisterAssetAsType, RegisterAssetMode } from 'src/app/enums/register-asset-mode.enum';\nimport { GeneralAnswerModel, UniqueGeneralAnswerModel } from 'src/app/models/form/general-answer-model';\nimport { TemporarilyToolModel, ToolModel } from 'src/app/models/inventory/tool-view-model';\nimport { SiteAssetRegistrationModel } from 'src/app/models/site-asset/site-asset-registration-model';\nimport { BaseSiteViewModel } from 'src/app/models/site-viewmodel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\nimport { FormType } from '../../../enums/form-type';\nimport { FormViewModel } from '../../../models/form/form-view-model';\nimport { FormDataRendererComponent } from '../../form-manage/form-data-renderer/form-data-renderer.component';\nimport { UpsertInventoryAssetComponent } from '../../inventory/upsert-inventory-asset/upsert-inventory-asset.component';\nimport { SiteSupplierInfoFull } from 'src/app/models/supplier-document/site-supplier-info';\nimport { UserService } from 'src/app/services/user.service';\nimport { SupplierDocumentService } from 'src/app/services/supplier-document.service';\n\n@Component({\n selector: 'obc-register-site-asset',\n templateUrl: './register-site-asset.component.html',\n styleUrls: ['./register-site-asset.component.scss']\n})\n\nexport class RegisterSiteAssetComponent implements OnInit {\n\n RegisterAssetAsType = RegisterAssetAsType;\n registerAssetAs: RegisterAssetAsType = RegisterAssetAsType.Company;\n siteSuppliers: SiteSupplierInfoFull[] = [];\n selectedSupplier: SiteSupplierInfoFull = null;\n\n\n\n RegisterAssetMode = RegisterAssetMode;\n registerAssetMode: RegisterAssetMode = RegisterAssetMode.SelectAsset;\n formType = FormType;\n assetRegistrationForms: FormViewModel[];\n selectedForm: FormViewModel = null;\n inProgress: boolean;\n isFormValid: boolean;\n\n @Input() supplierId: number;\n @Input() site: BaseSiteViewModel;\n @Input() siteCompanyTitle: string;\n @Input() siteCompanyId: number;\n @Input() manageSiteAssetMode: ManageSiteAssetMode = ManageSiteAssetMode.MainCompany;\n @Input() externalSiteSupplierId: number;\n @Input() supplierHashLink: string;\n @Input() modalReference;\n @Input() mainCompanyId?: number = null;\n enableTempAssets = false;\n\n _onlyTempAssets: boolean = false;\n initialAnswers: UniqueGeneralAnswerModel[];\n @Input() set onlyTempAssets(value: boolean) {\n this._onlyTempAssets = value;\n if (this._onlyTempAssets == true)\n this.registerAssetMode = RegisterAssetMode.CreateTemporarilyAsset;\n }\n get onlyTempAssets() {\n return this._onlyTempAssets;\n }\n\n @Output() onSubmitSiteAsset = new EventEmitter();\n @ViewChild(\"formDataRenderer\") public formDataRenderer: FormDataRendererComponent;\n @ViewChild('insertAssetRenderer') public insertAssetRenderer: UpsertInventoryAssetComponent;\n @ViewChild('insertTempAssetRenderer') public insertTempAssetRenderer: UpsertInventoryAssetComponent;\n selectedAssetId: number;\n newAsset: ToolModel;\n newTemporarilyAsset: TemporarilyToolModel;\n showRegisterPanel: boolean;\n\n get siteId() {\n return this.site?.id;\n }\n\n get siteName() {\n return this.site?.name;\n }\n\n get CompanyName() {\n return this.userService.companyName;\n }\n\n get activeRegisterAssetAs(): boolean {\n if ((this.site && this.supplierId) || this.supplierHashLink) {\n this.registerAssetAs = RegisterAssetAsType.CompanySupplier;\n return false;\n }\n return true;\n };\n\n get showRegisterAssetAs(): boolean {\n return !(this.supplierHashLink || this.mainCompanyId);\n };\n\n ngOnInit(): void {\n this.enableTempAssets = JSON.parse(JSON.stringify(this.onlyTempAssets));\n if (this._onlyTempAssets == true) {\n this.registerAssetMode = RegisterAssetMode.CreateTemporarilyAsset;\n }\n this.registerAssetAs = RegisterAssetAsType.Company;\n\n this.loadAssetRegistrationForms();\n this.loadSiteSuppliers();\n }\n\n constructor(private siteAssetService: SiteAssetService,\n private modalService: ModalService,\n private supplierDocumentService: SupplierDocumentService,\n private userService: UserService) {\n }\n\n loadAssetRegistrationForms() {\n //if (!this._onlyTempAssets) {\n this.inProgress = true;\n this.siteAssetService.getAssetRegistrationForms(this.siteId, this.supplierHashLink)\n .subscribe(res => {\n this.inProgress = false;\n this.assetRegistrationForms = res.data;\n });\n //}\n }\n\n supplierName: string = \"\";\n loadSiteSuppliers() {\n this.selectedSupplier = null;\n\n if (this.showRegisterAssetAs) {\n this.inProgress = true;\n this.supplierDocumentService.getSiteSuppliersBySiteId(this.siteId)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n if (res.success) {\n this.siteSuppliers = res.data;\n let supplier = this.supplierId ? this.siteSuppliers.find(s => s.supplierId == this.supplierId && s.siteId == this.siteId) : null;\n\n this.selectedSupplier = supplier\n this.supplierName = supplier?.supplierName\n }\n });\n }\n }\n\n registerAssetAsChanged(value: RegisterAssetAsType) {\n this.registerAssetAs = value;\n if (this.registerAssetAs == RegisterAssetAsType.CompanySupplier) {\n this.onlyTempAssets = true;\n this.registerAssetMode = RegisterAssetMode.CreateTemporarilyAsset;\n }\n else {\n this.selectedSupplier = null;\n this.onlyTempAssets = JSON.parse(JSON.stringify(this.enableTempAssets));\n\n if (this.onlyTempAssets)\n this.registerAssetMode = RegisterAssetMode.CreateTemporarilyAsset;\n else\n this.registerAssetMode = RegisterAssetMode.SelectAsset;\n }\n }\n\n onChangeAssetId(selectedAssetid: number) {\n if (this.registerAssetMode == RegisterAssetMode.SelectAsset)\n this.selectedAssetId = selectedAssetid;\n }\n\n onLoadAssetsToRegisterCalled = false;\n onLoadAssetsToRegister(assets: any[]) {\n if (this.onLoadAssetsToRegisterCalled == true) {\n return;\n }\n this.onLoadAssetsToRegisterCalled = true;\n if ((assets?.length ?? 0) == 0) {\n this.registerAssetMode = RegisterAssetMode.CreateAsset;\n }\n }\n\n get isValidAsset(): boolean {\n return ((this.registerAssetMode == RegisterAssetMode.SelectAsset && this.selectedAssetId > 0) ||\n (this.registerAssetMode == RegisterAssetMode.CreateAsset && this.insertAssetRenderer?.isAddFormValid() == true) ||\n (this.registerAssetMode == RegisterAssetMode.CreateTemporarilyAsset && this.insertTempAssetRenderer?.isTempAddFormValid() == true)) &&\n (!this.activeRegisterAssetAs ||\n (\n this.activeRegisterAssetAs && this.showRegisterAssetAs &&\n (\n (this.registerAssetAs == RegisterAssetAsType.CompanySupplier && this.selectedSupplier != null) ||\n (this.registerAssetAs == RegisterAssetAsType.Company && this.selectedSupplier == null)\n )\n )\n );\n }\n\n async onClickNextButton() {\n if (this.isValidAsset == true) {\n if (this.registerAssetMode == RegisterAssetMode.CreateAsset) {\n this.newAsset = await this.insertAssetRenderer?.createQueryModel() as ToolModel;\n this.initialAnswers = this.newAsset?.toolDynamicFieldValues?.filter((element) => element.uniqueKey?.length)\n ?.map((e) => {\n return {\n uniqueKey: e.uniqueKey,\n answer: {\n answer: e.value,\n files: e.value,\n isBase64Answer: true,\n } as GeneralAnswerModel\n } as UniqueGeneralAnswerModel;\n });\n\n this.newTemporarilyAsset = null;\n this.selectedAssetId = null;\n this.showRegisterPanel = true;\n }\n else if (this.registerAssetMode == RegisterAssetMode.CreateTemporarilyAsset) {\n this.siteAssetService.checkSiteTempAssetExistence({\n toolName: this.insertTempAssetRenderer?.formGroup?.controls?.name?.value,\n supplierId: this.selectedSupplier?.supplierId,\n siteId: this.siteId,\n }, this.supplierHashLink)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(async (res) => {\n if (res === true) {\n this.modalService.confirm('Warning: Another asset with the same name is already registered on this site.', '', 'Update Asset name', 'Continue anyway')\n .subscribe(async (res) => {\n if (res === true) {\n this.insertTempAssetRenderer?.assetName?.nativeElement?.focus();\n } else if (res === false) {\n await this.tempAssetShowRegisterPanel();\n }\n });\n } else {\n await this.tempAssetShowRegisterPanel();\n }\n }, err => {\n this.modalService.error(err ? err : 'Check Existence Failed');\n });\n }\n else if (this.registerAssetMode == RegisterAssetMode.SelectAsset) {\n this.newTemporarilyAsset = null;\n this.newAsset = null;\n this.showRegisterPanel = true;\n }\n }\n }\n\n async tempAssetShowRegisterPanel() {\n this.newTemporarilyAsset = await this.insertTempAssetRenderer?.createQueryModel() as TemporarilyToolModel;\n this.newAsset = null;\n this.selectedAssetId = null;\n this.showRegisterPanel = true;\n }\n\n validateForm(formIsValid: boolean) {\n this.isFormValid = formIsValid && this.siteId > 0 &&\n (!this.activeRegisterAssetAs ||\n (\n this.activeRegisterAssetAs && this.showRegisterAssetAs &&\n (\n (this.registerAssetAs == RegisterAssetAsType.CompanySupplier && this.selectedSupplier != null) ||\n (this.registerAssetAs == RegisterAssetAsType.Company && this.selectedSupplier == null)\n )\n )\n );\n }\n\n operatorMode: AssetOperatorMode;\n setOperatorMode(value) {\n this.operatorMode = value;\n }\n\n async registerSiteAsset() {\n if (!this.showRegisterAssetAs)\n this.selectedSupplier = null;\n\n if (this.isFormValid) {\n var formDatamodel = this.formDataRenderer.getFormResponse();\n var model = {\n siteId: this.siteId,\n toolId: this.selectedAssetId,\n newTool: this.newAsset,\n temporarilyTool: this.newTemporarilyAsset,\n operatorRegistrationMode: this.operatorMode,\n formDatamodel: formDatamodel,\n supplierId: this.selectedSupplier?.supplierId\n } as SiteAssetRegistrationModel;\n\n this.inProgress = true;\n\n this.siteAssetService.registerSiteAsset(model, this.supplierHashLink)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.onSubmitSiteAsset.emit(res.data);\n }, err => {\n this.modalService.error(err ? err : 'Request Failed');\n });\n }\n }\n\n closeModal() {\n this.modalReference?.hide();\n }\n}\n","\n
      \n
      \n
      \n
      \n
      \n
      Register Asset Operator
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n Please enter a valid mobile number.\n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      ","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { FormType } from 'src/app/enums/form-type';\nimport { UserAutoCompleteFilterByFields } from 'src/app/enums/user-auto-complete-target-fields';\nimport { mobileIsValid } from 'src/app/helpers/mobile-format-validator';\nimport { SiteAssetOperatorModel, SiteAssetViewModel } from 'src/app/models/site-asset/site-asset-view-model';\nimport { UserBasicInfoModel, UserBasicInfoViewModel } from 'src/app/models/user-basic-info-viewmodel';\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\nimport { FormDataRendererComponent } from '../../form-manage/form-data-renderer/form-data-renderer.component';\nimport { ModalService } from \"../../../services/modal.service\";\n\n@Component({\n selector: 'obc-register-site-asset-operator',\n templateUrl: './register-site-asset-operator.component.html',\n styleUrls: ['./register-site-asset-operator.component.scss']\n})\nexport class RegisterSiteAssetOperatorComponent implements OnInit {\n @Input() selectedSiteAsset: SiteAssetViewModel;\n @Input() siteId: number;\n @Input() supplierId: number;\n @Output() onRegisterOperator = new EventEmitter();\n @Input() modalReference;\n @Input() hashLink: string;\n\n @ViewChild('formDataRenderer') formDataRenderer: FormDataRendererComponent;\n\n inProgress: boolean;\n filterUserBy = UserAutoCompleteFilterByFields;\n selectedUser: UserBasicInfoModel = {};\n formType = FormType;\n isFormValid: boolean;\n operatorFormIsValid: boolean;\n constructor(private siteAssetService: SiteAssetService,\n private modalService: ModalService,) { }\n\n ngOnInit(): void {\n }\n\n get isValidMobile(): boolean {\n return (this.selectedUser.mobile !== undefined && mobileIsValid(this.selectedUser.mobile));\n }\n updateMobile(mobile) {\n this.selectedUser.mobile = mobile;\n this.updateValidState();\n }\n updateFirstName(firstName) {\n this.selectedUser.firstName = firstName;\n this.updateValidState();\n }\n updateLastName(lastName) {\n this.selectedUser.lastName = lastName;\n this.updateValidState();\n }\n\n fillCompanyUser(cUser: UserBasicInfoViewModel) {\n if (cUser.id) this.selectedUser = cUser;\n this.updateValidState();\n }\n validateForm(formIsValid: boolean) {\n this.operatorFormIsValid = formIsValid;\n this.updateValidState();\n }\n updateValidState() {\n this.isFormValid = this.isValidMobile && (this.selectedSiteAsset.assetOperatorFormId == null || this.operatorFormIsValid) && this.selectedSiteAsset?.siteAssetId != null;\n }\n registerOperator() {\n let formData = this.selectedSiteAsset.assetOperatorFormId == null ? null : this.formDataRenderer.getFormResponse();\n let model = {\n siteAssetId: this.selectedSiteAsset.siteAssetId,\n formData: formData,\n firstName: this.selectedUser.firstName,\n lastName: this.selectedUser.lastName,\n mobile: this.selectedUser.mobile,\n } as SiteAssetOperatorModel;\n this.inProgress = true;\n this.siteAssetService.registerAssetOperator(model, this.hashLink)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(_ => {\n this.onRegisterOperator.emit(this.selectedSiteAsset);\n },\n (err) => {\n this.modalService.error(err);\n });\n }\n\n closeModal() {\n this.modalReference?.hide();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SiteSupplierDocumentStatus } from \"../enums/site-supplier-document-status\";\nimport { SiteSupplierDocumentTypeViewModel } from \"../models/supplier-document/site-supplier-document-type-view-model.model\";\n\n@Pipe({\n name: 'supplierDocumentTypeStatusTooltip'\n})\nexport class SupplierDocumentTypeStatusTooltipPipe implements PipeTransform {\n\n transform(value: unknown, ...args: SiteSupplierDocumentTypeViewModel[]): unknown {\n if (value == SiteSupplierDocumentStatus.Unrequested) return 'Unrequested';\n if (value == SiteSupplierDocumentStatus.Requested) return 'Requested';\n if (value == SiteSupplierDocumentStatus.Pending) return 'Pending';\n if (value == SiteSupplierDocumentStatus.Deleted) return 'Deleted';\n if (value == SiteSupplierDocumentStatus.Approved) {\n return 'Approved';\n }\n if (value == SiteSupplierDocumentStatus.Declined) return 'Rejected';\n return 'Pending';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SiteSupplierDocumentStatus } from \"../enums/site-supplier-document-status\";\n\n@Pipe({\n name: 'supplierDocumentTypeStatusIcon'\n})\nexport class SupplierDocumentTypeStatusIconPipe implements PipeTransform {\n\n transform(value: number, ...args: unknown[]): unknown {\n if (value == SiteSupplierDocumentStatus.Unrequested) return 'fa fa-envelope text-muted';\n if (value == SiteSupplierDocumentStatus.Requested) return 'fa fa-envelope text-dark';\n if (value == SiteSupplierDocumentStatus.Pending) return 'fa fa-history text-info';\n if (value == SiteSupplierDocumentStatus.Approved) return 'fa fa-check text-success';\n if (value == SiteSupplierDocumentStatus.Deleted) return 'fa fa-trash-alt text-danger';\n return 'fa fa-times text-danger';\n }\n\n}\n","
      \n
      \n
      {{ formDataDetails?.filledFormInfo?.formName }}
      \n
      \n \n
      \n
      \n
      \n \n \n \n Form\n \n \n \n \n \n \n \n \n
      \n
      \n\n Form\n\n\n\n
      \n
        \n \n
      \n
      \n
      \n\n \n\n\n\n\n
      \n
        \n
      • \n
        \n {{ fld.title }}:\n \n \n {{formDataDetails.formDataSiteAttendanceDetail[fld.key] | datetime }}\n \n {{formDataDetails.formDataSiteAttendanceDetail[fld.key] }}\n {{ formDataDetails.formDataSiteAttendanceDetail[fld.key] | mobile\n }}\n \n
        \n
      • \n
      \n
      \n
      \n\n\n
      \n
      \n \n \n
        \n
      • \n
        \n\n \n\n {{ fld.title }}:\n\n \n \n {{formDataDetails.formDataSupplierReviewDetail[fld.key] | datetime }}\n \n {{formDataDetails.formDataSupplierReviewDetail[fld.key] }}\n {{ formDataDetails.formDataSupplierReviewDetail[fld.key] |\n mobile}}\n \n \n \n {{formDataDetails.formDataSupplierReviewDetail[fld.key] |\n supplierDocumentTypeStatusTooltip }}\n \n \n
        \n
      • \n
      \n
      \n
      \n
      \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormType } from 'src/app/enums/form-type';\nimport { FormDataDetailViewModel } from 'src/app/models/form/form-data-detail-view-model';\nimport { FormService } from 'src/app/services/form.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\nimport { SupplierFormService } from \"../../../services/supplier-form.service\";\n\n@Component({\n selector: 'obc-form-details',\n templateUrl: './form-details.component.html',\n styleUrls: ['./form-details.component.scss']\n})\nexport class FormDetailsComponent implements OnInit {\n @Input() formDataId: number;\n @Input() entityId: number;\n @Input() hashLink: string;\n @Input() formType: FormType;\n @Input() set formData(data: FormDataDetailViewModel) {\n this.formDataDetails = data;\n this.formDataId = this.formDataDetails?.filledFormInfo?.formDataId;\n this.initializeFormData();\n }\n @Output() onRefesh = new EventEmitter();\n\n multipleTabsAvailable: boolean = false;\n inProgress = false;\n formDataDetails: FormDataDetailViewModel;\n siteAttendanceInfoFields: any[];\n supplierReviewInfoFields: any[];\n constructor(private supplierFormService: SupplierFormService, private formService: FormService, private modalService: ModalService, private siteAssetService: SiteAssetService) { }\n\n ngOnInit(): void {\n this.getFormDataDetails()\n }\n\n getFormDataDetails() {\n if (this.hashLink != null || (this.formDataId && this.formDataId > 0)) {\n this.inProgress = true;\n (this.hashLink != null ?\n ((this.formType == FormType.AssetRegistration || this.formType == FormType.AssetOperator) ?\n this.siteAssetService.getAnonymousFilledForm(this.formDataId, this.hashLink) :\n this.supplierFormService.getAnonymousFilledForm(this.formDataId, this.hashLink)) :\n this.formService.getFormDataDetails(this.formDataId)).subscribe(\n res => {\n if (res && res.success) {\n this.formDataDetails = res.data;\n this.initializeFormData();\n\n } else {\n this.modalService.error('No Details Available');\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n }, () => {\n this.inProgress = false;\n }\n );\n }\n }\n\n private initializeFormData() {\n this.setAttendanceInformationFields();\n this.setsupplierReviewInfoFields();\n\n if (this.formDataDetails.formDataSiteAttendanceDetail ||\n this.formDataDetails.formDataSupplierReviewDetail)\n this.multipleTabsAvailable = true;\n }\n\n setAttendanceInformationFields() {\n if (this.formDataDetails.formDataSiteAttendanceDetail)\n this.siteAttendanceInfoFields = [\n { title: 'Site', key: 'siteName', icon: 'map-marker-alt' },\n { title: 'First Name', key: 'firstName', icon: 'user' },\n { title: 'Last Name', key: 'lastName', icon: 'user' },\n { title: 'Mobile', key: 'mobile', icon: 'phone', type: 'mobile' },\n { title: 'CheckIn', key: 'checkInDate', icon: 'calendar', type: 'datetime' },\n { title: 'CheckOut', key: 'checkOutDate', icon: 'calendar', type: 'datetime' },\n ].filter((f) => this.formDataDetails?.formDataSiteAttendanceDetail[f.key] != null);\n }\n setsupplierReviewInfoFields() {\n if (this.formDataDetails.formDataSupplierReviewDetail)\n this.supplierReviewInfoFields = [\n { title: 'Site', key: 'siteName', icon: 'map-marker-alt' },\n { title: 'First Name', key: 'firstName', icon: 'user' },\n { title: 'Last Name', key: 'lastName', icon: 'user' },\n { title: 'Mobile', key: 'mobile', icon: 'phone', type: 'mobile' },\n { title: 'Supplier', key: 'supplierName', icon: 'industry' },\n { title: 'Document Status', key: 'status', icon: 'book', type: 'siteSupplierDocumentStatus' },\n ].filter((f) => this.formDataDetails?.formDataSupplierReviewDetail[f.key] != null);\n }\n}\n\n","
      \n
      \n
      \n
      \n \n
      \n
      \n
      Site Asset Check-In History
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\">\n \n \n \n \n
      Check-in ByCheck-in DateCheck-out ByCheck-out Date
      \n There are no registered assets.\n
      \n {{item.checkInByUserFullName +\n (item.checkInByUserMobile ? ' ('+(item.checkInByUserMobile | mobile)+')' :\n '')}}\n \n {{item.checkInDate | datetime}}\n \n {{ item.checkOutByUserFullName != null ?\n item.checkOutByUserFullName +\n (item.checkOutByUserMobile ? ' ('+(item.checkOutByUserMobile | mobile)+')' :\n '') : ''}}\n \n {{item.checkOutDate | datetime}}\n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { SiteAssetCheckInViewModel } from 'src/app/models/site-asset/site-asset-checkin-view-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\nimport { AssetCheckInHistoryModel } from \"../../../models/site-asset/asset-check-in-history-model\";\n\n@Component({\n selector: 'obc-site-asset-checkin-history',\n templateUrl: './site-asset-checkin-history.component.html',\n styleUrls: ['./site-asset-checkin-history.component.scss']\n})\nexport class SiteAssetCheckinHistoryComponent implements OnInit {\n @Input() assetIdsHistoryModel: AssetCheckInHistoryModel;\n inProgress: boolean;\n checkedInSiteAssetHistory: SiteAssetCheckInViewModel[];\n\n constructor(private siteAssetService: SiteAssetService,\n private modalService: ModalService) {\n }\n\n ngOnInit(): void {\n this.fetchHistory();\n }\n\n fetchHistory() {\n this.inProgress = true;\n this.siteAssetService.getAssetCheckinHistory(this.assetIdsHistoryModel)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(\n (res) => {\n this.checkedInSiteAssetHistory = res;\n },\n (err) => {\n this.modalService.error('Request Failed!');\n }\n )\n }\n\n}\n","
      \n
      0\" class=\"col-12 col-lg-8 mb-1\">\n \n
      \n
      \n
      \n \n
      \n
      \n
      Site Asset Selection
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n \n
      \n
        \n
      • \n
        \n \n \n \n
        \n {{operator.operatorUserFullName}}\n {{operator.operatorUserMobile ? ' (' + (operator.operatorUserMobile | mobile) + ')' :\n ''}}\n
        \n
        \n
        \n \n Review\n \n \n Approve\n \n \n Reject\n \n \n
        \n
      • \n
      \n
      \n
      \n There is no operator registered yet\n
      \n
      \n \n
      \n
      \n \n {{item.assetCategory}}\n \n \n \n
      \n \n \n \n {{item.status | siteAssetRequestApproveStatus}}\n {{item.approveDateTime &&\n (item.status == SiteAssetRequestApproveStatus.Approved ||\n item.status == SiteAssetRequestApproveStatus.AutoApproved ||\n item.status == SiteAssetRequestApproveStatus.Rejected) ?\n ' (' + (item.approveDateTime | datetime) + ')' : ''}}\n
      \n
      \n \n {{item.approverUserFullName}}\n
      \n
      \n \n
      \n
      \n \n
      \n
      \n {{item.siteAssetStatusInfo.checkInByUserFullName}}\n {{item.siteAssetStatusInfo.checkInByUserMobile ? ' (' +\n (item.siteAssetStatusInfo.checkInByUserMobile | mobile) + ')' : ''}}\n
      \n
      \n \n {{item.siteAssetStatusInfo.checkInDate | datetime}}\n
      \n
      \n \n {{item.siteAssetStatusInfo.lastCheckInDate | datetime}}\n
      \n
      \n \n {{item.siteAssetStatusInfo.lastCheckOutDate | datetime}}\n
      \n
      \n \n\n \n \n \n \n \n \n \n \n\n \n \n
      \n \n \n \n \n \n {{item.assetName}}\n \n \n \n \n \n \n
      \n
      \n
      \n
      \n\n\n\n \n \n\n\n \n \n\n\n \n \n\n\n\n \n \n\n\n\n \n \n\n\n\n \n \n\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { ApproveEntityType } from 'src/app/enums/approve-entity-type';\nimport { ManageSiteAssetMode } from 'src/app/enums/manage-site-asset-mode.enum';\nimport { SiteAssetRequestApproveStatus } from 'src/app/enums/site-asset-request-approve-status.enum';\nimport { NicknameModel, SiteAssetViewModel } from 'src/app/models/site-asset/site-asset-view-model';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteAssetService } from 'src/app/services/site-asset.service';\nimport { UserService } from \"../../../services/user.service\";\nimport { UserPermission } from \"../../../enums/user-permission.enum\";\nimport { BaseSiteViewModel } from 'src/app/models/site-viewmodel';\nimport { SiteAssetOperatorViewModel } from 'src/app/models/site-asset/site-asset-operator-view-model';\nimport { ApproveService } from 'src/app/services/approve-service';\nimport { ApproveRejectQueryModel } from 'src/app/models/approve/approve-reject-query-model';\nimport { AssetCheckInHistoryModel } from 'src/app/models/site-asset/asset-check-in-history-model';\nimport { FormType } from 'src/app/enums/form-type';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { GridColumn, GridConfig, GridTemplate, InitialFilter } from 'src/app/models/grid/grid.config';\nimport { Table } from 'src/app/enums/table.enum';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\n\n@Component({\n selector: 'obc-manage-site-asset',\n templateUrl: './manage-site-asset.component.html',\n styleUrls: ['./manage-site-asset.component.scss'],\n})\nexport class ManageSiteAssetComponent implements OnInit {\n @ViewChild('grid') grid: any;\n inProgress: boolean = false;\n SiteAssetRequestApproveStatus = SiteAssetRequestApproveStatus;\n ApproveEntityType = ApproveEntityType;\n assetRegisterFormgroup: FormGroup = null;\n siteAssets: SiteAssetViewModel[] = [];\n selectedSiteAsset: SiteAssetViewModel;\n selectedSiteAssetId: number;\n selectedAssetId: number;\n selectedAssetIds: AssetCheckInHistoryModel;\n selectedEntityTypeForReviewModal: ApproveEntityType;\n selectedItemIsEnableFormExpiryDate: boolean;\n selectedEntityEndDate: Date;\n selectedFormDataId: number;\n manageSiteAssetMode: ManageSiteAssetMode = ManageSiteAssetMode.MainCompany;\n isInSupplierMode: boolean = false;\n ManageSiteAssetMode = ManageSiteAssetMode;\n externalSiteSupplierId: number;\n selectedSite: BaseSiteViewModel;\n siteCompanyName: string;\n siteCompanyId?: number;\n isCheckinRequested: boolean;\n referer: string;\n hashLink: any;\n onlyTempAssets: boolean = false;\n formType: FormType;\n FormType = FormType;\n\n //base-grid filters\n gridColumns: GridColumn[];\n gridConfig: GridConfig = {} as GridConfig;\n initialFilters: InitialFilter[] = [];\n showAddNewAssetButton: boolean;\n nickname: string;\n\n get selectedSiteId(): number {\n return this.selectedSite?.id;\n };\n\n @Input() siteId: number;\n _siteName: string;\n get siteName() {\n return this.selectedSite?.name ?? this._siteName;\n }\n\n @Input() set siteName(value: string) {\n this._siteName = value;\n if (this.selectedSite)\n this.selectedSite.name = value;\n }\n\n @Input() siteSupplierId: number;\n @Input() supplierId: number;\n @Input() mainCompanyId?: number = null;\n\n get hasUserApproveRejectPermissions(): boolean {\n return this.userService.hasUserAnyOfPermissions([UserPermission.ApproveRejectSiteInduction]);\n }\n\n constructor(\n private siteAssetService: SiteAssetService,\n private bsModalService: BsModalService,\n private modalService: ModalService,\n private layoutService: LayoutService,\n private route: ActivatedRoute,\n public userService: UserService,\n private approveService: ApproveService) { }\n\n ngOnInit(): void {\n this.layoutService.header = 'Site Assets';\n this.assetRegisterFormgroup = new FormGroup({\n siteId: new FormControl(null, Validators.required),\n queryMode: new FormControl(null),\n });\n\n //this.userService.initUserInfo();\n this.userService.info.subscribe((_) => {\n setTimeout(() => {\n this.inProgress = false;\n }, 1000);\n });\n\n this.route.params.subscribe((res: Params) => {\n try {\n this.referer = res['referer'];\n\n let siteSupplierId = this.siteSupplierId;\n let hashLink = res['hashlink'];\n //From hashLink onlyTempAssets= true\n //From any where without access onlyTempAssets= true\n //From Site menu for Linked Company onlyTempAssets= false\n //From Site menu for Current Company onlyTempAssets= false\n //From Supplier menu onlyTempAssets= true\n this.onlyTempAssets = hashLink?.length > 0 || !this.hasAccessToSiteAsset() || (siteSupplierId > 0 && this.mainCompanyId == null);\n\n //Supplier Mode\n if (hashLink?.length) {\n let siteId = this.siteId ? this.siteId : res['siteId'];\n this.isInSupplierMode = true;\n this.externalSiteSupplierId = +siteSupplierId;\n this.hashLink = hashLink;\n let site = { id: +siteId, name: this.siteName };\n this.changeSiteId(site);\n }\n else if (siteSupplierId) {\n let siteId = this.siteId ? this.siteId : res['siteId'];\n this.isInSupplierMode = true;\n this.externalSiteSupplierId = +siteSupplierId;\n let site = { id: +siteId, name: this.siteName };\n this.changeSiteId(site);\n }\n else {\n let siteId = res['siteId'];\n //Site Mode\n if (siteId) {\n const externalInfo = history.state.data;\n if (externalInfo != undefined)\n this.siteName = externalInfo.siteName;\n else\n this.siteName = \"\";\n let site = { id: +siteId, name: this.siteName };\n this.isInSupplierMode = false;\n this.changeSiteId(site);\n } else {\n //this.router.navigateByUrl('/sites');\n }\n }\n } catch (error) {\n\n this.manageSiteAssetMode = ManageSiteAssetMode.MainCompany;\n }\n }\n );\n\n this.assetRegisterFormgroup?.controls.siteId?.valueChanges?.subscribe((res) => {\n let filter = this.initialFilters?.find((item) => item.key == 'siteId');\n if (res) {\n filter.value = res;\n } else {\n filter.value = null;\n }\n this.initialFilters = [\n ...this.initialFilters?.filter((item) => item.key != 'siteId'),\n filter,\n ];\n });\n\n this.prepareGridConfig();\n }\n\n prepareGridConfig() {\n this.initialFilters = [];\n this.initialFilters.push({\n key: 'siteId',\n value: this.assetRegisterFormgroup.controls.siteId.value,\n displayInFilterRenderer: false,\n });\n\n this.initialFilters.push({\n key: 'queryMode',\n value: this.assetRegisterFormgroup.controls.queryMode.value,\n displayInFilterRenderer: false,\n });\n\n this.initialFilters.push({\n key: 'siteSupplierId',\n value: this.externalSiteSupplierId,\n displayInFilterRenderer: false,\n });\n\n this.initialFilters.push({\n key: 'hashLink',\n value: this.hashLink,\n displayInFilterRenderer: false,\n });\n\n const apiUrl = this.hashLink?.length ? '/api/AnonymousSiteAsset/supplier-assets' :\n (this.isInSupplierMode == false\n ? '/api/SiteAsset/site-assets' :\n '/api/SiteAsset/supplier-assets');\n\n let csvReportUrl = this.hashLink?.length ? '/api/AnonymousSiteAsset/supplier-assets-csv' : (this.isInSupplierMode == false\n ? '/api/SiteAsset/site-assets-csv-as-job' : '/api/SiteAsset/supplier-assets-csv-as-job');\n\n this.gridConfig = new GridConfig({\n headers: this.hashLink?.length ? { \"hash-link\": this.hashLink ?? '' } : null,\n loadDataOnInitialFilterChange: true,\n apiUrl: apiUrl,\n csvReportUrl: csvReportUrl,\n displayQuestionsFilter: false,\n displayAnnouncementsFilter: false,\n scheduleReport: null,\n displayEnableMagicLink: false,\n tableType: this.isInSupplierMode == false ? Table.SiteAsset : Table.SupplierAsset,\n displayGeneralSearch: true,\n refreshButtonValidity: true,\n generalSearchPlaceholder: \"Filter Result By Asset Name, Asset Category\",\n initialFilters: this.initialFilters,\n apiResultCallback: (res) => {\n this.manageSiteAssetMode = res.isExternalCompanyMode == true ? ManageSiteAssetMode.ExternalCompany : ManageSiteAssetMode.MainCompany;\n this.showAddNewAssetButton = res.showAddNewAssetButton;\n return {\n data: res.siteAssets,\n totalCount: res.totalCount,\n };\n }\n });\n\n this.gridColumns = [\n {\n key: \"operatorNames\",\n name: \"Registered Operators\",\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('registeredOperators'),\n visible: true,\n },\n {\n key: \"assetName\",\n name: \"Asset Name\",\n type: FilterType.Text,\n gridTemplate: new GridTemplate().ComponentTemplateName('assetName'),\n propertyNameInQuery: 'assetNames',\n visible: true,\n },\n {\n name: \"Asset Category\",\n key: \"assetCategory\",\n type: FilterType.AssetCategoryType,\n gridTemplate: new GridTemplate().ComponentTemplateName('siteAssetCategory'),\n propertyNameInQuery: 'assetCategories',\n enableSort: true,\n enableFilter: true,\n visible: true,\n },\n {\n key: \"statusData\",\n name: \"Status\",\n type: FilterType.AssetStatus,\n gridTemplate: new GridTemplate().ComponentTemplateName('siteAssetStatus'),\n propertyNameInQuery: 'assetStatuses',\n visible: true,\n },\n {\n key: \"checkinData\",\n name: \"Check-In History\",\n gridTemplate: new GridTemplate().ComponentTemplateName('checkinHistory'),\n enableSort: false,\n enableFilter: false,\n visible: true,\n },\n {\n key: \"viewDetails\",\n name: \"Actions\",\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails'),\n enableSort: false,\n enableFilter: false,\n visible: true,\n displayInCheckBoxSettings: false\n },\n ];\n\n // show ownerCompanyTitle column, only if it's main company user and no supplier is selected\n if (!this.siteSupplierId) {\n this.gridColumns.splice(0, 0, {\n name: \"Owner\",\n key: \"ownerCompanyTitle\",\n type: FilterType.Text,\n propertyNameInQuery: 'owners',\n });\n }\n }\n\n get allowToApproveAnything() {\n return this.manageSiteAssetMode == ManageSiteAssetMode.MainCompany;\n }\n\n changeSiteId(site: BaseSiteViewModel) {\n this.selectedSite = site;\n this.assetRegisterFormgroup.controls.siteId.setValue(site.id);\n this.onFetchSiteAssets();\n }\n\n onFetchSiteAssets() {\n this.grid.loadData(0);\n }\n\n bsModalRef = null;\n onOpenRegisterComponent(template) {\n this.bsModalRef = this.bsModalService.show(template, { class: 'modal-lg', ignoreBackdropClick: true });\n }\n\n onSubmitSiteAsset(_: number) {\n this.onFetchSiteAssets();\n this.bsModalRef?.hide();\n this.operatorBsModal?.hide();\n }\n\n operatorBsModal = null;\n\n onRegisterOperator(template, selectedSiteAsset: SiteAssetViewModel) {\n this.selectedSiteAsset = selectedSiteAsset;\n this.operatorBsModal = this.bsModalService.show(template, {\n class: 'modal-lg',\n ignoreBackdropClick: true\n })\n }\n\n onRegisterOperatorDone() {\n this.bsModalRef?.hide();\n this.operatorBsModal?.hide();\n this.onFetchSiteAssets();\n }\n\n closeModal() {\n try {\n this.modalService.hide();\n } catch {\n }\n }\n\n onOpenFormDetail(template: any, formDataId: number, entityId: number, formType: FormType = null) {\n this.selectedFormDataId = formDataId;\n this.selectedSiteAssetId = entityId;\n this.formType = formType;\n this.modalService.show(template, 'modal-lg');\n }\n\n async onCheckInOutSiteAsset(template, siteAsset: SiteAssetViewModel, isCheckin: boolean) {\n this.isCheckinRequested = isCheckin;\n this.selectedSiteAssetId = siteAsset.siteAssetId;\n this.selectedSiteAsset = siteAsset;\n this.modalService.show(template, 'modal-lg');\n }\n\n onShowAssetCheckInOutHistory(template, asset: SiteAssetViewModel) {\n this.selectedAssetIds = {\n assetId: asset.assetId,\n siteAssetId: asset.siteAssetId,\n tempAssetId: asset.tempAssetId,\n } as AssetCheckInHistoryModel;\n this.modalService.show(template, 'modal-lg');\n }\n\n onApproveRejectOperator(operator: SiteAssetOperatorViewModel, isApproved: boolean) {\n this.modalService.confirm(`Are you sure you want to ${isApproved ? 'approve' : 'reject'} this operator?`)\n .subscribe(confirm => {\n if (confirm) {\n this.inProgress = true;\n this.approveService.approveRejectEntity({\n approveEntityType: ApproveEntityType.SiteAssetOperator,\n entityId: operator.siteAssetOperatorId,\n isApprove: isApproved,\n } as ApproveRejectQueryModel)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(_ => {\n this.onFetchSiteAssets();\n });\n }\n });\n }\n\n saveNickname(item: SiteAssetViewModel, nickname: string) {\n if (!nickname.trim()) {\n this.modalService.error(\"Asset name can not be empty!\")\n }\n else {\n let setNicknameModel = {\n SiteAssetId: item.siteAssetId,\n NewNickname: nickname\n }\n\n this.modalService.confirm(`Are you sure you want to rename this asset?`).subscribe(confirm => {\n if (confirm) {\n this.inProgress = true;\n this.siteAssetService.setNickname(setNicknameModel)\n .pipe(\n finalize(() => {\n this.inProgress = false;\n item.isNickNameEditing = false;\n }),\n catchError((error: HttpErrorResponse) => {\n if (error.error) {\n this.modalService.error(error.error.message)\n }\n\n throw error;\n }))\n .subscribe((res) => {\n if (res) {\n this.grid.loadData();\n }\n });\n }\n });\n }\n }\n\n hasAccessToSiteAsset() {\n let isExternalSite = this.manageSiteAssetMode == ManageSiteAssetMode.ExternalCompany;\n return this.userService.hasCompanyFeature(ProductPlanFeature.Inventory) &&\n (\n (\n isExternalSite &&\n this.userService.hasPermissionOnCompany(UserPermission.AssetTrackerAdmin)\n ) ||\n (\n !isExternalSite &&\n this.userService.hasUserPermissionForCompany(UserPermission.AssetTrackerAdmin, this.selectedSiteId)\n )\n )\n }\n}\n","export const SupplierDocumentWorkflowConstant = {\n ApproveActivityId: \"ApproveSupplierDocument\",\n SignOffActivityId: \"SignOffSupplierDocument\",\n};\n","export enum ShowSupplierDocumentReviewButton {\n NoWorkflowInstance = 0,\n WorkflowInstanceHasAccess = 1,\n WorkflowInstanceNoAccess = 2\n}","export enum SupplierDocumentTypeOperation {\n ArchiveUnarchive,\n}\n\n","export enum ObcWorkflowStatus {\n Idle = 0,\n Running = 1,\n Finished = 2,\n Suspended = 3,\n Faulted = 4,\n Cancelled = 5\n};\n","export enum ApprovalModeEnum {\n ApproveReject = 0,\n Review = 1,\n WorkflowReview = 2,\n NoApprovalState = 3\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { SiteSupplierDocumentListenerModel } from './site-supplier-document-listener-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteSupplierDocumentListenerService {\n\n public dataChanged: BehaviorSubject = new BehaviorSubject(null);\n onChangeData(model?: SiteSupplierDocumentListenerModel) {\n this.dataChanged.next(model);\n }\n\n constructor() { }\n\n\n}","
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n Title\n \n \n
      \n
      \n
      Type\n \n \n
      \n
      Version\n
      Expiration Date\n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n New\n {{type.supplierDocumentTypeName}}\n \n \n \n \n \n \n
      \n
      \n
      {{type.documentKindName}}\n {{type.version}}\n ({{type.versionDate}})\n Inactivated\n \n \n {{type.expirationDate | date}}\n \n
      \n Document Expired\n
      \n
      \n
      \n \n \n \n {{type.status | supplierDocumentTypeStatusTooltip}}\n \n \n \n \n
      \n \n \n \n Review\n \n \n \n
      \n \n \n
      \n
      \n
      \n
      \n 1 ? 's' : '')\"\n [btnClass]=\"'btn btn-success btn-sm mr-2'\" [btnStyle]=\"'width: 80px;'\"\n [prefix]=\"type.supplierDocumentTypeName+'-'+type.displayVersion\">\n \n
      \n \n \n
      \n
      \n
      \n \n \n  \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n\n\n \n \n\n\n\n \n \n\n\n\n \n \n\n\n\n \n \n\n\n\n \n \n\n\n\n
      \n
      \n
        \n
        \n \n
        \n
      \n
      \n
      \n
      \n\n\n \n \n\n\n\n
      \n
      \n \n Change Document Kind\n \n \n
      \n
      \n \n
      \n
      \n
      Name:
      \n {{ selectedSiteSupplierDocumentTypeToChangeType.supplierDocumentTypeName }}\n
      \n
      \n
      Document Kind:
      \n {{ selectedSiteSupplierDocumentTypeToChangeType.documentKindName }}\n
      \n
      \n
      \n
      \n \n \n
      \n
      0\">\n
      Variables
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n Update Supplier Document Type Name\n \n \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n Request New {{selectedWorkflowTitle}} Document\n \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n Select file to download\n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, finalize } from 'rxjs';\nimport { GodUserPermission } from 'src/app/enums/god-user-permission.enum';\nimport { OptionalMandatoryState } from 'src/app/enums/site-document-state.enum';\nimport { SiteSupplierAccessMode } from 'src/app/enums/site-supplier-access-mode.enum';\nimport { SupplierDocumentReviewMode } from 'src/app/enums/supplier-document-review-mode.enum';\nimport { ApproveDeclineSiteSupplierDocumentVersion, ArchiveSiteSupplierDocumentTypeModel, DeleteSiteSupplierDocumentVersion } from 'src/app/models/supplier-document/site-supplier-document-type-models';\nimport { SupplierDocumentModel } from 'src/app/models/supplier-document/site-supplier-document-type-view-model.model';\nimport { SupplierDocumentTypeViewModel } from 'src/app/models/supplier-document/supplier-document-models';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteSupplierService } from 'src/app/services/site-supplier.service';\nimport { SupplierDocumentService } from 'src/app/services/supplier-document.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { ISiteSupplierDocumentTypeVersion } from \"../../../models/supplier-document/site-supplier-document-type\";\nimport { SupplierDocumentWorkflowConstant } from 'src/app/enums/workflow/workflow-activities-enum';\nimport { ShowSupplierDocumentReviewButton } from 'src/app/enums/show-supplier-document-review-button';\nimport { SiteSupplierDocumentListenerService } from '../site-supplier-document-listener.service';\nimport { SiteSupplierDocumentListenerModel } from '../site-supplier-document-listener-model';\nimport { SupplierDocumentTypeOperation } from 'src/app/enums/supplier-document-type-operation-kind.enum';\nimport { ObcWorkflowStatus } from 'src/app/enums/workflow/workflow-status.enum';\nimport { SiteSupplierDocumentStatus } from 'src/app/enums/site-supplier-document-status';\nimport { ClientWorkflowDefinitionViewModel } from 'src/app/models/workflow/workflow-definition-view-model';\nimport { WorkflowService } from 'src/app/services/workflow.service';\nimport { WorkflowType } from 'src/app/enums/workflow/workflow-type';\nimport { PortalDisplayMode } from 'src/app/enums/portal-display-mode.enum';\nimport { Router } from '@angular/router';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { FilterList } from 'src/app/models/filter-list';\nimport { PagingRequest } from 'src/app/models/paging-request-model';\nimport { SiteSupplierDocumentVersionCommentViewModel } from 'src/app/models/supplier-document-version-comment-model';\nimport { SupplierDocumentDataModel, SupplierDocumentVersionViewModel, SupplierDocumentVersionsQueryModel } from 'src/app/models/supplier-document-versions-query-model';\nimport { SiteSupplierInfo } from 'src/app/models/supplier-document/site-supplier-info';\nimport { VariableDefinitionMode, VariableValueDefinition } from 'src/app/models/workflow/variable-difinition';\nimport { DefaultWorkflowDisplayMode } from 'src/app/enums/constants';\nimport { ApprovalModeEnum } from \"../../../enums/approval-mode-enum\";\nimport { FormService } from 'src/app/services/form.service';\nimport { SignOffMode } from 'src/app/enums/signoff-mode.enum';\nimport {WorkflowVariableValue} from \"../../../models/workflow/workflow-variable-value\";\nimport {ChangeSiteSupplierDocumentKindQueryModel} from \"../../../models/change-site-supplier-document-kind-query-model\";\nimport {ToastrService} from \"ngx-toastr\";\n\n@Component({\n selector: 'app-view-site-supplier-document-version',\n templateUrl: './view-site-supplier-document-version.component.html',\n styleUrls: ['./view-site-supplier-document-version.component.scss']\n})\nexport class ViewSiteSupplierDocumentVersionComponent implements OnInit {\n\n FilterType = FilterType;\n filterDocumentTitles = [];\n filterDocumentKinds: number[] = [];\n filterExpireDateRanges = [];\n filters = [\n { data: this.filterDocumentTitles, name: 'Title', type: FilterType.SingleText, },\n { data: this.filterDocumentKinds, name: 'Document Kind', type: FilterType.SupplierDocumentKind },\n { data: this.filterExpireDateRanges, name: 'Expiration Date', type: FilterType.DateRange, nowDateLabel: '-', }\n ] as FilterList[];\n\n SiteSupplierDocumentStatus = SiteSupplierDocumentStatus;\n selectedFormDataId: number;\n inProgress = false;\n prefix = null;\n SupplierDocumentReviewModeEnum = SupplierDocumentReviewMode;\n WorkflowStatus = ObcWorkflowStatus;\n SupplierDocumentWorkflowConstant = SupplierDocumentWorkflowConstant;\n ShowSupplierDocumentReviewButton = ShowSupplierDocumentReviewButton;\n showDocumentTypeStatus: boolean = false;\n enableDocumentTypeStatus: boolean = true;\n selectedDocumentKindId: number;\n selectedWorkflowTitle: string = null;\n selectedFilesToSendToModal: any;\n portalDisplayMode: PortalDisplayMode = DefaultWorkflowDisplayMode;\n selectedInstanceId: string;\n siteSupplierInfo: SiteSupplierInfo;\n allowedSupplierDocumentWorkflows: ClientWorkflowDefinitionViewModel[] = [];\n\n\n siteSupplierDocumentTypes = new BehaviorSubject([]);\n selectedDocumentTypes: SupplierDocumentTypeViewModel[];\n supplierDocumentDataModel: SupplierDocumentDataModel;\n selectedVariableList: VariableValueDefinition[];\n\n selectedSupplierDocumentVersionViewModel: SupplierDocumentVersionViewModel = null;\n\n ApprovalModeEnum = ApprovalModeEnum;\n dirtyCheckSubscribe;\n selectedFormDirtyState: boolean = false;\n\n @Input() isArchiveTab: boolean = false;\n @Input() accessMode: SiteSupplierAccessMode;\n @Input() selectedSiteSupplierId: number = null;\n @Input() selectedSiteId: number;\n @Input() selectedSuplierId: number;\n @Input() mainCompanyId?: number = null;\n\n _siteSupplierHashlink = new BehaviorSubject(null);\n @Input() set siteSupplierHashlink(value: string) {\n if (value != this._siteSupplierHashlink.value && value != null) {\n this._siteSupplierHashlink.next(value);\n }\n }\n\n get isSupplierUser() {\n return this._siteSupplierHashlink.value?.length > 0 || this.accessMode == SiteSupplierAccessMode.SupplierHost;\n }\n\n hasDeleteSupplierDocumentsPermission: boolean = false;\n constructor(private siteSupplierService: SiteSupplierService,\n private userService: UserService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private supplierDocumentService: SupplierDocumentService,\n private siteSupplierDocumentListenerService: SiteSupplierDocumentListenerService,\n private workflowService: WorkflowService,\n private formService: FormService,\n private toastr: ToastrService,\n private router: Router) { }\n\n getPath(): string {\n return window.location.pathname + window.location.hash;\n }\n\n ngOnInit(): void {\n this.portalDisplayMode = this.userService.getCompanyWorkflowDisplayMode();\n\n this.changeDocumentKindIdFormControl.valueChanges.subscribe((res) => {\n this.setVariablesOfSelectedDocumentKind(\n this.getDocumentTypeByWorkflowDocumentTypeId(res)?.variableList\n );\n this.variablesFormGroup = new FormGroup({});\n for(let variable of this.variablesOfSelectedDocumentKindToChange ?? []) {\n this.variablesFormGroup.addControl(variable.key, new FormControl(variable.value, variable.mode == VariableDefinitionMode.Mandatory ? [Validators.required] : []))\n }\n })\n\n this.hasDeleteSupplierDocumentsPermission = this.userService.hasGodUserPermissionForCompany(GodUserPermission.DeleteSupplierDocuments);\n\n setTimeout(() => {\n this.updateSiteSupplier();\n }, 200);\n\n this.siteSupplierDocumentListenerService.dataChanged\n .subscribe(res => {\n if (res) {\n if (res.operation == SupplierDocumentTypeOperation.ArchiveUnarchive) {\n this.updateSiteSupplier();\n }\n }\n });\n\n if (this._siteSupplierHashlink.value != null) {\n this.siteSupplierService.getSupplierDocumentTypeInfoByHashLink(this._siteSupplierHashlink.value)\n .subscribe(res => {\n if (res) {\n this.selectedSiteId = res.siteId;\n this.selectedSuplierId = res.supplierId;\n this.selectedSiteSupplierId = res.siteSupplierId;\n }\n })\n }\n\n if (!this.isArchiveTab) {\n if (!this.mainCompanyId)\n this.mainCompanyId = this.userService.currentCompanyId;\n\n let hash = this.selectedSiteSupplierId == null && this._siteSupplierHashlink.value != null ? this._siteSupplierHashlink.value : null;\n\n if (!this.mainCompanyId && !hash) {\n this.modalService.error(\"Bad Request; hash or id not found!\");\n return;\n }\n\n this.workflowService.getWorkflowListFull(WorkflowType.SupplierDocument).subscribe(res => {\n if (res) {\n this.allowedSupplierDocumentWorkflows = [];\n res.map(p => {\n this.allowedSupplierDocumentWorkflows.push({\n isLegacyMode: p.isLegacyMode,\n title: p.title,\n variableList: p.variableList,\n workflowDocumentKindId: p.workflowSubtype,\n workflowSubtype: p.workflowSubtype,\n workflowType: p.workflowType,\n });\n })\n }\n });\n }\n }\n\n onUpdateFilter(currentItems: any[], newItems: any[]) {\n currentItems.splice(0, currentItems.length, ...newItems);\n this.updateSiteSupplier();\n }\n\n filterHasAnyData(): boolean {\n for (let index = 0; index < this.filters.length; index++) {\n const element = this.filters[index];\n if (element?.data?.length > 0) return true;\n }\n return false;\n }\n\n oldFilterData: any[] = [];\n onRemoveFilter($event) {\n let item = $event.item;\n let items = $event.items;\n let index = items.indexOf(item);\n\n let oldf = this.oldFilterData.find(x => x.item == item);\n if (oldf) {\n let oldfIndex = this.oldFilterData.indexOf(oldf);\n this.oldFilterData.splice(oldfIndex, 1);\n }\n\n if (index > -1) {\n items.splice(index, 1);\n this.updateSiteSupplier();\n }\n }\n\n workflowEngineModal: BsModalRef;\n openWorkflowEngine(instanceId: string, modalTemplate: any) {\n this.selectedInstanceId = instanceId;\n\n if (this.portalDisplayMode == PortalDisplayMode.PopUp) {\n this.formService.isFormDirty.next(false);\n this.workflowEngineModal = this.bsModalService.show(modalTemplate, {\n class: \"modal-lg modal-full-width\",\n ignoreBackdropClick: true,\n keyboard: false,\n });\n this.dirtyCheckSubscribe = this.formService.isFormDirty.asObservable().subscribe(e => {\n this.selectedFormDirtyState = e;\n });\n }\n else if (this.portalDisplayMode == PortalDisplayMode.Page) {\n this.router.navigate([`/workflow-engine/${this.selectedInstanceId}`], { queryParams: { returnPath: this.getPath() } });\n }\n }\n\n\n closeModal() {\n try {\n if (!this.selectedFormDirtyState) {\n this.dirtyCheckSubscribe?.unsubscribe();\n this.workflowEngineModal.hide();\n this.updateSiteSupplier();\n } else {\n this.modalService.confirm('Exit and lose progress?', '', 'Yes, exit', 'No, go back and continue')\n .subscribe(res => {\n if (res == true) {\n this.dirtyCheckSubscribe.next(false);\n this.dirtyCheckSubscribe?.unsubscribe();\n this.workflowEngineModal.hide();\n this.updateSiteSupplier();\n }\n });\n }\n } catch {\n }\n }\n\n updateSiteSupplier() {\n this.inProgress = true;\n\n let queryModel = {\n siteId: this.selectedSiteId,\n documentTitles: this.filterDocumentTitles?.length ? this.filterDocumentTitles : [],\n expireDateRanges: this.filterExpireDateRanges?.length ? this.filterExpireDateRanges[0] : null,\n searchTerm: '',\n siteAttendanceId: null,\n isArchived: this.isArchiveTab,\n supplierId: this.selectedSuplierId,\n siteSupplierId: this.selectedSiteSupplierId,\n documentKindIdList: this.filterDocumentKinds,\n };\n\n\n let sub =\n this.isSupplierUser ?\n this.siteSupplierService\n .getSiteSupplierDocumentTypesByHashlinkModel(>{ query: queryModel },\n this._siteSupplierHashlink.value) :\n this.selectedSiteSupplierId != null ?\n this.siteSupplierService\n .getSiteSupplierDocumentTypesByModel(>{ query: queryModel }) :\n null;\n\n if (sub == null) {\n this.modalService.error(\"Bad Request; hash or id not found!\");\n return;\n }\n\n sub.pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.supplierDocumentDataModel = res;\n\n setTimeout(() => {\n this.getDocumentType();\n }, 500);\n\n }, err => {\n this.modalService.error(err);\n })\n }\n\n getDocumentType() {\n\n this.hasSupplierReviewForm = this.supplierDocumentDataModel.companyReviewForms?.length > 0;\n this.supplierDocumentReviewMode = this.supplierDocumentDataModel.supplierDocumentReviewMode;\n this.selectedDocumentTypes = this.supplierDocumentDataModel.data.filter(x => {\n return x.supplierDocumentTypeId;\n }).map(x => {\n return { id: x.supplierDocumentTypeId, name: x.supplierDocumentTypeName } as SupplierDocumentTypeViewModel\n });\n\n this.siteSupplierDocumentTypes.next(this.supplierDocumentDataModel.data);\n }\n\n onSiteSupplierLoad() {\n this.updateSiteSupplier();\n }\n\n uploadFileModalRef = null;\n siteSupplierDocumentType = null;\n onUpdateDocuments(template: any, docVersion?: SupplierDocumentVersionViewModel) {\n if (docVersion)\n this.selectedDocumentKindId = docVersion.documentKindId;\n\n this.selectedVariableList = docVersion.workflowStartVariables;\n\n this.siteSupplierDocumentType = docVersion;\n this.uploadFileModalRef = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: true,\n })\n }\n\n onUpdateRequestDocuments(template: any, siteSupplierDocumentType?: SupplierDocumentVersionViewModel) {\n this.siteSupplierDocumentType = siteSupplierDocumentType;\n this.uploadFileModalRef = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: true,\n })\n }\n\n onArchiveDocuments() {\n let selectedItems = this.supplierDocumentDataModel.data.filter(d => d.selected);\n if (selectedItems.length <= 0) {\n this.modalService.warn('Please select one or more files', \"Archive File\");\n return;\n }\n\n this.bsModalService\n\n this.modalService.confirm('Are you sure you want to archive this file? Archiving the file will remove it from the induction and remove any pending approvals.', 'Archive Supplier Document File', 'Archive', 'Cancel', 'btn-danger', 'btn-default')\n .subscribe(confirm => {\n if (confirm == true) {\n this.inProgress = true;\n\n\n let model = {\n siteSupplierDocumentTypeIds: selectedItems.map((item) => item.siteSupplierDocumentTypeId),\n } as ArchiveSiteSupplierDocumentTypeModel;\n\n (this._siteSupplierHashlink.value && this._siteSupplierHashlink.value?.length ?\n this.siteSupplierService.archiveSiteSupplierDocumentTypes(model, this._siteSupplierHashlink.value)\n :\n this.supplierDocumentService.archiveSiteSupplierDocumentTypes(model))\n .subscribe(_ => {\n this.inProgress = false;\n\n this.updateSiteSupplier();\n this.siteSupplierDocumentListenerService.onChangeData(\n {\n documentKindId: null,\n operation: SupplierDocumentTypeOperation.ArchiveUnarchive\n });\n\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, err.body?.length ? err.body : \"Unable to archive supplier document types!\");\n });\n }\n });\n }\n\n onUnarchiveDocuments() {\n let selectedItems = this.supplierDocumentDataModel.data.filter(d => d.selected);\n if (selectedItems.length <= 0) {\n this.modalService.warn('Please select one or more files', \"Unarchive File\");\n return;\n }\n\n this.modalService.confirm('Are you sure you want to unarchive this file(s)?', 'Archive Supplier Document File', 'Unarchive', 'Cancel', 'btn-danger', 'btn-default')\n .subscribe(confirm => {\n if (confirm == true) {\n this.inProgress = true;\n let model = {\n siteSupplierDocumentTypeIds: selectedItems.map((item) => item.siteSupplierDocumentTypeId),\n } as ArchiveSiteSupplierDocumentTypeModel;\n\n (this._siteSupplierHashlink.value != null && this._siteSupplierHashlink.value?.length ?\n this.siteSupplierService.unarchiveSiteSupplierDocumentTypes(model, this._siteSupplierHashlink.value)\n :\n this.supplierDocumentService.unarchiveSiteSupplierDocumentTypes(model))\n .subscribe(_ => {\n this.inProgress = false;\n\n this.updateSiteSupplier();\n\n this.siteSupplierDocumentListenerService.onChangeData(\n {\n documentKindId: null,\n operation: SupplierDocumentTypeOperation.ArchiveUnarchive\n });\n\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, err.body?.length ? err.body : \"Unable to unarchive supplier document types!\");\n });\n }\n });\n }\n\n supplierDocCommentAcknowledgementText: string;\n hasPermissionToAddSupplierDocumentComment: boolean;\n siteSupplierDocumentTypeId: number;\n onViewHistory(template: any, siteSupplierDocumentType: SupplierDocumentVersionViewModel) {\n this.siteSupplierDocumentTypeId = siteSupplierDocumentType.siteSupplierDocumentTypeId;\n this.bsModalService.show(template, {\n class: \"modal-lg\",\n })\n }\n\n supplierDocumentVersionComments: SiteSupplierDocumentVersionCommentViewModel[];\n siteSupplierDocumentVersionId: number;\n onViewComments(template: any, siteSupplierDocumentType: SupplierDocumentVersionViewModel) {\n\n this.siteSupplierService.GetSupplierDocumentVersionComment(siteSupplierDocumentType.siteSupplierDocumentVersionId)\n .subscribe(resComment => {\n if (resComment) {\n this.supplierDocCommentAcknowledgementText = resComment.supplierDocCommentAcknowledgementText;\n this.hasPermissionToAddSupplierDocumentComment = resComment.hasPermissionToAddSupplierDocumentComment;\n this.siteSupplierDocumentVersionId = siteSupplierDocumentType.siteSupplierDocumentVersionId;\n\n this.supplierDocumentVersionComments = resComment.supplierDocumentVersionComments;\n\n this.bsModalService.show(template, {\n class: \"modal-lg\",\n })\n }\n });\n }\n\n supplierDocumentFormControl = new FormControl();\n onSelectSupplierDocumentType($event) {\n console.log($event);\n }\n\n onViewFilledForm(template: any, formDataId: number) {\n this.selectedFormDataId = formDataId;\n this.uploadFileModalRef = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: false,\n })\n }\n\n hasSupplierReviewForm: boolean = false;\n supplierDocumentReviewMode: SupplierDocumentReviewMode;\n\n selectedSiteSupplierDocument: ISiteSupplierDocumentTypeVersion;\n bsModalRef: BsModalRef;\n onOpenformReview(template: any, item: SupplierDocumentVersionViewModel) {\n this.selectedSiteSupplierDocument = {\n files: item.supplierDocumentFiles,\n displayVersion: item.displayVersion,\n lastSupplierVersionId: item.siteSupplierDocumentVersionId,\n supplierDocumentTypeName: item.supplierDocumentTypeName,\n documentKindId: item.documentKindId,\n expirationDate: item.expirationDate\n } as ISiteSupplierDocumentTypeVersion;\n this.formService.isFormDirty.next(false);\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-full-screen\",\n ignoreBackdropClick: true,\n keyboard: false,\n });\n this.dirtyCheckSubscribe = this.formService.isFormDirty.asObservable().subscribe(e => {\n this.selectedFormDirtyState = e;\n });\n }\n\n onApproveDeclineSiteSupplierVersion(isApprove: boolean, documentType: SupplierDocumentVersionViewModel) {\n if (!documentType)\n return;\n this.modalService.confirm('Are you sure you want to ' + (isApprove ? 'approve' : 'decline') + ' this version?')\n .subscribe(confirm => {\n if (confirm) {\n this.supplierDocumentService.approveDeclineSiteSupplierVersion({\n isApproved: isApprove,\n siteSupplierDocumentVersionId: documentType.siteSupplierDocumentVersionId,\n expirationDate: documentType.expirationDate\n } as ApproveDeclineSiteSupplierDocumentVersion)\n .subscribe(_ => {\n\n this.onSiteSupplierLoad();\n\n }, err => {\n this.modalService.error(err, \"Unable to change status\");\n });\n }\n });\n }\n\n onOpenDeleteForm(item: SupplierDocumentVersionViewModel) {\n this.modalService.confirm('Are you sure you want to delete this version?', 'Delete Supplier Document File', 'Delete', 'Cancel', 'btn-danger', 'btn-default')\n .subscribe(res => {\n if (res == true) {\n this.inProgress = true;\n let request = {\n siteSupplierDocumentVersionId: item.siteSupplierDocumentVersionId,\n } as DeleteSiteSupplierDocumentVersion;\n\n (this._siteSupplierHashlink.value != null && this._siteSupplierHashlink.value?.length ?\n this.siteSupplierService.deleteSiteSupplierDocumentVersion(request, this._siteSupplierHashlink.value)\n :\n this.supplierDocumentService.deleteSiteSupplierDocumentVersion(request))\n .subscribe(_ => {\n this.inProgress = false;\n\n this.onSiteSupplierLoad();\n\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, err.body?.length ? err.body : \"Unable to delete supplier document version!\");\n });\n }\n });\n }\n\n onDeleteAllFiles(item: SupplierDocumentVersionViewModel) {\n this.modalService.confirm(`Are you sure you want to ${this.getDeleteAllButtonTitle(item.documentKindSignOffMode, true)}?`, 'Delete Supplier Document File', 'Ok', 'Cancel', 'btn-danger', 'btn-default')\n .subscribe(res => {\n if (res == true) {\n this.inProgress = true;\n\n this.supplierDocumentService.deleteAllSupplierDocuments(item.siteSupplierDocumentTypeId)\n .subscribe(_ => {\n this.inProgress = false;\n\n this.onSiteSupplierLoad();\n\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, err.body?.length ? err.body : \"Unable to delete supplier documents!\");\n });\n }\n });\n }\n\n refresh() {\n if (!this.selectedFormDirtyState) {\n this.dirtyCheckSubscribe?.unsubscribe();\n this.onSiteSupplierLoad();\n this.bsModalRef?.hide();\n } else {\n this.modalService.confirm('Exit and lose progress?', '', 'Yes, exit', 'No, go back and continue')\n .subscribe(res => {\n if (res == true) {\n this.dirtyCheckSubscribe.next(false);\n this.dirtyCheckSubscribe?.unsubscribe();\n this.onSiteSupplierLoad();\n this.bsModalRef?.hide();\n }\n });\n }\n }\n\n bsModalRefRenameDOT: any = null;\n renameNoneStandardSupplierDocumentTypeFormControl = new FormControl(null, [Validators.required]);\n selectedSiteSupplierDocumentTypeForRename: SupplierDocumentVersionViewModel = null;\n OptionalMandatoryState = OptionalMandatoryState;\n selectedSiteSupplierDocumentTypeMode: OptionalMandatoryState;\n showSignOffConfiguration(documentKindId: number) {\n return this.supplierDocumentDataModel.supplierDocumentDataConfiguration.find(p => p.documentKindId == documentKindId)?.enableSetSiteSupplierDocumentTypeMode ?? false;\n }\n\n isSignOffEnabled(documentKindId: number) {\n return this.supplierDocumentDataModel.supplierDocumentDataConfiguration.find(p => p.documentKindId == documentKindId)?.documentKindSignOffMode == SignOffMode.Optional;\n }\n\n setSignOffVisibility(documentKindId: number) {\n this.showDocumentTypeStatus = this.showSignOffConfiguration(documentKindId);\n this.enableDocumentTypeStatus = this.isSignOffEnabled(documentKindId);\n }\n\n onEditNoneStandardSupplierDocumentType(docType: SupplierDocumentVersionViewModel, template: any) {\n this.setSignOffVisibility(docType.documentKindId);\n\n this.renameNoneStandardSupplierDocumentTypeFormControl.setValue(docType.supplierDocumentTypeName);\n this.selectedSiteSupplierDocumentTypeForRename = docType;\n this.selectedSiteSupplierDocumentTypeMode = this.getSignOffModeValue(docType);\n this.bsModalRefRenameDOT = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: false,\n })\n }\n\n getSignOffModeValue(docType: SupplierDocumentVersionViewModel) {\n return this.supplierDocumentDataModel.supplierDocumentDataConfiguration.find(p => p.documentKindId == docType.documentKindId)?.documentKindSignOffMode == SignOffMode.Mandatory ?\n OptionalMandatoryState.Mandatory :\n docType.signOffMode;\n }\n\n documentTypeStatusChanged(value) {\n this.selectedSiteSupplierDocumentTypeMode = value ? OptionalMandatoryState.Mandatory : OptionalMandatoryState.Optional;\n }\n\n updateNoneStandardSupplierDocumentType() {\n const model = {\n title: this.selectedSiteSupplierDocumentTypeForRename.isStandardSupplierDocumentType ? '' : this.renameNoneStandardSupplierDocumentTypeFormControl.value,\n siteSupplierId: this.selectedSiteSupplierId,\n siteSupplierDocumentTypeId: this.selectedSiteSupplierDocumentTypeForRename.siteSupplierDocumentTypeId,\n mode: this.selectedSiteSupplierDocumentTypeMode,\n };\n\n this.supplierDocumentService.renameSiteSupplierDocumentType(model)\n .subscribe(_ => {\n this.bsModalRefRenameDOT.hide();\n\n this.onSiteSupplierLoad();\n\n }, err => {\n this.modalService.error(err);\n })\n }\n\n onRequestNewDocumentType() {\n let typeId = this.supplierDocumentFormControl.value;\n if (!typeId) {\n this.modalService.error(\"Please select document type\");\n return;\n }\n\n this.supplierDocumentService\n .requestNewSiteSupplierDocumentType(\n this.selectedSiteSupplierId,\n {\n mode: this.selectedSiteSupplierDocumentTypeMode,\n supplierDocumentTypeId: typeId,\n documentKindId: this.selectedDocumentKindId,\n } as SupplierDocumentModel)\n .subscribe(_ => {\n this.onSiteSupplierLoad();\n\n this.uploadFileModalRef.hide();\n }, err => { this.modalService.error(err); });\n }\n\n hasAnySelectedToArchive(): boolean {\n return this.supplierDocumentDataModel.data.some(x => x.selected);\n }\n\n getDeleteAllButtonTitle(documentKindSignOffMode: SignOffMode, isMessage: boolean = false) {\n return (documentKindSignOffMode != SignOffMode.Disable ?\n (isMessage ? 'delete all Document/Versions/Sign Offs' : 'Delete All Document/Versions/Sign Offs') :\n (isMessage ? 'delete all Document/Versions' : 'Delete All Document/Versions'));\n\n }\n\n filesDragedOrSelected(files, uploadMultipleDocumentTemplate, documentKindId: number, workflowTitle: string, variableList: VariableValueDefinition[]) {\n this.selectedWorkflowTitle = workflowTitle;\n this.selectedDocumentKindId = documentKindId;\n this.selectedFilesToSendToModal = files;\n this.selectedVariableList = variableList;\n this.uploadFileModalRef = this.bsModalService.show(uploadMultipleDocumentTemplate, { class: \"modal-lg\", ignoreBackdropClick: true, })\n }\n\n addDocumentClicked(documentKindId: number, uploadMultipleDocumentTemplate, workflowTitle: string, variableList: VariableValueDefinition[]) {\n this.selectedWorkflowTitle = workflowTitle;\n this.selectedFilesToSendToModal = undefined;\n this.selectedDocumentKindId = documentKindId;\n this.selectedVariableList = variableList;\n this.onUpdateDocuments(uploadMultipleDocumentTemplate);\n }\n\n requestDocumentClicked(documentKindId: number, requestDocumentTemplate, workflowTitle: string) {\n this.selectedWorkflowTitle = workflowTitle;\n this.selectedDocumentKindId = documentKindId;\n this.onUpdateRequestDocuments(requestDocumentTemplate);\n }\n\n onDownloadFile(template: any, siteSupplierDocumentType: SupplierDocumentVersionViewModel) {\n this.selectedSupplierDocumentVersionViewModel = siteSupplierDocumentType;\n this.uploadFileModalRef = this.bsModalService.show(template, { class: \"modal-lg\" })\n }\n\n selectedSiteSupplierDocumentTypeToChangeType: SupplierDocumentVersionViewModel;\n changeDocumentKindIdFormControl = new FormControl(null, [Validators.required]);\n bsModalRefChangeDocumentKind: any = null;\n variablesOfSelectedDocumentKindToChange: VariableValueDefinition[];\n variablesFormGroup = new FormGroup({});\n\n displayChangeDocumentKindModal(template: any, siteSupplierDocumentType: SupplierDocumentVersionViewModel) {\n this.selectedSiteSupplierDocumentTypeToChangeType = siteSupplierDocumentType;\n this.bsModalRefChangeDocumentKind = this.bsModalService.show(template, {\n class: \"modal-lg\",\n })\n }\n updateSiteSupplierDocumentKind() {\n if (!this.changeDocumentKindIdFormControl?.value ||\n !this.selectedSiteSupplierDocumentTypeToChangeType?.siteSupplierDocumentTypeId)\n return;\n this.inProgress = true;\n\n this.siteSupplierService.changeSiteSupplierDocumentKind({\n variables: this.variablesOfSelectedDocumentKindToChange?.map((variable) => {\n return {\n key: variable.key,\n value: this.variablesFormGroup.controls[variable.key]?.value,\n } as WorkflowVariableValue;\n }),\n documentKindId: +this.changeDocumentKindIdFormControl?.value,\n siteSupplierDocumentTypeId: +this.selectedSiteSupplierDocumentTypeToChangeType?.siteSupplierDocumentTypeId,\n } as ChangeSiteSupplierDocumentKindQueryModel).subscribe({\n next: (_) => {\n this.toastr.success('Updated Successfully.');\n this.inProgress = false;\n this.closeChangeDocumentKind();\n this.updateSiteSupplier();\n },\n error(_) {\n this.toastr.error('Update Failed.');\n this.inProgress = false;\n }\n })\n }\n closeChangeDocumentKind() {\n this.changeDocumentKindIdFormControl.setValue(null);\n this.bsModalRefChangeDocumentKind.hide();\n }\n getDocumentTypeByWorkflowDocumentTypeId(documentTypeId: number) {\n return this.allowedSupplierDocumentWorkflows?.find((item) => item.workflowDocumentKindId === +documentTypeId);\n }\n setVariablesOfSelectedDocumentKind(variables: VariableValueDefinition[]) {\n this.variablesOfSelectedDocumentKindToChange = variables;\n }\n}\n","
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n View/Update Document Version, Permits and Assets\n
      \n
      \n
      \n \n
      \n
      \n

      Site: {{validateResult?.siteName}}

      \n
      \n
      \n

      Supplier: {{validateResult?.supplierName}}

      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n","import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { BehaviorSubject } from \"rxjs\";\nimport { SiteSupplierAccessMode } from 'src/app/enums/site-supplier-access-mode.enum';\nimport { SiteSupplierAccessViewModel } from 'src/app/models/link_to_company_request_model';\nimport { CompanySupplierService } from 'src/app/services/company-supplier.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { SiteSupplierService } from \"../../../services/site-supplier.service\";\nimport { CompanyAuthService } from 'src/app/services/company-auth.service';\n\n@Component({\n selector: 'app-site-supplier-document-uploader-container',\n templateUrl: './site-supplier-document-uploader-container.component.html',\n styleUrls: ['./site-supplier-document-uploader-container.component.scss']\n})\nexport class SiteSupplierDocumentUploaderContainerComponent implements OnInit, AfterViewInit, OnDestroy {\n\n selectedTab = new BehaviorSubject(\"documents\");\n siteSupplierId: number = null;\n hashlink: string = null;\n supplierId: number = null;\n siteId: number = null;\n validateResult: SiteSupplierAccessViewModel;\n\n referer: string;\n showDocumentsArchiveTab: boolean = false;\n\n get isHashlinkMode(): boolean {\n return this.hashlink?.length > 0;\n }\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n public userService: UserService,\n private companySupplierService: CompanySupplierService,\n private siteSupplierService: SiteSupplierService,\n private companyAuthService: CompanyAuthService\n ) { }\n\n ngOnDestroy(): void {\n this.companyAuthService.setCurrentCompanyId(this.userService.currentCompanyId);\n this.companyAuthService.setCompanyId();\n }\n\n fragment: string;\n ngAfterViewInit(): void {\n try {\n if (this.fragment?.length)\n this.selectedTab.next(this.fragment);\n } catch (e) { }\n }\n\n ngOnInit(): void {\n this.route.fragment.subscribe(fragment => {\n this.fragment = fragment;\n });\n this.route.params.subscribe(res => {\n this.hashlink = res[\"hashlink\"];\n this.siteSupplierId = res[\"id\"];\n\n this.supplierId = res['supplierId'];\n this.siteId = res['siteId'] ?? null;\n this.referer = res['ref']?.replace(/_/g, \"/\");\n\n if (this.isHashlinkMode) {\n this.companyAuthService.setHashLink(this.hashlink);\n }\n\n (this.isHashlinkMode ?\n this.siteSupplierService.validateSiteSupplierWithHashLink(this.hashlink) :\n this.companySupplierService.validateSiteSupplier(this.siteSupplierId, this.supplierId, this.siteId)).subscribe(validateResult => {\n if (validateResult) {\n\n this.validateResult = validateResult;\n if (this.isHashlinkMode) {\n this.companyAuthService.setHashLink(this.hashlink)\n this.siteId = validateResult.siteId;\n }\n else {\n this.companyAuthService.setCompanyId(validateResult?.mainCompanyId);\n }\n\n //show DocumentsArchiveTab as last tab\n setTimeout(() => {\n this.showDocumentsArchiveTab = true;\n }, 10);\n\n if (validateResult.accessMode == SiteSupplierAccessMode.Invalid)\n this.router.navigate(['/no-access']);\n\n } else\n this.router.navigate(['/no-access']);\n });\n });\n }\n}\n","
      \n
      \n
      \n
      Search Forms
      \n \n \n
      \n \n Include Inactive Forms: \n \n \n \n \n\n \n \n \n \n\n \n \n \n\n \n
      \n
      \n
      \n
      \n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FormReportViewModel } from 'src/app/models/form/form-report-models';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { MobilePipe } from 'src/app/pipes/mobile.pipe';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { DatePipe } from 'src/app/pipes/date.pipe';\nimport { Table } from 'src/app/enums/table.enum';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { FormService } from \"../../../services/form.service\";\nimport { FormDataPdfQueryModel } from 'src/app/models/form/form-data-pdf-query-model';\nimport { GridColumn, GridConfig, GridTemplate, InitialFilter } from \"../../../models/grid/grid.config\";\nimport { AttendanceDocumentReportViewModel } from \"../../../models/attendance-document-report-viewmodel\";\n\n@Component({\n selector: 'obc-form-report',\n templateUrl: './form-report.component.html',\n providers: [MobilePipe, DatetimePipe, DatePipe],\n styleUrls: ['./form-report.component.css']\n})\nexport class FormReportComponent implements OnInit {\n includeInactiveForms: boolean = false;\n initialFilters: InitialFilter[] = [{ key: 'includeInactiveForms', value: false, }];\n\n constructor(private layoutService: LayoutService,\n private formService: FormService,\n private modalService: ModalService,\n ) { }\n\n ngOnInit() {\n this.layoutService.header = \"Form Report\";\n this.prepareGridConfig();\n }\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: '/api/form/form-report',\n tableType: Table.FormReport,\n displayGeneralSearch: true,\n displayQuestionsFilter: true,\n generalSearchPlaceholder: \"Filter result by Form Title, User, Supplier and Site fields\",\n initialFilters: this.initialFilters,\n csvReportUrl: '/api/form/export-form-report-csv-as-job',\n });\n this.gridColumns = [\n {\n name: \"Form Title\",\n key: \"formName\",\n type: FilterType.Form,\n propertyNameInQuery: 'formIds',\n },\n {\n name: \"Type\",\n key: \"formType\",\n type: FilterType.FormType,\n propertyNameInQuery: 'formTypes',\n },\n {\n name: \"Full Name\",\n key: \"user\",\n type: FilterType.Mobile,\n propertyNameInQuery: 'userIds',\n gridTemplate: new GridTemplate().FullNameMobile({\n fullName: 'fullName',\n mobile: 'mobile'\n }).CsvFields([\n 'fullName',\n 'mobile',\n ]),\n },\n {\n name: \"Supplier\",\n key: \"supplierName\",\n sortBy: \"supplier\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'suppliers',\n },\n {\n name: \"Site\",\n sortBy: 'site',\n key: \"siteFullName\",\n type: FilterType.Site,\n propertyNameInQuery: 'siteIds',\n gridTemplate: new GridTemplate().SiteNameReference({\n siteName: 'siteName',\n siteReference: 'siteReference',\n }),\n hideEmptyColumnsEmptinessConditionCallback: (res) => {\n return res?.every(item => {\n return item.siteName == undefined || item.siteName?.toString()?.trim() == '';\n });\n }\n },\n {\n name: \"Filled In\",\n type: FilterType.DateTimeRange,\n key: \"fillDate\",\n propertyNameInQuery: 'fillDateRanges',\n },\n {\n name: \"Details\",\n key: 'viewDetails',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails'),\n visible: true,\n }\n ];\n }\n\n data;\n openModal(template, data) {\n this.data = data;\n this.modalService.show(template, \"modal-lg\");\n }\n\n closeModal() {\n this.grid.loadData(0);\n this.modalService.hide();\n }\n\n exportPdf(item: FormReportViewModel) {\n this.formService.ExportFormDataAsPdf({ formDataId: item.formDataId, siteId: item.siteId } as FormDataPdfQueryModel);\n }\n\n onIncludeInactiveFormsChanged(value: boolean) {\n this.gridColumns.find(x => x.key == \"formName\").filterSettings = { includeInactiveItems: value };\n this.initialFilters.find(x => x.key == \"includeInactiveForms\").value = value;\n this.grid?.loadData();\n }}\n","export enum SeatingMode {\n Disabled = 0,\n HostOnly = 1,\n HostAndUser = 2,\n}\n\n\nexport const SeatingModeLabels = {\n 0: \"Disabled\",\n 1: \"Host Only\",\n 2: \"Host And User\"\n};\n","export class SiteQrCodeViewModel {\n _qrCodeImageBase64: string;\n qrCodeContent: string;\n\n public set qrCodeImageBase64(img: string) {\n this._qrCodeImageBase64 = img;\n }\n public get qrCodeImageBase64() { return this._qrCodeImageBase64 ? `data:image/png;base64,${this._qrCodeImageBase64}` : undefined }\n\n}","export class DirtyComponentItem {\n snapshot: any;\n isDirty: boolean;\n}\n\nexport class DirtyComponents {\n inductions: DirtyComponentItem = new DirtyComponentItem();\n genericForms: DirtyComponentItem = new DirtyComponentItem();\n permitForms: DirtyComponentItem = new DirtyComponentItem();\n assetRegistrationForms: DirtyComponentItem = new DirtyComponentItem();\n siteBriefingForms: DirtyComponentItem = new DirtyComponentItem();\n announcements: DirtyComponentItem = new DirtyComponentItem();\n scannableGroups: DirtyComponentItem = new DirtyComponentItem();\n checkInQuestions: DirtyComponentItem = new DirtyComponentItem();\n checkOutQuestions: DirtyComponentItem = new DirtyComponentItem();\n requiredFields: DirtyComponentItem = new DirtyComponentItem();\n documentInfo: DirtyComponentItem = new DirtyComponentItem();\n visitorTypes: DirtyComponentItem = new DirtyComponentItem();\n siteVisitorTypes: DirtyComponentItem = new DirtyComponentItem();\n visitorTypeAccompaniers: DirtyComponentItem = new DirtyComponentItem();\n}\n","export enum DelayedAnswerMode {\n Disable = 0,\n EnableForAllQuestions = 1,\n EnableForMandatoryQuestions = 2,\n}\n","export enum AccessControlAutomaticAttendanceMode {\n Disabled = 0,\n Enabled = 1,\n}\n\nexport enum AccessControlInductionMode {\n NoRestriction = 0,\n ApprovedInductions = 1,\n ApprovedOrPendingInductions = 2,\n}\nexport enum AccessControlSiteBriefingMode {\n NoRestriction = 0,\n RequiredSignOffForAllActiveSiteBriefings = 1,\n}\nexport enum AccessControlSupplierDocumentMode {\n NoRestriction = 0,\n RequiredSignOffForAllActiveSupplierDocuments = 1,\n}\nexport enum AccessControlUnitDirection {\n InOut = 0,\n In = 1,\n Out = 2,\n}\n","export enum SiteManagementMode {\n Site,\n Supplier,\n}\n","export enum AccessControlUnitProvider {\n Disable = 0,\n OneBreadCrumb = 1,\n BioStar = 2,\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from \"@angular/common/http\";\nimport { ErrorService } from \"./error.service\";\nimport { Observable } from \"rxjs\";\nimport { catchError } from \"rxjs/operators\";\nimport { ManageSiteModel, ManageSiteViewModel } from \"../models/manage-site-view-model\";\nimport { ServerResultData } from '../models/server-result-data';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ManageSiteService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getSiteFullData(siteId: number): Observable {\n return this._http.get(`api/site/get-site-full-data/${siteId}`).pipe(catchError(this._errorService.handleError));\n }\n\n\n saveSiteFullData(siteId: number, model: ManageSiteModel): Observable> {\n return this._http.post>(`api/site/save-site-full-data/${siteId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from \"@angular/common/http\";\nimport { ErrorService } from \"./error.service\";\nimport { Observable } from \"rxjs\";\nimport { catchError } from \"rxjs/operators\";\nimport { ManageSiteViewModel } from \"../models/manage-site-view-model\";\nimport { ServerResultData } from \"../models/server-result-data\";\nimport {\n ManageSiteSupplierModel,\n} from \"../models/site-supplier-management/manage-site-supplier-view-model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ManageSupplierSiteService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getSiteSupplierFullData(siteSupplierId: number): Observable {\n return this._http.get(`api/site/get-site-supplier-full-data/${siteSupplierId}`).pipe(catchError(this._errorService.handleError));\n }\n\n saveSitSupplierFullData(siteSupplierId: number, model: ManageSiteSupplierModel): Observable> {\n return this._http.post>(`api/site/save-site-supplier-full-data/${siteSupplierId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AccessControlAutomaticAttendanceMode } from '../enums/access-control-automatic-attendance-mode';\n\n@Pipe({\n name: 'accessControlAutomaticAttendanceMode'\n})\nexport class AccessControlAutomaticAttendanceModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == AccessControlAutomaticAttendanceMode.Disabled || value === false) return 'Disabled';\n if (value == AccessControlAutomaticAttendanceMode.Enabled || value === true) return 'Enabled';\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AccessControlUnitProvider } from '../enums/access-control-unit-provider';\n\n@Pipe({\n name: 'accessControlUnitProvider'\n})\nexport class AccessControlUnitProviderPipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == AccessControlUnitProvider.Disable) return 'Disable';\n if (value == AccessControlUnitProvider.OneBreadCrumb) return '1Breadcrumb';\n if (value == AccessControlUnitProvider.BioStar) return 'BioStar2';\n return value?.toString() ?? '';\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable } from 'rxjs';\nimport { BioStarLogViewModel } from '../models/biostar/biostar-log-viewmodel';\nimport { BioStarDevice } from '../models/biostar/view-models';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BiostarService {\n\n apiUrl = '/api/BioStar';\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n getBioStarDevices(siteId?: number)\n : Observable {\n return this.http.get(`${this.apiUrl}/biostar-device-list/${siteId ? siteId : ''}`)\n .pipe(catchError(this._errorService.handleError));\n }\n // isBiostarEnabled(): Observable {\n // return this.http.get(`${this.apiUrl}/is-enabled-biostar`)\n // .pipe(catchError(this._errorService.handleError));\n // }\n getLogs(): Observable {\n return this.http.get(`${this.apiUrl}/logs`)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","import { Directive } from '@angular/core';\nimport { AbstractControl, FormControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { emailListValidator } from '../helpers/email-list-validator';\n\n@Directive({\n selector: '[emailList]',\n providers: [{provide: NG_VALIDATORS, useExisting: EmailListDirective, multi: true}]\n})\nexport class EmailListDirective implements Validator {\n\n constructor() { }\n validate(control: FormControl): ValidationErrors {\n return emailListValidator(control);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup } from \"@angular/forms\";\nimport { CompanySiteContactInformationModel } from 'src/app/models/company-site-contact-information.view.model';\nimport { e168ValidatorNullableCompanyPhoneNumber } from \"../../../helpers/mobile-format-validator\";\nimport { pairwise, startWith } from \"rxjs/operators\";\n\n@Component({\n selector: 'obc-contact-information',\n templateUrl: './contact-information.component.html',\n styleUrls: ['./contact-information.component.scss']\n})\nexport class ContactInformationComponent implements OnInit {\n\n fg: FormGroup = new FormGroup({\n contactTitle: new FormControl(null),\n contactFullName: new FormControl(null),\n contactNumber: new FormControl(null, [e168ValidatorNullableCompanyPhoneNumber]),\n })\n\n @Output() result: EventEmitter = new EventEmitter()\n _contactInformationAsJson: FormControl;\n @Input() set contactInformationAsJson(contactInformationAsJson: FormControl) {\n this._contactInformationAsJson = contactInformationAsJson;\n }\n\n constructor() {\n }\n\n ngOnInit(): void {\n\n this._contactInformationAsJson.valueChanges?.pipe(startWith(undefined), pairwise()\n )?.subscribe(([oldValue, newValue]) => {\n if(oldValue != newValue) {\n try {\n let parsedContactInformation = JSON.parse(newValue) as CompanySiteContactInformationModel;\n if(parsedContactInformation) {\n this.fg.controls['contactTitle'].setValue(parsedContactInformation.contactTitle);\n this.fg.controls['contactFullName'].setValue(parsedContactInformation.contactFullName);\n this.fg.controls['contactNumber'].setValue(parsedContactInformation.contactNumber);\n }\n } catch(_) {}\n }\n });\n\n this.fg.valueChanges?.subscribe((r) => {\n this._contactInformationAsJson.setValue(\n JSON.stringify(\n {\n contactNumber: this.fg.controls['contactNumber'].value,\n contactFullName: this.fg.controls['contactFullName'].value,\n contactTitle: this.fg.controls['contactTitle'].value,\n } as CompanySiteContactInformationModel)\n );\n if(!this.fg.controls['contactNumber']?.valid) {\n this.result.emit(true);\n } else {\n this.result.emit(false);\n }\n })\n\n }\n\n}\n","
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n","","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\n\n@Component({\n selector: 'obc-duration-selector',\n templateUrl: './duration-selector.component.html',\n styleUrls: ['./duration-selector.component.scss']\n})\nexport class DurationSelectorComponent implements OnInit {\n\n @Input() durationInHour: number;\n @Output() durationSelectedChanged: EventEmitter = new EventEmitter();\n\n durationList = [\n { title: 'No Expiry', hour: null },\n { title: 'One Hour', hour: 1 },\n { title: '2 Hours', hour: 2 },\n { title: '4 Hours', hour: 4 },\n { title: '8 Hours', hour: 8 },\n { title: '24 Hours (1 Day)', hour: 24 },\n { title: '72 Hours (3 Days)', hour: 72 },\n { title: '168 Hours (7 Days)', hour: 168 },\n ];\n\n constructor() { }\n\n ngOnInit(): void {\n }\n valueChanged() {\n this.durationSelectedChanged.emit(this.durationInHour);\n }\n}\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n selector: 'obc-hour-minute-selector',\n templateUrl: './hour-minute-selector.component.html',\n styleUrls: ['./hour-minute-selector.component.scss']\n})\nexport class HourMinuteSelectorComponent implements OnInit {\n mode: 'Minute' | 'Hour' = 'Minute';\n valueAsMinute: number;\n valueAsHour: number;\n value: any;\n alreadyInitialized = false;\n\n @Input() cssClass: String;\n\n @Input() set minute(v: number) {\n this.valueAsMinute = v;\n this.valueAsHour = Math.round(this.valueAsMinute / 60);\n this.changeMode(\n this.alreadyInitialized == false ?\n v % 60 == 0 ? 'Hour' : 'Minute' : this.mode\n );\n this.alreadyInitialized = true;\n };\n\n @Input() set isMinuteActiveByDefault(_: boolean) {\n this.changeMode(this.mode);\n };\n\n get minute() {\n return this.valueAsMinute;\n };\n\n @Output() valueChanged: EventEmitter = new EventEmitter();\n\n set currentMode(mode) {\n this.mode = mode;\n this.changeMode(this.mode);\n }\n\n get currentMode() {\n return this.mode;\n }\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n\n changeMode(mode: 'Hour' | 'Minute') {\n this.mode = mode;\n\n if (this.mode == 'Minute')\n this.value = this.valueAsMinute;\n else\n this.value = this.valueAsHour;\n this.emitValue();\n }\n\n setHourMinuteValues(value, element: HTMLInputElement) {\n if(!element.checkValidity()) {\n value = 0;\n }\n if (this.mode == 'Hour') {\n this.valueAsHour = +value;\n this.valueAsMinute = Math.round(value * 60);\n } else {\n this.valueAsMinute = value;\n this.valueAsHour = Math.round(value * (1 / 60));\n }\n element.value = value;\n this.emitValue();\n }\n\n selectValue(input: HTMLInputElement) {\n input.select();\n }\n\n emitValue() {\n this.valueChanged.emit(+this.valueAsMinute);\n }\n\n}\n","
      \n \n
      \n \n \n
      \n
      \n","export enum QuestionRepository\n{\n Company = 0,\n Site = 1\n}","export enum ManageSiteQuestionVisitorTypeMode {\n Question = 0,\n Document = 1,\n RequiredField = 2,\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { SiteRequiredUserDocumentViewmodel } from '../models/site-required-user-document-viewmodel';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteRequiredUserDocumentService {\n apiUrl: string = \"/api/SiteRequiredUserDocument\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n getAll(siteId: number, isCheckIn: boolean): Observable {\n return this.http.get(`${this.apiUrl}/get-all/${siteId}/${isCheckIn}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n remove(id: number): Observable {\n return this.http.get(`${this.apiUrl}/remove/${id}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n add(model: SiteRequiredUserDocumentViewmodel): Observable {\n return this.http.post(`${this.apiUrl}/add`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateState(id:number, siteId:number, state: number ): Observable {\n return this.http.get(`${this.apiUrl}/update-state/${id}/${siteId}/${state}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { SiteRequiredFieldViewModel } from '../models/site-required-field-viewmodel';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteRequiredFieldService {\n apiUrl: string = \"/api/SiteRequiredField\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n getAll(siteId: number): Observable {\n return this.http.get(`${this.apiUrl}/get-site-required-fields/${siteId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n update(siteId: number, model: SiteRequiredFieldViewModel): Observable {\n return this.http.post(`${this.apiUrl}/update-filed-state/${siteId}`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","
      \n \n
      \n
      \n Do you want to limit visitors of this site based on types?\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ManageSiteViewModel } from \"../../models/manage-site-view-model\";\nimport { CheckedVisitorType, VisitorType } from \"../../models/visitor-type\";\n\n@Component({\n selector: 'obc-manage-site-visitor-type',\n templateUrl: './manage-site-visitor-type.component.html',\n styleUrls: ['./manage-site-visitor-type.component.scss']\n})\nexport class ManageSiteVisitorTypeComponent implements OnInit {\n inprogress = false;\n\n manageSiteModel: ManageSiteViewModel;\n @Input() set manageSiteViewModel(manageSiteModel: ManageSiteViewModel) {\n this.manageSiteModel = manageSiteModel;\n this.init();\n }\n\n checkedIds: number[];\n @Output() onchange: EventEmitter = new EventEmitter();\n\n constructor() { }\n\n ngOnInit() {\n this.init();\n }\n\n init() {\n\n if(this.manageSiteModel) {\n let siteVisitorTypes = this.manageSiteModel?.siteVisitorTypes ?? [];\n this.checkedIds = this.manageSiteModel?.siteVisitorTypes?.map(v => v.visitorTypeId);\n this.limited = siteVisitorTypes.length > 0\n }\n\n }\n\n getCheckedType(visitorType: VisitorType) {\n return {\n ...visitorType,\n checked: this.manageSiteModel?.siteVisitorTypes?.findIndex(siteVisitorType => visitorType.id == siteVisitorType.visitorTypeId) > -1\n } as CheckedVisitorType\n }\n toggleCheckedType(item: CheckedVisitorType) {\n item.checked = !item.checked;\n this.updateCheckedIds(item);\n return item;\n }\n\n onItemClick(item: CheckedVisitorType) {\n this.onchange.emit(item);\n if(this.checkedIds.length == 0) {\n this._limited = false;\n this.isVisitorTypesEnabled.emit(false);\n }\n }\n\n onClearAll() {\n for(let visitorType of this.manageSiteModel?.visitorTypes) {\n let item = { ...visitorType, checked: false };\n this.updateCheckedIds(item);\n this.onItemClick(item)\n }\n }\n\n updateCheckedIds(item) {\n if(item.checked)\n this.checkedIds.push(item.id);\n else {\n let index = this.checkedIds.indexOf(item.id);\n if(index > -1)\n this.checkedIds.splice( index, 1)\n }\n }\n\n _limited: boolean;\n set limited(value: boolean) {\n this._limited = value;\n if (this._limited == false) {\n this.onClearAll();\n }\n this.isVisitorTypesEnabled.emit(this._limited);\n };\n @Output() isVisitorTypesEnabled: EventEmitter = new EventEmitter();\n\n get limited(): boolean {\n return this._limited;\n }\n}\n","
      \n \n
      \n
      \n

      Ask based on visitor type? \n

      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ManageSiteQuestionVisitorTypeMode } from 'src/app/enums/manage-site-question-visitor-type-mode.enum';\nimport { SiteQuestionService } from 'src/app/services/site-question.service';\nimport { ManageSiteViewModel } from \"../../models/manage-site-view-model\";\nimport { CheckedVisitorType, VisitorType } from \"../../models/visitor-type\";\nimport { SiteVisitorTypeViewModel } from \"../../models/site-visitortype-accompanier-viewmodel\";\n\nenum SiteQuestionMethod {\n Add = 1,\n Remove = 2,\n Clear = 3,\n GetAll = 4,\n}\n\n@Component({\n selector: 'obc-manage-site-question-visitor-type',\n templateUrl: './manage-site-question-visitor-type.component.html',\n styleUrls: ['./manage-site-question-visitor-type.component.scss']\n})\nexport class ManageSiteQuestionVisitorTypeComponent implements OnInit {\n\n @Input() questionVisitorTypeIds: number[] = [];\n\n manageSiteModel: ManageSiteViewModel;\n @Input() set manageSiteViewModel(manageSiteModel: ManageSiteViewModel) {\n this.manageSiteModel = manageSiteModel;\n this.init();\n }\n\n ManageSiteQuestionVisitorTypeMode = ManageSiteQuestionVisitorTypeMode;\n @Input() mode: ManageSiteQuestionVisitorTypeMode = ManageSiteQuestionVisitorTypeMode.Question;\n get modeLabel(): string {\n switch (this.mode) {\n case ManageSiteQuestionVisitorTypeMode.Document:\n return \"document\";\n case ManageSiteQuestionVisitorTypeMode.Question:\n return \"question\";\n case ManageSiteQuestionVisitorTypeMode.RequiredField:\n return \"filed\";\n }\n }\n inprogress = false;\n types: VisitorType[] = [];\n get selecteds(): number[] {\n if (!this.checkedTypes) return [];\n return this.checkedTypes.filter(i => i.checked).map(i => i.id);\n };\n checkedTypes: CheckedVisitorType[];\n _siteEntityId: number;\n @Output() onChange: EventEmitter = new EventEmitter();\n @Input() set siteEntityId(id: number) {\n this._siteEntityId = id;\n }\n constructor(private siteQuestionService: SiteQuestionService) { }\n\n ngOnInit() {\n this.init();\n }\n\n init() {\n\n if (this.manageSiteModel?.siteVisitorTypes) {\n this.checkedTypes = this.manageSiteModel?.siteVisitorTypes?.map((siteVisitorType) => {\n return {\n ...this.manageSiteModel?.visitorTypes?.find(vType => vType.id == siteVisitorType.visitorTypeId) ?? {},\n checked: this.questionVisitorTypeIds?.findIndex(questionVisitorTypeId => questionVisitorTypeId == siteVisitorType.visitorTypeId) > -1\n } as CheckedVisitorType\n });\n this.limited = this.questionVisitorTypeIds?.length > 0;\n\n }\n }\n\n onItemClick(item: any) {\n this.onChange.emit(item);\n }\n\n getCheckedType(siteVisitorType: SiteVisitorTypeViewModel) {\n return {\n ...this.manageSiteModel?.visitorTypes?.find(vType => vType.id == siteVisitorType.visitorTypeId) ?? {},\n checked: this.questionVisitorTypeIds?.findIndex(questionVisitorTypeId => questionVisitorTypeId == siteVisitorType.visitorTypeId) > -1\n } as CheckedVisitorType\n }\n\n anySelected(): boolean {\n if (this.checkedTypes == null) return false;\n return this.checkedTypes.find(i => i.checked) != null;\n }\n\n onClearAll() {\n this.types = [];\n this.checkedTypes = [];\n }\n\n _limitedPrivate: boolean;\n _limited: boolean;\n set limited(value: boolean) {\n if (this._limited != value) {\n this._limited = value;\n this._limitedPrivate = value;\n if (this._limited == false && this.selecteds.length > 0)\n this.onClearAll();\n }\n };\n\n get limited(): boolean {\n return this._limited;\n }\n\n onVisitorTypeStatusChanged(enabled: boolean) {\n if (enabled == false) {\n this.manageSiteModel?.siteVisitorTypes?.forEach(visitorType => {\n var val = this.getCheckedType(visitorType);\n if (val.checked)\n this.onItemClick(val);\n });\n }\n this._limitedPrivate = enabled;\n }\n\n}\n","import { UserBusinessViewModel } from './user-business-viewmodel';\nimport { AnswerMode } from '../enums/answer-mode.enum';\nimport { EmergencyContactViewModel } from './emergency-contact-view-model';\nimport { TwoFactorVerificationMode } from '../enums/two-factor-verification-mode';\n\nexport class PrimitiveUserInformation {\n mobile: string;\n firstName: string;\n lastName: string;\n userId: number;\n}\n\nexport interface SendWelcomeEmailUserProfile extends PrimitiveUserInformation {\n companyId: number;\n email: string;\n}\n\nexport interface BaseUserInformation extends PrimitiveUserInformation {\n email: string;\n birthDay?: Date;\n gender?: number;\n isEmailVerified: boolean;\n industryTypeText: string;\n companySupplier?: string;\n businessAbn?: string;\n businessAcn?: string;\n businessName?: string;\n twoFactorVerificationMode?: TwoFactorVerificationMode;\n hasTotpSecretKey?: boolean;\n}\nexport interface UserProfileViewmodel extends BaseUserInformation {\n lastLoginDate?: Date;\n userBarcodeContent: string;\n industryTypeId?: number;\n industryTypeText: string;\n profileImage: string;\n userBusinesses: UserBusinessViewModel[];\n emergencyContactAsJson: string;\n allowComminiucateWithUser: boolean;\n isActive2fa?: boolean;\n}\nexport interface UserContactInformation extends BaseUserInformation {\n checkInAnswerMode: AnswerMode;\n checkOutAnswerMode?: AnswerMode;\n completeCheckInAnswerDate?: Date;\n completeCheckOutAnswerDate?: Date;\n isDisputedCheckOutDate: boolean;\n isDisputedCheckInDate: boolean;\n isDisputable: boolean;\n siteName: string;\n siteId: number;\n allowComminiucateWithUser?: boolean;\n companyId: number;\n checkInDate: Date;\n checkOutDate: Date;\n visitorTypeTitle: string;\n checkInDistanceTitle: string;\n checkOutDistanceTitle: string;\n}\n\n\nexport interface RequestUserProfileUpdateViewmodel {\n mobile: string;\n firstName: string;\n lastName: string;\n email: string;\n birthDay?: any;//Actually it is datetime but to be able to remove timezone we send it as string to server\n gender?: number;\n profileImageBase64: string;\n userBusinesses: UserBusinessViewModel[];\n fileType: string;\n emergencyContactAsJson: string;\n twoFactorVerificationMode: TwoFactorVerificationMode;\n}\n","\n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n You can't add more announcement to site!\n
      \n
      \n
      \n \n
      \n
      \n \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      AnnouncementTypeOrderValid FromValid ToDisplay TimeModeForce View ModeFiltersGroup Name\n
      \n

      \n There is no announcement, You can add by clicking on `Add New Announcement` button\n

      \n
      {{an.model.title}} {{announcementTypes[an.model.type]}} \n
      \n \n \n
      \n
      {{an.model.validFrom | datetime}}{{an.model.validTo | datetime}}= 0\">{{an.model.displayTime |\n siteAnnouncementDisplayTime}}\n {{an.model.mode |\n announcementMode}}\n \n {{an.model.forceViewMode |\n siteAnnouncementForceViewMode}}\n \n
      \n \n
      \n
      \n {{p.mobile}} ({{p.firstName ?? ''}} {{p.lastName ?? ''}})\n
      \n
      \n
      \n 0 \" [tooltip]=\"userTooltipHtml\"\n style=\"border-bottom: dashed 1px;\">\n {{an.model.users.length}}\n User(s)\n \n
      \n
      \n \n
      \n
      \n {{inductryType.type}}\n
      \n
      \n
      \n 0\"\n [tooltip]=\"industryTypeTooltipHtml\" style=\"border-bottom: dashed 1px;\">\n {{an.model.industryTypes.length}}\n Industry Type(s)\n \n
      \n
      \n \n
      \n
      {{vtype.title}}
      \n
      \n
      \n 0\"\n [tooltip]=\"visitorTypeTooltipHtml\" style=\"border-bottom: dashed 1px;\">\n {{an.model.visitorTypes.length}}\n Visitor Type(s)\n \n
      \n
      \n \n
      \n
      {{supplier.name}}
      \n
      \n
      \n 0\"\n [tooltip]=\"companySupplierTooltipHtml\" style=\"border-bottom: dashed 1px;\">\n {{an.model.companySuppliers.length}}\n Company Supplier(s)\n \n
      \n \n No Filter\n \n
      {{an.model.groupName}}\n
      \n \n \n
      \n
      \n
      \n
      \n\n \n
      \n \n
      \n
      \n
      \n {{switchview == 'add' ? 'Add New Announcement' : 'Edit Announcement'}}\n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n
      \n
      \n \n \n \n \n
      \n
      \n \n \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n \n
      \n Force View Mode Hints\n
      \n
      \n Pdf: User must view all the pages of the pdf file\n
      \n
      \n Video: User must watch the video right through to the end\n
      \n
      \n Audio: User must listen to the audio right through to the end\n
      \n
      \n
      \n
      \n \n
      \n\n \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n Please enter valid mobile number\n
      \n
      \n Mobile number is not valid\n
      \n 0\"\n class=\"valid-feedback\" style=\"display: block;\">\n {{successMessage}}\n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      0\">\n
      \n
      \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      0\">\n
      \n
      \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      0\">\n
      \n
      \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n\n\n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n \n
      ","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { SiteService } from 'src/app/services/site.service';\nimport { AnnouncementService } from 'src/app/services/announcement.service';\nimport { EditableItem } from 'src/app/models/editable-item';\nimport { AnnouncementMode } from 'src/app/enums/announcement-mode.enum';\nimport { FormControl, Validators } from '@angular/forms';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { ModalService } from '../../../services/modal.service';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { UserService } from 'src/app/services/user.service';\nimport { UserAutoCompleteFilterByFields } from '../../../enums/user-auto-complete-target-fields';\nimport { e168Validator2 } from '../../../helpers/mobile-format-validator';\nimport { PrimitiveUserInformation } from '../../../models/user-profile-viewmodel';\nimport { IndustryTypeViewModel } from '../../../models/industry-type/industry-type-view-model';\nimport { IndustryTypeService } from '../../../services/industry-type-service';\nimport { VisitorType } from 'src/app/models/visitor-type';\nimport { SiteTemplateStatus } from 'src/app/enums/site-template-status.enum';\nimport { deepClone, getCountLabel, isEqual } from 'src/app/helpers/general-functions';\nimport { ManageSiteViewModel } from \"../../../models/manage-site-view-model\";\nimport { AnnouncementViewModel, SiteAnnouncementViewModel } from \"../../../models/announcement-viewmodel\";\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { DirtyComponents } from \"../../../models/dirty-components\";\nimport { SiteAnnouncementForceViewMode } from 'src/app/enums/site-announcement-force-view-mode';\nimport { SiteAnnouncementDisplayTime } from 'src/app/enums/site-announcement-display-time.enum';\nimport { CompanySupplierQuery, CompanySupplierViewModel } from 'src/app/models/supplier-models';\nimport { CompanySupplierService } from 'src/app/services/company-supplier.service';\nimport { SiteManagementMode } from \"../../../enums/site-management-mode\";\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\n\n@Component({\n selector: 'obc-site-announcement-manage',\n templateUrl: './site-announcement-manage.component.html',\n styleUrls: ['./site-announcement-manage.component.css']\n})\nexport class SiteAnnouncementManageComponent implements OnInit {\n\n FileType = FileType;\n DatetimePickerMode = DatetimePickerMode;\n dirtyComponents: DirtyComponents;\n @Input('dirtyComponents') set setDirtyComponents(dirtyComponents: DirtyComponents) {\n this.dirtyComponents = dirtyComponents;\n }\n @Input() siteManagementMode: SiteManagementMode = SiteManagementMode.Site;\n SiteManagementMode = SiteManagementMode;\n\n makeComponentDirty() {\n this.dirtyComponents.announcements.isDirty = !isEqual(this.dirtyComponents?.announcements?.snapshot, this.myCopy());\n }\n myCopy() {\n return {\n siteAnnouncements: deepClone(this.manageSiteModel?.announcements),\n };\n }\n\n maxAnnouncementCount = 50;\n get canAddNewAnnouncement(): boolean {\n return (this.siteAnnouncements?.length ?? 0) < this.maxAnnouncementCount;\n }\n\n manageSiteModel: ManageSiteViewModel;\n @Input() set manageSiteViewModel(manageSiteModel: ManageSiteViewModel) {\n this.manageSiteModel = manageSiteModel;\n this.loadSiteAnnouncements();\n\n if (this.manageSiteModel && this.manageSiteModel.announcements) {\n this.dirtyComponents.announcements.snapshot = this.myCopy();\n }\n }\n @Output() manageSiteViewModelChange = new EventEmitter()\n\n _switchview: 'list' | 'add' | 'edit' = 'list';\n get switchview() { return this._switchview; }\n set switchview(value) {\n if (value == 'edit' && this.newSiteAnnouncement && this.newSiteAnnouncement.formGroup) {\n this.newSiteAnnouncement.formGroup.controls.announcementId.disable();\n } else\n this.newSiteAnnouncement.formGroup.controls.announcementId.enable();\n this._switchview = value;\n }\n siteId: number;\n progress = false;\n announcementTypes = FileType;\n siteAnnouncements: EditableItem[];\n newSiteAnnouncement: EditableItem;\n currentCompleteUser: PrimitiveUserInformation = new PrimitiveUserInformation();\n filterUserBy = UserAutoCompleteFilterByFields;\n successMessage: string = null;\n industryTypeList: IndustryTypeViewModel[];\n visitorTypeList: VisitorType[];\n companySupplierList: CompanySupplierViewModel[];\n selectedIndustryType: IndustryTypeViewModel;\n SiteTemplateStatus = SiteTemplateStatus;\n selectedVisitorType: VisitorType;\n selectedCompanySupplier: CompanySupplierViewModel;\n isEnableAddUser: boolean = false;\n isEnableAddIndustryType: boolean = false;\n isEnableAddVisitorType: boolean = false;\n isEnableAddCompanySupplier: boolean = false;\n UserPermission = UserPermission;\n SiteAnnouncementForceViewMode = SiteAnnouncementForceViewMode;\n get headerInfo() {\n return getCountLabel(this.siteAnnouncements?.length, 'Announcement');\n }\n\n announcements: AnnouncementViewModel[];\n announcementMode = AnnouncementMode;\n siteAnnouncementDisplayTime = SiteAnnouncementDisplayTime;\n constructor(private siteService: SiteService,\n public userService: UserService,\n private announcementService: AnnouncementService,\n private router: Router,\n private modalService: ModalService,\n private industryTypeService: IndustryTypeService,\n private companySupplierService: CompanySupplierService) { }\n\n ngOnInit() {\n this.loadSiteAnnouncements();\n }\n\n loadSiteAnnouncements() {\n this.progress = true;\n\n let validators = {\n \"announcementId\": [Validators.required]\n };\n this.siteAnnouncements = this.manageSiteModel?.announcements?.map((i) => {\n return new EditableItem(i, validators);\n });\n this.reOrderSiteAnnouncements();\n this.progress = false;\n }\n\n reOrderSiteAnnouncements() {\n for (let i = 0; i < (this.siteAnnouncements?.length ?? 0); i++) {\n this.siteAnnouncements.find(j => j.model.announcementId == this.siteAnnouncements[i].model.announcementId).model.order = i;\n }\n this.sortSiteAnnouncements();\n }\n\n sortSiteAnnouncements() {\n this.siteAnnouncements = this.siteAnnouncements?.sort((p, n) => p.model.order - n.model.order);\n }\n\n\n //#region ADD/Edit Site Announcement\n async initAddEditSiteAnouncement(switchView: any, id?: number) {\n return new Promise(async (resolve) => {\n if (switchView == \"add\") {\n this.newSiteAnnouncement = new EditableItem({\n siteId: this.manageSiteModel?.site?.id,\n siteName: null,\n announcementId: null,\n validFrom: null,\n validTo: null,\n mode: this.announcementMode.Silent,\n users: [],\n industryTypes: [],\n visitorTypes: [],\n companySuppliers: [],\n title: null,\n groupName: null,\n order: (this.siteAnnouncements?.length ?? 0) == 0 ? 0 : this.siteAnnouncements?.length,\n type: FileType.Pdf,\n forceViewMode: this.SiteAnnouncementForceViewMode.Disable,\n displayTime: this.siteAnnouncementDisplayTime.AfterCheckin,\n } as SiteAnnouncementViewModel, {\n });\n }\n this.switchview = switchView;\n await this.getAnnouncementList(id);\n\n this.newSiteAnnouncement?.formGroup?.get('announcementId')?.valueChanges?.subscribe((res) => {\n if (res) {\n let relatedAnnouncement = this.announcements?.find((ann) => ann.id == res);\n if (relatedAnnouncement) {\n this.onAnnouncementTypeChanged(relatedAnnouncement.type);\n }\n }\n });\n\n this.getIndustryTypeList();\n this.getVisitorTypeList();\n this.getCompanySupplierList();\n this.currentCompleteUser = new PrimitiveUserInformation();\n this.isEnableAddUser = false;\n this.isEnableAddIndustryType = false;\n this.isEnableAddVisitorType = false;\n this.isEnableAddCompanySupplier = false;\n resolve();\n });\n }\n\n async onEditSelected(selectedSiteAnnouncement: SiteAnnouncementViewModel) {\n this.newAnnouncementType = selectedSiteAnnouncement.type;\n this.newSiteAnnouncement = new EditableItem({\n siteId: this.manageSiteModel?.site?.id,\n siteName: selectedSiteAnnouncement.siteName,\n announcementId: selectedSiteAnnouncement.announcementId,\n siteAnnouncementId: selectedSiteAnnouncement.siteAnnouncementId,\n validFrom: selectedSiteAnnouncement.validFrom,\n validTo: selectedSiteAnnouncement.validTo,\n mode: selectedSiteAnnouncement.mode,\n users: selectedSiteAnnouncement.users ? [...selectedSiteAnnouncement.users] : [],\n industryTypes: selectedSiteAnnouncement.industryTypes ? [...selectedSiteAnnouncement.industryTypes] : [],\n visitorTypes: selectedSiteAnnouncement.visitorTypes ? [...selectedSiteAnnouncement.visitorTypes] : [],\n title: selectedSiteAnnouncement.title,\n groupName: selectedSiteAnnouncement.groupName,\n order: selectedSiteAnnouncement.order,\n type: selectedSiteAnnouncement.type,\n forceViewMode: selectedSiteAnnouncement.forceViewMode,\n displayTime: selectedSiteAnnouncement.displayTime,\n companySuppliers: selectedSiteAnnouncement.companySuppliers ? [...selectedSiteAnnouncement.companySuppliers] : [],\n } as SiteAnnouncementViewModel, {\n });\n this.switchview = \"edit\";\n await this.initAddEditSiteAnouncement(this.switchview, selectedSiteAnnouncement.announcementId);\n if ((selectedSiteAnnouncement.users?.length ?? 0) > 0)\n this.isEnableAddUser = true;\n if ((selectedSiteAnnouncement.industryTypes?.length ?? 0) > 0)\n this.isEnableAddIndustryType = true;\n if ((selectedSiteAnnouncement.visitorTypes?.length ?? 0) > 0)\n this.isEnableAddVisitorType = true;\n if ((selectedSiteAnnouncement.companySuppliers?.length ?? 0) > 0)\n this.isEnableAddCompanySupplier = true;\n }\n\n async getAnnouncementList(selectedAnnouncementId?: number) {\n this.progress = true;\n return new Promise((resolve) => {\n this.announcementService.getAll(SiteActiveStatus.Active)\n .subscribe(res => {\n this.announcements = res;\n\n let formControl = this.newSiteAnnouncement.formGroup.get('announcementId');\n if (selectedAnnouncementId)\n formControl.setValue(+selectedAnnouncementId);\n else if (formControl.value == null && !this.userService.isCompanyAdminUser() && this.announcements?.length > 0) {\n formControl.setValue(this.announcements[0].id)\n }\n this.progress = false;\n resolve();\n });\n });\n }\n\n\n //#region Site Announcement Users\n changeEnableAddUser(value) {\n this.isEnableAddUser = value;\n }\n onSelectUser($event) {\n // if user selected update all inputs\n if ($event.id != null) {\n this.currentCompleteUser = $event;\n }\n }\n onInputChange($event) {\n if (!this.currentCompleteUser)\n this.currentCompleteUser = new PrimitiveUserInformation();\n this.currentCompleteUser[$event.field] = $event.value;\n }\n onPushNewUser() {\n if (this.isMobileValid === true) {\n let list = this.newSiteAnnouncement.formGroup.controls.users.value;\n if (list.find(i => i.mobile === this.currentCompleteUser.mobile) == undefined) {//Don't add duplicate records with same mobile number\n this.newSiteAnnouncement.formGroup.controls.users.value.push(this.currentCompleteUser);\n this.currentCompleteUser = new PrimitiveUserInformation();\n }\n }\n }\n onRemoveUser(user: PrimitiveUserInformation) {\n let list = this.newSiteAnnouncement.formGroup.controls.users.value;\n this.newSiteAnnouncement.formGroup.controls.users.value.splice(list.indexOf(user), 1);\n }\n get isMobileValid(): boolean {\n return new FormControl(this.currentCompleteUser?.mobile, [e168Validator2])?.valid;\n }\n getUserFullName(user: PrimitiveUserInformation): string {\n if (user == null)\n return \"\";\n if (user.firstName == undefined && user.lastName == undefined)\n return \"\";\n return \"( \" +\n (user.firstName == undefined ? \"\" : user.firstName) +\n \" \" +\n (user.lastName == undefined ? \"\" : user.lastName) +\n \" )\";\n }\n //#endregion\n\n //#region Site Announcement Industry Types\n changeEnableAddIndustry(value) {\n this.isEnableAddIndustryType = value;\n }\n\n changeEnableAddVisitor(value) {\n this.isEnableAddVisitorType = value;\n }\n\n changeEnableAddCompanySupplier(value) {\n this.isEnableAddCompanySupplier = value;\n }\n\n getIndustryTypeList() {\n this.industryTypeService.getActiveIndustryTypes()\n .subscribe(res =>\n this.industryTypeList = res\n );\n }\n\n getVisitorTypeList() {\n this.siteService.getVisitorTypesWithSiteVisitorTypeIdsViewModel(this.manageSiteModel?.site?.id)\n .subscribe(res => {\n this.visitorTypeList = res.visitorTypes\n });\n }\n\n getCompanySupplierList() {\n this.companySupplierService.getCachedSuppliers({ siteId: this.manageSiteModel?.site?.id, term: null } as CompanySupplierQuery, null)\n .subscribe(res => {\n this.companySupplierList = res.data\n });\n }\n\n onPushNewIndustryType() {\n if (this.selectedIndustryType) {\n let list = this.newSiteAnnouncement.formGroup.controls.industryTypes.value;\n if (list.find(i => i.id === this.selectedIndustryType.id) == undefined) {//Don't add duplicate records with same id\n this.newSiteAnnouncement.formGroup.controls.industryTypes.value.push(this.selectedIndustryType);\n this.selectedIndustryType = null;\n }\n }\n }\n\n onPushNewVisitorType() {\n if (this.selectedVisitorType) {\n let list = this.newSiteAnnouncement.formGroup.controls.visitorTypes.value;\n if (list.find(i => i.id === this.selectedVisitorType.id) == undefined) {//Don't add duplicate records with same id\n this.newSiteAnnouncement.formGroup.controls.visitorTypes.value.push(this.selectedVisitorType);\n this.selectedVisitorType = null;\n }\n }\n }\n\n onPushNewCompanySupplier() {\n if (this.selectedCompanySupplier) {\n let list = this.newSiteAnnouncement.formGroup.controls.companySuppliers.value;\n if (list.find(i => i.id === this.selectedCompanySupplier.id) == undefined) {//Don't add duplicate records with same id\n this.newSiteAnnouncement.formGroup.controls.companySuppliers.value.push(this.selectedCompanySupplier);\n this.selectedCompanySupplier = null;\n }\n }\n }\n\n onRemoveIndustryType(industryTpe: IndustryTypeViewModel) {\n let list = this.newSiteAnnouncement.formGroup.controls.industryTypes.value;\n this.newSiteAnnouncement.formGroup.controls.industryTypes.value.splice(list.indexOf(industryTpe), 1);\n }\n onRemoveVisitorType(visitorType: VisitorType) {\n let list = this.newSiteAnnouncement.formGroup.controls.visitorTypes.value;\n this.newSiteAnnouncement.formGroup.controls.visitorTypes.value.splice(list.indexOf(visitorType), 1);\n }\n onRemoveCompanySupplier(companySupplier: CompanySupplierViewModel) {\n let list = this.newSiteAnnouncement.formGroup.controls.companySuppliers.value;\n this.newSiteAnnouncement.formGroup.controls.companySuppliers.value.splice(list.indexOf(companySupplier), 1);\n }\n //#endregion\n\n //When Create New Announcement\n async onAnnouncementCreated(model: AnnouncementViewModel) {\n if (model.announcementId) {\n await this.getAnnouncementList(model.announcementId)\n // this.newSiteAnnouncement.formGroup.get(\"announcementId\").setValue(model.id);\n // this.newSiteAnnouncement.formGroup.get(\"title\").setValue(model.title);\n // this.newSiteAnnouncement.formGroup.get(\"groupName\").setValue(model.groupName);\n // this.newSiteAnnouncement.formGroup.get(\"type\").setValue(model.type);\n // this.newSiteAnnouncement.formGroup.get(\"order\").setValue(model.order);\n this.onSave(this.newSiteAnnouncement);\n }\n }\n\n validateModel(editableModel: EditableItem): boolean {\n if (this.switchview != \"edit\" && editableModel.currentModel.announcementId &&\n this.siteAnnouncements?.find(f => f.model.announcementId == editableModel.currentModel.announcementId)) {\n this.modalService.warn(\"Unable to add duplicate site announcement.\");\n return false;\n }\n\n if (editableModel.currentModel.validFrom && editableModel.currentModel.validTo) {\n if (new Date(editableModel.currentModel.validFrom) >= new Date(editableModel.currentModel.validTo)) {\n this.modalService.warn(\"Selected date range is not correct\");\n return false;\n }\n }\n if (editableModel.currentModel.announcementId && editableModel.currentModel.mode == null) {\n this.modalService.warn(\"Please select announcement mode\");\n return false;\n }\n if (!editableModel.currentModel.announcementId && !editableModel.currentModel.siteAnnouncementId) {\n this.modalService.warn(\"Please select announcement & mode\");\n return false;\n }\n if (this.isEnableAddUser == false) {\n editableModel.formGroup.get(\"users\").setValue([]);\n }\n if (this.isEnableAddIndustryType == false) {\n editableModel.formGroup.get(\"industryTypes\").setValue([]);\n }\n if (this.isEnableAddVisitorType == false) {\n editableModel.formGroup.get(\"visitorTypes\").setValue([]);\n }\n if (editableModel.currentModel.displayTime == this.siteAnnouncementDisplayTime.WhileCheckin) {\n editableModel.formGroup.get(\"mode\").setValue(this.announcementMode.Silent);\n }\n if (this.isEnableAddCompanySupplier == false) {\n editableModel.formGroup.get(\"companySuppliers\").setValue([]);\n }\n return true;\n }\n\n //Both Edit SiteAnnouncement and Add SiteAnnouncement(new annoumcement or old announcement) call this\n onSave(editableModel: EditableItem) {\n if (this.validateModel(editableModel))\n this.saveChanges(editableModel);\n }\n\n saveChanges(editableModel: EditableItem) {\n let model = editableModel.currentModel;\n if (model.siteAnnouncementId || this.switchview == \"edit\") // update\n {\n if (model.announcementId) // modify\n this.manageSiteModel.announcements =\n this.manageSiteModel?.announcements?.map(ann => ann.announcementId == model.announcementId ? model : ann);\n }\n else // add\n {\n let announcement = this.announcements?.find(i => i.id == model.announcementId);\n model.title = announcement.title;\n model.type = announcement.type;\n model.groupName = announcement.groupName;\n model.askMode = announcement.askMode;\n\n this.manageSiteModel?.announcements?.push(model);\n }\n\n this.switchview = \"list\";\n this.loadSiteAnnouncements();\n this.makeComponentDirty();\n }\n\n removeSiteAnnouncement(announcementId) {\n this.progress = true;\n\n this.manageSiteModel.announcements =\n this.manageSiteModel?.announcements?.filter(item => item.announcementId != announcementId);\n\n this.loadSiteAnnouncements();\n this.makeComponentDirty();\n this.progress = false;\n }\n\n changeSiteAnnouncementOrder(editableObject: EditableItem, moveUp: boolean) {\n this.sortSiteAnnouncements();\n let oldIndex = this.siteAnnouncements?.findIndex(f => f.model.announcementId == editableObject.model.announcementId);\n let newIndex = moveUp ? oldIndex - 1 : oldIndex + 1;\n\n while (oldIndex < 0) {\n oldIndex += this.siteAnnouncements?.length;\n }\n while (newIndex < 0) {\n newIndex += this.siteAnnouncements?.length;\n }\n if (newIndex >= this.siteAnnouncements?.length) {\n let k = newIndex - this.siteAnnouncements?.length + 1;\n while (k--) {\n // orderedSiteAnnouncements.push(undefined);\n }\n }\n this.siteAnnouncements?.splice(newIndex, 0, this.siteAnnouncements?.splice(oldIndex, 1)[0]);\n this.reOrderSiteAnnouncements();\n\n this.manageSiteModel.announcements =\n this.siteAnnouncements?.map(ann => ann.model);\n this.makeComponentDirty();\n }\n //#endregion\n\n newAnnouncementType: FileType = FileType.Pdf;\n playThroughLimitedFileTypes = [FileType.Video, FileType.Audio, FileType.Pdf];\n getWhiteListFileTypes() {\n if (this.newSiteAnnouncement.formGroup.get('forceViewMode').value === SiteAnnouncementForceViewMode.SetPlaythroughToMandatory)\n return this.playThroughLimitedFileTypes;\n return [];\n }\n onAnnouncementTypeChanged(type: FileType) {\n this.newAnnouncementType = type;\n }\n}\n","
      \n
      \n {{title}}\n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n
      \n Induction\n Add
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n
      \n

      There are currently no more available site inductions to add to this site\n

      \n
      \n {{queze?.title}}\n ({{queze.inductionKey}}) \n \n \n
      \n
      \n
      \n
      \n
      ","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { InductionViewModel } from 'src/app/models/induction-viewmodel';\nimport { UserDocumentType } from 'src/app/models/user-document-type';\n\n@Component({\n selector: 'app-induction-selector',\n templateUrl: './induction-selector.component.html',\n styleUrls: []\n})\nexport class InductionSelectorComponent implements OnInit {\n title = \"Select Document(s)\";\n filterTerm = null;\n inductions : InductionViewModel[] = [];\n addedInductions : number[] = [];\n addInduction : Function;\n get availableInductions(): InductionViewModel[] {\n return this.inductions.filter(function (x) { return this.indexOf(x.id) < 0 }, this.addedInductions);\n };\n constructor(public bsModalRef: BsModalRef,) { }\n\n ngOnInit() {\n }\n\n onAddInduction(id: number) {\n var induction = this.availableInductions.find(x=> x.id == id);\n if(induction && this.addInduction)\n {\n this.addedInductions.push(id);\n this.addInduction(induction);\n } \n }\n\n}\n","\n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n Induction\n \n
      \n {{si.induction}}\n (Disable) \n ({{si.inductionKey}}) \n \n
      \n \n
      \n
      \n

      \n There are currently no site based inductions applied to this site.\n

      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n

      Site Inductions

      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n\n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n Induction\n \n
      \n {{si.induction}}\n ({{si.inductionKey}}) \n \n
      \n \n
      \n
      \n

      \n There are currently no site based inductions applied to this site.\n

      \n
      \n
      \n
      \n
      \n
      \n\n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { CompanySiteScope } from 'src/app/enums/company-site-scope';\nimport { InductionMode } from 'src/app/enums/site-induction-mode.enum';\nimport { deepClone, getCountLabel, isEqual } from 'src/app/helpers/general-functions';\nimport { InductionViewModel, SiteRequiredInductionViewModel } from 'src/app/models/induction-viewmodel';\nimport { InductionService } from 'src/app/services/induction-service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { InductionSelectorComponent } from '../../induction/induction-selector/induction-selector.component';\nimport { ManageSiteViewModel } from \"../../../models/manage-site-view-model\";\nimport { DirtyComponents } from \"../../../models/dirty-components\";\n\n@Component({\n selector: 'app-site-induction',\n templateUrl: './site-induction.component.html',\n styles: []\n})\nexport class SiteInductionComponent implements OnInit {\n\n dirtyComponents: DirtyComponents;\n @Input('dirtyComponents') set setDirtyComponents(dirtyComponents: DirtyComponents) {\n this.dirtyComponents = dirtyComponents;\n }\n makeComponentDirty() {\n this.dirtyComponents.inductions.isDirty = !isEqual(this.dirtyComponents?.inductions?.snapshot, this.myCopy());\n }\n myCopy() {\n return {\n siteInductions: deepClone(this.manageSiteModel?.inductions),\n };\n }\n\n\n manageSiteModel: ManageSiteViewModel;\n @Input() set manageSiteViewModel(manageSiteModel: ManageSiteViewModel) {\n this.manageSiteModel = manageSiteModel;\n this.siteInductions = manageSiteModel?.inductions;\n\n if (this.manageSiteModel && this.manageSiteModel.inductions) {\n this.dirtyComponents.inductions.snapshot = this.myCopy();\n }\n }\n\n @Input() noCard: boolean = false;\n _siteId = new BehaviorSubject(0);\n @Input() set siteId(value: number) {\n if (this._siteId.value != value)\n this._siteId.next(value);\n };\n inductions = new BehaviorSubject([]);\n siteInductions: SiteRequiredInductionViewModel[];\n inProgress = false;\n InductionMode = InductionMode;\n formGroup = new FormGroup({\n id: new FormControl(null, []),\n inductionId: new FormControl(null, [Validators.required]),\n //InductionMode: new FormControl(null, [Validators.required])\n });\n\n get headerInfo() {\n return getCountLabel(this.siteInductions?.length, 'Induction');\n }\n\n constructor(private inductionService: InductionService,\n private modalService: ModalService,\n private bsModalService: BsModalService) { }\n\n ngOnInit() {\n this.inProgress = true;\n this.inductionService.getInductions(CompanySiteScope.Site, InductionMode.Auto, InductionMode.HostApprove)\n .pipe(\n finalize(() => { this.inProgress = false }),\n )\n .subscribe(res => {\n this.inductions.next(res);\n\n });\n }\n\n\n onRemoveSiteInduction(model: SiteRequiredInductionViewModel) {\n var index = this.siteInductions?.indexOf(model);\n this.siteInductions?.splice(index, 1);\n\n this.makeComponentDirty();\n }\n\n onAddSiteInduction(induction: InductionViewModel) {\n var model = {\n inductionId: induction.id,\n induction: induction.title,\n inductionKey: induction.inductionKey,\n mode: induction.mode\n } as SiteRequiredInductionViewModel;\n var index = this.siteInductions?.indexOf(model);\n if (index == -1)\n this.siteInductions?.push(model);\n }\n\n getInductionModeLabel(mode: InductionMode) {\n switch (mode) {\n case InductionMode.Auto:\n return \"Auto Approve\";\n case InductionMode.Disable:\n return \"Disable\";\n case InductionMode.HostApprove:\n return \"Manual\";\n }\n }\n\n onOpenAddInduction() {\n this.bsModalService.show(InductionSelectorComponent, {\n class: \"modal-lg\",\n initialState: {\n title: \"Select Induction(s)\",\n inductions: this.inductions.value,\n addedInductions: this.siteInductions?.map(x => x.inductionId),\n addInduction: ($event) => {\n this.onAddSiteInduction($event);\n this.makeComponentDirty();\n },\n },\n })\n }\n}\n","\n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n {{entityTitle}}\n \n
      \n {{sf.formName}}\n \n
      \n \n
      \n
      \n

      \n There is no {{entityTitle.toLowerCase()}}, You can add by clicking on `Add {{entityTitle}}` button\n

      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n

      Site Forms

      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n {{entityTitle}}\n \n
      \n {{sf.formName}}\n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject } from 'rxjs';\nimport { SiteFormViewModel, } from 'src/app/models/form/site-form-view-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { FormInjectorComponent } from '../../form-manage/form-injector/form-injector.component';\nimport { FormService } from 'src/app/services/form.service';\nimport { FormViewModel } from 'src/app/models/form/form-view-model';\nimport { FormScope } from 'src/app/enums/form-scope';\nimport { deepClone, getCountLabel, isEqual } from 'src/app/helpers/general-functions';\nimport { ManageSiteViewModel } from \"../../../models/manage-site-view-model\";\nimport { DirtyComponents } from \"../../../models/dirty-components\";\nimport { GetFormsQueryModel } from 'src/app/models/form/get-forms-query-model';\nimport { FormType } from \"../../../enums/form-type\";\n\n@Component({\n selector: 'app-site-form',\n templateUrl: './site-forms.component.html',\n styleUrls: ['./site-forms.component.scss']\n})\nexport class SiteFormsComponent implements OnInit {\n\n dirtyComponents: DirtyComponents;\n FormType = FormType;\n\n @Input('dirtyComponents') set setDirtyComponents(dirtyComponents: DirtyComponents) {\n this.dirtyComponents = dirtyComponents;\n }\n\n @Input() formType: FormType = FormType.Generic;\n\n makeComponentDirty() {\n this.dirtyComponents[this.dirtyComponentFieldName()].isDirty = !isEqual(this.dirtyComponents[this.dirtyComponentFieldName()]?.snapshot, this.myCopy());\n }\n\n dirtyComponentFieldName() {\n return (\n this.formType == FormType.Generic ? 'generic' :\n this.formType == FormType.Permit ? 'permit' :\n this.formType == FormType.AssetRegistration ? 'assetRegistration' :\n this.formType == FormType.SiteBriefing ? 'siteBriefing' :\n '') + 'Forms';\n }\n\n myCopy() {\n return {\n siteForms: deepClone(this.manageSiteModel?.forms?.filter(form => form.formType == this.formType) ?? []),\n };\n }\n\n\n firstRun: boolean = true;\n\n manageSiteModel: ManageSiteViewModel;\n\n @Input() set manageSiteViewModel(manageSiteModel: ManageSiteViewModel) {\n this.manageSiteModel = manageSiteModel;\n\n if (this.manageSiteModel && this.filterForms()) {\n this.dirtyComponents[this.dirtyComponentFieldName()].isDirty = false;\n this.dirtyComponents[this.dirtyComponentFieldName()].snapshot = this.myCopy();\n }\n }\n\n @Input() noCard: boolean = false;\n _siteId = new BehaviorSubject(0);\n @Input() set siteId(value: number) {\n if (this._siteId.value != value) {\n\n this._siteId.next(value);\n\n }\n };\n\n forms = new BehaviorSubject([]);\n inProgress = false;\n formGroup = new FormGroup({\n id: new FormControl(null, []),\n formId: new FormControl(null, [Validators.required]),\n // siteFormMode: new FormControl(null, [Validators.required])\n });\n\n get entityTitle() {\n return this.formType == FormType.Generic ? 'Form' :\n this.formType == FormType.Permit ? 'Permit' :\n this.formType == FormType.AssetRegistration ? 'Asset Registration Forms' :\n this.formType == FormType.SiteBriefing ? 'Site Briefing' : '';\n }\n\n get headerInfo() {\n return getCountLabel(this.filterForms()?.length ?? 0, this.entityTitle);\n }\n\n constructor(private formService: FormService,\n private modalService: ModalService,\n private bsModalService: BsModalService) {\n }\n\n ngOnInit() {\n this.firstRun = false;\n this.getForms();\n }\n\n filterForms() {\n return this.manageSiteModel?.forms?.filter(form => form.formType == this.formType) ?? [];\n }\n\n private getForms() {\n var model = {\n formScope: FormScope.Site,\n formType: this.formType\n } as GetFormsQueryModel;\n\n this.formService.getForms(model).subscribe(\n res => {\n if (res.success) {\n this.forms.next(res.data);\n } else {\n this.modalService.error(res.message);\n this.inProgress = false;\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n\n\n onRemoveSiteForm(model: SiteFormViewModel) {\n let index = this.manageSiteModel?.forms?.indexOf(model);\n this.manageSiteModel?.forms?.splice(index, 1);\n\n this.makeComponentDirty();\n }\n\n onAddSiteForm(form: FormViewModel) {\n var model = {\n formId: form.id,\n formName: form.name,\n siteFormId: null,\n formType: form.type\n } as SiteFormViewModel;\n\n let index = this.manageSiteModel?.forms?.indexOf(model);\n if (index == -1)\n this.manageSiteModel?.forms?.push(model);\n\n this.makeComponentDirty();\n }\n\n onOpenAddForm() {\n\n this.bsModalService.show(FormInjectorComponent, {\n class: \"modal-lg\",\n initialState: {\n formType: this.formType,\n title: `Select ${this.entityTitle}(s)`,\n forms: this.forms.value,\n addedForms: this.manageSiteModel?.forms?.map(x => x.formId),\n addForm: ($event) => {\n this.onAddSiteForm($event)\n },\n },\n })\n }\n\n getMainTitle() {\n switch (this.formType) {\n case FormType.Generic: return 'Generic Forms'\n case FormType.Permit: return 'Permits'\n case FormType.AssetRegistration: return 'Asset Registration Forms'\n case FormType.SiteBriefing: return 'Site Briefings'\n default: return '';\n }\n }\n}\n","\n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n
      GroupRemove
      \n

      \n There is no scannable group, You can add by clicking on `Add Scannable Group` button\n

      \n
      \n {{siteGroup.name}} {{siteGroup.label}}\n \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n\n
      \n \n
      \n
      \n
      \n
      \n \n
      \n

      Site Scannable Groups

      \n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n
      GroupRemove
      \n

      \n Please Select Scannable Groups\n

      \n
      \n {{siteGroup.name}} {{siteGroup.label}}\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n

      Scannable Groups\n

      \n \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n \n \n
      GroupsAdd
      \n
      \n
      \n\n
      \n
      \n \n \n \n \n \n \n \n \n \n \n
      \n

      There is no scannable group

      \n
      \n {{siteGroup.name}}\n\n \n {{siteGroup.label}}\n \n \n \n
      \n
      \n
      \n
      \n
      \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { SiteService } from 'src/app/services/site.service';\nimport { finalize } from 'rxjs/operators';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { ScannableService } from 'src/app/services/scannable.service';\nimport { FormControl } from '@angular/forms';\nimport { deepClone, getCountLabel, isEqual } from 'src/app/helpers/general-functions';\nimport { ManageSiteViewModel } from \"../../../models/manage-site-view-model\";\nimport { DirtyComponents } from \"../../../models/dirty-components\";\n\n@Component({\n selector: 'obc-site-scannable-group',\n templateUrl: './site-scannable-group.component.html',\n styleUrls: ['./site-scannable-group.component.css']\n})\nexport class SiteScannableGroupComponent implements OnInit {\n\n dirtyComponents: DirtyComponents;\n @Input('dirtyComponents') set setDirtyComponents(dirtyComponents: DirtyComponents) {\n this.dirtyComponents = dirtyComponents;\n }\n makeComponentDirty() {\n this.dirtyComponents.scannableGroups.isDirty = !isEqual(this.dirtyComponents?.scannableGroups?.snapshot, this.myCopy());\n }\n myCopy() {\n return {\n siteGroupIds: deepClone(this.manageSiteModel?.scannableGroups),\n };\n }\n\n manageSiteModel: ManageSiteViewModel;\n @Input() set manageSiteViewModel(manageSiteModel: ManageSiteViewModel) {\n this.manageSiteModel = manageSiteModel;\n this.siteGroupIds = this.manageSiteModel?.scannableGroups\n\n if(this.manageSiteModel && this.manageSiteModel.scannableGroups) {\n this.dirtyComponents.scannableGroups.snapshot = this.myCopy();\n }\n }\n\n @Input() noCard: boolean = false;\n inProgress: boolean = false;\n siteGroupProgress: boolean = false;\n groups: any[] = [];\n siteGroupIds: number[];\n siteList: SiteViewModel[] = [];\n get selectedSiteName(): string {\n if (!this.siteList || this.siteList.length == 0) return \"\";\n return this.siteList.find(i => i.id == this.siteId).name;\n }\n constructor(private route: ActivatedRoute,\n private bsModalService: BsModalService,\n private router: Router,\n private scannableService: ScannableService,\n private siteService: SiteService) { }\n\n siteSelectFC = new FormControl(null, []);\n get siteId(): number {\n return +this.siteSelectFC.value;\n }\n\n get headerInfo() {\n return getCountLabel(this.siteGroups?.length, 'Scannable');\n }\n\n ngOnInit() {\n this.routeChange();\n }\n\n routeChange() {\n this.route.params\n .pipe(finalize(() => { this.inProgress = false; }))\n .subscribe((param: Params) => {\n this.siteSelectFC.setValue(+param['id']);\n this.getGroups();\n this.siteGroupIds = [];\n });\n }\n\n getSiteList() {\n this.siteService.getAllActiveSites()\n .pipe(finalize(() => {\n if (isNaN(this.siteId) === false) {\n const selectedSite = this.siteList.find(c => c.id === this.siteId);\n if (!selectedSite || selectedSite.isActive === false) {\n this.router.navigate([`sites`], { skipLocationChange: false });\n }\n }\n }))\n .subscribe(result => {\n this.siteList = result;\n this.getGroups();\n }, _ => { });\n }\n\n getGroups() {\n this.inProgress = true;\n this.scannableService.getGroups()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n this.groups = res;\n });\n }\n\n bsModalRef: any;\n onShowSiteScannableGroupModal(template) {\n this.bsModalRef = this.bsModalService.show(template);\n }\n\n get siteGroups(): any[] {\n if (!this.groups || !this.siteGroupIds) return [];\n return this.groups.filter(i => this.siteGroupIds.indexOf(i.id) > -1);\n }\n\n removeSiteGroup(group: any) {\n\n const index = this.siteGroupIds.indexOf(group.id)\n this.siteGroupIds.splice(index, 1);\n\n this.makeComponentDirty();\n }\n\n get unAddedSiteGroups(): any[] {\n if (!this.siteGroupIds)\n this.siteGroupIds = [];\n if (!this.groups) return [];\n return this.groups.filter(i => this.siteGroupIds.indexOf(i.id) == -1);\n }\n\n addSiteGroup(id: number) {\n if(this.siteGroupIds.indexOf(id) === -1) {\n this.siteGroupIds.push(id);\n this.makeComponentDirty();\n }\n }\n\n}\n","\n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n \n
      \n
      \n \n
      \n

      Manage Visitor Accompanier Mode

      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Visitor TypeUse Site Accompany SettingVisitor Accompanier Mode
      \n {{ siteVisitorAccompanier.visitorTypeTitle }}\n \n \n \n \n \n \n {{ accompanierMode[index] | accompanierMode }}\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n\n\n
      \n \n
      \n
      \n
      \n \n \n Add Documents\n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n

      Please Select Documents

      \n \n \n \n
      \n \n \n \n \n \n \n \n \n \n 0\n \"\n >\n \n \n \n \n \n \n \n \n \n
      \n Documents ({{\n manageSiteModel?.documentInfo?.requiredDocuments?.length\n }})\n StateRemove
      {{ doc.userDocumentTypeTitle }}\n \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Extra InformationState
      \n {{ field.title }}\n Deprecated\n \n \n \n \n {{\n field.fieldKey == \"Supplier\" &&\n fieldState.state == 2\n ? \"Mandatory (All CompanySuppliers)\"\n : fieldState.title\n }}\n \n \n Mandatory (Validate ABN/ACN)\n \n \n Mandatory (Site Suppliers Only)\n \n \n \n
      \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n \n \n
      \n
      \n
      \n \n \n Add Check-In Questions\n \n
      \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n

      \n Please Select Check-In Questions\n

      \n \n
      \n \n \n \n \n
      QuestionRemove
      \n 0\n \"\n class=\"mb-2 alert alert-info d-flex align-items-center\"\n >\n \n You can change the order of items by dragging them\n \n \n \n \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n \n
      \n
      \n
      \n \n \n Add Check-Out Questions\n \n
      \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n

      \n Please Select Check-Out Questions\n

      \n \n \n
      \n \n \n \n
      QuestionRemove
      \n 0\n \"\n class=\"mb-2 alert alert-info d-flex align-items-center\"\n >\n \n You can change the order of items by dragging them\n \n \n \n \n
      \n
      \n
      \n
      \n
      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
      \n
      \n Select Site Documents\n \n ×\n \n
      \n
      \n
      \n
      \n \n \n \n \n All Documents ({{ allDocuments?.length }})\n \n State\n Add\n \n \n \n \n \n \n \n \n \n \n \n

      there is no documents to add

      \n \n \n \n {{ doc.title }}\n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n Select Check-In Question(s)\n \n ×\n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n
      \n Question\n \n \n Add\n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n

      there is no question to add

      \n \n \n \n
      \n \n \n \n
      \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n Select Check-Out Question(s)\n \n ×\n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n
      \n Question\n \n \n Add\n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n

      there is no question to add

      \n \n \n \n
      \n \n \n \n
      \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n \n\n\n\n \n\n\n\n
      \n
      \n \n \n\n \n \n \n
      \n \n \n \n
      \n \n\n","import { Component, ComponentFactoryResolver, ContentChild, ContentChildren, EventEmitter, Input, OnInit, Output, QueryList, ViewChild, ViewContainerRef } from '@angular/core';\nimport { QuestionRepository } from \"../../../enums/question-repo\";\nimport { SiteViewModel } from \"../../../models/site-viewmodel\";\nimport { AccompanierMode } from \"../../../enums/accompanier-mode\";\nimport { SiteQuestionsViewModel, SiteQuestionWithVisitorTypeViewModel } from \"../../../models/sitequestion-viewmodel\";\nimport { QuestionViewModel } from \"../../../models/question-viewmodel\";\nimport { SiteRequiredUserDocumentWithVisitorTypeViewModel } from \"../../../models/site-required-user-document-viewmodel\";\n\nimport {\n SiteVisitorTypeAccompanierViewModel,\n SiteVisitorTypeViewModel\n} from \"../../../models/site-visitortype-accompanier-viewmodel\";\nimport { Router } from \"@angular/router\";\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\nimport { QuestionService } from \"../../../services/question.service\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { UserService } from \"../../../services/user.service\";\nimport { VisitorTypeService } from \"../../../services/visitor-type.service\";\nimport { SiteRequiredUserDocumentService } from \"../../../services/site-required-user-document.service\";\nimport { SiteRequiredFieldService } from \"../../../services/site-required-field.service\";\nimport { SiteQuestionService } from \"../../../services/site-question.service\";\nimport { finalize } from \"rxjs/operators\";\nimport { QuestionType } from \"../../../enums/question-type\";\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { SiteTemplateStatus } from 'src/app/enums/site-template-status.enum';\nimport { ManageSiteQuestionVisitorTypeMode } from 'src/app/enums/manage-site-question-visitor-type-mode.enum';\nimport { deepClone, getCountLabel, isEqual } from 'src/app/helpers/general-functions';\nimport { SiteRequiredFieldState, SiteRequiredFieldType, SiteRequiredFieldWithVisitorTypeViewModel, } from \"../../../models/site-required-field-viewmodel\";\nimport { ManageSiteViewModel } from \"../../../models/manage-site-view-model\";\nimport { CheckedVisitorType } from \"../../../models/visitor-type\";\nimport { UserDocumentTypeService } from \"../../../services/user-document-type.service\";\nimport { UserDocumentType } from \"../../../models/user-document-type\";\nimport { DirtyComponentItem, DirtyComponents } from \"../../../models/dirty-components\";\nimport { FormType } from \"../../../enums/form-type\";\nimport { SiteManagementMode } from \"../../../enums/site-management-mode\";\nimport { BehaviorSubject, of, Subject } from 'rxjs';\n\n@Component({\n selector: 'obc-site-questions-management',\n templateUrl: './site-questions-management.component.html',\n styleUrls: ['./site-questions-management.component.scss']\n})\nexport class SiteQuestionsManagementComponent implements OnInit {\n\n @Input() siteId: number;\n @Input() siteSupplierId: number;\n @Input() siteManagementMode: SiteManagementMode;\n SiteManagementModeEnum = SiteManagementMode;\n\n FormType = FormType;\n\n dirtyComponents: DirtyComponents;\n\n @Input('dirtyComponents') set setDirtyComponents(dirtyComponents: DirtyComponents) {\n this.dirtyComponents = dirtyComponents;\n }\n\n manageSiteModel: ManageSiteViewModel;\n\n @Input() set manageSiteViewModel(manageSiteModel: ManageSiteViewModel) {\n this.manageSiteModel = manageSiteModel;\n this.getSiteRelatedData();\n\n this.initializeCopies();\n }\n\n @Output() manageSiteViewModelChange = new EventEmitter()\n\n\n ProductPlanFeature = ProductPlanFeature;\n qRepository = QuestionRepository;\n siteList: SiteViewModel[] = [];\n progress = false;\n filterCheckinQuestionTerm: string = '';\n filterCheckoutQuestionTerm: string = '';\n filterDocumentsTerm: string = '';\n accompanierMode = AccompanierMode;\n UserPermission = UserPermission;\n SiteTemplateStatus = SiteTemplateStatus;\n _siteQuestions: SiteQuestionsViewModel[] = [];\n ManageSiteQuestionVisitorTypeMode = ManageSiteQuestionVisitorTypeMode;\n activeModalRef: BsModalRef\n getQuestionCompleted: Subject\n\n get siteQuestions(): SiteQuestionsViewModel[] {\n return this._siteQuestions.sort((p, n) => p.displayOrder - n.displayOrder);\n };\n\n isDeprecated(field: SiteRequiredFieldWithVisitorTypeViewModel) {\n return field.fieldType !== SiteRequiredFieldType.Supplier;\n }\n\n shouldDisplay(field: SiteRequiredFieldWithVisitorTypeViewModel) {\n return this.userService.isGodUser() ||\n !this.isDeprecated(field) ||\n field.state !== SiteRequiredFieldState.ignore;\n }\n\n set siteQuestions(questions: SiteQuestionsViewModel[]) {\n this._siteQuestions = questions;\n };\n\n _companyQuestions: QuestionViewModel[] = [];\n get companyQuestions(): QuestionViewModel[] {\n return this._companyQuestions.filter(function (x) {\n return this.indexOf(x.id) < 0\n }, this.siteQuestions.map(c => c.questionId));\n };\n\n set companyQuestions(questions: QuestionViewModel[]) {\n this._companyQuestions = questions;\n };\n\n get allDocuments(): SiteRequiredUserDocumentWithVisitorTypeViewModel[] {\n return this.siteRequiredUserDocuments?.filter(function (x) {\n return this.indexOf(x.id) < 0\n }, this.requiredDocuments.map(c => c.id));\n };\n\n set allDocuments(data: SiteRequiredUserDocumentWithVisitorTypeViewModel[]) {\n this.siteRequiredUserDocuments = JSON.parse(JSON.stringify(data));\n };\n\n get allDocumentsOriginal(): SiteRequiredUserDocumentWithVisitorTypeViewModel[] {\n return this.originalSiteRequiredUserDocuments?.filter(function (x) {\n return this.indexOf(x.id) < 0\n }, this.requiredDocuments.map(c => c.id));\n };\n\n get requiredDocuments(): SiteRequiredUserDocumentWithVisitorTypeViewModel[] {\n return this.originalSiteRequiredUserDocuments?.filter(c => c.checked === true);\n };\n\n get visitorTypesHeaderInfo() {\n const data =\n [{ 'title': 'Status: ', 'value': this.visitorTypesStatus ? 'Enabled' : 'Disabled' }];\n if (this.visitorTypesStatus == true)\n data.push({ 'title': 'Visitor Types: ', 'value': this.displayVisitorTypes() });\n return data;\n }\n\n get documentExtraInfoHeaderInfo() {\n return [\n { 'title': '', 'value': getCountLabel(this.requiredDocuments?.length, 'Document') },\n { 'title': '', 'value': getCountLabel(this.countRequiredFields(), 'Extra Information', true) }\n ];\n }\n\n get checkOutQuestionHeaderInfo() {\n return [{ 'title': '', 'value': getCountLabel(this.siteCheckOutQuestions?.length, 'Question') }];\n }\n\n get checkInQuestionHeaderInfo() {\n return [{ 'title': '', 'value': getCountLabel(this.siteCheckInQuestions?.length, 'Question') }];\n }\n\n selectedSiteName: string = \"\";\n siteRequiredUserDocuments: SiteRequiredUserDocumentWithVisitorTypeViewModel[];\n originalSiteRequiredUserDocuments: SiteRequiredUserDocumentWithVisitorTypeViewModel[];\n visitorTypes: any[];\n //siteRequiredField: ResponseSiteRequiredFieldViewModel;\n requiredDocumentProcess: boolean = false;\n requiredFieldProcess: boolean = false;\n visitorTypeAccompaniers: SiteVisitorTypeAccompanierViewModel[];\n siteVisitorTypeAccompanierProcess: boolean = false;\n\n @Input() isCheckIn: boolean = true;\n\n maxOrder(isCheckIn: boolean) {\n if (isCheckIn) {\n return (!this.siteCheckInQuestions || this.siteCheckInQuestions.length === 0) ? 1 :\n Math.max(...this.siteCheckInQuestions.map(c => c.displayOrder)) + 1;\n } else {\n return (!this.siteCheckOutQuestions || this.siteCheckOutQuestions.length === 0) ? 1 :\n Math.max(...this.siteCheckOutQuestions.map(c => c.displayOrder)) + 1;\n }\n }\n\n _isAllowedToManageVisitorTypes: boolean = null;\n get isAllowedToManageVisitorTypes(): boolean {\n if (this._isAllowedToManageVisitorTypes == null)\n this._isAllowedToManageVisitorTypes = this.userService.isCompanyAdminUser() && this.userService.hasCompanyFeature(ProductPlanFeature.VisitorTypes);\n return this._isAllowedToManageVisitorTypes;\n }\n\n constructor(\n private bsModalService: BsModalService,\n private router: Router,\n private questionService: QuestionService,\n private modalService: ModalService,\n public userService: UserService,\n private visitorTypeService: VisitorTypeService,\n private siteRequiredUserDocumentService: SiteRequiredUserDocumentService,\n private siteRequiredFieldService: SiteRequiredFieldService,\n private siteQuestionService: SiteQuestionService,\n private userDocumentTypeService: UserDocumentTypeService,\n private componentFactoryResolver: ComponentFactoryResolver) {\n this.getQuestionCompleted = new Subject();\n }\n\n ngOnInit(): void {\n this.getSiteRelatedData();\n this.reDrawSortable();\n }\n\n onChangeVisitor(checkedVisitorType: CheckedVisitorType) {\n if (this.manageSiteModel) {\n if (!checkedVisitorType.checked)\n this.manageSiteModel.siteVisitorTypes = this.manageSiteModel?.siteVisitorTypes?.filter(siteVisitorType => siteVisitorType.visitorTypeId != checkedVisitorType.id)\n else\n this.manageSiteModel?.siteVisitorTypes?.push({\n visitorTypeId: checkedVisitorType.id,\n visitorTypeTitle: checkedVisitorType.title,\n siteVisitorTypeId: null\n } as SiteVisitorTypeViewModel)\n\n this.updateVisitorTypesAndAllPropertiesVisitorTypes();\n }\n\n this.getSiteQuestions();\n this.getRequiredDocuments();\n this.reDrawSortable();\n }\n\n getSiteRelatedData() {\n this.getSiteQuestions();\n this.getQuestions();\n this.getRequiredDocuments();\n //this.getRequiredFields();\n this.getVisitorTypes();\n this.getAllUserRequiredDocuments();\n }\n\n allUserDocumentTypes: UserDocumentType[];\n\n allRequiredUserDocuments: UserDocumentType[];\n\n getAllUserRequiredDocuments() {\n this.progress = true;\n this.userDocumentTypeService.getSelectable()\n .pipe(finalize(() => {\n this.progress = false\n }))\n .subscribe(res => {\n this.allRequiredUserDocuments = this.allUserDocumentTypes = res;\n this.updateUserSelectedDocuments();\n })\n }\n\n getVisitorTypes() {\n this.progress = true;\n this.visitorTypeService.getAllVisitorTypes()\n .pipe(finalize(() => {\n this.progress = false\n }))\n .subscribe(res => {\n this.visitorTypes = res;\n })\n }\n\n bsRequiredDocumentsModalRef: BsModalRef;\n\n onShowRequiredDocumentsModal(template) {\n this.bsRequiredDocumentsModalRef = this.bsModalService.show(template);\n }\n\n bsCheckinQuestionsModalRef: BsModalRef;\n\n onShowCheckinQuestionsModal(template) {\n this.bsCheckinQuestionsModalRef = this.bsModalService.show(template);\n this.activeModalRef = this.bsCheckinQuestionsModalRef;\n }\n\n bsCheckoutQuestionsModalRef: BsModalRef;\n\n onShowCheckoutQuestionsModal(template) {\n this.bsCheckoutQuestionsModalRef = this.bsModalService.show(template);\n this.activeModalRef = this.bsCheckoutQuestionsModalRef;\n }\n\n bsQuestionModalRef: BsModalRef\n onAddQuestionClick(template) {\n this.bsQuestionModalRef = this.bsModalService.show(template, { class: 'modal-lg' })\n }\n onResultQuestionAdd($event, checkInOut: string) {\n this.bsQuestionModalRef.hide();\n if (!$event.isSucceeded) return;\n this.getQuestions();\n let sub = this.getQuestionCompleted.subscribe(() => {\n sub.unsubscribe();\n this.addQuestionToSite($event.result.id, checkInOut == 'checkIn');\n if (this.activeModalRef) {\n this.activeModalRef.hide();\n this.activeModalRef = null;\n }\n })\n }\n\n getRequiredDocuments() {\n this.siteRequiredUserDocuments = this.manageSiteModel?.documentInfo?.requiredDocuments;\n this.originalSiteRequiredUserDocuments = this.manageSiteModel?.documentInfo?.requiredDocuments;\n this.updateUserSelectedDocuments();\n }\n\n updateUserSelectedDocuments() {\n let userSelectedDocuments = this.manageSiteModel?.documentInfo?.requiredDocuments?.map(c => c.userDocumentTypeId) ?? [];\n this.allUserDocumentTypes = this.allRequiredUserDocuments?.filter((x) => {\n return userSelectedDocuments.indexOf(x.id) < 0\n });\n }\n\n addRequiredDocument(doc: UserDocumentType) {\n let alreadyExists = this.manageSiteModel?.documentInfo?.requiredDocuments?.findIndex(function (item) {\n return item.userDocumentTypeId == doc.id;\n });\n if (alreadyExists == -1)\n this.manageSiteModel?.documentInfo?.requiredDocuments?.push({\n visitorTypeIds: [],\n userDocumentTypeId: doc.id,\n userDocumentTypeTitle: doc.title,\n state: doc.state,\n checked: true,\n checkIn: true,\n siteId: this.manageSiteModel?.site?.id,\n } as SiteRequiredUserDocumentWithVisitorTypeViewModel);\n this.getRequiredDocuments();\n this.makeComponentDirty(this.dirtyComponents.documentInfo);\n }\n\n removeRequiredDocument(doc: SiteRequiredUserDocumentWithVisitorTypeViewModel) {\n\n if (this.manageSiteModel) {\n this.manageSiteModel.documentInfo.requiredDocuments =\n this.manageSiteModel?.documentInfo?.requiredDocuments?.filter(item => item.userDocumentTypeId != doc.userDocumentTypeId);\n this.getRequiredDocuments();\n\n this.makeComponentDirty(this.dirtyComponents.documentInfo);\n }\n\n\n /* this.requiredDocumentProcess = true;\n this.siteRequiredUserDocumentService.remove(doc.id)\n .pipe(finalize(() => this.requiredDocumentProcess = false))\n .subscribe(res => {\n doc.id = 0;\n this.getRequiredDocuments();\n }, error => { this.modalService.error(\"We can't remove document from list, please contacts admin\") });*/\n }\n\n // getRequiredFields() {\n // if(this.manageSiteModel) {\n // this.siteId = this.manageSiteModel?.site?.id;\n // if (this.isCheckIn) {\n // this.requiredFieldProcess = true;\n // this.siteRequiredFieldService.getAll(this.siteId).subscribe(res => {\n // this.siteRequiredField = res;\n // this.requiredFieldProcess = false;\n // });\n // }\n // }\n // }\n\n onRequiredFieldChange() {\n this.makeComponentDirty(this.dirtyComponents.requiredFields);\n }\n\n onRequiredDocumentChange() {\n this.makeComponentDirty(this.dirtyComponents.documentInfo);\n }\n\n checkinQuestionProgress: boolean = false;\n checkoutQuestionProgress: boolean = false;\n siteCheckInQuestions: SiteQuestionWithVisitorTypeViewModel[];\n siteCheckOutQuestions: SiteQuestionWithVisitorTypeViewModel[];\n\n\n get companyCheckinQuestions(): QuestionViewModel[] {\n return this._companyQuestions.filter(function (x) {\n return this.indexOf(x.id) < 0\n }, this.siteCheckInQuestions.map(c => c.questionId));\n };\n\n get companyCheckoutQuestions(): QuestionViewModel[] {\n return this._companyQuestions.filter(function (x) {\n return this.indexOf(x.id) < 0\n }, this.siteCheckOutQuestions.map(c => c.questionId));\n };\n\n getSiteQuestions() {\n this.siteCheckInQuestions = this.manageSiteModel?.checkInQuestions ?? [];\n this.siteCheckOutQuestions = this.manageSiteModel?.checkOutQuestions ?? [];\n }\n\n /* searchSiteQuestions(siteId: number, isCheckIn: boolean) {\n if (isCheckIn) {\n this.checkinQuestionProgress = true;\n } else {\n this.checkoutQuestionProgress = true;\n }\n\n this.siteQuestionService.searchSiteQuestion({ siteId: this.siteId, isCheckInQuestion: isCheckIn })\n .pipe(finalize(() => {\n if (isCheckIn) {\n this.checkinQuestionProgress = false;\n } else {\n this.checkoutQuestionProgress = false;\n }\n }))\n .subscribe(res => {\n if (isCheckIn) {\n this.siteCheckInQuestions = res;\n } else {\n this.siteCheckOutQuestions = res;\n }\n });\n }*/\n\n getQuestions() {\n this.progress = true;\n this.questionService.getActiveQuestions()\n .pipe(finalize(() => {\n this.progress = false;\n }))\n .subscribe(res => {\n this.companyQuestions = res.data.map(q => new QuestionViewModel(q));\n this.progress = false;\n this.getQuestionCompleted.next();\n });\n }\n\n removeFromSiteQuestion(sqId: number, isCheckIn: boolean) {\n let questions = this.manageSiteModel?.checkInQuestions;\n if (!isCheckIn)\n questions = this.manageSiteModel?.checkOutQuestions;\n\n this.progress = true;\n let targetSiteQuestion = questions.find(x => x.questionId == sqId);\n\n let hasChild = questions\n .some(x => this.getQuestionViewModel(x.questionId).conditions?.some(c => c.masterQuestionId == targetSiteQuestion.questionId) ?? false)\n\n if (hasChild)\n this.modalService.confirm(\"This question is a master question. Are you sure you want to remove it?\").subscribe(res => {\n if (res)\n this.removeQuestion(targetSiteQuestion, isCheckIn);\n });\n else {\n this.removeQuestion(targetSiteQuestion, isCheckIn);\n }\n }\n\n private removeQuestion(targetSiteQuestion: SiteQuestionWithVisitorTypeViewModel, isCheckIn: boolean) {\n if (isCheckIn)\n this.manageSiteModel.checkInQuestions = this.manageSiteModel.checkInQuestions.filter(i => i.questionId != targetSiteQuestion.questionId);\n else\n this.manageSiteModel.checkOutQuestions = this.manageSiteModel.checkOutQuestions.filter(i => i.questionId != targetSiteQuestion.questionId);\n this.emitToParent();\n\n this.makeComponentDirty(isCheckIn ? this.dirtyComponents.checkInQuestions : this.dirtyComponents.checkOutQuestions);\n }\n\n addQuestionToSite(qid, isCheckIn: boolean, isMasterQuestion: boolean = false) {\n let question = this.companyQuestions.find(c => c.id == qid);\n let qText = question.questionText;\n let model: SiteQuestionWithVisitorTypeViewModel = {\n id: 0,\n questionId: qid,\n isCheckInQuestion: isCheckIn,\n siteId: this.manageSiteModel?.site?.id,\n siteName: this.manageSiteModel?.site?.name,\n questionType: QuestionType.Boolean,\n displayOrder: this.maxOrder(isCheckIn),\n questionParameters: '',\n questionText: qText,\n parameters: '',\n visitorTypeIds: [],\n document: question.document\n };\n\n let questions;\n if (!isCheckIn)\n questions = this.manageSiteModel?.checkOutQuestions;\n else\n questions = this.manageSiteModel?.checkInQuestions;\n\n if (isMasterQuestion) {\n const slave = questions?.filter(q => {\n let original = this.companyQuestions.find(c => c.id == q.questionId);\n return original.conditions != null && original.conditions.filter(c => c.masterQuestionId == model.questionId).length > 0;\n });\n if (slave && slave.length > 0) {\n const order = slave[0].displayOrder;\n const others = questions?.filter(q => q.displayOrder >= order);\n if (others && others.length)\n others.forEach(q => q.displayOrder++);\n model.displayOrder = order;\n }\n }\n\n let checkIfAlreadyExists = questions?.filter(q => q.questionId == model.questionId) ?? [];\n if (checkIfAlreadyExists.length == 0) {\n questions?.push(model);\n questions = questions?.sort((item1, item2) => item1.displayOrder - item2.displayOrder);\n this.addMasterQuestions(question, isCheckIn, isMasterQuestion);\n this.emitToParent();\n this.makeComponentDirty(isCheckIn ? this.dirtyComponents.checkInQuestions : this.dirtyComponents.checkOutQuestions);\n }\n\n }\n\n addMasterQuestion(model: QuestionViewModel, isCheckIn: boolean) {\n const masterQuestionIds = model.conditions.map(c => c.masterQuestionId);\n this.companyQuestions.filter(q => masterQuestionIds.indexOf(q.id) >= 0)\n .forEach(mq => {\n this.addQuestionToSite(mq.id, isCheckIn, true);\n });\n }\n\n addMasterQuestions(model: QuestionViewModel, isCheckIn: boolean, isAddingMasterQuestionsProgress: boolean) {\n if (model.conditions == null || model.conditions.length == 0)\n return;\n if (isAddingMasterQuestionsProgress) {\n this.addMasterQuestion(model, isCheckIn);\n } else {\n this.modalService.confirm('Selected question has master question. Do you want to add master question?')\n .subscribe(accept => {\n if (!accept)\n return;\n this.addMasterQuestion(model, isCheckIn);\n });\n }\n }\n\n getQuestionViewModel(id: number) {\n if (this.companyQuestions && this.companyQuestions.length > 0)\n return this.companyQuestions.filter((q) => q.id == id)[0];\n else\n return null;\n }\n\n onsiteVisitorAccompanierChange(visitorTypeAccompanier: SiteVisitorTypeAccompanierViewModel, value) {\n visitorTypeAccompanier.accompanierMode = value.value;\n this.makeComponentDirty(this.dirtyComponents.visitorTypeAccompaniers)\n }\n\n toggleDefaultSiteMode(visitorTypeAccompanier: SiteVisitorTypeAccompanierViewModel) {\n if (visitorTypeAccompanier.accompanierMode != null)\n visitorTypeAccompanier.accompanierMode = null;\n else\n visitorTypeAccompanier.accompanierMode = 0;\n this.makeComponentDirty(this.dirtyComponents.visitorTypeAccompaniers)\n }\n\n onChangeOrder(isCheckIn) {\n let questions = isCheckIn ? this.siteCheckInQuestions : this.siteCheckOutQuestions;\n\n for (let i = 0; i < questions?.length; i++) {\n questions[i].displayOrder = (i + 1);\n }\n\n this.makeComponentDirty(isCheckIn ? this.dirtyComponents.checkInQuestions : this.dirtyComponents.checkOutQuestions);\n }\n\n\n visitorTypesStatus: boolean = false;\n\n displayVisitorTypes() {\n let _this = this;\n let onlyTitles = this.manageSiteModel?.siteVisitorTypes?.map(function (x) {\n return _this.manageSiteModel?.visitorTypes?.find(v => v.id == x.visitorTypeId)?.title\n });\n let output = onlyTitles.slice(0, 5);\n if (onlyTitles.length > 5)\n output.push('...');\n\n if (output.length > 0)\n return output.join(\", \");\n\n return \"No item selected\";\n }\n\n countRequiredFields() {\n return this.manageSiteModel?.requiredFields?.fields?.filter(i => i.state != 0).length ?? 0;\n }\n\n updateVisitorTypesAndAllPropertiesVisitorTypes() {\n\n let _this = this;\n this.makeComponentDirty(this.dirtyComponents.siteVisitorTypes)\n\n\n this.manageSiteModel.visitorTypeAccompaniers = this.manageSiteModel?.siteVisitorTypes?.map(function (siteVisitorType) {\n let accompanierObjFromAccompaniers = _this.manageSiteModel?.visitorTypeAccompaniers?.find(function (a) {\n return a.siteVisitorTypeId == siteVisitorType.siteVisitorTypeId && a.visitorTypeId == siteVisitorType.visitorTypeId;\n });\n\n return accompanierObjFromAccompaniers ?? {\n visitorTypeId: siteVisitorType?.visitorTypeId,\n visitorTypeTitle: siteVisitorType?.visitorTypeTitle,\n accompanierMode: null,\n siteVisitorTypeId: siteVisitorType?.siteVisitorTypeId\n } as SiteVisitorTypeAccompanierViewModel\n })\n this.makeComponentDirty(this.dirtyComponents.visitorTypeAccompaniers)\n\n\n let siteVisitorTypesIds = this.manageSiteModel?.siteVisitorTypes?.map(i => i.visitorTypeId);\n\n // update visitor types of other properties\n this.manageSiteModel?.documentInfo?.requiredDocuments?.map(function (item) {\n item.visitorTypeIds = item.visitorTypeIds.filter(item => siteVisitorTypesIds.includes(item));\n _this.makeComponentDirty(_this.dirtyComponents.documentInfo)\n })\n this.manageSiteModel?.checkInQuestions?.map(function (item) {\n item.visitorTypeIds = item.visitorTypeIds.filter(item => siteVisitorTypesIds.includes(item));\n _this.makeComponentDirty(_this.dirtyComponents.checkInQuestions)\n })\n this.manageSiteModel?.checkOutQuestions?.map(function (item) {\n item.visitorTypeIds = item.visitorTypeIds.filter(item => siteVisitorTypesIds.includes(item));\n _this.makeComponentDirty(_this.dirtyComponents.checkOutQuestions)\n })\n this.manageSiteModel?.requiredFields?.fields?.map(function (item) {\n item.visitorTypeIds = item.visitorTypeIds.filter(item => siteVisitorTypesIds.includes(item));\n _this.makeComponentDirty(_this.dirtyComponents.requiredFields)\n })\n }\n\n emitToParent() {\n this.manageSiteViewModelChange.emit(this.manageSiteModel);\n this.reDrawSortable();\n }\n\n showObcSortable: boolean;\n\n reDrawSortable() {\n this.showObcSortable = false;\n setTimeout(() => {\n this.showObcSortable = true;\n }\n , 50);\n }\n\n questionVisitorTypeClicked(item: SiteQuestionWithVisitorTypeViewModel, value, isCheckInQuestion: boolean) {\n (isCheckInQuestion ? this.manageSiteModel?.checkInQuestions : this.manageSiteModel?.checkOutQuestions)?.map(function (q) {\n if (q.questionId == item.questionId) {\n let index = q.visitorTypeIds.indexOf(value.id);\n if (index > -1)\n q.visitorTypeIds.splice(index, 1);\n else\n q.visitorTypeIds.push(value.id);\n }\n return q\n });\n this.makeComponentDirty(isCheckInQuestion ? this.dirtyComponents.checkInQuestions : this.dirtyComponents.checkOutQuestions);\n this.reDrawSortable();\n }\n\n documentVisitorTypeClicked(item: SiteRequiredUserDocumentWithVisitorTypeViewModel, value) {\n let _this = this;\n this.manageSiteModel?.documentInfo?.requiredDocuments?.map(function (q) {\n if (q.userDocumentTypeId == item.userDocumentTypeId) {\n let index = q.visitorTypeIds.indexOf(value.id);\n if (index > -1)\n q.visitorTypeIds.splice(index, 1);\n else\n q.visitorTypeIds.push(value.id);\n }\n _this.makeComponentDirty(_this.dirtyComponents.documentInfo)\n return q;\n });\n }\n\n fieldVisitorTypeClicked(item: SiteRequiredFieldWithVisitorTypeViewModel, value) {\n let _this = this;\n this.manageSiteModel?.requiredFields?.fields.map(function (q) {\n if (q.id == item.id) {\n let index = q.visitorTypeIds.indexOf(value.id);\n if (index > -1)\n q.visitorTypeIds.splice(index, 1);\n else\n q.visitorTypeIds.push(value.id);\n }\n _this.makeComponentDirty(_this.dirtyComponents.requiredFields)\n return q;\n });\n }\n\n\n initializeCopies() {\n if (this.manageSiteModel) {\n\n let components: DirtyComponentItem[] = [\n this.dirtyComponents.checkInQuestions,\n this.dirtyComponents.checkOutQuestions,\n this.dirtyComponents.requiredFields,\n this.dirtyComponents.documentInfo,\n this.dirtyComponents.siteVisitorTypes,\n this.dirtyComponents.visitorTypeAccompaniers\n ];\n\n for (const component of components) {\n let itemKey = this.findDirtyComponentKey(component);\n if (this.manageSiteModel[itemKey]) {\n component.snapshot = component?.snapshot || this.myCopy(itemKey);\n }\n }\n }\n }\n\n findDirtyComponentKey(item: DirtyComponentItem) {\n let itemKey;\n Object.keys(this.dirtyComponents).forEach((key) => {\n if (this.dirtyComponents[key] == item)\n itemKey = key;\n });\n return itemKey;\n }\n\n makeComponentDirty(item: DirtyComponentItem) {\n let itemKey = this.findDirtyComponentKey(item);\n item.isDirty = !isEqual(item?.snapshot, this.myCopy(itemKey));\n }\n\n myCopy(name) {\n if (!(this.manageSiteModel && this.manageSiteModel[name]))\n return {};\n let returnObj = {};\n returnObj[name] = deepClone(this.manageSiteModel[name]);\n return returnObj;\n }\n\n toggleAttachAdditionalDocuments() {\n if (this.manageSiteModel) {\n this.manageSiteModel.documentInfo.allowUsersToAttachAdditionalDocuments =\n !this.manageSiteModel.documentInfo.allowUsersToAttachAdditionalDocuments;\n this.makeComponentDirty(this.dirtyComponents.documentInfo);\n }\n }\n}\n","
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n","import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MaxFileSize } from './../../enums/constants';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { getFileExtenstion, isValidImageFile, toBase64 } from 'src/app/helpers/general-functions';\n\n@Component({\n selector: 'obc-image-cropper-form-control',\n templateUrl: './image-cropper-form-control.component.html',\n styleUrls: ['./image-cropper-form-control.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ImageCropperFormControlComponent),\n multi: true\n }\n ]\n})\nexport class ImageCropperFormControlComponent implements ControlValueAccessor {\n imageSourceBase64: string;\n croppedImageSourceBase64: string;\n fileType: string;\n onChange: Function;\n @ViewChild('input') input;\n @Output() removeImage = new EventEmitter();\n @Input() currentImageSrcUrl: any;\n @Input() removable = true;\n @Input() header: string = \"Select Image\";\n constructor(private modalService: ModalService) { }\n writeValue(value: null): void {\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n }\n setDisabledState?(isDisabled: boolean): void {\n }\n ngOnInit() {\n }\n\n async imageCropped($event) {\n this.croppedImageSourceBase64 = $event.base64;\n await this.setModel();\n }\n loadImageFailed() {\n\n }\n\n async onPickImage($event) {\n let file = $event.target.files[0];\n if(!isValidImageFile(file.type)) {\n this.modalService.error(\"The selected file is not a valid type of image\", \"Invalid File Type\").subscribe(_=> {});\n $event.target.value = null;\n return;\n }\n\n if (file.size > MaxFileSize * 1024000) {\n this.modalService.error(`Maximum File Size is ${MaxFileSize}mb`, \"\").subscribe(_=> {});\n $event.target.value = null;\n return;\n }\n this.imageSourceBase64 = (await toBase64(file)) as string;\n this.fileType = getFileExtenstion(file.name);\n }\n\n private async setModel() {\n this.onChange({\n content: this.croppedImageSourceBase64,\n type: this.fileType,\n });\n }\n\n private clearModel() {\n this.imageSourceBase64 = null;\n this.fileType = null;\n this.input.nativeElement.value = null;\n this.onChange(null);\n }\n\n onClearSelectedImage() {\n this.clearModel();\n this.removeImage.emit(null);\n }\n\n get isFileSelected() {\n if (this.input == null) return false;\n return this.input.nativeElement.value != \"\";\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AutoCheckOutType } from '../enums/auto-check-out-type.enum';\n\n@Pipe({\n name: 'autoCheckOutType'\n})\nexport class AutoCheckOutTypePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == AutoCheckOutType.Disable) return \"Disable\";\n if (value == AutoCheckOutType.Optional) return \"Optional\";\n if (value == AutoCheckOutType.Mandatory) return \"Mandatory\";\n return value?.toString() ?? \"?\";\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DelayedAnswerMode } from '../enums/delayed-answer-mode';\n\n@Pipe({\n name: 'delayAnswerMode'\n})\nexport class DelayAnswerModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === DelayedAnswerMode.Disable || value === 0) return \"Disable\";\n if (value === DelayedAnswerMode.EnableForAllQuestions || value === 1) return \"Enable For All Questions\";\n if (value === DelayedAnswerMode.EnableForMandatoryQuestions || value === 2) return \"Enable For Mandatory Questions\";\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'enabledDisabledSwitch'\n})\nexport class EnabledDisabledSwitchPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): unknown {\n if (value) return 'Enabled';\n if (!value) return 'Disabled';\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'dicToArray'\n})\nexport class DicToArrayPipe implements PipeTransform {\n\n transform(value: any, args?: any): any[] {\n var keys = Object.keys(value);\n var ret = [];\n for (let index = 0; index < keys.length; index++) {\n const element = keys[index];\n ret.push({key : keys[index] , value : value[element]}) \n }\n return ret;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AccessControlInductionMode } from '../enums/access-control-automatic-attendance-mode';\n\n@Pipe({\n name: 'accessControlInductionMode'\n})\nexport class AccessControlInductionModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value === AccessControlInductionMode.NoRestriction) { return \"No Restrictions\"; }\n if (value === AccessControlInductionMode.ApprovedInductions) { return \"Require Approved Mandatory Inductions\"; }\n if (value === AccessControlInductionMode.ApprovedOrPendingInductions) { return \"Require Mandatory Inductions (Pending or Approved)\"; }\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AccessControlInductionMode, AccessControlSiteBriefingMode } from '../enums/access-control-automatic-attendance-mode';\n\n@Pipe({\n name: 'accessControlSiteBriefingMode'\n})\nexport class AccessControlSiteBriefingModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value === AccessControlSiteBriefingMode.NoRestriction) { return \"No Restrictions\"; }\n if (value === AccessControlSiteBriefingMode.RequiredSignOffForAllActiveSiteBriefings) { return \"Require Sign-off on All Mandatory Site Briefings\"; }\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AccessControlInductionMode, AccessControlSupplierDocumentMode } from '../enums/access-control-automatic-attendance-mode';\n\n@Pipe({\n name: 'accessControlSupplierDocumentMode'\n})\nexport class AccessControlSupplierDocumentModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value === AccessControlSupplierDocumentMode.NoRestriction) { return \"No Restrictions\"; }\n if (value === AccessControlSupplierDocumentMode.RequiredSignOffForAllActiveSupplierDocuments) { return \"Require Sign-off on All Mandatory Supplier Documents\"; }\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AccessControlUnitDirection } from '../enums/access-control-automatic-attendance-mode';\n\n@Pipe({\n name: 'accessControlUnitDirection'\n})\nexport class AccessControlUnitDirectionPipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == AccessControlUnitDirection.In) { return \"Entry\"; }\n if (value == AccessControlUnitDirection.Out) { return \"Exit\"; }\n if (value == AccessControlUnitDirection.InOut) { return \"Entry/Exit\"; }\n return value?.toString() ?? '?';\n }\n\n}\n","
      \n \n\n
      \n
      \n
      \n \n
      \n
      \n
      \n\n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n You can manage the site settings and\n information\n all in this page\n You can manage your own\n questions, forms,\n inductions, and announcements in this page\n \n
      \n\n \n\n
      \n \n Template Site\n
      \n \n \n
      \n \n
      \n
      \n\n\n
      \n \n
      \n
      \n \n \n \n \n
      \n \n Please Enter Site Name\n
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n
      \n
      \n
      \n\n\n
      \n \n
      \n \n \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n
      \n
      \n
      \n \n\n
      \n \n
      \n
      \n \n
      \n
      \n
      \n\n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n\n
      \n \n \n Minutes\n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n Metres\n
      \n
      \n \n Please Enter Site Radius\n
      \n
      \n \n \n The maximum allowed value is {{ siteManagementFG.get('projectSettings.maxAllowedSiteRadius')?.value }}.\n Contact administrator for more information.\n \n \n
      \n \n
      \n \n
      \n
      \n \n Metres\n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n Loading...\n
      \n
      \n
      \n \n Please Enter Site Address\n
      \n
      \n \n \n {{ model.primaryTitle }} -\n {{ model.secondaryTitle }} -\n {{ model.description }}\n \n \n \n
      \n
      \n
      \n
      \n Latitude\n \n
      \n
      \n
      \n
      \n Longitude\n \n
      \n
      \n\n \n \n
      \n
      \n\n\n\n\n \n
      \n \n
      \n \n
      \n \n
      \n \n
      \n \n
      \n
      \n\n
      \n
      \n

      {{ this.manageSiteModel?.supplierSite?.siteName }}

      \n
      {{ this.manageSiteModel?.supplierSite?.address }}
      \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n\n \n
      \n \n
      \n
      \n\n\n
      \n \n
      \n
      \n \n \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n Minute(s)\n
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n Minutes\n \n \n \n \n
      \n \n Please Enter Check Out Threshold\n
      \n
      \n
      \n maxAllowedGeofencingThresholdInMinutes\">\n \n The maximum allowed value is {{ maxAllowedGeofencingThresholdInMinutes }}.\n Contact administrator for more information.\n \n \n
      \n
      \n
      \n \n
      \n \n \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      0\">\n \n
      \n
      \n \n
      \n
      \n
      \n\n\n \n
      \n \n
      \n \n \n
      \n
      \n\n
      \n \n
      \n \n \n
      \n \n \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n\n
      \n
      \n \n \n
      \n \n \n
      \n\n
      \n
      \n
      \n
      \n
      \n
      \n \n \"Site\n \n
      \n
      \n \n
      \n
      \n\n
      \n
      \n\n \n
      \n \n \n
      \n
      \n \n\n\n
      \n
      \n Operations\n
      \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n Access\n
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n \n {{siteManagementFG.get('offsite.preCheckInCode')?.value}}\n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \"Site\n \n
      \n
      \n\n \n
      \n\n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n \n\n \n
      \n \n
      \n
      \n\n
      \n \n
      \n
      \n
      \n \n \n
      \n \n \n \n
      \n
      \n
      \n\n
      \n \n
      \n
      \n \n \n
      \n
      \n
      \n\n\n
      \n \n
      \n
      \n \n \n \n \n \n
      \n
      \n
      \n\n
      \n 0\"\n [formControl]=\"siteLogoFormControl\"\n [currentImageSrcUrl]=\"siteManagementFG.get('advancedSettings.logoUrl')?.value\"\n (removeImage)=\"onRemoveLogo()\" header=\"Select Site Logo\">\n \n
      \n\n\n
      \n \n
      \n \n \n \n
      \n
      \n\n
      \n \n
      \n
      \n \n \n \n \n
      \n
      \n
      \n\n
      \n \n
      \n
      \n \n \n \n \n \n
      \n
      \n
      \n\n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n {{siteManagementFG.get('advancedSettings.maxPeopleOnSite').value == 1 ?\n 'Person' : 'Persons'}}\n
      \n \n Please Enter Max People Number\n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n\n\n \n
      \n \n \n
      \n\n
      \n \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n\n \n\n\n
      \n
      BioStar2 Credential
      \n
      \n
      \n
      \n \n \n
      \n
      \n\n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      Entry Conditions
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n Please Enter Access Group\n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n\n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n\n
      \n
      Access Control Units
      \n
      \n
      \n
      \n
      \n There are no {{is1BcProviederSelected?'access control':'device'}} units.\n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Display Name{{is1BcProviederSelected?'Control Unit':'Device'}} IdentifierEvacuation IdentifierEntry Barcode Scanner IdentifierEntry Gate IdentifierReject Repeated Entry ScansExit Barcode Scanner IdentifierExit Gate IdentifierReject Repeated Exit ScansActive Hours FromActive Hours ToDirection
      {{item.controls.displayName.value}}{{item.controls.controlUnitIdentifier.value}}{{item.controls.evacuationIdentifier.value}}{{item.controls.entryBarcodeScannerIdentifier.value}}{{item.controls.entryGateIdentifier.value}}{{item.controls.limitEntryGateRepeatedScansInSeconds.value}}{{item.controls.exitBarcodeScannerIdentifier.value}}{{item.controls.exitGateIdentifier.value}}{{item.controls.limitExitGateRepeatedScansInSeconds.value}}{{item.controls.activeHoursFrom?.value | time}}{{item.controls.activeHoursTo?.value | time}}\n {{item.controls.direction?.value | accessControlUnitDirection}}\n \n (T&A Codes: Check-In: {{item.controls.tnaEnterCode?.value ?? '-'}},\n Check-Out: {{item.controls.tnaExitCode?.value ?? '-'}})\n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n Seconds\n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n Seconds\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n \n New Device\n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n\n
      \n \n
      \n \n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n
      \n \n\n\n \n
      \n \n \n
      \n
      \n\n
      \n
      \n \n
      \n
      \n\n
      \n \n
      \n \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n\n
      \n
      \n
      \n\n
      \n\n
      \n\n
      \n
      \n Select Device From List\n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n Device Name\n \n Device Id\n T&A Keys
      \n \n
      \n {{device.name}}\n \n {{device.id}}\n \n
        \n
      1. \n {{tna.label}}\n \n (Key:{{tna.key}})\n \n {{tna.enabled == 'true' ? 'Enabled' : 'Disabled'}}\n \n \n
      2. \n
      \n
      \n \n
      \n
      \n
      \n
      ","import { MaxPeopleOnSiteMode } from 'src/app/enums/max-people-on-site-mode.enum';\nimport { Component, ElementRef, EventEmitter, HostListener, Input, NgZone, OnInit, Output, ViewChild } from '@angular/core';\nimport { AccompanierMode } from \"../../enums/accompanier-mode\";\nimport { AutomaticCheckInMode } from \"../../enums/automatic-checkin-mode\";\nimport { ToolTipMode, ToolTipPlace, ToolTipTriggers } from \"../../enums/tooltip-enums\";\nimport { AutoCheckOutType } from \"../../enums/auto-check-out-type.enum\";\nimport { MultipleCheckinType } from \"../../enums/multiple-checkin-type.enum\";\nimport { AdminSiteViewModel, SiteViewModel } from \"../../models/site-viewmodel\";\nimport { FormArray, FormControl, FormGroup, NgForm, Validators } from \"@angular/forms\";\nimport { InductionMode } from \"../../enums/site-induction-mode.enum\";\nimport { Constants } from \"../../enums/constants\";\nimport { AsyncResult } from \"../../models/helper-models\";\nimport { SiteService } from \"../../services/site.service\";\nimport { CountryService } from \"../../services/country.service\";\nimport { UserService } from \"../../services/user.service\";\nimport { ModalService } from \"../../services/modal.service\";\nimport { LayoutService } from \"../../services/layout.service\";\nimport { AddressLookupService } from \"../../services/address-lookup.service\";\nimport { AddressLookupSuggestion } from \"../../models/gmap/address-lookup-suggestion\";\nimport { TypeaheadMatch, TypeaheadOrder } from \"ngx-bootstrap/typeahead/public_api\";\nimport { noop, Observable, Observer, of, Subscription } from \"rxjs\";\nimport { Timezone } from \"../../models/time-zone\";\nimport { CompanyViewModel } from \"../../models/company-viewmodel\";\nimport { uuid4 } from \"../../helpers/uuid\";\nimport { ProductPlanFeature } from \"../../enums/product-plan-feature.enum\";\nimport { deepClone, isEqual, maxNumber } from \"../../helpers/general-functions\";\nimport { finalize, map, switchMap, tap } from \"rxjs/operators\";\nimport { AddressLookupGetSuggestionModel } from \"../../models/gmap/address-lookup-get-suggestion-model\";\nimport { CheckInApprovalMode } from 'src/app/enums/check-in-approval-mode.enum';\nimport { SeatingModeLabels } from 'src/app/enums/seating-mode.enum';\nimport { getCheckinApprovalModeFriendlyMode } from 'src/app/helpers/friendly-label';\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { ToastrService } from 'ngx-toastr';\nimport { ManageSiteModel, ManageSiteViewModel } from \"../../models/manage-site-view-model\";\nimport { ManageSiteService } from \"../../services/manage-site.service\";\nimport { SiteQrCodeViewModel } from \"../../models/site-qrcode-viewmodel\";\n\nimport { DirtyComponents } from \"../../models/dirty-components\";\nimport { DelayedAnswerMode } from 'src/app/enums/delayed-answer-mode';\nimport { QrCodeCheckinMode as QrCodeCheckinMode } from 'src/app/enums/qr-code-checkin-mode';\nimport { CheckinLocationMode } from 'src/app/enums/checkin-location-mode.enum';\nimport {\n AccessControlAutomaticAttendanceMode,\n AccessControlInductionMode,\n AccessControlSiteBriefingMode,\n AccessControlSupplierDocumentMode,\n AccessControlUnitDirection\n} from 'src/app/enums/access-control-automatic-attendance-mode';\nimport * as moment from 'moment';\nimport { timeFormat } from 'src/app/helpers/date-time-format';\nimport { SiteManagementMode } from \"../../enums/site-management-mode\";\nimport { ManageSupplierSiteService } from \"../../services/manage-supplier-site.service\";\nimport { ManageSiteSupplierModel } from \"../../models/site-supplier-management/manage-site-supplier-view-model\";\nimport { LocationOverrideMode } from 'src/app/enums/location-override-mode-enum';\nimport { AccessControlUnitProvider } from 'src/app/enums/access-control-unit-provider';\nimport { AccessControlAutomaticAttendanceModePipe } from 'src/app/pipes/access-control-automatic-attendance-mode.pipe';\nimport { AccessControlUnitProviderPipe } from 'src/app/pipes/access-control-unit-provider.pipe';\nimport { BiostarService } from 'src/app/services/biostar.service';\nimport { BioStarDevice, Tna_Keys } from 'src/app/models/biostar/view-models';\nimport { CompanySiteContactInformationModel } from \"../../models/company-site-contact-information.view.model\";\nimport { StorageService } from 'src/app/services/storage.service';\nimport { LocalStorageKey } from 'src/app/enums/local-storage-key.enum';\n\n@Component({\n selector: 'obc-site-management',\n templateUrl: './site-management.component.html',\n styleUrls: ['./site-management.component.scss']\n})\nexport class SiteManagementComponent implements OnInit {\n\n siteId: number;\n siteSupplierId: number;\n siteManagementMode: SiteManagementMode = SiteManagementMode.Site;\n SiteManagementModeEnum = SiteManagementMode;\n AccessControlUnitProvider = AccessControlUnitProvider;\n accessControlAutomaticAttendanceModeEnum = AccessControlAutomaticAttendanceMode;\n\n submitButtonFixed: boolean = false;\n showInfo: boolean = true;\n\n @HostListener('window:scroll') // for window scroll events\n onScroll() {\n const verticalOffset = window.pageYOffset\n || document.documentElement.scrollTop\n || document.body.scrollTop || 0;\n\n this.submitButtonFixed = verticalOffset > 103;\n }\n\n @HostListener('window:beforeunload', ['$event'])\n beforeunloadHandler(event) {\n if (this.isAnyAccordionDirty()) {\n event.preventDefault();\n event.returnValue = '';\n return false;\n } else\n window.close()\n }\n\n canDeactivate(): Observable | Observable | Promise | boolean {\n if (this.isAnyAccordionDirty()) {\n return this.modalService.confirm(\"There are unsaved changes. Are you sure you want to leave?\", \"Unsaved Changes\");\n }\n return true;\n }\n\n manageSiteModel: ManageSiteViewModel;\n DelayedAnswerMode = DelayedAnswerMode;\n CheckInApprovalMode = CheckInApprovalMode;\n currentCompanyId: number;\n currentUserIsGod: boolean = false;\n inProgress: boolean = false;\n accompanierMode = AccompanierMode;\n automaticCheckinMode = AutomaticCheckInMode;\n place = ToolTipPlace;\n trigger = ToolTipTriggers;\n mode = ToolTipMode;\n errorMessage: string = '';\n checkInDelayInMinutes = [0, 1, 2, 3, 4, 5];\n showInvalidSiteRadiusMessage: boolean = false;\n autoCheckOutTypes = AutoCheckOutType;\n multipleCheckinTypes = MultipleCheckinType;\n maxPeopleOnSiteMode = MaxPeopleOnSiteMode;\n SeatingModeLabels = SeatingModeLabels;\n siteLogoFormControl = new FormControl(null);\n InductionMode = InductionMode;\n maxAllowedGeofencingThresholdInMinutes: number;\n enablePreCheckInFeature: boolean = false;\n enableAccessControlFeature: boolean = false;\n public constants = Constants;\n QrCodeCheckinMode = QrCodeCheckinMode;\n CheckinLocationMode = CheckinLocationMode;\n AccessControlInductionMode = AccessControlInductionMode;\n AccessControlSiteBriefingMode = AccessControlSiteBriefingMode;\n AccessControlSupplierDocumentMode = AccessControlSupplierDocumentMode;\n AccessControlUnitDirection = AccessControlUnitDirection;\n // minimumPreCheckInCodeLength = 6;\n isForcedCheckOutAfterMinute = new FormControl(false);\n dirtyComponents: DirtyComponents = new DirtyComponents();\n\n clearDirtyComponents() {\n Object.keys(this.dirtyComponents).forEach((key) => {\n this.dirtyComponents[key].snapshot = null;\n this.dirtyComponents[key].isDirty = false;\n });\n this.siteManagementFG.markAsPristine();\n this.siteManagementFG.get('advancedSettings.logoBase64')?.setValue(null);\n this.siteManagementFG.get('advancedSettings.logoExtension')?.setValue(null);\n this._clone_fg_ = this.cloneFormGroup(this.siteManagementFG);\n }\n\n _clone_fg_;\n siteManagementFG = new FormGroup({\n projectSettings: new FormGroup({\n isTemplate: new FormControl(false),\n name: new FormControl('', Validators.required),\n description: new FormControl(null),\n siteReference: new FormControl(null),\n isPublicSite: new FormControl(false),\n latitude: new FormControl(null, Validators.required),\n longitude: new FormControl(null, Validators.required),\n address: new FormControl(null, Validators.required),\n maxAllowedSiteRadius: new FormControl(SiteViewModel.MAX_ALLOWED_SITE_RADIUS_DEFAULT),\n siteRadius: new FormControl(50, Validators.required),\n isForcedCheckOutTime: new FormControl(true),\n isForcedCheckOutAfterMinute: new FormControl(false),\n forceCheckOutAfterMinute: new FormControl(null, [Validators.required, Validators.min(1)]),\n checkinLocationMode: new FormControl(CheckinLocationMode.Optional),\n checkInLocationOverrideInKioskMode: new FormControl(0),\n forceCheckOutTime: new FormControl(\"18:00\"),\n checkInApprovalMode: new FormControl(CheckInApprovalMode.Disable),\n // contactUserId: new FormControl(''),\n siteSupervisorEmailAddress: new FormControl(''),\n allowUsersToAttachAdditionalDocuments: new FormControl(false),\n }),\n contactInformation: new FormGroup({\n contactInformationAsJson: new FormControl(null),\n }),\n advancedSettings: new FormGroup({\n seatingLocationFillMode: new FormControl(''),\n regionId: new FormControl(null),\n logoUrl: new FormControl(null),\n multipleCheckinType: new FormControl(MultipleCheckinType.Disable),\n enableNotifyNearUser: new FormControl(false),\n seatingModeLabels: new FormControl(''),\n maxPeopleOnSiteMode: new FormControl(MaxPeopleOnSiteMode.Disable),\n maxPeopleOnSite: new FormControl(''),\n timezoneId: new FormControl(''),\n accompanierMode: new FormControl(AccompanierMode.Disable),\n logoExtension: new FormControl(null),\n logoBase64: new FormControl(null),\n integrationConfigAsJson: new FormControl(''),\n }),\n automatedAttendance: new FormGroup({\n autoCheckInType: new FormControl(AutomaticCheckInMode.Disable),\n autoCheckInDelayInMinute: new FormControl(0),\n autoCheckOutType: new FormControl(AutoCheckOutType.Optional),\n geofencingThresholdInMinutes: new FormControl(25),\n delayedAnswerModeForCheckIn: new FormControl(DelayedAnswerMode.Disable),\n delayedAnswerModeForCheckOut: new FormControl(DelayedAnswerMode.Disable),\n delayedAnswerNotificationAfterCheckOutNotifyCount: new FormControl(1),\n delayedAnswerNotificationFrequencyInMinute: new FormControl(''),\n delayedAnswerForCheckInThresholdInHour: new FormControl(null),\n delayedAnswerForCheckOutThresholdInHour: new FormControl(null),\n }),\n cameraQR: new FormGroup({\n qrCodeCheckinMode: new FormControl(QrCodeCheckinMode.AnonymousFlutterWeb),\n forceCheckOutAnonymousAfterInMinute: new FormControl(30),\n }),\n offsite: new FormGroup({\n enablePreCheckIn: new FormControl(false),\n enableOffsiteInductions: new FormControl(true),\n enableOffsiteQR: new FormControl(true),\n enablePreCheckInForFrequentUsers: new FormControl(false),\n enablePreCheckInByCode: new FormControl(false),\n preCheckInCode: new FormControl(''),\n preCheckInPassword: new FormControl(''),\n }),\n accessControl: new FormGroup({\n accessControlUnitProvider: new FormControl(AccessControlUnitProvider.Disable),\n enableAccessControlUnitReport: new FormControl(false),\n\n isBioStarEnabled: new FormControl(false),\n bioStarApiServerUrl: new FormControl(''),\n bioStarApiUsername: new FormControl(''),\n bioStarApiPassword: new FormControl(''),\n enableBioStarAccessGroup: new FormControl(''),\n bioStarAccessGroup: new FormControl(''),\n bioStarUserGroup: new FormControl(''),\n\n accessControlAutomaticCheckInMode: new FormControl(AccessControlAutomaticAttendanceMode.Disabled),\n accessControlAutomaticCheckOutMode: new FormControl(AccessControlAutomaticAttendanceMode.Disabled),\n accessControlInductionCheckingMode: new FormControl(AccessControlInductionMode.ApprovedInductions),\n accessControlSiteBriefingCheckingMode: new FormControl(AccessControlSiteBriefingMode.NoRestriction),\n accessControlSupplierDocumentCheckingMode: new FormControl(AccessControlSupplierDocumentMode.NoRestriction),\n siteAccessControlUnits: new FormArray([]),\n newAccessControlUnit: new FormGroup({\n id: new FormControl(''),\n controlUnitIdentifier: new FormControl(''),\n displayName: new FormControl(''),\n entryBarcodeScannerIdentifier: new FormControl(''),\n exitBarcodeScannerIdentifier: new FormControl(''),\n entryGateIdentifier: new FormControl(''),\n exitGateIdentifier: new FormControl(''),\n limitEntryGateRepeatedScansInSeconds: new FormControl(0),\n limitExitGateRepeatedScansInSeconds: new FormControl(0),\n activeHoursFrom: new FormControl(''),\n activeHoursTo: new FormControl(''),\n evacuationIdentifier: new FormControl(''),\n direction: new FormControl(AccessControlUnitDirection.InOut),\n tnaEnterCode: new FormControl(''),\n tnaExitCode: new FormControl(''),\n }),\n }),\n });\n\n\n get accessControlUnits(): FormArray {\n return ((this.siteManagementFG.get('accessControl') as FormGroup).get('siteAccessControlUnits') as FormArray);\n }\n getNewAccessControlUnitFormGroup(): FormGroup {\n return (this.siteManagementFG.controls.accessControl as FormGroup).controls.newAccessControlUnit as FormGroup;\n }\n onNewControlUnit() {\n var formGroup = this.getNewAccessControlUnitFormGroup();\n if (!formGroup.controls.displayName.value) { this.modalService.error('Display Name is required'); return; }\n\n this.accessControlUnits.push(new FormGroup({\n id: new FormControl(formGroup.controls.id.value),\n controlUnitIdentifier: new FormControl(formGroup.controls.controlUnitIdentifier.value),\n displayName: new FormControl(formGroup.controls.displayName.value),\n entryBarcodeScannerIdentifier: new FormControl(formGroup.controls.entryBarcodeScannerIdentifier.value),\n exitBarcodeScannerIdentifier: new FormControl(formGroup.controls.exitBarcodeScannerIdentifier.value),\n entryGateIdentifier: new FormControl(formGroup.controls.entryGateIdentifier.value),\n exitGateIdentifier: new FormControl(formGroup.controls.exitGateIdentifier.value),\n limitEntryGateRepeatedScansInSeconds: new FormControl(formGroup.controls.limitEntryGateRepeatedScansInSeconds.value),\n limitExitGateRepeatedScansInSeconds: new FormControl(formGroup.controls.limitExitGateRepeatedScansInSeconds.value),\n activeHoursFrom: new FormControl(formGroup.controls.activeHoursFrom.value),\n activeHoursTo: new FormControl(formGroup.controls.activeHoursTo.value),\n evacuationIdentifier: new FormControl(formGroup.controls.evacuationIdentifier.value),\n direction: new FormControl(formGroup.controls.direction.value),\n tnaEnterCode: new FormControl(formGroup.controls.tnaEnterCode.value),\n tnaExitCode: new FormControl(formGroup.controls.tnaExitCode.value),\n }));\n formGroup.reset({\n id: '',\n controlUnitIdentifier: '',\n displayName: '',\n entryBarcodeScannerIdentifier: '',\n exitBarcodeScannerIdentifier: '',\n entryGateIdentifier: '',\n exitGateIdentifier: '',\n activeHoursFrom: '',\n activeHoursTo: '',\n evacuationIdentifier: '',\n limitEntryGateRepeatedScansInSeconds: 0,\n limitExitGateRepeatedScansInSeconds: 0,\n direction: AccessControlUnitDirection.InOut,\n tnaEnterCode: '',\n tnaExitCode: '',\n });\n\n }\n\n onRemoveAccessControlUnit(index: number) {\n this.accessControlUnits.removeAt(index);\n }\n\n setSubscriptionsOnDelayedAnswerModeFields() {\n this.siteManagementFG.get('automatedAttendance.delayedAnswerModeForCheckIn').valueChanges.subscribe(_ => this.onDelayedAnswerModeFields());\n this.siteManagementFG.get('automatedAttendance.delayedAnswerModeForCheckOut').valueChanges.subscribe(_ => this.onDelayedAnswerModeFields());\n this.siteManagementFG.get('automatedAttendance.delayedAnswerNotificationFrequencyInMinute').valueChanges.subscribe(_ => this.onDelayedAnswerModeFields());\n }\n\n setAutomatedAttendanceCheckoutThresholdSubscription() {\n if (this.siteManagementMode == SiteManagementMode.Site) {\n this.siteManagementFG.get('automatedAttendance.autoCheckOutType').valueChanges.subscribe(_ => {\n this.__updateAutomatedAttendanceCheckoutThresholdValidator();\n });\n this.siteManagementFG.get('projectSettings.checkinLocationMode').valueChanges.subscribe(_ => {\n this.__updateAutomatedAttendanceCheckoutThresholdValidator();\n });\n this.__updateAutomatedAttendanceCheckoutThresholdValidator();\n }\n }\n __updateAutomatedAttendanceCheckoutThresholdValidator() {\n if (this._checkIfGeofencingThresholdInMinutesIsRequired()) {\n this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes').setValidators(Validators.required);\n } else {\n this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes').clearValidators();\n }\n this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes').updateValueAndValidity();\n }\n\n onDelayedAnswerModeFields() {\n\n let automatedAttendance = (this.siteManagementFG.get('automatedAttendance') as FormGroup);\n\n let checkOutMode = automatedAttendance.controls['delayedAnswerModeForCheckOut'].value;\n\n if (checkOutMode != DelayedAnswerMode.Disable && automatedAttendance.controls['delayedAnswerNotificationFrequencyInMinute']?.value > 0)\n automatedAttendance.controls['delayedAnswerNotificationAfterCheckOutNotifyCount'].setValidators([Validators.required]);\n else\n automatedAttendance.controls['delayedAnswerNotificationAfterCheckOutNotifyCount'].clearValidators();\n\n automatedAttendance.controls['delayedAnswerNotificationAfterCheckOutNotifyCount'].updateValueAndValidity();\n\n }\n\n maxPeopleOnSiteModeFn(value) {\n value = value.value ? value.value : value;\n if (+value != MaxPeopleOnSiteMode.Disable) {\n this.siteManagementFG.get('advancedSettings.maxPeopleOnSite')\n .setValidators([Validators.required]);\n } else {\n this.siteManagementFG.get('advancedSettings.maxPeopleOnSite')\n .clearValidators();\n }\n this.siteManagementFG.get('advancedSettings.maxPeopleOnSite').updateValueAndValidity();\n }\n\n qrCodeCheckinModeFn(value) {\n if (value != QrCodeCheckinMode.Disable) {\n this.siteManagementFG.get('cameraQR.forceCheckOutAnonymousAfterInMinute')\n .setValidators([Validators.required]);\n } else {\n this.siteManagementFG.get('cameraQR.forceCheckOutAnonymousAfterInMinute')\n .clearValidators();\n }\n this.siteManagementFG.get('cameraQR.forceCheckOutAnonymousAfterInMinute').updateValueAndValidity();\n }\n\n checkinLocationModeFn(value) {\n this.siteManagementFG.get('projectSettings.checkinLocationMode')?.setValue(value);\n if (value == CheckinLocationMode.Disable) {\n this.setSubscriptionsOnDelayedAnswerModeFields();\n }\n }\n\n\n findInvalidControlsCount(formGroupName): number {\n let invalid = 0;\n let formGroup = this.siteManagementFG.get(formGroupName);\n const controls = formGroup['controls'];\n Object.keys(controls)?.forEach((key) => {\n if (controls[key]?.invalid && controls[key]?.touched) {\n invalid++;\n }\n });\n return invalid;\n }\n\n isAnyAccordionDirty() {\n return Object.keys(this.siteManagementFG['controls'])\n .some((key) => this.checkIfFormGroupIsDirty(key)) ||\n Object.values(this.dirtyComponents)\n .some((value) => value.isDirty);\n }\n\n areAllAccordionsValid() {\n if (this.siteManagementMode == SiteManagementMode.Supplier) return true;\n\n let allStates: boolean[] = [];\n\n Object.keys(this.siteManagementFG['controls']).forEach((key) => {\n allStates.push(this.siteManagementFG['controls'][key].valid)\n });\n return allStates.every(item => item);\n }\n\n mapItemsToAdminSiteViewModel() {\n let site: AdminSiteViewModel = deepClone(this.manageSiteModel?.site) ?? new AdminSiteViewModel();\n Object.keys(this.siteManagementFG['controls']).forEach((key) => {\n Object.entries(this.siteManagementFG['controls'][key]['controls']).forEach(([fcKey, fcValue]) => {\n site[fcKey] = fcValue['value'];\n });\n });\n\n if (site.siteAccessControlUnits?.length) {\n for (let unit of site.siteAccessControlUnits) {\n if (unit.activeHoursFrom)\n unit.activeHoursFrom = this.dateToTime(unit.activeHoursFrom);\n if (unit.activeHoursTo)\n unit.activeHoursTo = this.dateToTime(unit.activeHoursTo);\n }\n }\n return site;\n }\n\n dateToTime(date: Date) {\n return moment(date, timeFormat).format('HH:mm').toString();\n }\n\n mapSiteInfoToFormGroup() {\n\n if (this.manageSiteModel?.site) {\n Object.entries(this.manageSiteModel?.site).forEach(([key, value]) => {\n let formGroup = 'projectSettings';\n if (this.siteManagementFG['controls'].automatedAttendance['controls'][key])\n formGroup = 'automatedAttendance';\n else if (this.siteManagementFG['controls'].advancedSettings['controls'][key])\n formGroup = 'advancedSettings';\n else if (this.siteManagementFG['controls'].cameraQR['controls'][key])\n formGroup = 'cameraQR';\n else if (this.siteManagementFG['controls'].offsite['controls'][key])\n formGroup = 'offsite';\n else if (this.siteManagementFG['controls'].accessControl['controls'][key])\n formGroup = 'accessControl';\n else if (this.siteManagementFG['controls'].contactInformation['controls'][key])\n formGroup = 'contactInformation';\n try {\n if (formGroup == 'accessControl' && key == 'siteAccessControlUnits') {\n var unitsFormArray = this.siteManagementFG.get(`${formGroup}.${key}`) as FormArray;\n unitsFormArray?.clear();\n if (value?.length) {\n value.map(unit => {\n var fg = new FormGroup({});\n Object.entries(unit).forEach(([unitPropName, unitPropVal]) => {\n fg.addControl(unitPropName, new FormControl(unitPropVal));\n });\n unitsFormArray?.push(fg);\n });\n }\n } else\n this.siteManagementFG.get(`${formGroup}.${key}`)?.setValue(value ?? '');\n } catch {\n console.log(`Error in set value of form: ${formGroup} : ${key} : ${value}`);\n }\n });\n let checkInLocationOverrideInKioskMode = this.manageSiteModel.site.checkInLocationOverrideInKioskMode;\n this.siteManagementFG.get('projectSettings.checkInLocationOverrideInKioskMode')?.setValue(checkInLocationOverrideInKioskMode);\n }\n\n if (typeof this.siteManagementFG.get('accessControl.bioStarApiServerUrl')?.value == 'undefined' ||\n this.siteManagementFG.get('accessControl.bioStarApiServerUrl')?.value == '' ||\n this.siteManagementFG.get('accessControl.bioStarApiServerUrl')?.value == null) {\n this.siteManagementFG.get('accessControl.isBioStarEnabled')?.setValue(false);\n }\n else {\n this.siteManagementFG.get('accessControl.isBioStarEnabled')?.setValue(true);\n }\n\n if (typeof this.siteManagementFG.get('automatedAttendance.delayedAnswerForCheckOutThresholdInHour')?.value == 'undefined' ||\n this.siteManagementFG.get('automatedAttendance.delayedAnswerForCheckOutThresholdInHour')?.value == '') {\n this.siteManagementFG.get('automatedAttendance.delayedAnswerForCheckOutThresholdInHour')?.setValue(null);\n }\n if (typeof this.siteManagementFG.get('automatedAttendance.delayedAnswerForCheckInThresholdInHour')?.value == 'undefined' ||\n this.siteManagementFG.get('automatedAttendance.delayedAnswerForCheckInThresholdInHour')?.value == '') {\n this.siteManagementFG.get('automatedAttendance.delayedAnswerForCheckInThresholdInHour')?.setValue(null);\n }\n if (typeof this.siteManagementFG.get('advancedSettings.regionId')?.value == 'undefined' ||\n this.siteManagementFG.get('advancedSettings.regionId')?.value == '') {\n this.siteManagementFG.get('advancedSettings.regionId')?.setValue(null);\n }\n if (typeof this.siteManagementFG.get('cameraQR.forceCheckOutAnonymousAfterInMinute')?.value == 'undefined' ||\n this.siteManagementFG.get('cameraQR.forceCheckOutAnonymousAfterInMinute')?.value == null) {\n this.siteManagementFG.get('cameraQR.forceCheckOutAnonymousAfterInMinute')?.setValue(30);\n }\n\n let forceCheckoutAfterTimePeriod = this.siteManagementFG.get('projectSettings.forceCheckOutAfterMinute')?.value;\n if (typeof forceCheckoutAfterTimePeriod != 'undefined' &&\n forceCheckoutAfterTimePeriod != null && parseInt(forceCheckoutAfterTimePeriod) > 0) {\n this.isForcedCheckOutAfterMinuteMethod(true);\n } else {\n this.isForcedCheckOutAfterMinuteMethod(false);\n }\n this._clearValidatorsIfIsTemplate();\n this.siteManagementFG.markAsPristine()\n\n }\n\n\n isNewSiteRequest() {\n return this.router.url == '/manage-site/new' || this.router.url == '/manage-site/new-template';\n }\n\n _clearValidatorsIfIsTemplate() {\n if (this.siteManagementFG.get('projectSettings.isTemplate')?.value ?? false) {\n this.siteManagementFG.get('projectSettings.latitude')?.clearValidators();\n this.siteManagementFG.get('projectSettings.longitude')?.clearValidators();\n this.siteManagementFG.get('projectSettings.address')?.clearValidators();\n this.siteManagementFG.get('projectSettings.latitude')?.updateValueAndValidity()\n this.siteManagementFG.get('projectSettings.longitude')?.updateValueAndValidity()\n this.siteManagementFG.get('projectSettings.address')?.updateValueAndValidity()\n }\n }\n\n\n getSiteInfo() {\n if (!this.isNewSiteRequest()) {\n this.inProgress = true;\n this.route.params.subscribe((param: Params) => {\n this.siteId = +param['id'];\n this.siteSupplierId = +param['siteSupplierId'];\n if (this.siteSupplierId) {\n this.siteManagementMode = SiteManagementMode.Supplier;\n }\n (this.siteManagementMode == SiteManagementMode.Site ?\n this.manageSiteService.getSiteFullData(this.siteId) :\n this.manageSupplierSiteService.getSiteSupplierFullData(this.siteSupplierId))\n .pipe(finalize(() => {\n if (this.manageSiteModel?.site?.isActive === false) {\n this.router.navigate([`sites`], { skipLocationChange: false });\n }\n }))\n .subscribe(res => {\n if (res) {\n this.manageSiteModel = res;\n this.mapSiteInfoToFormGroup();\n Object.keys(this.siteManagementFG['controls']).forEach((key) => {\n this.siteManagementFG['controls'][key].valueChanges.subscribe(_ => {\n this.checkIfFormGroupIsDirty(key);\n });\n });\n\n this._clone_fg_ = this.cloneFormGroup(this.siteManagementFG);\n this.setSubscriptionsOnDelayedAnswerModeFields();\n this.onDelayedAnswerModeFields();\n this.setAutomatedAttendanceCheckoutThresholdSubscription();\n\n this.inProgress = false;\n }\n }, error => {\n this.modalService.error(\"There is no data to display\");\n });\n });\n } else {\n this.siteManagementFG.get('projectSettings.isTemplate')?.setValue(this.router.url == '/manage-site/new-template');\n\n this.setAutomatedAttendanceCheckoutThresholdSubscription();\n this._clearValidatorsIfIsTemplate();\n }\n }\n\n\n onRegionSelect(value) {\n this.siteManagementFG.get('advancedSettings.regionId').setValue(value);\n }\n\n @ViewChild('siteForm', { static: false }) siteForm: NgForm;\n\n @Input() set site(_site: SiteViewModel) {\n\n }\n\n validateCoordinate(point: number) {\n return point && !isNaN(point);\n }\n\n @Output() public result = new EventEmitter();\n\n\n routerSubscription;\n\n constructor(\n private siteService: SiteService,\n private countryService: CountryService,\n public userService: UserService,\n private modalService: ModalService,\n private layoutService: LayoutService,\n private addressLookupService: AddressLookupService,\n private route: ActivatedRoute,\n private router: Router,\n private toastr: ToastrService,\n private manageSiteService: ManageSiteService,\n private manageSupplierSiteService: ManageSupplierSiteService,\n private accessControlAutomaticAttendanceModePipe: AccessControlAutomaticAttendanceModePipe,\n private accessControlUnitProviderPipe: AccessControlUnitProviderPipe,\n private biostarService: BiostarService,\n private storageService: StorageService,\n private ngZone: NgZone,\n ) {\n }\n\n\n selectedAddress: AddressLookupSuggestion;\n sortConfig: TypeaheadOrder = {\n direction: 'asc',\n field: 'primaryTitle',\n };\n suggestions$: Observable;\n uuid: string;\n timezones: Timezone[] = null;\n currentCompany: CompanyViewModel = null;\n\n\n updateContactInformation(value: boolean) {\n // we're adding a new required form control if the value of `contactNumber` inside json string is not valid.\n // and removing the new created form control when it's valid\n let contactInformationFG: FormGroup = this.siteManagementFG['controls'].contactInformation as FormGroup;\n if (value) {\n contactInformationFG.addControl('validator', new FormControl(null, Validators.required));\n } else {\n contactInformationFG.removeControl('validator');\n }\n this.siteManagementFG.get('contactInformation.contactInformationAsJson').updateValueAndValidity()\n }\n getContactInformationDetail() {\n let contactInformationString = this.siteManagementFG.get('contactInformation.contactInformationAsJson').value;\n if (contactInformationString) {\n try {\n let parsedContactInformation = JSON.parse(contactInformationString) as CompanySiteContactInformationModel;\n if (parsedContactInformation) {\n return parsedContactInformation.contactFullName;\n }\n } catch (_) { }\n }\n return '';\n }\n\n ngOnInit(): void {\n\n // this.initDirtyComponents();\n\n this.layoutService.header = 'Site Settings';\n\n this.getSiteInfo();\n this.uuid = uuid4();\n\n this.getAddressList();\n this.currentCompany = this.userService.currentCompany;\n this.userService.currentCompany$.subscribe(\n (res) => (this.currentCompany = res)\n );\n this.userService.info.subscribe((res) => {\n this.currentUserIsGod = res?.userPermissions?.isGodUser;\n this.currentCompanyId = res?.currentCompanyId;\n this.enablePreCheckInFeature = this.userService.hasCompanyFeature(ProductPlanFeature.PreCheckIn);\n this.enableAccessControlFeature = this.userService.hasCompanyFeature(ProductPlanFeature.AccessControl);\n });\n this.countryService\n .getTimeZones()\n .subscribe((res) => (this.timezones = res));\n\n this.siteLogoFormControl.valueChanges.subscribe(res => {\n if (res == null) {\n this.siteManagementFG.get('advancedSettings.logoBase64')?.setValue(null);\n this.siteManagementFG.get('advancedSettings.logoExtension')?.setValue(null);\n } else {\n this.siteManagementFG.get('advancedSettings.logoBase64')?.setValue(res.content.split(';base64,')[1]);\n this.siteManagementFG.get('advancedSettings.logoExtension')?.setValue(res.type);\n }\n })\n this.maxAllowedGeofencingThresholdInMinutes = maxNumber([SiteViewModel.MAX_ALLOWED_AUTOMATIC_CHECKOUT_THRESHOLD_MINUTES_DEFAULT,\n this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes')?.value ?? 0]);\n\n var closeInfoPanel = this.storageService.get(LocalStorageKey.SiteSettingsInfoClose);\n this.showInfo = closeInfoPanel == \"1\" ? false : true;\n }\n\n onRemoveLogo() {\n this.siteService.removeSiteLogo(this.manageSiteModel?.site?.id).subscribe(_ => {\n this.siteManagementFG.get('advancedSettings.logoBase64')?.setValue(null);\n this.siteManagementFG.get('advancedSettings.logoExtension')?.setValue(null);\n this.siteManagementFG.get('advancedSettings.logoUrl')?.setValue(null);\n })\n }\n\n loader: boolean = false;\n\n getAddressList() {\n this.suggestions$ = new Observable((observer: Observer) => {\n observer.next(this.siteManagementFG.get('projectSettings.address')?.value);\n }).pipe(\n switchMap((query: string) => {\n if (query) {\n this.loader = true;\n let model: AddressLookupGetSuggestionModel = {\n address: query,\n sessionToken: this.uuid,\n };\n return this.addressLookupService.getAddressSuggestionList(model).pipe(\n map((data: AddressLookupSuggestion[]) => (data && data) || []),\n tap(\n () => noop,\n (_) => {\n // var rrr = (err && err.message) || 'Something goes wrong';\n }\n ),\n finalize(() => {\n this.loader = false;\n })\n );\n }\n\n return of([]);\n })\n );\n }\n\n _checkIfGeofencingThresholdInMinutesIsRequired() {\n return this.siteManagementFG.get('projectSettings.checkinLocationMode')?.value != undefined &&\n this.siteManagementFG.get('projectSettings.checkinLocationMode')?.value != CheckinLocationMode.Disable &&\n this.siteManagementFG.get('automatedAttendance.autoCheckOutType')?.value != undefined &&\n this.siteManagementFG.get('automatedAttendance.autoCheckOutType')?.value != AutoCheckOutType.Disable;\n }\n\n updateInsert() {\n if (this.siteManagementMode == SiteManagementMode.Site) {\n this.siteManagementFG.get('automatedAttendance.autoCheckInDelayInMinute')?.setValue(\n this.siteManagementFG.get('automatedAttendance.autoCheckInDelayInMinute')?.value ?? 0\n )\n if (this.isValid() === false) return;\n\n if (this._checkIfGeofencingThresholdInMinutesIsRequired() &&\n (typeof this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes')?.value == 'undefined' ||\n this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes')?.value == undefined)) {\n this.modalService.error(\"Automatic Check Out Threshold Is Needed\", \"\");\n return;\n }\n if (this.siteManagementFG.get('cameraQR.qrCodeCheckinMode')?.value != QrCodeCheckinMode.Disable\n && (this.siteManagementFG.get('cameraQR.forceCheckOutAnonymousAfterInMinute')?.value == null\n || this.siteManagementFG.get('cameraQR.forceCheckOutAnonymousAfterInMinute')?.value <= 0)) {\n this.modalService.error(`Auto Check Out ${this.constants.ANONYMOUS_ATTENDANCE_TITLE} After must be greater than zero when ${this.constants.ANONYMOUS_ATTENDANCE_TITLE} Check-In By QR is enabled.`, \"\");\n return;\n }\n\n // if (this.siteManagementFG.get('projectSettings.siteSupervisorEmailAddress')?.value != null && this.siteManagementFG.get('projectSettings.siteSupervisorEmailAddress')?.value.trim().length && !validateEmail(this.siteManagementFG.get('projectSettings.siteSupervisorEmailAddress')?.value)) {\n // this.modalService.error(\"Supervisor email is invalid.\", \"\");\n // return;\n // }\n\n if (this.siteManagementFG.get('projectSettings.checkinLocationMode')?.value == CheckinLocationMode.Disable) {\n this.siteManagementFG.get('automatedAttendance.autoCheckOutType')?.setValue(this.autoCheckOutTypes.Optional);\n }\n\n if (!this.siteManagementFG.get('projectSettings.isForcedCheckOutTime')?.value) {\n this.siteManagementFG.get('projectSettings.forceCheckOutTime')?.setValue(null);\n }\n\n if (!this.isForcedCheckOutAfterMinute?.value) {\n this.siteManagementFG.get('projectSettings.forceCheckOutAfterMinute')?.setValue(null);\n }\n\n if (this.siteManagementFG.get('accessControl.accessControlUnitProvider')?.value != AccessControlUnitProvider.BioStar) {\n this.siteManagementFG.get('accessControl.isBioStarEnabled')?.setValue(false);\n this.siteManagementFG.get('accessControl.enableBioStarAccessGroup')?.setValue(false);\n }\n\n if (this.siteManagementFG.get('accessControl.isBioStarEnabled')?.value == false) {\n this.siteManagementFG.get('accessControl.bioStarApiServerUrl')?.setValue(null);\n this.siteManagementFG.get('accessControl.bioStarApiUsername')?.setValue(null);\n this.siteManagementFG.get('accessControl.bioStarApiPassword')?.setValue(null);\n }\n\n\n if (this.siteManagementFG.get('accessControl.enableBioStarAccessGroup')?.value == false) {\n this.siteManagementFG.get('accessControl.bioStarAccessGroup')?.setValue(null);\n this.siteManagementFG.get('accessControl.bioStarUserGroup')?.setValue(null);\n }\n }\n\n let site: AdminSiteViewModel = this.mapItemsToAdminSiteViewModel();\n\n site.checkInLocationOverrideInKioskMode = this.checkInLocationOverrideInKioskModeCondition(site);\n\n this.inProgress = true\n if (this.isNewSiteRequest() && this.siteManagementMode == SiteManagementMode.Site) {\n this.siteService.add(site)\n .pipe(\n finalize(() => {\n this.inProgress = false\n }),\n ).subscribe(\n (res) => {\n this.result.emit({ isFinished: true, isSucceeded: true });\n this.router.navigate(['/manage-site/' + res.id]);\n window.scrollTo(0, 0);\n },\n (error) => {\n this.modalService.error(error ?? 'An error occurred in adding new site!').subscribe(_ => {\n });\n }\n );\n } else {\n let fullData;\n if (this.siteManagementMode == SiteManagementMode.Site) {\n fullData = {\n site,\n announcements: this.manageSiteModel?.announcements,\n checkInQuestions: this.manageSiteModel?.checkInQuestions,\n checkOutQuestions: this.manageSiteModel?.checkOutQuestions,\n forms: this.manageSiteModel?.forms?.map(i => i.formId),\n inductions: this.manageSiteModel?.inductions?.map(i => i.inductionId),\n scannableGroups: this.manageSiteModel?.scannableGroups,\n documentInfo: this.manageSiteModel?.documentInfo,\n requiredFields: this.manageSiteModel?.requiredFields.fields,\n siteVisitorTypes: this.manageSiteModel?.siteVisitorTypes?.map(i => i.visitorTypeId),\n visitorTypeAccompaniers: this.manageSiteModel?.visitorTypeAccompaniers,\n } as ManageSiteModel;\n } else {\n fullData = {\n announcements: this.manageSiteModel?.announcements,\n checkInQuestions: this.manageSiteModel?.checkInQuestions,\n checkOutQuestions: this.manageSiteModel?.checkOutQuestions,\n forms: this.manageSiteModel?.forms?.map(i => i.formId),\n inductions: this.manageSiteModel?.inductions?.map(i => i.inductionId),\n } as ManageSiteSupplierModel;\n //\n }\n\n (this.siteManagementMode == this.SiteManagementModeEnum.Site ?\n this.manageSiteService.saveSiteFullData(this.manageSiteModel?.site?.id, fullData) :\n this.manageSupplierSiteService.saveSitSupplierFullData(this.siteSupplierId, fullData)\n ).pipe(\n finalize(() => {\n this.inProgress = false\n }),\n ).subscribe(\n (res) => {\n this.manageSiteModel = res.data;\n this.mapSiteInfoToFormGroup();\n this.clearDirtyComponents()\n this.result.emit({ isFinished: true, isSucceeded: true });\n this.toastr.info('Your changes have been applied');\n\n // close all accordions\n document.querySelectorAll('.panel-open .panel-heading')\n .forEach(item => item.click());\n window.scrollTo(0, 0);\n },\n (error) => {\n this.modalService.error(error ?? 'An error occurred in updating site!');\n }\n );\n }\n }\n\n checkInLocationOverrideInKioskModeCondition(site: AdminSiteViewModel): LocationOverrideMode {\n let mode = LocationOverrideMode.Disabled;\n if (+site.checkinLocationMode !== CheckinLocationMode.Mandatory &&\n +site.checkinLocationMode !== CheckinLocationMode.MandatoryOnSite) {\n mode = site.checkInLocationOverrideInKioskMode =\n (this.manageSiteModel != null && this.manageSiteModel.site != null) ?\n this.manageSiteModel.site.checkInLocationOverrideInKioskMode :\n site?.CheckInLocationOverrideInKioskMode;\n }\n else {\n let frmVal = this.siteManagementFG.get('projectSettings.checkInLocationOverrideInKioskMode')?.value;\n mode = frmVal == null ? LocationOverrideMode.Disabled :\n frmVal === false ? LocationOverrideMode.Disabled :\n frmVal === true ? LocationOverrideMode.OverrideNonDisableModesToOptional :\n frmVal === 0 ? LocationOverrideMode.Disabled :\n frmVal === 1 ? LocationOverrideMode.OverrideNonDisableModesToOptional :\n LocationOverrideMode.Disabled;\n }\n return mode ?? LocationOverrideMode.Disabled;\n }\n validateLatLng() {\n return !(!this.siteManagementFG.get('projectSettings.isTemplate')?.value &&\n ((!this.siteManagementFG.get('projectSettings.latitude')?.value || isNaN(parseFloat(this.siteManagementFG.get('projectSettings.latitude')?.value))) ||\n (!this.siteManagementFG.get('projectSettings.longitude')?.value || isNaN(parseFloat(this.siteManagementFG.get('projectSettings.longitude')?.value))) ||\n (!this.siteManagementFG.get('projectSettings.address')?.value || (this.siteManagementFG.get('projectSettings.address')?.value == \"\"))\n ));\n }\n\n isValid(): boolean {\n if (maxNumber(this.checkInDelayInMinutes) < this.siteManagementFG.get('automatedAttendance.autoCheckInDelayInMinute')?.value) {\n this.modalService.error(`Maximum Check In Delay In Minute is ${maxNumber(this.checkInDelayInMinutes)}, Set current value to maximum by default`);\n this.siteManagementFG.get('automatedAttendance.autoCheckInDelayInMinute')?.setValue(\n maxNumber(this.checkInDelayInMinutes)\n )\n return false;\n }\n if (!this.validateLatLng()) {\n this.modalService.error('Please select a valid address from list or pick a place on map');\n return false;\n }\n\n if ((this.siteManagementFG.get('automatedAttendance.enableDelayedAnswerForCheckIn')?.value || this.siteManagementFG.get('automatedAttendance.enableDelayedAnswerForCheckOut')?.value) &&\n this.siteManagementFG.get('automatedAttendance.delayedAnswerNotificationFrequencyInMinute')?.value != null && this.siteManagementFG.get('automatedAttendance.delayedAnswerNotificationFrequencyInMinute')?.value > 0 &&\n this.siteManagementFG.get('automatedAttendance.delayedAnswerNotificationAfterCheckOutNotifyCount')?.value == null) {\n this.modalService.error('Please select Delayed Answer Notification After Checkout');\n return false;\n }\n\n if (this.currentUserIsGod == false && this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes')?.value > this.maxAllowedGeofencingThresholdInMinutes) {\n this.modalService.error(`Automatic check out threshold should be less than ${this.maxAllowedGeofencingThresholdInMinutes}`);\n return false;\n }\n\n if (this.siteManagementFG.get('projectSettings.maxAllowedSiteRadius')?.value == null) {\n this.modalService.error(`Max Allowed Site Radius can not be null`);\n return false;\n }\n\n\n if (typeof\n this.siteManagementFG.get('projectSettings.siteRadius')?.value == 'undefined' ||\n this.siteManagementFG.get('projectSettings.siteRadius')?.value == null ||\n this.siteManagementFG.get('projectSettings.siteRadius')?.value == 0) {\n this.modalService.error(`Site radius must has value`);\n return false;\n }\n if (\n (this.siteManagementFG.get('offsite.enablePreCheckIn')?.value ||\n this.siteManagementFG.get('offsite.enableOffsiteInductions')?.value) &&\n !this.siteManagementFG.get('offsite.enablePreCheckInForFrequentUsers')?.value &&\n !this.siteManagementFG.get('offsite.enablePreCheckInByCode')?.value &&\n !this.siteManagementFG.get('offsite.enableOffsiteQR')?.value) {\n this.modalService.error('At least one access mode must be enabled!');\n return false;\n }\n // if (this.enablePreCheckInWithCode && (!this._site.preCheckInCode || this._site.preCheckInCode.toString().trim().length == 0)) {\n // this.errorMessage = 'Pre check-in code is required!';\n // return false;\n // }\n // if (this.enablePreCheckInWithCode && this._site.preCheckInCode.toString().length < this.minimumPreCheckInCodeLength) {\n // this.errorMessage = `Pre check-in code length must be atleast ${this.minimumPreCheckInCodeLength} characters!`;\n // return false;\n // }\n\n return true;\n }\n\n onSelectAddress(event: TypeaheadMatch): void {\n this.selectedAddress = event.item;\n this.siteManagementFG.get('projectSettings.address')?.setValue(this.selectedAddress.primaryTitle +\n ' ' +\n this.selectedAddress.secondaryTitle);\n this.inProgress = true;\n this.addressLookupService\n .getDetailsOfSelectedPlace(this.selectedAddress.id, this.uuid)\n .pipe(\n finalize(() => {\n this.inProgress = false;\n })\n )\n .subscribe(\n (result) => {\n if (this.validateCoordinate(+result.latitude))\n this.siteManagementFG.get('projectSettings.latitude')?.setValue(result.latitude.toString());\n if (this.validateCoordinate(+result.longitude))\n this.siteManagementFG.get('projectSettings.longitude')?.setValue(result.longitude.toString());\n },\n (_) => {\n }\n );\n }\n\n updateLocation(event) {\n setTimeout(() => { // prevent errors when this happens inside change detection cycle\n this.ngZone.run(() => { // inital load of the map is not in the zone\n this.siteManagementFG.get('projectSettings.latitude')?.setValue(+event.lat);\n this.siteManagementFG.get('projectSettings.longitude')?.setValue(+event.lng);\n });\n });\n }\n\n validateSiteRadius() {\n if (this.currentUserIsGod) {\n this.siteManagementFG.get('projectSettings.maxAllowedSiteRadius')?.setValue(\n this.siteManagementFG.get('projectSettings.siteRadius')?.value > this.siteManagementFG.get('projectSettings.maxAllowedSiteRadius')?.value\n ? this.siteManagementFG.get('projectSettings.siteRadius')?.value\n : this.siteManagementFG.get('projectSettings.maxAllowedSiteRadius')?.value);\n } else {\n this.showInvalidSiteRadiusMessage =\n this.siteManagementFG.get('projectSettings.siteRadius')?.value > this.siteManagementFG.get('projectSettings.maxAllowedSiteRadius').value;\n\n this.siteManagementFG.get('projectSettings.siteRadius')?.setValue(Math.min(\n this.siteManagementFG.get('projectSettings.siteRadius')?.value,\n this.siteManagementFG.get('projectSettings.maxAllowedSiteRadius')?.value\n ));\n }\n }\n validateMaxSiteRadius() {\n this.siteManagementFG.get('projectSettings.siteRadius')?.setValue(\n this.siteManagementFG.get('projectSettings.maxAllowedSiteRadius')?.value < this.siteManagementFG.get('projectSettings.siteRadius')?.value\n ? this.siteManagementFG.get('projectSettings.maxAllowedSiteRadius')?.value\n : this.siteManagementFG.get('projectSettings.siteRadius')?.value);\n }\n\n validateGeofencingThresholdInMinutes() {\n if (!this.currentUserIsGod) {\n this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes')?.setValue(\n this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes')?.value > this.maxAllowedGeofencingThresholdInMinutes\n ? this.maxAllowedGeofencingThresholdInMinutes\n : this.siteManagementFG.get('automatedAttendance.geofencingThresholdInMinutes')?.value);\n }\n }\n\n\n deleteSite() {\n this.modalService.confirm(\"Are You Sure?\", `Delete ${this.manageSiteModel?.site?.name}`).subscribe(result => {\n if (result) {\n this.inProgress = true;\n this.siteService.delete(this.manageSiteModel?.site?.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(_ => {\n this.router.navigate(['company']);\n }, _ => {\n //if (error.status == 547) {\n this.modalService.confirm(\n \"Warning! Could not delete the site because it has check-in/out records. Do you want to deactivate it instead?\",\n `Delete ${this.manageSiteModel?.site?.name}`,\n \"Deactivate\",\n \"Cancel\").subscribe(result => {\n if (result) {\n this.callChangeActiveService();\n }\n });\n //this.modalService.error(\"This site contains saved information like check-in/out users\", \"you can't remove this site\");\n //} else\n // this.modalService.error(error);\n });\n }\n })\n }\n\n changeActiveState() {\n let header = this.manageSiteModel?.site?.isActive ? `Deactivate ${this.manageSiteModel?.site?.name}` : `Activate ${this.manageSiteModel?.site?.name}`\n this.modalService.confirm(\"Are You Sure?\", header).subscribe(result => {\n if (result) {\n this.callChangeActiveService();\n }\n })\n }\n\n callChangeActiveService() {\n this.inProgress = true;\n this.siteService.changeActiveState(this.manageSiteModel?.site?.id, !this.manageSiteModel?.site?.isActive)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(_ => {\n this.router.navigate(['sites']);\n }, error => {\n this.modalService.error(error ?? 'An error occurred');\n });\n }\n\n regenerateSecretKey() {\n let title: string, message: string;\n if (this.manageSiteModel?.site?.secretCode) {\n title = 'Rotate QR Code';\n message = 'This will create new QR code and previously printed QR codes will become invalid. Are you sure you want to continue?'\n } else {\n title = 'Enable QR Code';\n message = 'Are you sure you want to enable QR code access to the site?'\n }\n this.modalService.confirm(message, title).subscribe(result => {\n if (result) {\n this.inProgress = true;\n this.siteService.regenerateSecretKey(this.manageSiteModel?.site?.id)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe((result: SiteViewModel) => {\n this.manageSiteModel.site.secretCode = result?.secretCode;\n this.showSecretKey();\n }, _ => {\n this.modalService.error(\"We can't generate this key now, Please try again\")\n });\n }\n });\n }\n\n siteQRCode: SiteQrCodeViewModel = new SiteQrCodeViewModel();\n offsiteQRCode: SiteQrCodeViewModel = new SiteQrCodeViewModel();\n\n clearSecretKey() {\n this.modalService.confirm('Are you sure you want disable QR code access?', 'Disable QR code').subscribe(result => {\n if (result) {\n this.inProgress = true;\n this.siteService.clearSecretKey(this.manageSiteModel?.site?.id)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(_ => {\n this.manageSiteModel.site.secretCode = undefined;\n this.siteQRCode = new SiteQrCodeViewModel();\n }, _ => {\n this.modalService.error(\"Please try again\")\n });\n }\n });\n }\n\n showQrCodeWithInstruction() {\n window.open(`/General/site-instructions/${this.manageSiteModel?.site?.id}/${this.manageSiteModel?.site?.secretCode}`, `site-instructions-${this.manageSiteModel?.site?.id}`);\n //window.open(`/General/full-qrcode/${this.manageSiteModel?.site?.id}/${this.manageSiteModel?.site?.secretCode}`, '_blank', 'top=0,left=0,height=100%,width=auto');\n }\n\n showSecretKey() {\n this.inProgress = true;\n this.siteService.showSecretKey(this.manageSiteModel?.site?.id)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(result => {\n this.siteQRCode.qrCodeImageBase64 = result.qrCodeImageBase64;\n }, _ => {\n this.modalService.error(\"please try again\")\n });\n }\n\n showOffsiteSecretKey() {\n this.inProgress = true;\n this.siteService.showOffsiteSecretKey(this.manageSiteModel?.site?.id)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(result => {\n this.offsiteQRCode.qrCodeImageBase64 = result.qrCodeImageBase64;\n this.offsiteQRCode.qrCodeContent = result.qrCodeContent;\n }, _ => {\n this.modalService.error(\"please try again\")\n });\n }\n\n @ViewChild(\"printSection\") printSection: ElementRef;\n @ViewChild(\"printOffsiteSection\") printOffsiteSection: ElementRef;\n\n print(printOffsite: boolean) {\n let printContents, popupWin;\n printContents = ((printOffsite ? this.printOffsiteSection : this.printSection).nativeElement as HTMLLinkElement).innerHTML;\n popupWin = window.open('', '_blank', 'top=0,left=0,height=100%,width=auto');\n popupWin.document.open();\n popupWin.document.write(`\n \n \n Print tab\n \n \n
      ${printContents}
      \n `\n );\n popupWin.document.close();\n }\n\n\n getMultipleCheckinType(multipleCheckinType) {\n switch (multipleCheckinType) {\n case MultipleCheckinType.Disable:\n return \"Disable\";\n case MultipleCheckinType.Enable:\n return \"Enable\";\n case MultipleCheckinType.EnableForThisCompany:\n return \"Enable For This Company\";\n }\n }\n\n getMaxPeopleOnSiteMode(maxPeopleOnSiteMode) {\n switch (maxPeopleOnSiteMode) {\n case MaxPeopleOnSiteMode.Disable:\n return \"Disable\";\n case MaxPeopleOnSiteMode.Warning:\n return \"Send Warning Email To Supervisor\";\n case MaxPeopleOnSiteMode.Reject:\n return \"Send Email To Supervisor And Reject\";\n }\n }\n\n getCheckinApprovalModeFriendlyMode(mode: CheckInApprovalMode) {\n return getCheckinApprovalModeFriendlyMode(mode);\n }\n\n\n checkIfFormGroupIsDirty(formGroup) {\n if (this.manageSiteModel) {\n let currentSite = {};\n Object.entries(this.cloneFormGroup(this.siteManagementFG)[formGroup])?.forEach(([fcKey, fcValue]) => {\n currentSite[fcKey] = fcValue;\n })\n\n let clonedSite = {};\n if (this._clone_fg_) {\n Object.entries(this._clone_fg_[formGroup])?.forEach(([fcKey, fcValue]) => {\n clonedSite[fcKey] = fcValue;\n })\n }\n\n if (!isEqual(currentSite, clonedSite)) {\n return true;\n }\n }\n return false;\n }\n\n cloneFormGroup(formGroup) {\n let clonedFormGroup = {};\n Object.keys(formGroup['controls']).forEach((key) => {\n let stringifies = {};\n Object.keys(formGroup['controls'][key]['controls']).forEach((fcKey) => {\n let value = formGroup['controls'][key]['controls'][fcKey].value;\n if (value != null && value.constructor === Array) {\n let stringValue = '';\n for (let i of value) {\n stringValue += JSON.stringify(i);\n }\n value = stringValue;\n }\n stringifies[fcKey] = value != null ? value.toString() : \"\";\n });\n clonedFormGroup[key] = stringifies;\n });\n return clonedFormGroup;\n }\n\n isForcedCheckOutAfterMinuteMethod(switchValue) {\n this.isForcedCheckOutAfterMinute?.setValue(switchValue);\n var forceCheckout = this.siteManagementFG.get('projectSettings.forceCheckOutAfterMinute');\n if (switchValue) {\n forceCheckout?.setValue(\n this.manageSiteModel?.site?.forceCheckOutAfterMinute ?? 0);\n forceCheckout.setValidators([Validators.required, Validators.min(1)]);\n } else {\n forceCheckout?.setValue(null);\n forceCheckout.clearValidators();\n }\n forceCheckout.updateValueAndValidity();\n }\n\n updateForcedCheckOutAfterMinute(minute) {\n // if(parseInt(minute) > 0) {\n this.siteManagementFG.get('projectSettings.forceCheckOutAfterMinute')?.setValue(+minute);\n // } else {\n // this.siteManagementFG.get('projectSettings.forceCheckOutAfterMinute')?.setValue(null);\n // }\n\n }\n\n /*===================*/\n updateManageSiteModel(value) {\n this.manageSiteModel = { ...value };\n }\n\n get isActiveAutoCheckInPanel() {\n return this.siteManagementFG.get('projectSettings.checkinLocationMode')?.value &&\n this.siteManagementFG.get('projectSettings.checkinLocationMode')?.value != CheckinLocationMode.Disable;\n }\n\n get checkinLocationMode() {\n return +this.siteManagementFG.get('projectSettings.checkinLocationMode')?.value;\n }\n\n onUpdate = false;\n resetSelectedSite() {\n let originalSiteId = this.siteId;\n this.onUpdate = true;\n this.siteId = 0;\n setTimeout(() => {\n this.siteId = originalSiteId;\n setTimeout(() => {\n this.onUpdate = false;\n }, 10);\n }, 10);\n }\n\n onChangeSelectedSite(site) {\n if (this.onUpdate == true)\n return;\n\n let dirtyResult = this.canDeactivate();\n if (dirtyResult == false) {\n this.resetSelectedSite();\n }\n else if (dirtyResult == true) {\n this.updateSelectedSite(site);\n }\n else //if (dirtyResult != true)\n {\n (dirtyResult as Observable).subscribe(r => {\n if (r != true) {\n this.resetSelectedSite();\n }\n else if (r == true) {\n this.updateSelectedSite(site);\n }\n })\n }\n }\n\n updateSelectedSite(site) {\n this.clearDirtyComponents();\n if (site.MaxPeopleOnSiteMode == null) {\n this.siteManagementFG.get('advancedSettings.maxPeopleOnSite').clearValidators();\n this.siteManagementFG.get('advancedSettings.maxPeopleOnSite').updateValueAndValidity();\n\n }\n\n if (site.isExternalSite && this.siteSupplierId != site.externalSiteSupplierId) {\n this.inProgress = true;\n this.router.navigateByUrl('/manage-site/supplier/' + site.externalSiteSupplierId);\n }\n else if (!site.isExternalSite && this.siteId != site.id) {\n this.inProgress = true;\n this.router.navigateByUrl('/manage-site/' + site.id);\n }\n }\n getAccessControlHeaderInfo() {\n let provider: AccessControlUnitProvider = this.siteManagementFG.get('accessControl.accessControlUnitProvider')?.value;\n if (provider == AccessControlUnitProvider.Disable)\n return [\n {\n 'title': '',\n 'value': 'Disable',\n },\n ];\n let providerTitle = {\n 'title': 'Provider: ',\n 'value': this.accessControlUnitProviderPipe.transform(provider),\n };\n if (provider == AccessControlUnitProvider.OneBreadCrumb)\n return [\n providerTitle,\n {\n 'title': 'Automatic Check-In: ',\n 'value': this.accessControlAutomaticAttendanceModePipe.transform(this.siteManagementFG.get('accessControl.accessControlAutomaticCheckInMode')?.value),\n },\n {\n 'title': 'Automatic Check-Out: ',\n 'value': this.accessControlAutomaticAttendanceModePipe.transform(this.siteManagementFG.get('accessControl.accessControlAutomaticCheckOutMode')?.value),\n }];\n if (provider == AccessControlUnitProvider.BioStar)\n return [\n providerTitle,\n ];\n }\n\n get isAccessControlDisabled(): boolean {\n return this.siteManagementFG.get('accessControl.accessControlUnitProvider')?.value == AccessControlUnitProvider.Disable;\n }\n get is1BcProviederSelected(): boolean {\n return this.siteManagementFG.get('accessControl.accessControlUnitProvider')?.value == AccessControlUnitProvider.OneBreadCrumb;\n }\n get isBioProviederSelected(): boolean {\n return this.siteManagementFG.get('accessControl.accessControlUnitProvider')?.value == AccessControlUnitProvider.BioStar;\n }\n\n //#region BioStar\n\n get isBiostarEnabled(): boolean {\n return this.manageSiteModel?.additionalData?.isBioStarEnabled\n ?? false;\n }\n bioStartDeviceList: BioStarDevice[];\n bioDevicesFetchInProgress: boolean = false;\n\n getBioStarDeviceList() {\n this.bioDevicesFetchInProgress = true;\n return this.biostarService.getBioStarDevices(this.siteId)\n .subscribe(res => {\n this.bioDevicesFetchInProgress = false;\n this.bioStartDeviceList = res;\n })\n }\n\n initBioStarDeviceList() {\n if (!this.bioStartDeviceList) {\n this.getBioStarDeviceList()\n }\n }\n showSelectBioStarDeviceModal(template: any) {\n this.initBioStarDeviceList()\n this.modalService.show(template, 'modal-lg');\n }\n onSelectBiostarDevice(device: BioStarDevice) {\n let newAccessControlUnit = (this.siteManagementFG.controls['accessControl'] as FormGroup).controls['newAccessControlUnit'] as FormGroup;\n newAccessControlUnit.controls['displayName'].setValue(device.name);\n newAccessControlUnit.controls['controlUnitIdentifier'].setValue(device.id);\n this.modalService.hide();\n }\n\n changeBioStarActiveState(state) {\n this.siteManagementFG.get('accessControl.isBioStarEnabled')?.setValue(state);\n if (!state) {\n this.siteManagementFG.get('accessControl.bioStarApiServerUrl')?.clearValidators();\n this.siteManagementFG.get('accessControl.bioStarApiUsername')?.clearValidators();\n this.siteManagementFG.get('accessControl.bioStarApiPassword')?.clearValidators();\n this.siteManagementFG.get('accessControl.bioStarApiServerUrl')?.updateValueAndValidity();\n this.siteManagementFG.get('accessControl.bioStarApiUsername')?.updateValueAndValidity();\n this.siteManagementFG.get('accessControl.bioStarApiPassword')?.updateValueAndValidity();\n }\n else {\n this.siteManagementFG.get('accessControl.bioStarApiServerUrl')?.setValidators([Validators.required]);\n this.siteManagementFG.get('accessControl.bioStarApiUsername')?.setValidators([Validators.required]);\n this.siteManagementFG.get('accessControl.bioStarApiPassword')?.setValidators([Validators.required]);\n this.siteManagementFG.get('accessControl.bioStarApiServerUrl')?.updateValueAndValidity();\n this.siteManagementFG.get('accessControl.bioStarApiUsername')?.updateValueAndValidity();\n this.siteManagementFG.get('accessControl.bioStarApiPassword')?.updateValueAndValidity();\n }\n }\n\n changeBioStarEnableAccessGroup(state) {\n this.siteManagementFG.get('accessControl.enableBioStarAccessGroup')?.setValue(state);\n if (!state) {\n this.siteManagementFG.get('accessControl.bioStarAccessGroup')?.clearValidators();\n this.siteManagementFG.get('accessControl.bioStarAccessGroup')?.updateValueAndValidity();\n this.siteManagementFG.get('accessControl.bioStarUserGroup')?.clearValidators();\n this.siteManagementFG.get('accessControl.bioStarUserGroup')?.updateValueAndValidity();\n }\n else {\n if (this.siteManagementFG.get('accessControl.enableBioStarAccessGroup')?.value === true) {\n this.siteManagementFG.get('accessControl.bioStarAccessGroup')?.setValidators([Validators.required]);\n this.siteManagementFG.get('accessControl.bioStarUserGroup')?.setValidators([Validators.required]);\n }\n this.siteManagementFG.get('accessControl.bioStarAccessGroup')?.updateValueAndValidity();\n this.siteManagementFG.get('accessControl.bioStarUserGroup')?.updateValueAndValidity();\n }\n }\n\n closeInfoPanel() {\n this.showInfo = false;\n this.storageService.set(LocalStorageKey.SiteSettingsInfoClose, \"1\");\n }\n\n filterTna(tna: Tna_Keys) {\n return tna.label?.trim()?.length;\n }\n\n showTnaCodes(): any {\n return this.getNewAccessControlUnitFormGroup().controls['direction'].value == AccessControlUnitDirection.InOut\n }\n //#endregion\n}\n","
      \n
      \n

      Procore authorization done!

      \n

      You can close this window!

      \n

      This window will be closed in a few seconds automatically!

      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'obc-procore-configuration-access-code-callback',\n templateUrl: './procore-configuration-access-code-callback.component.html',\n styleUrls: ['./procore-configuration-access-code-callback.component.scss']\n})\nexport class ProcoreConfigurationAccessCodeCallbackComponent implements OnInit {\n success: boolean;\n\n constructor(private route: ActivatedRoute) { }\n\n ngOnInit(): void {\n this.route.queryParams.subscribe((res) => {\n this.success = res['success'] == '1';\n window.opener.procoreConfigCompleted();\n setTimeout(() => window.close(), 5000);\n });\n }\n\n}\n","export enum ProcoreIntegrationType {\n ImportSite = 0,\n ImportUser = 1,\n ExportSiteAttendance = 2,\n UploadSiteSupplierDocumentsEnabled = 3,\n UploadSiteSupplierDocumentVersionSignOffsEnabled = 4,\n UploadSiteInductionsEnabled = 5,\n ImportCompanyDirectory = 6,\n ImportProjectDirectory = 7,\n UploadPermitFormsEnabled = 8,\n UploadSiteAssetFormsEnabled = 9,\n ImportCompanyRoles = 10,\n ImportProjectUserRoles = 11,\n UploadSiteBriefingsEnabled = 12,\n procoreUploadGenericFormsEnabled = 13,\n UploadEvacuationsEnabled = 14,\n}\n\nexport enum IntegrationOperation {\n ImportSites = 0,\n ImportProjectUsers = 1,\n ImportCompanyDirectory = 2,\n ImportProjectDirectory = 3,\n ExportSiteSupplierDocuments = 4,\n ExportSiteInductions = 5,\n ExportPermitForms = 6,\n ExportSiteAssetForms = 7,\n ExportSiteAttendances = 8,\n ImportCompanyRoles = 9,\n ImportProjectUserRoles = 10,\n ExportTimeCards = 11,\n ExportAggregatedManpower = 12,\n ExportVisitorLogs = 13,\n ExportManpowerLogs = 14,\n ImportAttendances = 15,\n ExportSiteBriefings = 16,\n ExportEvacuations = 17,\n}\n","export enum ProcoreExportCheckInAsTimeCardMode {\n Disabled = 0,\n EmployeesOnly = 1,\n}\n\nexport enum ProcoreExportCheckInAsVisitorLogMode {\n Disabled = 0,\n Everyone = 1,\n EveryoneExceptEmployees = 2,\n EveryoneExceptSubcontractorsAndEmployees = 3,\n}\n\nexport enum ProcoreExportCheckInAsManpowerMode {\n Disabled = 0,\n Everyone = 1,\n EveryoneExceptEmployees = 2,\n SubcontractorsOnly = 3,\n AggregatedSubcontractors = 4,\n AggregatedSubcontractorsAndEmployees = 5,\n}\n\nexport enum ProcoreCommentMode {\n Disabled = 0,\n Mobile = 1,\n FullName = 2,\n MobileFullName = 3,\n}\n","\nexport enum ProcoreConnectionMode {\n ServiceAccount = 0,\n MarketplaceApp = 1,\n DMSA = 2,\n}","export enum ProcoreFolderStructureMode {\n Legacy = 0,\n SupplierBased = 1,\n FeatureBased = 2,\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { ProcoreExportCheckInAsTimeCardMode } from '../enums/procore-export-modes.enum';\n\n@Pipe({\n name: 'procoreExportSiteAttendanceAsTimeCardModePipe'\n})\nexport class ProcoreExportSiteAttendanceAsTimeCardModePipePipe implements PipeTransform {\n\n\n transform(value: any): unknown {\n if (value === ProcoreExportCheckInAsTimeCardMode.Disabled) return 'Disabled';\n if (value === ProcoreExportCheckInAsTimeCardMode.EmployeesOnly) return 'Employees Only';\n return value;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ProcoreCommentMode } from '../enums/procore-export-modes.enum';\n\n@Pipe({\n name: 'procoreCommentModePipe'\n})\nexport class ProcoreCommentModePipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value == ProcoreCommentMode.Disabled) return 'Disabled';\n if (value == ProcoreCommentMode.Mobile) return 'Mobile';\n if (value == ProcoreCommentMode.FullName) return 'Full Name';\n if (value == ProcoreCommentMode.MobileFullName) return 'Full Name and Mobile';\n return value.toString();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ProcoreExportCheckInAsVisitorLogMode } from '../enums/procore-export-modes.enum';\n\n@Pipe({\n name: 'procoreExportSiteAttendanceAsVisitorLogModePipe'\n})\nexport class ProcoreExportSiteAttendanceAsVisitorLogModePipePipe implements PipeTransform {\n\n transform(value: any): unknown {\n if (value === ProcoreExportCheckInAsVisitorLogMode.Disabled) return 'Disabled';\n if (value === ProcoreExportCheckInAsVisitorLogMode.Everyone) return 'Everyone';\n if (value === ProcoreExportCheckInAsVisitorLogMode.EveryoneExceptEmployees) return 'Everyone Except Employees';\n if (value === ProcoreExportCheckInAsVisitorLogMode.EveryoneExceptSubcontractorsAndEmployees) return 'Everyone Except Subcontractors And Employees';\n return value;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ProcoreExportCheckInAsManpowerMode } from '../enums/procore-export-modes.enum';\n\n@Pipe({\n name: 'procoreExportSiteAttendanceAsManpowerModePipe'\n})\nexport class ProcoreExportSiteAttendanceAsManpowerModePipe implements PipeTransform {\n\n transform(value: any): unknown {\n if (value === ProcoreExportCheckInAsManpowerMode.Disabled) return 'Disabled';\n if (value === ProcoreExportCheckInAsManpowerMode.Everyone) return 'Everyone';\n if (value === ProcoreExportCheckInAsManpowerMode.EveryoneExceptEmployees) return 'Everyone Except Employees';\n if (value === ProcoreExportCheckInAsManpowerMode.SubcontractorsOnly) return 'Subcontractors Only';\n if (value === ProcoreExportCheckInAsManpowerMode.AggregatedSubcontractors) return 'Aggregated For Subcontractors';\n if (value === ProcoreExportCheckInAsManpowerMode.AggregatedSubcontractorsAndEmployees) return 'Aggregated For Subcontractors And Employees';\n return value;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ProcoreFolderStructureMode } from '../enums/procore-folder-structure-mode.enum';\n\n@Pipe({\n name: 'procoreFolderStructureMode'\n})\nexport class ProcoreFolderStructureModePipe implements PipeTransform {\n\n transform(value: any): unknown {\n if (value == ProcoreFolderStructureMode.Legacy) return \"Legacy\";\n else if (value == ProcoreFolderStructureMode.FeatureBased) return \"Grouped by Feature\";\n else if (value == ProcoreFolderStructureMode.SupplierBased) return \"Grouped by Supplier\";\n return value?.toString() ?? \"?\";\n }\n\n}\n","
      \n
      \n \n
      \n {{errorMessage}}\n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n \n \n \n
      \n
      \n
      \n \n
      \n
      Authentication
      \n
      \n
      \n
      \n
      \n \n {{apiUserEmail}}\n
      \n
      \n \n {{procoreCompanyInfo}}\n
      \n
      \n \n \n {{procoreCheckTokenResponse?.configuration?.clientId}}\n \n \n \n \n \n \n \n \n
      \n
      \n {{infoMessage}}\n
      \n
      \n
      \n
      \n\n
      \n \n
      \n \n \n
      \n
      \n\n \n
      \n \n \n
      \n
      \n \n \n
      \n \n\n
      \n \n \n\n
      \n\n
      \n
      \n
      \n\n
      \n
      \n
      \n\n
      \n\n\n\n
      \n
      \n Procore Company\n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n \n
      \n
      \n Procore Webhooks\n
      \n
      \n\n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n Import Sites\n
      \n
      \n\n
      \n
      \n \n \n \n
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n
      \n Last Sync:\n \n {{procoreIntegrationTypeInfos[ProcoreIntegrationTypes.ImportSite].lastInvokeDateTime | datetime}}\n \n \n \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n Last Sync:\n \n {{procoreIntegrationTypeInfos[ProcoreIntegrationTypes.ImportUser].lastInvokeDateTime | datetime}}\n \n \n \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n Import Directories\n
      \n
      \n
      \n
      \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.ImportCompanyDirectory].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n
      \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.ImportProjectDirectory].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n\n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n\n
      \n
      \n Import Roles\n
      \n
      \n
      \n
      \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.ImportCompanyRoles].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n
      \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.ImportProjectUserRoles].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n\n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n\n\n
      \n
      \n Export Checkins As\n
      \n
      \n
      \n
      \n \n \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.ExportSiteAttendance].lastInvokeDateTime |\n datetime\n }}\n \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n Export Documents\n
      \n
      \n
      \n
      \n \n \n
      \n\n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.UploadSiteSupplierDocumentsEnabled].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n
      \n \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.UploadSiteInductionsEnabled].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n
      \n \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.UploadPermitFormsEnabled].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n
      \n
      \n\n
      \n \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.UploadSiteAssetFormsEnabled].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n
      \n \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.UploadSiteBriefingsEnabled].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n
      \n \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.procoreUploadGenericFormsEnabled].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n Last Sync:\n \n {{\n procoreIntegrationTypeInfos[ProcoreIntegrationTypes.UploadEvacuationsEnabled].lastInvokeDateTime\n |\n datetime\n }}\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n\n\n
      \n
      \n \n Permissions on Procore\n \n \n
      \n
      \n
      \n
      \n Company Permissions\n \n
      \n
      \n\n Projects\n
      \n \n \n \n
      \n
      \n Address:\n {{item.procoreAddress}}\n
      \n
      \n Longitude/Latitude:\n \n {{item.procoreLongitude}}/{{item.procoreLatitude}}\n \n
      \n
      \n Linked To Site:\n -\n \n {{item.obcSiteName}}\n ({{item.obcSiteReference}})\n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n \n
      \n
      0\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n Name\n \n Permission\n
      \n {{ item.friendlyName }}\n \n \n {{item.currentAccessLevel}}\n \n (Required: {{item.requiredAccessLevel}})\n \n \n \n
      \n
      \n
      \n
      \n","import { ProcorePermission } from './../../../models/procore/procore-permission';\nimport { CompanyPermissionsProjects } from './../../../models/procore/company-permissions-projects';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { Subscription, of } from 'rxjs';\nimport { CompanySettingService } from 'src/app/services/company-setting.service';\nimport { BaseProcoreIntegrationConfigModel, ProcoreCheckTokenResponse, ProcoreCompany, ProcoreIntegrationAuthorizationModel, ProcoreIntegrationTypeInfo } from 'src/app/models/procore-integration-models';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { finalize } from 'rxjs/operators';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { IntDictionary } from 'src/app/models/dictionary';\nimport { ProcoreIntegrationType } from 'src/app/enums/procore-integration-type.enum';\nimport { ProcoreExportCheckInAsTimeCardMode, ProcoreExportCheckInAsVisitorLogMode, ProcoreExportCheckInAsManpowerMode, ProcoreCommentMode } from 'src/app/enums/procore-export-modes.enum';\nimport { ProcoreConnectionMode } from 'src/app/enums/procore-connection-mode';\nimport { popup } from 'src/app/helpers/general-functions';\nimport { ProcoreFolderStructureMode } from 'src/app/enums/procore-folder-structure-mode.enum';\nimport { UserService } from 'src/app/services/user.service';\nimport { ProcoreProjectModel } from 'src/app/models/procore/procore-project-model';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ProcoreProjectInfo } from 'src/app/models/procore/procore-project';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({\n selector: 'app-procore-integration',\n templateUrl: './procore-integration.component.html',\n styleUrls: ['./procore-integration.component.scss']\n})\nexport class ProcoreIntegrationComponent implements OnInit {\n editClientInfo: boolean = false;\n editModeOfEnabledZone: boolean = false;\n errorMessage: string;\n infoMessage: string;\n procoreCheckTokenResponse: ProcoreCheckTokenResponse;\n apiUserEmail: string = null;\n ProcoreIntegrationTypes = ProcoreIntegrationType;\n procoreIntegrationTypeInfos: IntDictionary = null;\n templateSites: SiteViewModel[];\n ProcoreExportSiteAttendanceAsTimeCardMode = ProcoreExportCheckInAsTimeCardMode;\n ProcoreExportSiteAttendanceAsVisitorLogMode = ProcoreExportCheckInAsVisitorLogMode;\n ProcoreExportSiteAttendanceAsManpowerMode = ProcoreExportCheckInAsManpowerMode;\n ProcoreCommentMode = ProcoreCommentMode;\n ProcoreConnectionMode = ProcoreConnectionMode;\n ProcoreFolderStructureMode = ProcoreFolderStructureMode;\n companyList: ProcoreCompany[];\n dmsaCompanyList: ProcoreCompany[];\n companyPermissionsProjects: CompanyPermissionsProjects;\n projectPermissions: ProcorePermission[];\n bsModalHandle: any;\n disableEdit: boolean = true;\n isInEditingMode: boolean = false;\n currentProcoreEnabledState = false;\n //isToggle: boolean = false;\n\n get isGodUser(): boolean {\n return this.userService.isGodUser();\n }\n get isProcoreEnable(): boolean {\n return this.procoreEnableFormControl.value == true;\n }\n get isMarketPlaceOrDmsa(): boolean {\n return [ProcoreConnectionMode.MarketplaceApp, ProcoreConnectionMode.DMSA].includes(this.secretFormGroup.controls.procoreConnectionMode.value);\n }\n\n get isDmsaMode(): boolean {\n return [ProcoreConnectionMode.DMSA].includes(this.secretFormGroup.controls.procoreConnectionMode.value);\n }\n\n get hasProcoreCompanyId(): boolean {\n return +(this.configFormGroup.controls.procoreCompanyId.value) > 0\n }\n get showConfig() {\n return this.isProcoreEnable && this.configFormGroup.controls.procoreCompanyId.value && this.editModeOfEnabledZone;\n }\n showCheckPermissionButton() {\n return this.isGodUser && this.currentProcoreEnabledState == true && this.configFormGroup.controls.procoreCompanyId.value;\n }\n procoreEnableFormControl = new FormControl(null);\n secretFormGroup = new FormGroup({\n \"clientId\": new FormControl('', [Validators.required]),\n \"clientSecret\": new FormControl('', [Validators.required]),\n \"procoreConnectionMode\": new FormControl(ProcoreConnectionMode.DMSA, []),\n });\n godUserFormGroup = new FormGroup({\n \"procoreCompanyId\": new FormControl('', []),\n });\n\n configFormGroup = new FormGroup({\n \"procoreWebHookEnabled\": new FormControl(false, []),\n \"procoreImportSitesEnabled\": new FormControl(false, []),\n \"procoreExportSiteAttendanceAsTimeCardMode\": new FormControl(false, []),\n \"procoreExportSiteAttendanceAsVisitorLogMode\": new FormControl(false, []),\n \"procoreExportSiteAttendanceAsManpowerMode\": new FormControl(false, []),\n \"procoreImportUsersEnabled\": new FormControl(false, []),\n \"procoreImportSiteUserAsFrequent\": new FormControl(false, []),\n \"procoreUploadSiteSupplierDocumentsEnabled\": new FormControl(false, []),\n \"procoreUploadSiteInductionsEnabled\": new FormControl(false, []),\n \"procoreUploadPermitFormsEnabled\": new FormControl(false, []),\n \"procoreUploadSiteAssetsFormEnabled\": new FormControl(false, []),\n \"procoreUploadSiteBriefingsEnabled\": new FormControl(false, []),\n \"procoreUploadGenericFormsEnabled\": new FormControl(false, []),\n \"procoreUploadEvacuationsEnabled\": new FormControl(false, []),\n \"procoreTemplateSiteId\": new FormControl(null),\n \"procoreImportCompanyDirectoryEnabled\": new FormControl(null, []),\n \"procoreImportProjectDirectoryEnabled\": new FormControl(null, []),\n \"procoreImportCompanyRolesEnabled\": new FormControl(null, []),\n \"procoreImportProjectUserRolesEnabled\": new FormControl(null, []),\n \"procoreCompanyId\": new FormControl('', [Validators.required]),\n \"enableProcoreSyncIncompleteForTimecard\": new FormControl(false, []),\n \"enableProcoreSyncIncompleteForVisitorLog\": new FormControl(false, []),\n \"enableProcoreSyncIncompleteForManpower\": new FormControl(false, []),\n \"procoreFolderStructureMode\": new FormControl(ProcoreFolderStructureMode.Legacy, []),\n \"isCreateProcoreFolderAsPrivate\": new FormControl(false, []),\n\n \"procoreCommentModeForTimecards\": new FormControl(ProcoreCommentMode.Disabled, []),\n \"procoreCommentModeForVisitorLogs\": new FormControl(ProcoreCommentMode.Disabled, []),\n \"procoreCommentModeForManpowers\": new FormControl(ProcoreCommentMode.Disabled, []),\n });\n inProgress: boolean = false;\n\n constructor(private companySettingService: CompanySettingService,\n private modalService: ModalService,\n private ref: ChangeDetectorRef,\n private userService: UserService,\n private bsModalService: BsModalService,\n private toastrService: ToastrService) { }\n onUpdateProcoreConfigSubs: Subscription = null;\n\n ngOnInit() {\n this.getTokenAuthorizationInfo();\n this.configFormGroup.controls.procoreImportSitesEnabled.valueChanges.subscribe(res => {\n if (res)\n this.configFormGroup.controls['procoreTemplateSiteId'].setValidators([Validators.required]);\n else\n this.configFormGroup.controls['procoreTemplateSiteId'].clearValidators();\n this.configFormGroup.controls['procoreTemplateSiteId'].updateValueAndValidity();\n });\n }\n\n getTokenAuthorizationInfo() {\n this.inProgress = true;\n this.companySettingService.getTokenInfo()\n .pipe(finalize(() => {\n this.inProgress = false;\n this.ref.detectChanges();\n setTimeout(() => {\n this.ref.detectChanges();\n }, 1000);\n }))\n .subscribe(res => {\n this.setFormValues(res);\n this.ref.detectChanges();\n });\n }\n\n onUpdateProcoreConfig() {\n this.inProgress = true;\n\n\n this.companySettingService.updateProcoreConfig({\n procoreEnabled: this.isProcoreEnable,\n procoreImportSitesEnabled: this.configFormGroup.controls.procoreImportSitesEnabled.value,\n procoreWebHookEnabled: this.configFormGroup.controls.procoreWebHookEnabled.value,\n procoreImportUsersEnabled: this.configFormGroup.controls.procoreImportUsersEnabled.value,\n procoreImportSiteUserAsFrequent: this.configFormGroup.controls.procoreImportSiteUserAsFrequent.value,\n\n procoreExportSiteAttendanceAsTimeCardMode: this.configFormGroup.controls.procoreExportSiteAttendanceAsTimeCardMode.value,\n procoreExportSiteAttendanceAsVisitorLogMode: this.configFormGroup.controls.procoreExportSiteAttendanceAsVisitorLogMode.value,\n procoreExportSiteAttendanceAsManpowerMode: this.configFormGroup.controls.procoreExportSiteAttendanceAsManpowerMode.value,\n\n procoreUploadSiteSupplierDocumentsEnabled: this.configFormGroup.controls.procoreUploadSiteSupplierDocumentsEnabled.value,\n procoreUploadSiteInductionsEnabled: this.configFormGroup.controls.procoreUploadSiteInductionsEnabled.value,\n procoreUploadPermitFormsEnabled: this.configFormGroup.controls.procoreUploadPermitFormsEnabled.value,\n procoreUploadSiteAssetsFormEnabled: this.configFormGroup.controls.procoreUploadSiteAssetsFormEnabled.value,\n procoreUploadSiteBriefingsEnabled: this.configFormGroup.controls.procoreUploadSiteBriefingsEnabled.value,\n procoreUploadGenericFormsEnabled: this.configFormGroup.controls.procoreUploadGenericFormsEnabled.value,\n procoreUploadEvacuationsEnabled: this.configFormGroup.controls.procoreUploadEvacuationsEnabled.value,\n\n procoreImportCompanyDirectoryEnabled: this.configFormGroup.controls.procoreImportCompanyDirectoryEnabled.value,\n procoreImportProjectDirectoryEnabled: this.configFormGroup.controls.procoreImportProjectDirectoryEnabled.value,\n\n procoreImportCompanyRolesEnabled: this.configFormGroup.controls.procoreImportCompanyRolesEnabled.value,\n procoreImportProjectUserRolesEnabled: this.configFormGroup.controls.procoreImportProjectUserRolesEnabled.value,\n\n procoreTemplateSiteId: this.configFormGroup.controls.procoreTemplateSiteId.value,\n\n procoreCompanyId: this.configFormGroup.controls.procoreCompanyId.value,\n\n enableProcoreSyncIncompleteForTimecard: this.configFormGroup.controls.enableProcoreSyncIncompleteForTimecard.value,\n enableProcoreSyncIncompleteForVisitorLog: this.configFormGroup.controls.enableProcoreSyncIncompleteForVisitorLog.value,\n enableProcoreSyncIncompleteForManpower: this.configFormGroup.controls.enableProcoreSyncIncompleteForManpower.value,\n procoreFolderStructureMode: this.configFormGroup.controls.procoreFolderStructureMode.value,\n isCreateProcoreFolderAsPrivate: this.configFormGroup.controls.isCreateProcoreFolderAsPrivate.value,\n\n procoreCommentModeForTimecards: this.configFormGroup.controls.procoreCommentModeForTimecards.value,\n procoreCommentModeForVisitorLogs: this.configFormGroup.controls.procoreCommentModeForVisitorLogs.value,\n procoreCommentModeForManpowers: this.configFormGroup.controls.procoreCommentModeForManpowers.value,\n\n } as BaseProcoreIntegrationConfigModel)\n .pipe(finalize(() => {\n this.inProgress = false;\n this.disableEdit = true;\n }))\n .subscribe(res => {\n this.setFormValues(res);\n this.toastrService.success(\"Successfully Saved.\");\n });\n }\n\n setFormValues(res: ProcoreCheckTokenResponse) {\n //this.isToggle = false;\n this.errorMessage = '';\n this.procoreCheckTokenResponse = res;\n this.unsubscribeToFormControlChanges();\n if (res == null) {\n this.procoreEnableFormControl.setValue(false);\n this.currentProcoreEnabledState = false;\n } else if (!res.valid) {\n //this.modalService.error(res.message);\n this.errorMessage = res.message;\n this.editClientInfo = true;\n this.editModeOfEnabledZone = false;\n this.procoreEnableFormControl.setValue(res.configuration.procoreEnabled);\n this.currentProcoreEnabledState = res.configuration.procoreEnabled;\n } else {\n this.infoMessage = res.message;\n\n if (res.procoreSummeryInfo && res.procoreSummeryInfo.me) {\n this.apiUserEmail = res.procoreSummeryInfo.me.login;\n if (!this.companyList || this.companyList.length != (res.procoreSummeryInfo.companies?.length ?? 0))\n this.companyList = res.procoreSummeryInfo.companies;\n }\n\n //this.dmsaCompanyList = res.dmsaCompanies;\n\n this.procoreIntegrationTypeInfos = res.procoreIntegrationTypeInfos;\n this.procoreEnableFormControl.setValue(res.configuration.procoreEnabled);\n this.isInEditingMode = !res.configuration.procoreEnabled;\n this.currentProcoreEnabledState = res.configuration.procoreEnabled;\n this.configFormGroup.controls.procoreExportSiteAttendanceAsTimeCardMode.setValue(res.configuration.procoreExportSiteAttendanceAsTimeCardMode);\n this.configFormGroup.controls.procoreExportSiteAttendanceAsVisitorLogMode.setValue(res.configuration.procoreExportSiteAttendanceAsVisitorLogMode);\n this.configFormGroup.controls.procoreExportSiteAttendanceAsManpowerMode.setValue(res.configuration.procoreExportSiteAttendanceAsManpowerMode);\n this.configFormGroup.controls.procoreImportSitesEnabled.setValue(res.configuration.procoreImportSitesEnabled);\n this.configFormGroup.controls.procoreWebHookEnabled.setValue(res.configuration.procoreWebHookEnabled);\n this.configFormGroup.controls.procoreImportUsersEnabled.setValue(res.configuration.procoreImportUsersEnabled);\n this.configFormGroup.controls.procoreImportSiteUserAsFrequent.setValue(res.configuration.procoreImportSiteUserAsFrequent);\n this.configFormGroup.controls.procoreUploadSiteSupplierDocumentsEnabled.setValue(res.configuration.procoreUploadSiteSupplierDocumentsEnabled);\n this.configFormGroup.controls.procoreUploadSiteInductionsEnabled.setValue(res.configuration.procoreUploadSiteInductionsEnabled);\n this.configFormGroup.controls.procoreUploadPermitFormsEnabled.setValue(res.configuration.procoreUploadPermitFormsEnabled);\n this.configFormGroup.controls.procoreUploadSiteAssetsFormEnabled.setValue(res.configuration.procoreUploadSiteAssetsFormEnabled);\n this.configFormGroup.controls.procoreUploadSiteBriefingsEnabled.setValue(res.configuration.procoreUploadSiteBriefingsEnabled);\n this.configFormGroup.controls.procoreUploadGenericFormsEnabled.setValue(res.configuration.procoreUploadGenericFormsEnabled);\n this.configFormGroup.controls.procoreUploadEvacuationsEnabled.setValue(res.configuration.procoreUploadEvacuationsEnabled);\n this.configFormGroup.controls.procoreImportCompanyDirectoryEnabled.setValue(res.configuration.procoreImportCompanyDirectoryEnabled);\n this.configFormGroup.controls.procoreImportProjectDirectoryEnabled.setValue(res.configuration.procoreImportProjectDirectoryEnabled);\n this.configFormGroup.controls.procoreImportCompanyRolesEnabled.setValue(res.configuration.procoreImportCompanyRolesEnabled);\n this.configFormGroup.controls.procoreImportProjectUserRolesEnabled.setValue(res.configuration.procoreImportProjectUserRolesEnabled);\n this.configFormGroup.controls.enableProcoreSyncIncompleteForTimecard.setValue(res.configuration.enableProcoreSyncIncompleteForTimecard);\n this.configFormGroup.controls.procoreCommentModeForTimecards.setValue(res.configuration.procoreCommentModeForTimecards);\n this.configFormGroup.controls.procoreCommentModeForVisitorLogs.setValue(res.configuration.procoreCommentModeForVisitorLogs);\n this.configFormGroup.controls.procoreCommentModeForManpowers.setValue(res.configuration.procoreCommentModeForManpowers);\n this.configFormGroup.controls.enableProcoreSyncIncompleteForVisitorLog.setValue(res.configuration.enableProcoreSyncIncompleteForVisitorLog);\n this.configFormGroup.controls.enableProcoreSyncIncompleteForManpower.setValue(res.configuration.enableProcoreSyncIncompleteForManpower);\n this.configFormGroup.controls.isCreateProcoreFolderAsPrivate.setValue(res.configuration.isCreateProcoreFolderAsPrivate);\n this.configFormGroup.controls.procoreTemplateSiteId.setValue(res.configuration.procoreTemplateSiteId);\n this.configFormGroup.controls.procoreCompanyId.setValue(res.configuration.procoreCompanyId);\n this.godUserFormGroup.controls.procoreCompanyId.setValue(res.configuration.procoreCompanyId ?? '');\n this.configFormGroup.controls.procoreFolderStructureMode.setValue(res.configuration.procoreFolderStructureMode);\n this.secretFormGroup.controls.clientId.setValue(res.configuration.clientId);\n this.secretFormGroup.controls.clientSecret.setValue(null);\n this.secretFormGroup.controls.procoreConnectionMode.setValue(res.configuration.procoreConnectionMode);\n this.editClientInfo = res.configuration.isReadyToConnectToProcore ? false : true;\n this.editModeOfEnabledZone = res.configuration.isReadyToConnectToProcore ? true : false;\n if (res.siteTemplates)\n this.templateSites = res.siteTemplates;\n }\n this.configFormGroup.controls.procoreCompanyId.updateValueAndValidity();\n this.configFormGroup.updateValueAndValidity();\n\n this.godUserFormGroup.controls.procoreCompanyId.updateValueAndValidity();\n this.godUserFormGroup.updateValueAndValidity();\n\n this.subscribeToFormControlChanges();\n\n this.initializeEditingModeVariables();\n }\n\n initializeEditingModeVariables() {\n if (this.currentProcoreEnabledState == true && !this.configFormGroup.controls.procoreCompanyId.value)\n this.enableEdit(true);\n }\n\n isProcoreConfigEdited: boolean = false;\n private subscribeToFormControlChanges() {\n this.onUpdateProcoreConfigSubs = this.configFormGroup.valueChanges.subscribe(res => {\n this.isProcoreConfigEdited = true;\n });\n }\n\n private unsubscribeToFormControlChanges() {\n if (this.onUpdateProcoreConfigSubs)\n this.onUpdateProcoreConfigSubs.unsubscribe();\n }\n\n onCheckAndSaveAuthorization() {\n this.inProgress = true;\n this.companySettingService.checkAndSaveAuthorization({\n clientId: this.secretFormGroup.controls.clientId.value,\n clientSecret: this.secretFormGroup.controls.clientSecret.value,\n procoreConnectionMode: this.secretFormGroup.controls.procoreConnectionMode.value,\n } as ProcoreIntegrationAuthorizationModel)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.setFormValues(res);\n });\n }\n\n onAuthOnProcore() {\n this.inProgress = true;\n let url = `${this.procoreCheckTokenResponse.marketplaceAppConfiguration.marketplaceAppAuthorizationUrl}/oauth/authorize?response_type=code&client_id=`;\n if (this.isDmsaMode)\n url += `${this.procoreCheckTokenResponse.marketplaceAppConfiguration.dmsaAppClientId}&redirect_uri=${this.procoreCheckTokenResponse.marketplaceAppConfiguration.dmsaAppRedirectUrl}`;\n else\n url += `${this.procoreCheckTokenResponse.marketplaceAppConfiguration.marketplaceAppClientId}&redirect_uri=${this.procoreCheckTokenResponse.marketplaceAppConfiguration.marketplaceAppRedirectUrl}`;\n window['procoreConfigCompleted'] = () => { this.onProcoreConfigSuccess(); };\n popup(url, 'Procore Authorize');\n }\n\n onProcoreConfigSuccess() {\n this.inProgress = false;\n this.getTokenAuthorizationInfo();\n\n this.ref.detectChanges();\n }\n\n resetProcoreSchedule(type: ProcoreIntegrationType) {\n this.inProgress = true;\n this.companySettingService.resetProcoreSchedule(type)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.procoreIntegrationTypeInfos = res;\n }, err => {\n this.modalService.error(err);\n });\n }\n\n get showReSyncButtonForExportAttendance() {\n return this.configFormGroup.get('procoreExportSiteAttendanceAsTimeCardMode').value != ProcoreExportCheckInAsTimeCardMode.Disabled ||\n this.configFormGroup.get('procoreExportSiteAttendanceAsVisitorLogMode').value != ProcoreExportCheckInAsVisitorLogMode.Disabled ||\n this.configFormGroup.get('procoreExportSiteAttendanceAsManpowerMode').value != ProcoreExportCheckInAsManpowerMode.Disabled;\n }\n get showReSyncButtonForUploadSiteSupplierDocuments() {\n return this.configFormGroup.get('procoreUploadSiteSupplierDocumentsEnabled').value;\n }\n\n get showReSyncButtonForUploadSiteInductions() {\n return this.configFormGroup.get('procoreUploadSiteInductionsEnabled').value;\n }\n\n get showReSyncButtonForUploadPermitForms() {\n return this.configFormGroup.get('procoreUploadPermitFormsEnabled').value;\n }\n\n get showReSyncButtonForUploadSiteBriefings() {\n return this.configFormGroup.get('procoreUploadSiteBriefingsEnabled').value;\n }\n\n get showReSyncButtonForUploadGenericForms() {\n return this.configFormGroup.get('procoreUploadGenericFormsEnabled').value;\n }\n\n get showReSyncButtonForUploadEvacuations() {\n return this.configFormGroup.get('procoreUploadEvacuationsEnabled').value;\n }\n\n get showReSyncButtonForUploadSiteAssetForms() {\n return this.configFormGroup.get('procoreUploadSiteAssetsFormEnabled').value;\n }\n\n get showReSyncButtonForImportCompanyDirectory() { return this.configFormGroup.get('procoreImportCompanyDirectoryEnabled').value; }\n get showReSyncButtonForImportProjectDirectory() { return this.configFormGroup.get('procoreImportProjectDirectoryEnabled').value; }\n\n get showReSyncButtonForImportCompanyRoles() { return this.configFormGroup.get('procoreImportCompanyRolesEnabled').value; }\n get showReSyncButtonForImportProjectUserRoles() { return this.configFormGroup.get('procoreImportProjectUserRolesEnabled').value; }\n\n get procoreCompanyInfo() {\n let id = this.procoreCheckTokenResponse.configuration?.procoreCompanyId;\n if (id && this.companyList?.length)\n return `${this.companyList.find(c => c.id == id)?.name} (${id})`;\n return id;\n }\n\n checkPermissions(template: any) {\n this.inProgress = true;\n this.companySettingService.GetProcorePermissionsProjects().pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(result => {\n this.bsModalHandle = this.bsModalService.show(template, { class: 'modal-lg' });\n this.companyPermissionsProjects = result;\n });\n }\n\n getProjectPermission(item: ProcoreProjectInfo) {\n if (item.projectPermissions)\n return;\n\n var model: ProcoreProjectModel = {\n projectId: item.id\n };\n this.companySettingService.GetProjectPermissions(model).pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n item.projectPermissions = res;\n });\n }\n\n enableEdit(forceMode: boolean = false) {\n if (this.disableEdit) {\n (forceMode ? of(true) :\n this.modalService.confirm(\"This is a functioning integration, changing this setting will change it for the entire companies projects.\", \"Warning\", \"Continue\", \"Cancel\", \"btn-danger\", \"btn-primary\"))\n .subscribe(result => {\n this.disableEdit = !result;\n this.isInEditingMode = !this.disableEdit;\n });\n }\n else {\n if (this.isProcoreConfigEdited)\n this.onUpdateProcoreConfig();\n }\n }\n\n onProcoreEnabledChange(value) {\n\n if (value && this.currentProcoreEnabledState != this.isProcoreEnable) {\n this.enableEdit(true);\n this.isProcoreConfigEdited = true;\n }\n }\n\n onSaveProcoreEnable() {\n if (this.currentProcoreEnabledState != this.isProcoreEnable) {\n this.modalService.confirm(\"This is a functioning integration, changing this setting will change it for the entire companies projects.\", \"Warning\", \"Continue\", \"Cancel\", \"btn-danger\", \"btn-primary\")\n .subscribe(result => {\n if (result) {\n this.inProgress = true;\n this.companySettingService.toggleProcoreEnable()\n .pipe(finalize(() => {\n this.inProgress = false;\n this.isInEditingMode = false;\n this.disableEdit = true;\n }))\n .subscribe(res => {\n this.setFormValues(res);\n });\n }\n });\n }\n }\n\n cancelEdit() {\n this.getTokenAuthorizationInfo();\n this.isInEditingMode = false;\n this.disableEdit = true;\n }\n}\n","export enum MyobSystemType {\n AccountRight = 0,\n Advanced = 1,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MyobPeriodType } from '../enums/report-type.enum';\n\n@Pipe({\n name: 'myobPeriodType'\n})\nexport class MyobPeriodTypePipe implements PipeTransform {\n\n transform(value: any): string {\n return value == MyobPeriodType.Weekly ? \"Weekly\" :\n value == MyobPeriodType.Monthly ? \"Monthly\" :\n (value?.toString() ?? \"?\");\n }\n\n}\n","
      \n
      \n \n
      \n {{errorMessage}}\n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n \n \n \n \n \n \n
      \n
      \n
      \n \n
      \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n\n
      \n \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n \n
      \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n \n \n
      \n \n Only Hourly Wage Types Are\n Available\n \n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n
      \n\n
      \n \n
      \n
      \n
      \n\n\n \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n\n
      \n\n \n
      \n
      \n \n
      \n {{config.myobCompanyFile?.name}}\n
      \n
      \n
      \n \n
      \n {{config.myobDefaultPayrolCategoryName}}\n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n \n
      {{config.myobSyncPeriod | myobPeriodType}}\n (Day: {{config.dayOfSync}})\n
      \n
      \n
      \n \n
      {{config.myobSyncDelayInHour}} Hour(s)
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      ","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { MyobSystemType } from 'src/app/enums/myob-system-type.enum';\nimport { MyobPeriodType } from 'src/app/enums/report-type.enum';\nimport { popup } from 'src/app/helpers/general-functions';\nimport { MyobCompanyFile, MyobConfiguration } from 'src/app/models/myob/myob-configuration';\nimport { CompanySettingService } from 'src/app/services/company-setting.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-myob-integration',\n templateUrl: './myob-integration.component.html',\n styleUrls: ['./myob-integration.component.scss']\n})\nexport class MyobIntegrationComponent implements OnInit {\n inProgress: boolean;\n errorMessage: string;\n config: MyobConfiguration = { isMyobEnabled: false, myobSystemType: null };\n showCompletePanel: boolean;\n paymentCategories: any[];\n companyFiles: MyobCompanyFile[];\n ReportTypes = MyobPeriodType;\n MyobSystemType = MyobSystemType;\n\n editApiSection: boolean = true;\n editMyobSyncConfig: boolean = true;\n\n\n _daysOfMonth: any[];\n get daysOfMonth() {\n if (this._daysOfMonth == null) {\n var days = [];\n days.push({\n value: 1,\n lable: \"First day of month\"\n });\n days.push({\n value: 31,\n lable: \"Last day of month\"\n });\n for (let index = 1; index < 32; index++) {\n days.push({\n value: index,\n lable: index.toString(),\n });\n }\n\n this._daysOfMonth = days;\n }\n return this._daysOfMonth;\n }\n\n daysOfWeek = [\n { value: 0, lable: \"Sunday\" },\n { value: 1, lable: \"Monday\" },\n { value: 2, lable: \"Tuesday\" },\n { value: 3, lable: \"Wednesday\" },\n { value: 4, lable: \"Thursday\" },\n { value: 5, lable: \"Friday\" },\n { value: 6, lable: \"Saturday\" }\n ];\n\n\n constructor(private companySettingService: CompanySettingService, private modalService: ModalService, private ref: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n this.getConfig();\n }\n\n updateUiVars() {\n if (this.config.myobSystemType == MyobSystemType.AccountRight) {\n this.editApiSection = !(this.config.myobApiKey?.length && this.config.myobApiSecret?.length);\n this.editMyobSyncConfig = this.editApiSection == false && this.config.isReadyToSyncAttendance == false;\n }\n else if (this.config.myobSystemType == MyobSystemType.Advanced) {\n this.editApiSection = false;\n this.editMyobSyncConfig = !(this.config.isReadyToSyncAttendance ?? false);\n }\n\n }\n\n getConfig() {\n this.inProgress = true;\n this.companySettingService.getMyobConfiguration()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.config = res;\n this.updateUiVars();\n if (this.config.isValidToCallApi == true && this.editMyobSyncConfig && this.config.myobSystemType == MyobSystemType.AccountRight)\n this.getMyobCompanies();\n });\n }\n\n //#region AccountRight\n\n authorizeOnMyobSite() {\n if (!this.config.myobApiKey?.length) {\n this.modalService.error('Enter Client Id!');\n return;\n }\n if (!this.config.myobApiSecret?.length) {\n this.modalService.error('Enter Client Secret!');\n return;\n }\n if (!this.config.redirectUri?.length || !this.config.autorizeUrlToGetAccessCode?.length) {\n this.modalService.error('Invalid my configuration on server! Please contact system administrator!');\n return;\n }\n this.inProgress = true;\n let url = `${this.config.autorizeUrlToGetAccessCode}?client_id=${this.config.myobApiKey}&redirect_uri=${this.config.redirectUri}&response_type=code&scope=CompanyFile`;\n window['myobConfigCompleted'] = () => { this.onMyobConfigSuccess(); };\n popup(url, 'Myob Authorize');\n //window.open(url);\n }\n\n onMyobConfigSuccess() {\n this.inProgress = true;\n this.companySettingService.getMyobConfiguration()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.config.myobAccessCode = res.myobAccessCode;\n if (this.config.myobAccessCode?.length)\n this.saveMyobAccountRightConfig(() => {\n this.editApiSection = false;\n this.showConfigurationPanel();\n this.ref.detectChanges();\n });\n this.ref.detectChanges();\n });\n }\n\n\n getMyobPaymentCategories() {\n this.inProgress = true;\n this.companySettingService.getMyobPaymentCategories()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.paymentCategories = res;\n this.ref.detectChanges();\n });\n }\n\n getMyobCompanies() {\n this.inProgress = true;\n this.companySettingService.getMyobCompanies()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.companyFiles = res;\n this.ref.detectChanges();\n if (this.config.myobDefaultPayrolCategoryUid)\n this.getMyobPaymentCategories();\n });\n }\n\n onCompanyFileChanged() {\n this.config.myobCompanyFile = this.companyFiles.find(f => f.id == this.config.myobCompanyFileUid);\n this.saveMyobAccountRightConfig(() => {\n this.getMyobPaymentCategories();\n });\n }\n\n showConfigurationPanel() {\n this.getMyobCompanies();\n this.editMyobSyncConfig = true;\n }\n\n saveMyobAccountRightConfig(onDone: Function = null) {\n this.resetMessages();\n this.inProgress = true;\n if (this.config.myobDefaultPayrolCategoryUid)\n this.config.myobDefaultPayrolCategoryName = this.paymentCategories.find(d => d.key == this.config.myobDefaultPayrolCategoryUid)?.value;\n this.companySettingService.saveMyobConfiguration(this.config)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((newConfig) => {\n this.config = newConfig;\n this.ref.detectChanges();\n if (onDone)\n onDone();\n else {\n this.editMyobSyncConfig = false;\n }\n });\n }\n\n //#endregion\n\n\n\n\n saveAdvancedModeConfig() {\n this.resetMessages();\n if (\n !(this.config.myobAdvancedUrl?.length ?? 0) ||\n !(this.config.myobAdvancedUsername?.length ?? 0) ||\n !(this.config.myobAdvancedPassword?.length ?? 0) ||\n !(this.config.myobAdvancedTenant?.length ?? 0)) {\n this.modalService.error('Please fill all configurations!');\n return;\n }\n this.inProgress = true;\n this.companySettingService.validateAndSaveMyobConfiguration(this.config)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n if (res) {\n this.config = res;\n this.editMyobSyncConfig = false;\n this.modalService.success('Myob configuration saved!');\n }\n }, (error) => {\n this.errorMessage = error;\n });\n }\n editMyobAdvancedConfig() {\n this.editMyobSyncConfig = true;\n }\n\n private resetMessages() {\n this.errorMessage = '';\n }\n}\n","export enum HandsHQSupplierDocumentApprovalMode {\n BasedOnCompanySetting = 0,\n AutoApproveForAll = 1,\n ManualApprove = 2,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AskMode } from '../enums/ask-mode';\n\n@Pipe({\n name: 'tokenize'\n})\nexport class TokenizePipe implements PipeTransform {\n\n transform(value: string, displayCharsCount: number = 4): string {\n if (value.length < 8)\n displayCharsCount = value.length / 2;\n return value.substring(0, displayCharsCount) +\n '*****************' +\n value.substring(value.length - displayCharsCount)\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { HandsHQSupplierDocumentApprovalMode } from '../enums/handshq-supplier-document-approval-mode';\n\n@Pipe({\n name: 'handsHQSupplierDocumentApprovalMode'\n})\nexport class HandsHQSupplierDocumentApprovalModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == HandsHQSupplierDocumentApprovalMode.BasedOnCompanySetting) return 'Based on the settings of the company';\n if (value == HandsHQSupplierDocumentApprovalMode.AutoApproveForAll) return 'Auto Approve For All';\n if (value == HandsHQSupplierDocumentApprovalMode.ManualApprove) return 'Manual';\n return value?.toString();\n }\n\n}\n","
      \n \n
      \n
      \n {{errorMessage}}\n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n {{config.handsHQCompanyName}}\n
      \n
      \n \n {{config.handsHQCompanyType}}\n
      \n
      \n
      \n\n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      HandsHQ API TokenSupplierApproval ModeSignoff Mode
      \n {{item.handsHQApiToken | tokenize}}\n \n {{item.supplierName}}\n \n {{item.handsHQSupplierDocumentApprovalMode |\n handsHQSupplierDocumentApprovalMode}}\n \n {{item.handsHQDocumentSignOffMode | optionalMandatory}}\n \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n Add Configuration\n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      ","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { CompanySettingService } from 'src/app/services/company-setting.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { finalize } from 'rxjs/operators';\nimport { CompanySupplierService } from 'src/app/services/company-supplier.service';\nimport { CompanySupplierViewModel } from 'src/app/models/supplier-models';\nimport { HandsHQConfiguration, HandsHQConfigurationModel } from 'src/app/models/handsHQ/handshq-configuration';\nimport { HandsHQSupplierDocumentApprovalMode } from 'src/app/enums/handshq-supplier-document-approval-mode';\nimport { OptionalMandatoryState } from 'src/app/enums/site-document-state.enum';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({\n selector: 'obc-handshq-integration',\n templateUrl: './handshq-integration.component.html',\n styleUrls: ['./handshq-integration.component.scss']\n})\nexport class HandshqIntegrationComponent implements OnInit {\n inProgress: boolean;\n errorMessage: string;\n config: HandsHQConfigurationModel = { isHandsHQEnabled: false, allConfigurations: [] };\n companySuppliers: CompanySupplierViewModel[] = [];\n\n HandsHQSupplierDocumentApprovalMode = HandsHQSupplierDocumentApprovalMode;\n OptionalMandatoryState = OptionalMandatoryState;\n enableEdit: boolean = false;\n currentStatus: boolean;\n\n formGroup = new FormGroup({\n handsHQApiToken: new FormControl(null, [Validators.required]),\n handsHQSupplierId: new FormControl(null, [Validators.required]),\n handsHQSupplierName: new FormControl(null, null),\n handsHQDocumentSignOffMode: new FormControl(null, [Validators.required]),\n handsHQSupplierDocumentApprovalMode: new FormControl(null, [Validators.required]),\n });\n\n bsModalHandle: any;\n\n constructor(private companySettingService: CompanySettingService,\n private modalService: ModalService,\n private ref: ChangeDetectorRef,\n private companySupplierService: CompanySupplierService,\n private bsModalService: BsModalService,\n private toastr: ToastrService) { }\n\n ngOnInit(): void {\n this.getConfig();\n }\n\n onCompanySupplierChange($event) {\n let text = $event.target.options[$event.target.options.selectedIndex].text;\n this.formGroup.controls.handsHQSupplierName.setValue(text);\n }\n\n openCompanyConfigurationModal(template) {\n this.bsModalHandle = this.bsModalService.show(template);\n }\n\n onAddCompanyApiToken(template: any) {\n this.formGroup.reset();\n this.openCompanyConfigurationModal(template);\n }\n\n // onEditCompanyApiToken(template: any, configuration: HandsHQConfiguration) {\n // this.formGroup.controls.handsHQApiToken.setValue(configuration.handsHQApiToken);\n // this.formGroup.controls.handsHQSupplierId.setValue(configuration.handsHQSupplierId);\n // this.formGroup.controls.handsHQDocumentSignOffMode.setValue(configuration.handsHQDocumentSignOffMode);\n // this.formGroup.controls.handsHQSupplierDocumentApprovalMode.setValue(configuration.handsHQSupplierDocumentApprovalMode);\n // this.inEdit=true;\n // this.openCompanyConfigurationModal(template);\n // }\n\n onRemoveCompanyApiToken(index: number) {\n this.modalService.confirm(\"Do You Want to Delete Api Token?\", \"Delete\").subscribe(confirm => {\n if (confirm) {\n this.inProgress = true;\n this.config.allConfigurations.splice(index, 1);\n this.save(this.config);\n }\n })\n }\n\n getConfig() {\n this.inProgress = true;\n this.companySettingService.getHandsHQConfiguration()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n if (res.isValid === false) {\n this.errorMessage = \"Token is invalid!\";\n }\n this.config = res.configuration;\n this.currentStatus = this.config.isHandsHQEnabled;\n this.getCompanySuppliers();\n\n });\n }\n\n getCompanySuppliers() {\n this.inProgress = true;\n this.companySupplierService.getSuppliers(null, null)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.companySuppliers = res.data;\n\n this.ref.detectChanges();\n }, (error) => {\n this.errorMessage = error;\n });\n }\n\n private getConfigurationModel(): HandsHQConfiguration {\n return {\n handsHQApiToken: this.formGroup.controls.handsHQApiToken.value,\n handsHQSupplierId: this.formGroup.controls.handsHQSupplierId.value,\n supplierName: this.formGroup.controls.handsHQSupplierName.value,\n handsHQDocumentSignOffMode: this.formGroup.controls.handsHQDocumentSignOffMode.value,\n handsHQSupplierDocumentApprovalMode: this.formGroup.controls.handsHQSupplierDocumentApprovalMode.value,\n } as HandsHQConfiguration;\n }\n\n validateAndSaveHandsHQConfig() {\n let config = JSON.parse(JSON.stringify(this.config));\n if (!this.config.allConfigurations)\n this.config.allConfigurations = [];\n let data = this.getConfigurationModel();\n\n if (config.allConfigurations.find(p => p.handsHQApiToken == data.handsHQApiToken)) {\n this.modalService.error(`HandsHQ Api token is already inserted`);\n return;\n }\n\n config.allConfigurations.push(data);\n this.save(config);\n\n }\n\n private save(config) {\n this.inProgress = true;\n this.companySettingService\n .validateAndSaveHandsHQConfiguration(config)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n if (res != null) {\n this.errorMessage = \"\";\n\n this.config = res;\n this.toastr.success('HandsHQ configuration saved!');\n this.formGroup.reset();\n this.bsModalHandle.hide();\n }\n }, (error) => {\n this.errorMessage = error;\n this.modalService.error(`Token is invalid`);\n });\n }\n\n inactiveHandsHQ() {\n setTimeout(() => {\n if (this.config && this.config.isHandsHQEnabled != this.currentStatus) {\n if (this.currentStatus == true) {\n this.companySettingService\n .inactiveHandsHQIntegration()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.currentStatus = false;\n // if (res)\n // this.modalService.success('HandsHQ The integration was deactivated!');\n }, (error) => {\n this.errorMessage = error;\n });\n }\n else {\n this.config.isHandsHQEnabled = true;\n this.currentStatus = true;\n if (this.config.allConfigurations?.length)\n this.save(this.config);\n }\n }\n }, 500);\n }\n\n}\n","
      \n
      \n \n
      \n {{errorMessage}}\n
      \n
      \n
      \n \n \n \n
      \n
      \n\n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n \n
      \n Last Sync:\n \n {{config?.bioStarLastSyncDateTime | datetime}}\n \n \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n\n
      \n
      BioStar Logs\n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Process TimeSiteUserProcess ResultProcess Result MessageRelated Attendance IdBioStar Event (Raw)
      {{e.registerDateTime | datetime}}{{e.siteName}}{{e.userFullName}}\n {{e.userMobile}}\n\n {{e.result}}\n
      {{e.resultMessage}}
      \n
      {{e.siteAttendanceId}}\n \n
      \n
      {{\n e.bioEvent }}\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { finalize } from 'rxjs/operators';\nimport { BioStarIntegrationConfiguration } from 'src/app/models/biostar/bio-star-integration-configuration';\nimport { BioStarLogViewModel } from 'src/app/models/biostar/biostar-log-viewmodel';\nimport { BiostarService } from 'src/app/services/biostar.service';\nimport { CompanySettingService } from 'src/app/services/company-setting.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-biostar-configuration',\n templateUrl: './biostar-configuration.component.html',\n styleUrls: ['./biostar-configuration.component.scss']\n})\nexport class BiostarConfigurationComponent implements OnInit {\n inProgress: boolean;\n errorMessage: string;\n config: BioStarIntegrationConfiguration = { isReadyToConnect: false, isBioStarEnabled: false, isValidToCallApi: false };\n showCompletePanel: boolean;\n paymentCategories: any[];\n logs: BioStarLogViewModel[];\n\n editApiSection: boolean = true;\n editBiostarSyncConfig: boolean = true;\n\n\n constructor(private companySettingService: CompanySettingService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private userService: UserService,\n private bioStarService: BiostarService) { }\n\n get isGodUser(): boolean {\n return this.userService.isGodUser();\n }\n\n ngOnInit(): void {\n this.getConfig();\n }\n\n updateUiVars() {\n this.editApiSection = false;\n this.editBiostarSyncConfig = !(this.config.isReadyToConnect ?? false);\n }\n\n getConfig() {\n this.inProgress = true;\n this.companySettingService.getBioStarConfiguration()\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((res) => {\n this.config = res;\n this.updateUiVars();\n });\n }\n\n onEnabledChanged() {\n if (!this.config.isBioStarEnabled) {\n this.saveAdvancedModeConfig();\n }\n else {\n this.editBiostarAdvancedConfig();\n }\n }\n\n saveAdvancedModeConfig() {\n this.resetMessages();\n // if (this.config.isBioStarEnabled &&\n // (!(this.config.bioStarApiServerUrl?.length ?? 0) ||\n // !(this.config.bioStarApiUsername?.length ?? 0) ||\n // !(this.config.bioStarApiPassword?.length ?? 0))\n // ) {\n // this.modalService.error('Please fill all configurations!');\n // return;\n // }\n this.inProgress = true;\n this.companySettingService.validateAndSaveBiostarConfiguration(this.config)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n if (res) {\n this.config = res;\n this.editBiostarSyncConfig = false;\n this.modalService.success('BioStar2 configuration saved!');\n }\n }, (error) => {\n this.errorMessage = error;\n });\n }\n editBiostarAdvancedConfig() {\n this.editBiostarSyncConfig = true;\n }\n\n private resetMessages() {\n this.errorMessage = '';\n }\n logModalRef: BsModalRef;\n showLogs(modalTemplate: any) {\n this.inProgress = true;\n this.logs = [];\n this.bioStarService.getLogs()\n .subscribe(res => {\n this.inProgress = false;\n this.logs = res;\n this.logModalRef = this.bsModalService.show(modalTemplate, { class: \"modal-lg modal-full-width\" });\n });\n }\n closeLogModal() {\n this.logModalRef.hide();\n }\n}\n","
      \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-company-integrations',\n templateUrl: './company-integrations.component.html',\n styleUrls: ['./company-integrations.component.scss']\n})\nexport class CompanyIntegrationsComponent implements OnInit {\n inProgress: boolean = false;\n inProgress$: Subject = new Subject();\n ProductPlanFeature = ProductPlanFeature;\n constructor(public userService: UserService, private layoutService: LayoutService) { }\n\n ngOnInit() {\n this.layoutService.header = \"Company Integration Configuration\"\n this.inProgress$.subscribe(res => {\n setTimeout(() => {\n this.inProgress = res\n }, 1)\n });\n }\n\n get enabledIntegration(): boolean {\n return this.userService.hasCompanyFeature(ProductPlanFeature.IntegrationApi);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot } from \"@angular/router\";\nimport { Observable } from \"rxjs/internal/Observable\";\n\n\nexport interface CanComponentDeactivate {\n canDeactivate: () => Observable | Promise | boolean;\n}\n\n\n@Injectable()\nexport class CanDeactivateGuard implements CanDeactivate {\n\n canDeactivate(component: CanComponentDeactivate,\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot) {\n\n let url: string = state.url;\n\n\n return component.canDeactivate ? component.canDeactivate() : true;\n }\n}\n","export enum SiteInductionRejectStatus {\n None = 0,\n NormalRejection = 1,\n RequestRevisionRejection = 2,\n}\n","
      \n
      \n
      \n \n
      \n
      Approvals
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n Include Inactive Items:\n \n \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n Approved\n \n \n \n \n Pending Approval\n \n \n \n \n Rejected\n \n \n \n \n (Revision Requested)\n \n \n \n\n \n \n \n \n {{ item?.approveEntityType | approveEntityType }}\n \n \n ({{ item?.documentKindName }})\n \n \n\n \n \n {{ item?.title }}\n \n \n\n \n \n {{item?.approvalStatusUserFullName}}\n \n \n ({{item?.approvalDateTime | datetime}})\n \n \n\n \n \n \n {{getStartDate(item).showValue}}\n \n - \n \n {{getEndDate(item).showValue}}\n \n \n \n\n \n
      \n

      \n {{ item?.description }}\n

      \n
      \n \n {{ expandedItems[item.entityId] ? 'Show Less' : 'Show More' }}\n \n
      \n
      \n\n \n
      \n \n \n
      \n \n \n
      \n \n \n Review\n \n \n \n \n\n \n \n
      \n \n \n \n \n\n \n\n \n\n \n \n \n \n 0\"\n [siteSupplierDocumentVersionId]=\"item?.entityId\"\n [hasPermissionToAddSupplierDocumentComment]=\"item?.hasPermissionToAddSupplierDocumentComment\"\n [supplierDocCommentAcknowledgementText]=\"item?.supplierDocCommentAcknowledgementText\"\n [comments]=\"item?.supplierDocumentVersionComments\" [classes]=\"'ml-2 btn-sm'\" [noIcon]=\"true\">\n \n \n\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n \n \n\n\n\n \n \n\n\n\n \n \n\n\n\n \n\n\n\n \n\n \n\n\n\n\n \n \n\n\n\n \n \n\n\n\n \n\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { isDateValid } from \"../../../helpers/general-functions\";\nimport { BaseSiteViewModel } from \"../../../models/site-viewmodel\";\nimport { FormControl, FormGroup } from \"@angular/forms\";\nimport { LayoutService } from \"../../../services/layout.service\";\nimport { Router } from \"@angular/router\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { finalize } from \"rxjs/operators\";\nimport { ApproveService } from \"../../../services/approve-service\";\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\nimport { ISiteSupplierDocumentTypeVersion } from \"../../../models/supplier-document/site-supplier-document-type\";\nimport { QuestionAnswerInputModel } from \"../../../models/question-answer-inputmodel\";\nimport { UserService } from 'src/app/services/user.service';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport {\n BasePendingToApproveViewModel,\n PendingToApproveViewModel\n} from 'src/app/models/approve/pending-to-approve-view-model';\nimport { ApproveRejectQueryModel } from 'src/app/models/approve/approve-reject-query-model';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { ApproveEntityType } from 'src/app/enums/approve-entity-type';\nimport { PendingToApproveStatus } from 'src/app/enums/approve-status';\nimport { SiteAssetRequestApproveStatus } from 'src/app/enums/site-asset-request-approve-status.enum';\nimport { ToastrService } from 'ngx-toastr';\nimport { ApproveEntityTypePipe } from 'src/app/pipes/approve-entity-type.pipe';\nimport { SupplierDocumentReviewMode } from 'src/app/enums/supplier-document-review-mode.enum';\nimport { GridColumn, GridConfig, GridTemplate, InitialFilter } from 'src/app/models/grid/grid.config';\nimport { Table } from 'src/app/enums/table.enum';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { DatePipe } from 'src/app/pipes/date.pipe';\nimport { SupplierDocumentWorkflowConstant } from 'src/app/enums/workflow/workflow-activities-enum';\nimport { ShowSupplierDocumentReviewButton } from 'src/app/enums/show-supplier-document-review-button';\nimport { ObcWorkflowStatus } from 'src/app/enums/workflow/workflow-status.enum';\nimport { PortalDisplayMode } from 'src/app/enums/portal-display-mode.enum';\nimport { DefaultWorkflowDisplayMode } from 'src/app/enums/constants';\nimport { FormService } from 'src/app/services/form.service';\nimport { InductionService } from \"../../../services/induction-service\";\nimport { BasePagingModel } from \"../../../models/paging_model\";\nimport { SiteInductionRejectStatus } from \"../../../enums/site-induction-reject-status\";\nimport { ScheduleReportMode } from 'src/app/enums/schedule-report-mode';\nimport { ScheduleReportType } from 'src/app/enums/schedule-report-type';\n\n@Component({\n selector: 'obc-pending-to-approve-list',\n templateUrl: './pending-to-approve-list.component.html',\n styleUrls: ['./pending-to-approve-list.component.scss']\n})\nexport class PendingToApproveListComponent implements OnInit {\n getInductionActionButtonText(item: PendingToApproveViewModel) {\n return (item.status == PendingToApproveStatus.Pending ? 'Review' :\n item.status == PendingToApproveStatus.Approved\n && (!item.expirationDate || new Date(item.expirationDate) > new Date(Date.now()))\n ? 'Request Revision' : 'View Details');\n }\n @ViewChild('grid') grid: any;\n //base-grid filters\n gridColumns: GridColumn[];\n gridConfig: GridConfig = {} as GridConfig;\n initialFilters: InitialFilter[] = [];\n\n SupplierDocumentReviewModeEnum = SupplierDocumentReviewMode\n selectedSite: BaseSiteViewModel;\n currentSiteTitle: string;\n inProgress = false;\n pendingList: PendingToApproveViewModel[] = [];\n serverResult: BasePendingToApproveViewModel;\n ApproveEntityType = ApproveEntityType;\n searchQueryForm: FormGroup = null;\n SiteActiveStatus = SiteActiveStatus;\n selectedEntityType: ApproveEntityType = null;\n selectedEntityTypeForReviewModal: ApproveEntityType = null;\n selectedEntityEndDate: Date = null;\n selectedEntityId: number;\n userPermissions = UserPermission;\n selectedFormDataId: number;\n formModalRef: BsModalRef;\n\n selectedPendingToApproveStatus: PendingToApproveStatus = PendingToApproveStatus.Pending;\n PendingToApproveStatus = PendingToApproveStatus;\n SiteAssetRequestApproveStatus = SiteAssetRequestApproveStatus;\n\n DatetimePickerMode = DatetimePickerMode;\n startDate: FormControl = new FormControl(null);\n endDate: FormControl = new FormControl(null);\n searchTerm: FormControl = new FormControl(null);\n\n endMinAvailableDate: Date;\n startMaxAvailableDate: Date;\n selectedAssetId: number;\n selectedAssetOperatorId: number;\n selectedItemIsEnableFormExpiryDate: boolean;\n\n fromDetailArgs: any = {}\n\n WorkflowStatus = ObcWorkflowStatus;\n SupplierDocumentWorkflowConstant = SupplierDocumentWorkflowConstant;\n ShowSupplierDocumentReviewButton = ShowSupplierDocumentReviewButton;\n\n portalDisplayMode: PortalDisplayMode = DefaultWorkflowDisplayMode;\n selectedInstanceId: string;\n includeInactive: boolean = false;\n\n dirtyCheckSubscribe;\n selectedFormDirtyState: boolean = false;\n\n expandedItems: { [key: number]: boolean } = {};\n\n constructor(private layoutService: LayoutService,\n public approveService: ApproveService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n public userService: UserService,\n private toastr: ToastrService,\n private approveEntityTypePipe: ApproveEntityTypePipe,\n private datetimePipe: DatetimePipe,\n private datePipe: DatePipe,\n private formService: FormService,\n private inductionService: InductionService,\n private router: Router) {\n }\n\n getPath(): string {\n return window.location.pathname + window.location.hash;\n }\n\n setCurrentSite(site: BaseSiteViewModel) {\n this.selectedSite = site;\n this.currentSiteTitle = site?.name;\n this.fetchPendingList();\n }\n\n ngOnInit() {\n this.portalDisplayMode = this.userService.getCompanyWorkflowDisplayMode();\n this.layoutService.header = \"Approvals\";\n this.prepareGridConfig();\n\n this.inductionService.inductionHistoryLog({\n siteInductionId: 4972,\n pagingInfo: {\n pageNumber: 0,\n pageSize: 10\n } as BasePagingModel\n }).subscribe((res) => {\n // console.log(res)\n })\n\n }\n\n prepareGridConfig() {\n let me = this;\n this.initialFilters = [{\n key: \"status\",\n value: [PendingToApproveStatus.Pending],\n displayInFilterRenderer: true\n },\n {\n key: \"includeInactive\",\n value: this.includeInactive,\n displayInFilterRenderer: true\n }];\n let apiUrl = '/api/approve/approve-list';\n this.gridConfig = new GridConfig({\n csvReportUrl: '/api/approve/approve-list-csv-as-job',\n apiUrl: apiUrl,\n scheduleReport: {\n enabled: true,\n mode: ScheduleReportMode.ScheduleReport,\n type: ScheduleReportType.ApprovalReport,\n },\n tableType: Table.Approval,\n displayGeneralSearch: true,\n refreshButtonValidity: true,\n generalSearchPlaceholder: \"Filter Result by First Name, Last Name, Mobile, Title, ...\",\n initialFilters: this.initialFilters,\n apiResultCallback: (res) => {\n this.serverResult = res;\n return {\n data: res.pendingToApproveList,\n totalCount: res.total,\n };\n }\n });\n\n this.gridColumns = [\n {\n key: \"entityDateTime\",\n name: \"Date Submitted\",\n type: FilterType.DateTimeRange,\n enableSort: true,\n enableFilter: true,\n propertyNameInQuery: 'approveDateRange',\n visible: true,\n isArray: false,\n },\n {\n key: \"status\",\n type: FilterType.ApprovalStatus,\n name: \"Status\",\n gridTemplate: new GridTemplate().ComponentTemplateName('pendingStatus'),\n propertyNameInQuery: 'approveStatuses',\n visible: true,\n },\n {\n key: \"approveEntityType\",\n type: FilterType.ApproveEntityType,\n name: \"Type\",\n gridTemplate: new GridTemplate().ComponentTemplateName('entityType'),\n propertyNameInQuery: 'approveEntityTypes',\n visible: true,\n },\n {\n key: \"title\",\n name: \"Title\",\n type: FilterType.SingleText,\n gridTemplate: new GridTemplate().ComponentTemplateName('title')\n .CsvFields([\n 'title',\n 'subtitle',\n 'userMobile',\n ]),\n propertyNameInQuery: 'titles',\n enableSort: false,\n visible: true\n },\n {\n key: \"siteName\",\n name: \"Site\",\n type: FilterType.Site,\n propertyNameInQuery: 'siteIds',\n visible: true,\n },\n {\n key: \"userFullName\",\n name: \"Full Name\",\n type: FilterType.SingleText,\n propertyNameInQuery: 'userFullNames',\n enableSort: false,\n visible: true,\n populateData: (row) => {\n return {\n userId: row.userInfo?.userId\n }\n },\n gridTemplate: new GridTemplate().FullNameMobile({\n fullName: 'userFullName',\n userId: \"userId\"\n }).CsvFields([\n 'userFullName'\n ]),\n },\n {\n key: \"supplierName\",\n name: \"Supplier\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'supplierIds',\n enableSort: false,\n visible: true,\n },\n {\n key: \"approvalDateTime\",\n name: \"Approval Time\",\n type: FilterType.DateTimeRange,\n propertyNameInQuery: 'approvalDateTimeRange',\n enableSort: true,\n enableFilter: true,\n gridTemplate: new GridTemplate().ComponentTemplateName('approvalDateTime').CsvFields([\n 'approvalDateTime',\n 'approvalStatusUserFullName'\n ]),\n visible: true,\n isArray: false,\n hideEmptyColumnsEmptinessConditionCallback(res: PendingToApproveViewModel[]) {\n return res?.every(item => {\n return item.status == PendingToApproveStatus.Pending;\n });\n },\n },\n {\n key: \"dateTime\",\n name: \"Start/End Date\",\n type: FilterType.DateTimeRange,\n propertyNameInQuery: 'dateTimeRange',\n gridTemplate: new GridTemplate().ComponentTemplateName('dateTime').CsvFields([\n 'dateTime',\n 'endDateTime'\n ]),\n enableSort: false,\n visible: true,\n isArray: false,\n hideEmptyColumnsEmptinessConditionCallback(res: PendingToApproveViewModel[]) {\n return res?.every(item => {\n let show = !me.getStartDate(item).hasDate && !me.getEndDate(item).hasDate;\n return show;\n });\n },\n },\n {\n key: \"description\",\n name: \"Review Comment\",\n gridTemplate: new GridTemplate().ComponentTemplateName('description'),\n enableFilter: false,\n enableSort: false,\n visible: true,\n isArray: false,\n hideEmptyColumnsEmptinessConditionCallback(res: PendingToApproveViewModel[]) {\n return res?.every(item => {\n return !item.description;\n });\n },\n },\n {\n key: \"actions\",\n name: \"Actions\",\n gridTemplate: new GridTemplate().ComponentTemplateName('actions'),\n enableFilter: false,\n enableSort: false,\n visible: true,\n },\n ];\n }\n\n isTextOverflow(element: HTMLParagraphElement): boolean {\n return element.scrollHeight > element.clientHeight;\n }\n\n toggleExpand(item: PendingToApproveViewModel) {\n this.expandedItems[item.entityId] = !this.expandedItems[item.entityId];\n }\n\n fetchPendingList() {\n this.grid?.loadData();\n }\n\n approveReject(item: PendingToApproveViewModel, isApprove: boolean) {\n this.inProgress = true;\n\n const model = {\n approveEntityType: item.approveEntityType,\n entityId: item.entityId,\n isApprove: isApprove,\n } as ApproveRejectQueryModel;\n\n this.approveService.approveRejectEntity(model)\n .pipe(finalize(() => {\n this.inProgress = false\n }))\n .subscribe(res => {\n if (res == true) {\n if (isApprove == true)\n this.toastr.success('Approved Successfully.');\n else\n this.toastr.success('Rejected Successfully.');\n this.fetchPendingList();\n } else\n this.modalService.error(`${isApprove == true ? 'Approve' : 'Reject'} Failed.`);\n }, err => {\n this.modalService.error(err)\n })\n }\n\n selectedSiteSupplierDocument: ISiteSupplierDocumentTypeVersion;\n bsModalRef: BsModalRef;\n\n onOpenFormReview(template: any, item: PendingToApproveViewModel) {\n this.selectedSiteSupplierDocument = {\n files: item.files,\n displayVersion: item.description,\n lastSupplierVersionId: item.entityId,\n supplierDocumentTypeName: item.title,\n documentKindId: item.documentKindId,\n expirationDate: item.expirationDate,\n } as ISiteSupplierDocumentTypeVersion;\n\n this.formService.isFormDirty.next(false);\n this.formModalRef = this.bsModalService.show(template, {\n class: \"modal-lg modal-full-width\",\n ignoreBackdropClick: true,\n keyboard: false,\n });\n this.dirtyCheckSubscribe = this.formService.isFormDirty.asObservable().subscribe(e => {\n this.selectedFormDirtyState = e;\n });\n }\n\n\n questionAnswerInputModel: QuestionAnswerInputModel;\n\n onOpenDetail(template: any, item: PendingToApproveViewModel) {\n this.questionAnswerInputModel = {\n siteAttendanceId: item.attendanceId,\n isCheckInAnswer: item.approveEntityType == ApproveEntityType.Attendance\n } as QuestionAnswerInputModel;\n this.modalService.show(template, \"modal-lg\");\n }\n\n closeModal() {\n try {\n if (this.formModalRef) {\n if (!this.selectedFormDirtyState) {\n this.dirtyCheckSubscribe?.unsubscribe();\n this.formModalRef.hide();\n this.grid.loadData();\n } else {\n this.modalService.confirm('Exit and lose progress?', '', 'Yes, exit', 'No, go back and continue')\n .subscribe(res => {\n if (res == true) {\n this.dirtyCheckSubscribe?.next(false);\n this.dirtyCheckSubscribe?.unsubscribe();\n this.formModalRef.hide();\n this.grid.loadData();\n }\n });\n }\n }\n } catch {\n }\n\n try {\n this.modalService.hide();\n this.grid.loadData();\n } catch {\n }\n\n try {\n if (!this.selectedFormDirtyState) {\n this.dirtyCheckSubscribe?.unsubscribe();\n this.workflowEngineModal.hide();\n } else {\n this.modalService.confirm('Exit and lose progress?', '', 'Yes, exit', 'No, go back and continue')\n .subscribe(res => {\n if (res == true) {\n this.dirtyCheckSubscribe?.next(false);\n this.dirtyCheckSubscribe?.unsubscribe();\n this.workflowEngineModal.hide();\n }\n });\n }\n } catch {\n }\n }\n\n\n onOpenFormDetail(template: any, item: PendingToApproveViewModel) {\n if (item.approveEntityType == ApproveEntityType.Induction)\n this.selectedFormDataId = item.entityId;\n else {\n this.selectedFormDataId = item.relatedFormDataId;\n this.selectedEntityId = item.entityId;\n }\n this.modalService.show(template, \"modal-lg\")\n }\n\n onOpenFormDataDetail(template: any, formDataId: number) {\n this.selectedEntityId = formDataId;\n this.modalService.show(template, \"modal-lg\")\n }\n\n onOpenApproveRejectTemplate(template: any, item: PendingToApproveViewModel) {\n this.selectedEntityId = item.entityId;\n this.selectedEntityTypeForReviewModal = item.approveEntityType;\n this.selectedItemIsEnableFormExpiryDate = item.isEnableFormExpiryDate;\n this.selectedEntityEndDate = item.endDateTime;\n this.modalService.show(template, \"modal-lg\")\n }\n\n adjustDates() {\n if (isDateValid(this.startDate)) {\n this.endMinAvailableDate = this.startDate.value;\n this.endMinAvailableDate.setHours(0, 0, 0, 0);\n } else {\n this.endMinAvailableDate = null;\n }\n if (isDateValid(this.endDate)) {\n this.startMaxAvailableDate = this.endDate.value;\n this.startMaxAvailableDate.setHours(0, 0, 0, 0);\n } else {\n this.startMaxAvailableDate = null;\n }\n }\n\n showRequestRevisionButton(item: PendingToApproveViewModel): boolean {\n return item.approveEntityType == ApproveEntityType.Induction &&\n (item.status != PendingToApproveStatus.Approved ||\n (item.status == PendingToApproveStatus.Approved &&\n (this.userService.isCompanyAdminUser() ||\n (item.siteId > 0 && this.userService.hasAdminPermissionOnSite(item.siteId)))));\n }\n\n onGeneralResetStatus(item: PendingToApproveViewModel) {\n const entityTypeTitle = this.approveEntityTypePipe.transform(item.approveEntityType);\n this.modalService.confirm('Are you sure you want to reset the status to pending?', `Reset ${entityTypeTitle}`).subscribe(result => {\n if (result === true) {\n this.inProgress = true;\n let subscription =\n this.approveService\n .resetEntityStatus({ entityId: item.entityId, approveEntityType: item.approveEntityType })\n .subscribe(res => {\n if (res)\n this.toastr.success(`${entityTypeTitle} status has successfully reset!`);\n else\n this.toastr.error(`Can not reset ${entityTypeTitle} status!`)\n }, _ => {\n this.toastr.error(`Can not reset ${entityTypeTitle} status! Some error happened`)\n }, () => {\n subscription.unsubscribe();\n this.fetchPendingList();\n this.inProgress = false;\n })\n }\n });\n }\n\n selectedItemToRequestRevision: PendingToApproveViewModel;\n requestRevisionModalRef: any;\n onDisplayRequestRevisionModal(template: any, item: PendingToApproveViewModel) {\n this.selectedItemToRequestRevision = item;\n this.requestRevisionModalRef = this.modalService.show(template, 'modal-90p');\n }\n\n showStartEndDateTime(type: ApproveEntityType): boolean {\n return type == ApproveEntityType.Induction ||\n type == ApproveEntityType.PermitForms ||\n type == ApproveEntityType.SupplierForms;\n }\n\n getDateShowValue(date: Date, type: ApproveEntityType, main: string, detail: string): { hasDate: boolean, showValue: string } {\n if (date && this.showStartEndDateTime(type) && this.isShowTemplateColumns(main, detail)) {\n let showValue =\n (type == ApproveEntityType.PermitForms ||\n type == ApproveEntityType.Induction ?\n this.datePipe :\n this.datetimePipe)\n .transform(date);\n return { hasDate: true, showValue: showValue };\n }\n return { hasDate: false, showValue: '' };\n }\n\n getStartDate(item: PendingToApproveViewModel): { hasDate: boolean, showValue: string } {\n return this.getDateShowValue(item.dateTime, item?.approveEntityType, \"dateTime\", \"dateTime\");\n }\n\n getEndDate(item: PendingToApproveViewModel): { hasDate: boolean, showValue: string } {\n return this.getDateShowValue(item.endDateTime, item?.approveEntityType, \"dateTime\", \"endDateTime\");\n }\n\n isShowTemplateColumns(mainColumn, detailColumn) {\n return this.grid.isShowTemplateColumns(mainColumn, detailColumn);\n }\n\n\n hasWorkflow(item: PendingToApproveViewModel) {\n return item?.approveEntityType == ApproveEntityType.SiteSupplierDocument &&\n item?.inWorkflowStep == ShowSupplierDocumentReviewButton.WorkflowInstanceHasAccess &&\n item?.status == PendingToApproveStatus.Pending;\n }\n\n isLagacyReview(item: PendingToApproveViewModel) {\n return item?.status == PendingToApproveStatus.Pending &&\n item.inWorkflowStep == ShowSupplierDocumentReviewButton.NoWorkflowInstance &&\n item?.approveEntityType == ApproveEntityType.SiteSupplierDocument &&\n item.inWorkflowStep == ShowSupplierDocumentReviewButton.NoWorkflowInstance &&\n this.serverResult?.hasSupplierReviewForm == true &&\n this.serverResult?.supplierDocumentReviewMode != SupplierDocumentReviewMode.Disabled &&\n !this.hasWorkflow(item);\n }\n\n isSimpleApproveReject(item: PendingToApproveViewModel) {\n return item?.status == PendingToApproveStatus.Pending &&\n (item?.approveEntityType != ApproveEntityType.Induction &&\n item?.approveEntityType != ApproveEntityType.PermitForms &&\n item?.approveEntityType != ApproveEntityType.SiteAsset &&\n item?.approveEntityType != ApproveEntityType.SiteAssetOperator &&\n item?.approveEntityType != ApproveEntityType.SupplierForms &&\n (item?.approveEntityType != ApproveEntityType.SiteSupplierDocument ||\n (item?.approveEntityType == ApproveEntityType.SiteSupplierDocument &&\n item?.inWorkflowStep == ShowSupplierDocumentReviewButton.NoWorkflowInstance &&\n ((this.serverResult?.supplierDocumentReviewMode == SupplierDocumentReviewMode.Disabled) ||\n (this.serverResult?.supplierDocumentReviewMode == SupplierDocumentReviewMode.Optional &&\n this.serverResult?.hasSupplierReviewForm == false)\n ) &&\n !this.hasWorkflow(item) &&\n !this.isLagacyReview(item)\n )\n )\n ) ||\n (item?.approveEntityType == ApproveEntityType.SiteAssetOperator && !item?.relatedFormDataId);\n }\n\n workflowEngineModal: BsModalRef;\n openWorkflowEngine(instanceId: string, modalTemplate: any) {\n this.selectedInstanceId = instanceId;\n\n if (this.portalDisplayMode == PortalDisplayMode.PopUp) {\n this.formService.isFormDirty.next(false);\n this.workflowEngineModal = this.bsModalService.show(modalTemplate, {\n class: \"modal-full-screen\",\n ignoreBackdropClick: true,\n keyboard: false,\n });\n this.dirtyCheckSubscribe = this.formService.isFormDirty.asObservable().subscribe(e => {\n this.selectedFormDirtyState = e;\n });\n }\n else if (this.portalDisplayMode == PortalDisplayMode.Page) {\n this.router.navigate([`/workflow-engine/${this.selectedInstanceId}`], { queryParams: { returnPath: this.getPath() } });\n }\n }\n\n onActiveChanged(value) {\n let filter = this.initialFilters?.find((item) => item.key == 'includeInactive');\n filter.value = !!value;\n this.fetchPendingList();\n }\n\n SiteInductionRejectStatus = SiteInductionRejectStatus;\n}\n","
      \n
      \n

      Myob authorization done!

      \n

      You can close this window!

      \n

      This window will be closed in a few seconds automatically!

      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'obc-myob-configuration-access-code-callback',\n templateUrl: './myob-configuration-access-code-callback.component.html',\n styleUrls: ['./myob-configuration-access-code-callback.component.scss']\n})\nexport class MyobConfigurationAccessCodeCallbackComponent implements OnInit {\n success: boolean;\n\n constructor(private route: ActivatedRoute) { }\n\n ngOnInit(): void {\n this.route.queryParams.subscribe((res) => {\n this.success = res['success'] == '1';\n window.opener.myobConfigCompleted();\n setTimeout(() => window.close(), 5000);\n });\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { PermitViewModel } from '../models/form/permits-info-model';\nimport { PermitHistoryViewModel } from '../models/permit/permit-history-view-model';\nimport { PermitReportQueryModel } from '../models/permit/permit-report-query-model';\nimport { PermitUpdateStatusRequestModel } from '../models/permit/permit-update-status-request-model';\nimport { ServerResult } from '../models/server-result-data';\nimport { PagingViewModel } from '../models/site-list-paging-view-model';\nimport { ErrorService } from './error.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermitService {\n\n apiUrl: string = \"/api/permit\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n permitReport = (query: PermitReportQueryModel): Observable> =>\n this.http.post>(`${this.apiUrl}/permit-report`, query)\n .pipe(catchError(this._errorService.handleError));\n\n updatePermitStatus(model: PermitUpdateStatusRequestModel): Observable {\n return this.http.post(`${this.apiUrl}/update-permit-status`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n\n permitHistory(permitId: number): Observable {\n return this.http.get(`${this.apiUrl}/permit-history/${permitId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","
      \n \n
      \n \n Fill {{permitStatusForm.name}}\n \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { PermitStatus } from 'src/app/enums/permit-status';\nimport { FormViewModel } from 'src/app/models/form/form-view-model';\nimport { PermitUpdateStatusRequestModel } from 'src/app/models/permit/permit-update-status-request-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { PermitService } from 'src/app/services/permit.service';\nimport { FormDataRendererComponent } from '../../form-data-renderer/form-data-renderer.component';\n\n@Component({\n selector: 'obc-update-permit-status',\n templateUrl: './update-permit-status.component.html',\n styleUrls: ['./update-permit-status.component.scss']\n})\nexport class UpdatePermitStatusComponent implements OnInit {\n @Input() permitStatusForm: FormViewModel;\n @Input() permitId: number;\n @Input() nextStatus: PermitStatus;\n @Input() siteId: number;\n @Output() public onHide = new EventEmitter();\n @Output() public onSubmitted = new EventEmitter();\n\n isPermitStatusFormValid: boolean;\n inProgress: boolean = false;\n @ViewChild(FormDataRendererComponent) public formDataRenderer: FormDataRendererComponent;\n\n constructor(private permitService: PermitService, private modalService: ModalService) { }\n ngOnInit(): void {\n }\n\n validatePermitStatusForm(formIsValid: boolean) {\n this.isPermitStatusFormValid = formIsValid;\n }\n\n onUpdatePermitStatus() {\n this.inProgress = true;\n var formAnswers = this.formDataRenderer.getFormResponse();\n let model = {\n formData: formAnswers,\n permitId: this.permitId,\n status: this.nextStatus,\n } as PermitUpdateStatusRequestModel;\n\n this.permitService.updatePermitStatus(model).subscribe({\n next: res => {\n if (res.success) {\n this.onSubmitted.emit();\n } else\n this.modalService.error(res.message);\n },\n error: err => {\n this.modalService.error(err, \"Failed\");\n }\n , complete: () => {\n this.inProgress = false;\n }\n })\n }\n}\n","
      \n \n
      \n \n {{permitHistory.permitTitle}}\n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      StatusByAt
      \n There is no history.\n
      {{event.currentPermitStatus | permitStatus}}{{event.userFullName}}{{event.dateTime | datetime}}\n \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { PermitHistoryViewModel } from 'src/app/models/permit/permit-history-view-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { PermitService } from 'src/app/services/permit.service';\n\n@Component({\n selector: 'obc-permit-history',\n templateUrl: './permit-history.component.html',\n styleUrls: ['./permit-history.component.scss']\n})\nexport class PermitHistoryComponent implements OnInit {\n @Input() permitId: number;\n @Output() onHide = new EventEmitter();\n inProgress: boolean = false;\n permitHistory: PermitHistoryViewModel;\n generalFormDataId: any;\n constructor(private permitService: PermitService, private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.fetchHistory();\n }\n\n fetchHistory() {\n this.permitService.permitHistory(this.permitId)\n .subscribe(res => {\n this.permitHistory = res;\n }, err => {\n this.modalService.error(\"Failed to load history\");\n }, () => {\n this.inProgress = false;\n })\n }\n\n openModal(template, generalFormDataId) {\n this.generalFormDataId = generalFormDataId;\n this.modalService.show(template, \"modal-lg\");\n }\n closeModal() {\n this.modalService.hide();\n }\n}\n\n","
      \n
      \n
      \n
      Permits
      \n
      \n \n Include Inactive Permits: \n \n \n \n \n\n \n \n \n \n\n \n
      Start: {{data.startDate | date}}
      \n
      End: {{data.endDate | date}}
      \n
      \n\n \n {{data.statusInfo?.currentStatus | permitStatus}}\n \n\n \n \n\n \n\n \n\n \n\n \n\n PDF\n\n \n\n \n \n\n \n \n \n\n \n \n \n \n\n \n \n \n\n \n
      \n
      \n
      \n
      \n\n\n\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { FormService } from \"../../../../services/form.service\";\nimport { GridColumn, GridConfig, GridTemplate, InitialFilter } from \"../../../../models/grid/grid.config\";\nimport { Table } from \"../../../../enums/table.enum\";\nimport { FormReportViewModel } from \"../../../../models/form/form-report-models\";\nimport { FormDataPdfQueryModel } from \"../../../../models/form/form-data-pdf-query-model\";\nimport { PermitStatus } from 'src/app/enums/permit-status';\nimport { PermitViewModel } from \"../../../../models/form/permits-info-model\";\nimport { FormViewModel } from \"../../../../models/form/form-view-model\";\nimport { PermitUpdateStatusRequestModel } from \"../../../../models/permit/permit-update-status-request-model\";\nimport { PermitService } from \"../../../../services/permit.service\";\nimport { AttendanceDocumentReportViewModel } from 'src/app/models/attendance-document-report-viewmodel';\n\n\n@Component({\n selector: 'obc-permit-report',\n templateUrl: './permit-report.component.html',\n styleUrls: ['./permit-report.component.scss']\n})\nexport class PermitReportComponent implements OnInit {\n PermitStatus = PermitStatus;\n selectedFormDataId: number;\n selectedPermit: PermitViewModel;\n permitStatusForm: FormViewModel;\n nextStatus: PermitStatus;\n ApproveRejectPermit = ApproveRejectPermit;\n inProgress: boolean = false;\n includeInactivePermitForms: boolean = false;\n initialFilters: InitialFilter[] = [{ key: 'includeInactivePermitForms', value: false, }];\n\n constructor(private layoutService: LayoutService,\n private formService: FormService,\n private modalService: ModalService,\n private permitService: PermitService,\n ) {\n }\n\n ngOnInit() {\n this.layoutService.header = \"Permit Report\";\n this.prepareGridConfig();\n }\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: '/api/permit/permit-report',\n tableType: Table.PermitReport,\n displayGeneralSearch: true,\n csvReportUrl: '/api/permit/permit-report-csv-as-job',\n generalSearchPlaceholder: \"Filter Result by Name, Site, Apply For\",\n initialFilters: this.initialFilters,\n });\n this.gridColumns = [\n {\n name: \"Date Submitted\",\n key: \"fillDateTime\",\n type: FilterType.DateTimeRange,\n enableFilter: true,\n enableSort: true,\n propertyNameInQuery: 'fillDateTime',\n isArray: false,\n },\n {\n name: \"Permit Title\",\n key: \"name\",\n type: FilterType.PermitForm,\n propertyNameInQuery: 'permitFormIds',\n },\n {\n name: \"Site\",\n key: \"siteName\",\n sortBy: 'site',\n type: FilterType.Site,\n propertyNameInQuery: 'siteIds',\n gridTemplate: new GridTemplate().SiteNameReference({\n siteName: 'siteName'\n }),\n },\n {\n name: \"Start/End\",\n type: FilterType.DateTime,\n key: \"startDate\",\n propertyNameInQuery: 'dateTime',\n gridTemplate: new GridTemplate().ComponentTemplateName('startEndDate')\n .CsvFields([\n 'startDate',\n 'endDate'\n ]),\n isArray: false,\n payloadCustomKeyValue: (value) => {\n if (value && value?.length > 0)\n return { dateTime: value[0].from };\n return undefined;\n }\n },\n\n {\n name: \"Apply For\",\n key: \"registerForTitle\",\n sortBy: \"supplier\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'supplierIds',\n },\n {\n name: \"Status\",\n key: \"permitCurrentStatus\",\n sortBy: \"status\",\n type: FilterType.PermitStatus,\n propertyNameInQuery: 'statuses',\n gridTemplate: new GridTemplate().ComponentTemplateName('permitStatus')\n },\n {\n name: \"Exclusive Access\",\n key: \"zoneName\",\n enableFilter: false,\n },\n {\n name: \"Today's Schedule\",\n key: \"scheduleTitle\",\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Details\",\n key: 'controls',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('controls'),\n visible: true,\n }\n ];\n }\n\n openModal(template, formDataId: number) {\n this.selectedFormDataId = formDataId;\n this.modalService.show(template, \"modal-lg\");\n }\n\n exportPdf(item: FormReportViewModel) {\n this.formService.ExportFormDataAsPdf({ formDataId: item.formDataId, siteId: item.siteId } as FormDataPdfQueryModel);\n }\n\n closeModal() {\n this.modalService.hide();\n this.grid.loadData(0);\n }\n\n onOpenPermitStatusForm(template, permit: PermitViewModel, nextStatus: PermitStatus) {\n this.selectedPermit = permit;\n this.nextStatus = nextStatus;\n if (nextStatus == PermitStatus.Close)\n this.permitStatusForm = permit.statusInfo.permitCloseForm;\n else if (nextStatus == PermitStatus.OnHold)\n this.permitStatusForm = permit.statusInfo.permitOnholdForm;\n else if (nextStatus == PermitStatus.Open)\n this.permitStatusForm = permit.statusInfo.permitInUseForm;\n\n this.modalService.show(template, \"modal-lg\");\n }\n\n onConfirm(permit: PermitViewModel, nextStatus: PermitStatus, approveRejectPermit: ApproveRejectPermit = ApproveRejectPermit.Nothing) {\n this.selectedPermit = permit;\n this.nextStatus = nextStatus;\n let confirmMessage = approveRejectPermit == ApproveRejectPermit.Approve ? 'approve' :\n approveRejectPermit == ApproveRejectPermit.Reject ? 'reject' :\n nextStatus == PermitStatus.Close ? 'close' :\n nextStatus == PermitStatus.Open ? 'open' :\n nextStatus == PermitStatus.OnHold ? 'suspend' : 'change status of';\n this.modalService.confirm(`Are you sure you want to ${confirmMessage} this permit?`)\n .subscribe(confirmed => {\n if (confirmed) {\n this.onUpdatePermitStatus();\n }\n });\n }\n\n onUpdatePermitStatus() {\n this.inProgress = true;\n let model = {\n formData: null,\n permitId: this.selectedPermit.filledFormId,\n status: this.nextStatus,\n } as PermitUpdateStatusRequestModel;\n this.permitService.updatePermitStatus(model).subscribe({\n next: res => {\n if (res.success) {\n this.grid?.loadData(0);\n } else\n this.modalService.error(res.message);\n },\n error: err => {\n this.modalService.error(err, \"Failed\");\n },\n complete: () => {\n this.inProgress = false;\n }\n })\n }\n\n isShowTemplateColumns(mainColumn, detailColumn) {\n return this.grid.isShowTemplateColumns(mainColumn, detailColumn);\n }\n\n onIncludeInactivePermitFormsChanged(value: boolean) {\n this.gridColumns.find(x => x.key == \"name\").filterSettings = { includeInactiveItems: value };\n this.initialFilters.find(x => x.key == \"includeInactivePermitForms\").value = value;\n this.grid?.loadData();\n }\n}\n\nenum ApproveRejectPermit {\n Nothing,\n Approve,\n Reject,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormDataStatus } from '../enums/form-data-status';\n\n@Pipe({\n name: 'formDataStatus'\n})\nexport class FormDataStatusPipe implements PipeTransform {\n\n transform(value: unknown): string {\n if (value === FormDataStatus.NotRequired) return \"\";\n if (value === FormDataStatus.Approved) return \"Approved\";\n if (value === FormDataStatus.PendingApproval) return \"Pending Approval\";\n if (value === FormDataStatus.Rejected) return \"Rejected\";\n return value?.toString();\n }\n\n\n}\n","
      \n
      \n
      \n
      List of Supplier Forms
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n \n \n \n \n \n \n \n \n\n \n \n 0; \">\n \n \n \n \n \n \n \n \n \n \n\n \n
      DatetimeVersionStatusApprove/Reject By
      \n {{ history.fillDateTime | datetime }}\n \n
      \n {{ history.displayVersion }}\n
      \n
      \n {{ history.status | formDataStatus }}\n \n {{ history.approveRejectByUserFullName }}\n \n\n \n\n
      \n
      \n\n
      \n
      \n\n\n \n \n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { finalize } from \"rxjs/operators\";\nimport { SupplierFormService } from \"../../../services/supplier-form.service\";\nimport { SupplierFormHistoryViewModel } from \"../../../models/supplier-form/supplier-forms-view-mode\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'obc-supplier-form-history',\n templateUrl: './supplier-form-history.component.html',\n styleUrls: ['./supplier-form-history.component.scss']\n})\nexport class SupplierFormHistoryComponent implements OnInit {\n\n inProgress: boolean = false;\n @Input() supplierId: number;\n @Input() formId: number;\n formHistory: SupplierFormHistoryViewModel[] = [];\n selectedFormDataId: number;\n\n @Input() hashLink: string;\n\n constructor(private supplierFormService: SupplierFormService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n ) {\n }\n\n ngOnInit(): void {\n (this.hashLink != null ? this.supplierFormService.getAnonymousFormHistory(this.formId, this.hashLink)\n : this.supplierFormService.getFormHistory(this.supplierId, this.formId))\n .pipe(finalize(() => {\n }))\n .subscribe(res => {\n this.inProgress = false;\n if (res != null && res) {\n this.formHistory = res;\n }\n }, err => {\n this.inProgress = false;\n this.modalService.error(err, \"Unable to get information\");\n }, () => {\n this.inProgress = false;\n });\n }\n\n bsModalRef: BsModalRef;\n onViewForm(template, formDataId: number) {\n this.selectedFormDataId = formDataId;\n this.bsModalRef = this.bsModalService.show(template, { class: \"modal-lg\" });\n }\n\n closeFormDetailsModal() {\n this.bsModalRef.hide();\n }\n\n}\n","\n
      \n
      \n \n \n
      \n
      \n\n
      \n
      \n
      Supplier Selection
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n \n \n
      \n\n
      \n \n\n \n \n\n
      \n
      \n \n Last Request Email:\n \n Requested\n ({{selectedSupplier?.lastEmailAddress}} - {{selectedSupplier?.lastEmailSendDate | datetime}})\n \n \n \n \n \n
      \n
      \n
      \n
      \n\n
      \n
      \n\n\n
      \n
      List of Supplier Forms
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n \n \n \n \n \n \n \n \n \n\n \n \n\n 0; \">\n \n \n \n \n \n\n \n \n \n \n\n \n
      FormSupplierLast Approved FormPending Approval Form
      \n
      \n {{ form.formName }}\n
      \n
      \n
      \n
        \n
      • \n Version:\n \n {{ form.lastApprovedFormData?.displayVersion }}\n \n
      • \n
      • \n Submit Date:\n \n {{ form.lastApprovedFormData?.fillDateTime | datetime }}\n \n
      • \n
      • \n Expiry:\n \n {{ form.lastApprovedFormData?.endDate | datetime }}\n \n
      • \n
      • \n {{ form.lastApprovedFormData?.status | formDataStatus }}\n by:\n {{ form.lastApprovedFormData?.approveRejectByUserFullName }}\n ({{ form.lastApprovedFormData?.approveRejectDateTime | datetime }})\n \n
      • \n
      \n \n
      \n
      \n
      \n
        \n
      • \n Version:\n \n {{ form.pendingFormData?.displayVersion }}\n \n
      • \n
      • \n Submit Date:\n \n {{ form.pendingFormData?.fillDateTime | datetime }}\n \n
      • \n
      • \n Expiry:\n \n {{ form.pendingFormData?.endDate | datetime }}\n \n
      • \n
      • \n {{ form.pendingFormData?.status | formDataStatus }}\n\n
      • \n
      \n\n \n\n
      \n
      \n \n \n\n\n
      \n
      \n\n
      \n
      \n\n\n
      \n\n\n
      \n
      \n Supplier Link\n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      Send Supplier Link To:
      \n \n \n
      \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n
      \n
      List of Supplier Forms
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n\n
      \n\n
      \n
      \n \n \n
      \n
      \n
      \n\n\n
      \n \n \n \n
      \n
      \n\n\n \n \n \n\n","import { UserService } from 'src/app/services/user.service';\nimport { Component, HostListener, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { OptionalMandatoryState } from \"../../enums/site-document-state.enum\";\nimport { SiteSupplierDocumentTypeViewModel } from \"../../models/supplier-document/site-supplier-document-type-view-model.model\";\nimport { SiteSupplierViewModel } from 'src/app/models/supplier-document/site-supplier-view-model.model';\nimport { finalize } from \"rxjs/operators\";\nimport { SupplierDocumentService } from \"../../services/supplier-document.service\";\nimport { ModalService } from \"../../services/modal.service\";\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport { LayoutService } from \"../../services/layout.service\";\nimport { ApproveDeclineSiteSupplierDocumentVersion } from \"../../models/supplier-document/site-supplier-document-type-models\";\nimport { SiteSupplierDocumentStatus } from 'src/app/enums/site-supplier-document-status';\nimport { BehaviorSubject } from 'rxjs';\nimport { SupplierFormService } from \"../../services/supplier-form.service\";\nimport { FormType } from \"../../enums/form-type\";\nimport { FormViewModel } from \"../../models/form/form-view-model\";\nimport { AddSupplierFormModel } from \"../../models/supplier-form/add-supplier-form-model\";\nimport { SupplierFormViewModel, SupplierViewModel } from \"../../models/supplier-form/supplier-forms-view-mode\";\nimport { FormDataStatus } from \"../../enums/form-data-status\";\nimport { SendSupplierFormsRequestModel } from \"../../models/email-content/site-supplier-hash-link-email-view-model\";\nimport { FullFilledFormInfoViewModel } from 'src/app/models/filled-form-info-view-model';\n\n@Component({\n selector: 'obc-supplier-forms',\n templateUrl: './supplier-forms.component.html',\n styleUrls: ['./supplier-forms.component.scss'],\n})\nexport class SupplierFormsComponent implements OnInit {\n inProgress: boolean = false;\n // if site is global\n formMode: boolean = false;\n formType = FormType;\n\n selectedSupplier: SupplierViewModel;\n selectedFormIdToViewHistory: number;\n selectedFormIds: number[];\n formDataStatus = FormDataStatus;\n selectedForm: SupplierFormViewModel;\n\n SiteSupplierDocumentStatus = SiteSupplierDocumentStatus;\n pageYOffset: number;\n SelectedSiteSupplierForSupplierLinkOperations: SiteSupplierViewModel;\n selectedAccordionItemId: number;\n\n @HostListener('window:scroll', ['$event']) onScroll(_) {\n this.pageYOffset = window.pageYOffset;\n }\n\n selectedSiteSupplierDocument: SiteSupplierDocumentTypeViewModel;\n SiteActiveStatus = SiteActiveStatus;\n newForm: boolean = false;\n displayForm: boolean = false;\n formId: number;\n selectedSupplierId: number;\n selectedSiteId: number;\n\n UserPermission = UserPermission;\n supplierFormControl = new FormControl();\n\n sampleMandatorySiteDocumentState: OptionalMandatoryState =\n OptionalMandatoryState.Mandatory;\n renameNoneStandardSupplierDocumentTypeFormControl = new FormControl(null, [\n Validators.required,\n ]);\n allSuppliers: SupplierViewModel[] = [];\n hasSupplierReviewForm: boolean;\n selectedSuppliers: number[] = [];\n selectedSupplierIds: number[] = [];\n\n firstEmail = false;\n email = new FormControl();\n emailSubject = new FormControl();\n emailBody = new FormControl();\n\n selectedFormDataId: number;\n modalReference: BsModalRef;\n bsModalRef: BsModalRef;\n\n @ViewChild('supplierSelector') supplierSelector;\n @ViewChild('supplierDocumentSelector') supplierDocumentSelector;\n\n constructor(\n private route: ActivatedRoute,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private supplierDocumentService: SupplierDocumentService,\n private supplierFormService: SupplierFormService,\n private layoutService: LayoutService,\n private userService: UserService\n ) { }\n\n ngOnInit(): void {\n this.layoutService.header = 'Company Forms';\n this.supplierFormControl.valueChanges.subscribe((_) => {\n this._calSupplierForms();\n });\n this.route.params.subscribe((params: Params) => {\n const supplierId = params['supplierId'] ? +params['supplierId'] : null;\n if (params['formId']) {\n this.formMode = true;\n this.changeFormId(+params['formId']);\n }\n\n if (supplierId && supplierId > 0) {\n this.supplierFormControl.setValue(supplierId);\n }\n });\n //To handle backdrop-click\n // this.bsModalService.onHide.subscribe((_) => {\n // this.refresh();\n // });\n }\n\n onSelectForm(formViewModel: FormViewModel) {\n this.formId = formViewModel.id;\n }\n\n changeFormId(value) {\n if (this.formId != value) {\n this.formId = value;\n this._calSupplierForms();\n }\n }\n\n forceToResetValues = new BehaviorSubject(true);\n\n onAddForm() {\n let formId = this.formId;\n let supplierId = this.supplierFormControl.value;\n\n if (!(formId && supplierId)) {\n this._clearForm();\n return;\n }\n\n let dataToServer = {\n formId: formId,\n supplierId: supplierId,\n } as AddSupplierFormModel;\n\n let foundItem = this.selectedSupplier.forms.find(\n (item) => item?.formId == formId\n );\n if (!foundItem) {\n let result = this.supplierFormService.addNewForm(dataToServer);\n result.subscribe(\n (_) => {\n this._calSupplierForms();\n },\n (err) => {\n this.modalService.error(err, 'Unable to add');\n }\n );\n }\n\n this._clearForm();\n }\n\n onRemoveForm(item: SupplierFormViewModel) {\n this.modalService\n .confirm('Are You Sure?', `Delete ${item.formName}`)\n .subscribe((result) => {\n if (result) {\n let result = this.supplierFormService.removeForm({\n supplierId: this.selectedSupplier.supplierId,\n formId: item.formId,\n } as AddSupplierFormModel);\n result.subscribe(\n (_) => {\n this._calSupplierForms();\n },\n (err) => {\n this.modalService.error(err, 'Unable to delete this item');\n }\n );\n }\n });\n }\n\n currentLink = null;\n refViewHashLink: any;\n\n _clearForm() {\n this.displayForm = false;\n this.newForm = false;\n if (this.formMode) this.supplierFormControl.setValue(null);\n else this.formId = null;\n\n this.modalReference?.hide();\n }\n\n _openNewForm(template) {\n this.selectedFormIds =\n this.selectedSupplier?.forms?.map((item) => item.formId) ?? [];\n this.modalReference = this.bsModalService.show(template);\n }\n\n _loadItem(item: SupplierViewModel) {\n if (this.formMode) {\n this.supplierFormControl.setValue(item.supplierId);\n }\n\n this.selectedSupplier = item;\n this.scrollToTop();\n }\n\n _calSupplierForms() {\n this.inProgress = true;\n\n this.supplierFormService\n .getFormList(this.supplierFormControl?.value)\n .pipe(finalize(() => { }))\n .subscribe(\n (res) => {\n this.inProgress = false;\n if (res != null && res) {\n this.selectedSupplier = res;\n this._clearForm();\n } else {\n this.allSuppliers = [];\n this.hasSupplierReviewForm = false;\n this._clearForm();\n }\n },\n (err) => {\n this.inProgress = false;\n this.modalService.error(err, 'Unable to get information');\n },\n () => {\n this.inProgress = false;\n }\n );\n }\n\n scrollToTop() {\n window.scrollTo(0, 0);\n }\n\n onViewHashLink(item: SupplierViewModel, template: any) {\n this.currentLink =\n window.location.protocol +\n '//' +\n window.location.host +\n '/anonymous-manage-supplier-forms/' +\n item.hashLink;\n this.email.setValue(item.supplierEmailAddress);\n this.emailBody.setValue(item.supplierEmailBody);\n this.emailSubject.setValue(item.supplierEmailSubject);\n this.refViewHashLink = this.bsModalService.show(template, { class: 'modal-lg' });\n this.firstEmail = item.lastEmailAddress?.length > 0;\n }\n\n onSendEmail() {\n if (!this.selectedSupplier?.supplierId) return;\n if (!this.email?.value) {\n this.modalService.error('Please enter supplier email address!');\n return;\n }\n if(this.emailBody?.value.length > this.userService.editorMaxLength.value)\n {\n this.modalService.error('Text field length exceeded the maximum limit. Please reduce the length of your input and try again.');\n return;\n }\n this.supplierFormService\n .sendEmail({\n toEmailAddress: this.email?.value,\n supplierLinkBody: this.emailBody?.value,\n supplierLinkSubject: this.emailSubject?.value,\n supplierId: this.selectedSupplier?.supplierId,\n } as SendSupplierFormsRequestModel)\n .subscribe(\n (_) => {\n this._calSupplierForms();\n this.refViewHashLink.hide();\n },\n (err) => {\n this.modalService.error(err, 'Unable to send email');\n }\n );\n }\n\n onApproveDeclineSiteSupplierVersion(\n isApprove: boolean,\n documentType: SiteSupplierDocumentTypeViewModel\n ) {\n if (!documentType) return;\n this.supplierDocumentService\n .approveDeclineSiteSupplierVersion({\n isApproved: isApprove,\n siteSupplierDocumentVersionId: documentType.lastSupplierVersionId,\n } as ApproveDeclineSiteSupplierDocumentVersion)\n .subscribe(\n (_) => {\n this._calSupplierForms();\n },\n (err) => {\n this.modalService.error(err, 'Unable to change status');\n }\n );\n }\n\n isInViewMode(item: SiteSupplierViewModel) {\n return !(\n item &&\n this.formId == item.siteId &&\n this.supplierFormControl.value == item.supplierId\n );\n }\n\n isPending(item: SiteSupplierDocumentTypeViewModel) {\n return item.status == SiteSupplierDocumentStatus.Pending;\n }\n\n isDocumentTypeIsVisible(\n index,\n docType: SiteSupplierDocumentTypeViewModel,\n siteSupplier: SiteSupplierViewModel\n ) {\n return (\n docType.status == SiteSupplierDocumentStatus.Pending ||\n index < 5 ||\n (siteSupplier != null && siteSupplier._showAll)\n );\n }\n\n selectedSiteSupplierForRename: SiteSupplierViewModel = null;\n selectedSiteSupplierDocumentTypeForRename: SiteSupplierDocumentTypeViewModel =\n null;\n\n updateNoneStandardSupplierDocumentType() {\n const model = {\n title: this.renameNoneStandardSupplierDocumentTypeFormControl.value,\n siteSupplierId: this.selectedSiteSupplierForRename.siteSupplierId,\n siteSupplierDocumentTypeId:\n this.selectedSiteSupplierDocumentTypeForRename.id,\n };\n\n this.supplierDocumentService\n .renameSiteSupplierDocumentType(model)\n .subscribe(\n (_) => {\n this.modalReference.hide();\n this._calSupplierForms();\n },\n (err) => {\n this.modalService.error(err);\n }\n );\n }\n\n refresh() {\n this._calSupplierForms();\n this.bsModalRef?.hide();\n }\n\n\n displayHistory(form: SupplierFormViewModel, template: any) {\n this.selectedFormIdToViewHistory = form.formId;\n this.modalReference = this.bsModalService.show(template, {\n class: 'modal-lg',\n ignoreBackdropClick: false,\n });\n }\n\n onViewForm(template, formData: FullFilledFormInfoViewModel) {\n this.selectedFormDataId = formData.formDataId;\n this.modalReference = this.bsModalService.show(template, {\n class: 'modal-lg',\n });\n }\n\n closeFormDetailsModal() {\n this.modalReference.hide();\n }\n\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormDataRendererComponent } from \"../../form-manage/form-data-renderer/form-data-renderer.component\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { SupplierFormService } from \"../../../services/supplier-form.service\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { SupplierFormViewModel, SupplierViewModel } from \"../../../models/supplier-form/supplier-forms-view-mode\";\nimport { FormDataStatus } from 'src/app/enums/form-data-status';\nimport { FormType } from 'src/app/enums/form-type';\nimport { SiteSupplierWithDocumentTypesViewModel } from \"../../../models/supplier-document/site-supplier-models\";\nimport { FormService } from 'src/app/services/form.service';\n\n@Component({\n selector: 'obc-supplier-fill-form',\n templateUrl: './supplier-fill-form.component.html',\n styleUrls: ['./supplier-fill-form.component.scss']\n})\nexport class SupplierFillFormComponent implements OnInit {\n\n @Input() hashLink: string;\n @Input() supplier: SupplierViewModel;\n FormDataStatus = FormDataStatus;\n @Input() selectedForm: SupplierFormViewModel;\n FormType = FormType;\n inProgress: boolean;\n @ViewChild(\"formDataRenderer\") public formDataRenderer: FormDataRendererComponent;\n @Output() onHide = new EventEmitter();\n\n constructor(private route: ActivatedRoute,\n private supplierFormService: SupplierFormService,\n private formService: FormService,\n private modalService: ModalService,) { }\n\n ngOnInit(): void {\n }\n\n isFormValid: boolean;\n validateForm(formIsValid: boolean) {\n this.isFormValid = formIsValid;\n }\n\n onSubmitForm() {\n this.inProgress = true;\n var formAnswers = this.formDataRenderer.getFormResponse();\n let subs = null;\n if (this.hashLink?.length)\n subs = this.supplierFormService.saveForm(formAnswers, this.hashLink);\n else\n subs = this.formService.saveForm(formAnswers);\n\n subs.subscribe(res => {\n if (res.success) {\n this.modalService.hide();\n this.onHide.emit(true);\n } else\n this.modalService.error(res.message);\n }, err => {\n this.modalService.error(err, \"Failed\");\n }, () => {\n this.inProgress = false;\n })\n }\n\n onCancel() {\n this.modalService.hide();\n }\n}\n","
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n\n","
      \n
      \n
      \n
      \n
      \n View Supplier Forms\n
      \n
      \n
      \n \n
      \n
      \n

      Supplier: {{suppliers[0].supplierName}}

      \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n\n 0; \">\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n
      CompanyFormLast Approved FormPending Approval Form
      \n
      \n {{ supplier.supplierName }}\n
      \n
      \n
      \n {{ form.formName }}\n
      \n
      \n
      \n
        \n
      • \n Version:\n \n {{ form.lastApprovedFormData?.displayVersion }}\n \n
      • \n
      • \n Submit Date:\n \n {{ form.lastApprovedFormData?.fillDateTime | datetime }}\n \n
      • \n
      • \n Expiry:\n \n {{ form.lastApprovedFormData?.endDate | datetime }}\n \n
      • \n
      • \n {{ form.lastApprovedFormData?.status | formDataStatus }}\n by:\n {{ form.lastApprovedFormData?.approveRejectByUserFullName }}\n ({{ form.lastApprovedFormData?.approveRejectDateTime | datetime }})\n \n
      • \n
      \n \n
      \n
      \n
      \n
        \n
      • \n Version:\n \n {{ form.pendingFormData?.displayVersion }}\n \n
      • \n
      • \n Submit Date:\n \n {{ form.pendingFormData?.fillDateTime | datetime }}\n \n
      • \n
      • \n Expiry:\n \n {{ form.pendingFormData?.endDate | datetime }}\n \n
      • \n
      • \n {{ form.pendingFormData?.status | formDataStatus }}\n\n
      • \n
      \n \n
      \n
      \n \n\n \n
      \n\n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n
      \n
      \n\n\n\n \n\n \n\n\n\n \n\n\n\n
      \n \n \n
      \n
      ","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from \"@angular/router\";\nimport { SupplierFormService } from \"../../../services/supplier-form.service\";\nimport { SupplierFormViewModel, SupplierViewModel } from \"../../../models/supplier-form/supplier-forms-view-mode\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { FormDataStatus } from 'src/app/enums/form-data-status';\nimport { FormType } from \"../../../enums/form-type\";\nimport { FormDataRendererComponent } from \"../../form-manage/form-data-renderer/form-data-renderer.component\";\nimport { FullFilledFormInfoViewModel } from \"../../../models/filled-form-info-view-model\";\nimport { BsModalService } from \"ngx-bootstrap/modal\";\n\n@Component({\n selector: 'obc-supplier-anonymous-forms',\n templateUrl: './supplier-anonymous-forms.component.html',\n styleUrls: ['./supplier-anonymous-forms.component.scss']\n})\nexport class SupplierAnonymousFormsComponent implements OnInit {\n\n hashLink: string;\n suppliers: SupplierViewModel[];\n supplier: SupplierViewModel;\n FormDataStatus = FormDataStatus;\n selectedForm: SupplierFormViewModel;\n FormType = FormType;\n inProgress: boolean;\n selectedFormDataId: number;\n selectedFormIdToViewHistory: number;\n bsModalRefRenameDOT: any = null;\n\n @ViewChild(\"formDataRenderer\") public formDataRenderer: FormDataRendererComponent;\n\n constructor(private route: ActivatedRoute,\n private bsModalService: BsModalService,\n private supplierFormService: SupplierFormService,\n private modalService: ModalService\n ) {}\n\n ngOnInit() {\n this.route.params.subscribe(res => {\n this.hashLink = res[\"hashlink\"];\n \n this.getForms();\n })\n }\n\n getForms() {\n\n if (this.hashLink?.length)\n this.supplierFormService.getAnonymousForms(this.hashLink)\n .subscribe(res => {\n this.suppliers = [res];\n console.log(res);\n }, err => {\n this.modalService.error(err);\n });\n else\n this.supplierFormService.getSupplierForms()\n .subscribe(res => {\n this.suppliers = res;\n console.log(res);\n }, err => {\n this.modalService.error(err);\n });\n }\n\n get isSupplierUser() {\n return this.hashLink?.length > 0;\n }\n\n onFillForm(form, template: any, supplier: SupplierViewModel) {\n this.supplier = supplier;\n this.selectedForm = form;\n this.modalService.show(template)\n }\n\n onViewForm(template, formData: FullFilledFormInfoViewModel) {\n this.selectedFormDataId = formData.formDataId;\n this.modalService.show(template, \"modal-lg\");\n }\n\n displayHistory(form: SupplierFormViewModel, template: any, supplier: SupplierViewModel) {\n this.supplier = supplier;\n this.selectedFormIdToViewHistory = form.formId;\n this.bsModalRefRenameDOT = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: false,\n })\n }\n}\n","\n
      \n \n
      \n
      \n \n\n
      \n
      \n
      \n
      Link {{supplierName}} to {{hostCompanyTitle}}
      \n
      \n
      \n
      \n
      \n\n
      \n \n \n
      \n\n
      \n
      \n\n \n\n
      \n\n
      \n \n\n \n \n
      \n\n \n\n
      \n You are not a 1Breadcrumb member. But you can create a new company and join\n
      \n\n \n
      \n Please select a company or create a new one\n \n Please create a new company\n \n
      \n\n \n
      \n \n
      \n
      \n
      \n\n
      \n \n
      \n\n \n \n\n
      \n
      \n \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n Activation token will be sent to {{mobileNumber | mobile}}\n
      \n \n
      \n\n\n
      \n Please enter the token you received on {{mobileNumber | mobile}}\n
      \n \n \n
      \n
      \n Haven't received the SMS yet?\n
      \n
      Please wait\n ({{timeLeft}})
      \n Go back\n
      \n
      \n\n\n
      \n
      \n \n User Info\n \n
      \n
      \n
      Please fill in the information required below
      \n\n \n
      \n
      \n + {{ newCompanyMobileCountryCodeDisplay }}\n
      \n
      \n {{ newCompanyMobileDisplay }}\n
      \n
      \n\n \n \n\n \n \n\n
      \n
      \n
      \n
      \n \n Create a new company in 1Breadcrumb\n \n
      \n
      \n
      Please enter company information
      \n\n \n \n\n \n
      \n
      \n
      \n \n \n \n \n \n
      \n
      \n
      \n\n
      \n
      \n \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n  \n
      \n
      \n

      \n You have succesfully linked {{supplierName}} to {{this.hostCompanyTitle}}.\n

      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n
       
      \n
      \n

      \n You have successfully created {{this.newCompanyTitle?.value != null ?this.newCompanyTitle?.value :\n this.supplierName}} and linked\n this to\n {{this.hostCompanyTitle}}.\n

      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, Validators } from \"@angular/forms\";\nimport {\n JoinSupplierCompanyInfo, JoinSupplierInfo,\n JoinSupplierRequestModel,\n} from \"../../models/link_to_company_request_model\";\nimport { finalize } from \"rxjs/operators\";\nimport { CompanySupplierService } from \"../../services/company-supplier.service\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { ModalService } from \"../../services/modal.service\";\nimport { UserService } from \"../../services/user.service\";\nimport { UserInfoViewModel } from \"../../models/user-info-viewmodel\";\nimport { Timezone } from \"../../models/time-zone\";\nimport { CountryService } from \"../../services/country.service\";\nimport { LayoutService } from \"../../services/layout.service\";\n\n@Component({\n selector: 'obc-supplier-join-to-company',\n templateUrl: './supplier-join-to-company.component.html',\n styleUrls: ['./supplier-join-to-company.component.scss']\n})\nexport class SupplierJoinToCompanyComponent implements OnInit {\n\n @ViewChild('successLinkToCompanyMessage') successLinkToCompanyMessage: any;\n @ViewChild('successLinkToNewCompany') successLinkToNewCompany: any;\n\n smsToken: FormControl = new FormControl(null, [\n Validators.required,\n Validators.minLength(5),\n Validators.maxLength(8),\n ]);\n urlToken: string;\n inProgress: boolean = true;\n\n companies: Record = {};\n showFirstPanel: boolean = true;\n disableGoBackLink: boolean = true;\n\n get hasAnyCompany() {\n return this.companies != null && Object.keys(this.companies).length > 0;\n }\n\n joinSupplierInfo: JoinSupplierInfo;\n isValidatedSmsToken = false;\n\n get hostCompanyTitle() { return this.joinSupplierInfo?.companyTitle; }\n get supplierName() { return this.joinSupplierInfo?.supplierName; }\n get mobileNumber() { return this.joinSupplierInfo?.mobileNumber; }\n\n displayInfo: UserInfoViewModel = null;\n isCompanyOwner: boolean = false\n\n selectedCompany: FormControl = new FormControl();\n timezones: Timezone[] = null;\n\n newCompanyTitle: FormControl = new FormControl(null, [\n Validators.required,\n Validators.minLength(3)\n ]);\n newCompanyTimeZoneId: FormControl = new FormControl(null, [Validators.required]);\n newCompanyOwnerMobile: FormControl = new FormControl(null, [\n Validators.required,\n Validators.maxLength(15),\n Validators.minLength(10)\n ]);\n newCompanyOwnerFirstName: FormControl = new FormControl(null, [\n Validators.required,\n Validators.minLength(2),\n ]);\n newCompanyOwnerLastName: FormControl = new FormControl(null, [Validators.required]);\n newCompanyMobileCountryCodeDisplay: string;\n newCompanyMobileDisplay: string;\n\n isPageFullyLoaded: boolean = false;\n\n loginStateNotAMember: boolean = false;\n\n currentTimeZone: string;\n\n constructor(\n private companySupplierService: CompanySupplierService,\n private route: ActivatedRoute,\n private router: Router,\n private modalService: ModalService,\n private userService: UserService,\n private countryService: CountryService,\n private layoutService: LayoutService\n ) {\n }\n\n ngOnInit(): void {\n this.layoutService.closeSideBar();\n\n try {\n this.currentTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (e) {\n }\n\n this.route.params.subscribe((params: Params) => {\n this.urlToken = params['token'] ? params['token'] : null;\n\n this.getjoinInfo();\n this.userService.initUserInfo();\n\n this.userService.info.subscribe(res => {\n this.displayInfo = res;\n\n this.updateSelectedCompany();\n\n\n setTimeout(() => {\n this.inProgress = false;\n this.isPageFullyLoaded = true;\n }, 1000);\n });\n\n this.countryService\n .getTimeZones()\n .subscribe((res) => {\n this.timezones = res;\n this.timezones.forEach((value) => {\n if (value.name == this.currentTimeZone) {\n this.newCompanyTimeZoneId.setValue(value.id);\n }\n })\n });\n });\n\n }\n\n getjoinInfo() {\n this.companySupplierService.getjoinInfo(this.urlToken)\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.joinSupplierInfo = res;\n\n if (this.joinSupplierInfo == null || !this.isValidatedSmsToken)\n this.showFirstPanel = true;\n\n }, _ => {\n this.modalService.error(\"Get information about join to company Failed. Please make sure your link is correct.\");\n });\n }\n\n loginState(result?: number) {\n if (result != null) {\n if (result['state'] == 0) {\n this.loginStateNotAMember = true;\n this.newCompanyOwnerMobile.setValue(result['country'] + result['mobile']);\n this.newCompanyMobileDisplay = result['mobile'];\n this.newCompanyMobileCountryCodeDisplay = result['country'];\n }\n } else {\n this.userService.initUserInfo();\n this.validateToken();\n }\n }\n\n\n isSMSTokenEntered() {\n return this.smsToken.valid;\n }\n\n validateToken() {\n this.inProgress = true;\n this.companySupplierService.validateJoinLink(this.urlToken, this.smsToken.value)\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n this.joinSupplierInfo = res;\n this.companies = res.companies ?? {};\n this.updateSelectedCompany();\n this.isValidatedSmsToken = true;\n }, _ => {\n this.modalService.error(\"Verification Failed. Please make sure you entered the correct SMS token\");\n });\n }\n updateSelectedCompany() {\n if (this.displayInfo == null || this.isEmptyObject(this.companies)) {\n this.selectedCompany.setValue(-1);\n this.newCompanyTitle.setValue(this.supplierName);\n } else {\n let firstCompanyId = Object.keys(this.companies)[0];\n this.selectedCompany.setValue(firstCompanyId);\n }\n }\n\n validateNewCompanyFields() {\n return (\n this.newCompanyTitle.valid\n && this.newCompanyTimeZoneId.valid\n ) && (\n (\n this.displayInfo == null &&\n this.newCompanyOwnerFirstName.valid &&\n this.newCompanyOwnerLastName.valid &&\n this.newCompanyOwnerMobile.valid\n ) || this.displayInfo != null\n );\n }\n\n\n sendJoinRequest() {\n let newCompanyMode = this.selectedCompany?.value == -1;\n let model = {\n token: this.urlToken,\n smsToken: this.smsToken?.value ?? '',\n linkToCompanyId: this.selectedCompany?.value,\n } as JoinSupplierRequestModel;\n if (newCompanyMode) {\n if (!this.validateNewCompanyFields())\n return;\n\n model['linkToCompany'] = {\n timeZoneId: this.newCompanyTimeZoneId?.value,\n title: this.newCompanyTitle?.value,\n } as JoinSupplierCompanyInfo;\n\n if (this.displayInfo == null) {\n model['linkToCompany']['ownerFirstName'] = this.newCompanyOwnerFirstName.value;\n model['linkToCompany']['ownerLastName'] = this.newCompanyOwnerLastName.value;\n model['linkToCompany']['ownerMobileNumber'] = this.newCompanyOwnerMobile.value;\n }\n\n model['linkToCompanyId'] = null;\n }\n\n this.companySupplierService.joinSupplier(model)\n .pipe((finalize(() => this.inProgress = false)))\n .subscribe(res => {\n if (res) {\n let createdCompanyId = +res;\n let msgModal = null;\n if (newCompanyMode == false)\n msgModal = this.successLinkToCompanyMessage;\n else {\n msgModal = this.successLinkToNewCompany;\n }\n\n this.modalService.show(msgModal).subscribe(_ => {\n if (this.displayInfo == null || this.displayInfo?.currentCompanyId == createdCompanyId) {\n this.router.navigate(['/']);\n }\n else {\n this.userService.changeCompany(createdCompanyId).subscribe(_ => this.router.navigate(['/']));\n }\n });\n\n } else {\n this.modalService.error(\"Join to company failed\");\n }\n }, _ => {\n this.modalService.error(\"Join to company failed\");\n });\n }\n\n closeModal() {\n this.modalService.hide();\n }\n\n isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n }\n\n\n onSendSMS() {\n this.inProgress = true;\n if (!this.mobileNumber) {\n this.modalService.error(\"Please check supplier mobile number!\");\n return;\n }\n this.companySupplierService.sendSMSSupplierActivationToken(this.urlToken)\n .subscribe(result => {\n this.inProgress = false;\n if (result) {\n this.showFirstPanel = false;\n this.disableGoBackLink = true;\n this.timeLeft = 60;\n this.startTimer();\n }\n else {\n this.modalService.warn('', 'Send sms failed!');\n }\n }, err => {\n this.modalService.error(err, \"Unable to send sms\");\n }, () => {\n this.inProgress = false;\n });\n }\n\n timeLeft: number = 60;\n interval;\n\n startTimer() {\n this.interval = setInterval(() => {\n if (this.timeLeft > 0) {\n this.timeLeft--;\n } else {\n this.pauseTimer();\n }\n }, 1000)\n }\n\n pauseTimer() {\n clearInterval(this.interval);\n this.disableGoBackLink = false;\n }\n\n backToFirst() {\n if (!this.disableGoBackLink) {\n this.pauseTimer();\n this.showFirstPanel = true;\n this.smsToken= new FormControl(null, [\n Validators.required,\n Validators.minLength(5),\n Validators.maxLength(8),\n ]);\n }\n }\n\n}\n","export enum SecurityLogType {\n ResetSiteInductionStatus = 0,\n CancelSupplierLinking = 1,\n ResetAttendanceStatus = 2,\n ResetSupplierFormStatus = 3,\n ResetPermitStatus = 4,\n ResetSiteAssetStatus = 5,\n ResetSiteAssetOperatorStatus = 6,\n DeleteSiteSupplierDocumentVersion = 7,\n SiteAlert = 8,\n ChangeMobileNumber = 9,\n DeleteSiteSupplierDocumentType = 10,\n UpdateProcoreIntegartionsConfig = 11,\n SiteUpdates = 12,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { throwError } from 'rxjs';\nimport { SecurityLogDetailsViewModel, SecurityLogQuery, SecurityLogViewModel } from '../view-models/security-log-view-model';\nimport { PagingViewModel } from '../models/site-list-paging-view-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SecurityLogService {\n\n constructor(private http: HttpClient) { }\n\n public report(model: SecurityLogQuery): Observable> {\n return this.http.post>(`/api/securitylog/report`, model)\n .pipe(catchError((error) => throwError(error)))\n }\n\n public systemReport(model: SecurityLogQuery): Observable> {\n return this.http.post>(`/api/securitylog/system-report`, model)\n .pipe(catchError((error) => throwError(error)))\n }\n\n getLogDetails(id: number): Observable {\n return this.http.get(`/api/securitylog/details/${id}`)\n .pipe(catchError((error) => throwError(error)))\n }\n\n getSystemLogDetails(id: number): Observable {\n return this.http.get(`/api/securitylog/system-details/${id}`)\n .pipe(catchError((error) => throwError(error)))\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SecurityLogType } from '../enums/security-log-type.enum';\n\n@Pipe({\n name: 'securityLogType'\n})\nexport class SecurityLogTypePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == SecurityLogType.ResetSiteInductionStatus)\n return 'Reset Induction Status';\n if (value == SecurityLogType.CancelSupplierLinking)\n return 'Cancel Supplier Linking';\n if (value == SecurityLogType.ResetAttendanceStatus)\n return 'Reset Attendance Status';\n if (value == SecurityLogType.ResetSupplierFormStatus)\n return 'Reset Supplier Form Status';\n if (value == SecurityLogType.ResetPermitStatus)\n return 'Reset Permit Status';\n if (value == SecurityLogType.ResetSiteAssetStatus)\n return 'Reset Site Asset Status';\n if (value == SecurityLogType.ResetSiteAssetOperatorStatus)\n return 'Reset Site Asset Operator Status';\n if (value == SecurityLogType.DeleteSiteSupplierDocumentVersion)\n return 'Delete Supplier Document Version';\n if (value == SecurityLogType.SiteAlert)\n return 'Site Alert';\n if (value == SecurityLogType.ChangeMobileNumber)\n return 'Change Mobile Number';\n if (value == SecurityLogType.DeleteSiteSupplierDocumentType)\n return 'Delete Site Supplier Document';\n if (value == SecurityLogType.UpdateProcoreIntegartionsConfig)\n return 'Update Procore Integration Configs';\n if (value == SecurityLogType.SiteUpdates)\n return 'Update Site Settings';\n\n return value?.toString() ?? 'Unknown';\n }\n\n}\n","
      \n
      \n
      \n \n
      Audit Logs
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n \n \n \n \n
      \n
      \n
      \n
      \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n\n
      \n
      \n
      \n \n {{ totalRecords }} Record(s)\n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n 0\">\n \n \n \n \n \n \n \n \n \n \n\n
      Date/Time\n Type\n \n User\n \n Site Name\n \n
      \n {{item.dateTime | datetime}}\n \n {{ item.type | securityLogType}}\n \n {{ item.userFullName }}\n ({{item.userMobile | mobile}})\n \n {{item.siteName}}\n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n Audit Log Details ({{ details.type | securityLogType}})\n
      \n
      \n
      \n
      \n
      \n DateTime: {{details.dateTime | datetime}}\n
      \n
      \n User: {{ details.userFullName }}\n ({{details.userMobile | mobile}})\n
      \n
      \n
      \n
      \n IP: {{details.ip}}\n
      \n
      \n Browser: \n 30\"\n title=\"{{details.userAgent}}\">{{details.userAgent | slice:0:30}}...\n {{details.userAgent}}\n \n
      \n
      \n
      \n
      \n Site Name: {{details.siteName}}\n
      \n
      \n
      \n
      \n
        \n
      • \n {{item.title}}:\n \n \n {{ item.dateTime | datetime }}\n {{ item.value ? item.value : '-' }}\n \n \n
      • \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable } from 'rxjs';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { SecurityLogType } from 'src/app/enums/security-log-type.enum';\nimport { PaginationInfo } from 'src/app/models/pagination-info';\nimport { PagingViewModel } from 'src/app/models/site-list-paging-view-model';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SecurityLogService } from 'src/app/services/security-log-service.service';\nimport { SecurityLogDetailsViewModel, SecurityLogQuery, SecurityLogViewModel } from 'src/app/view-models/security-log-view-model';\n\n@Component({\n selector: 'obc-security-log-report',\n templateUrl: './security-log-report.component.html',\n styleUrls: ['./security-log-report.component.scss']\n})\nexport class SecurityLogReportComponent implements OnInit {\n DatetimePickerMode = DatetimePickerMode;\n inProgress: boolean = false;\n selectedEntityType: SecurityLogType = null;\n SecurityLogType = SecurityLogType;\n startDate: Date;\n endDate: Date;\n\n siteId?: number = null;\n\n list: SecurityLogViewModel[];\n totalRecords: number;\n\n pageNumber: number = 0;\n pageSize: number = 30;\n details: SecurityLogDetailsViewModel;\n mode: string;\n\n constructor(\n private securityLogService: SecurityLogService,\n private layoutService: LayoutService,\n private modalService: ModalService,\n private route: ActivatedRoute,\n private toastr: ToastrService) { }\n\n ngOnInit(): void {\n this.layoutService.header = \"Audit Logs\";\n\n this.route.params.subscribe((res: Params) => {\n try {\n if (res['mode'] == \"system\")\n this.mode = \"system\";\n else\n this.mode = \"company\";\n } catch (error) {\n this.mode = \"company\";\n }\n this.loadReport();\n });\n }\n\n loadReport() {\n this.inProgress = true;\n\n let request: Observable>;\n if (this.mode == \"company\") {\n request = this.securityLogService.report({\n type: this.selectedEntityType,\n startDate: this.startDate,\n endDate: this.endDate,\n siteId: this.siteId,\n pagingInfo: { pageNumber: this.pageNumber, pageSize: this.pageSize, }\n } as SecurityLogQuery);\n }\n else if (this.mode == \"system\") {\n request = this.securityLogService.systemReport({\n type: this.selectedEntityType,\n startDate: this.startDate,\n endDate: this.endDate,\n siteId: this.siteId,\n pagingInfo: { pageNumber: this.pageNumber, pageSize: this.pageSize, }\n } as SecurityLogQuery);\n }\n\n request.subscribe(res => {\n this.inProgress = false;\n this.list = res.data;\n this.totalRecords = res.totalCount;\n });\n }\n\n onPageChange(paginationInfo: PaginationInfo) {\n this.pageSize = paginationInfo.pageSize;\n this.pageNumber = paginationInfo.pageNumber;\n this.loadReport();\n }\n\n showDetails(item: SecurityLogViewModel, template: any) {\n this.inProgress = true;\n\n let request: Observable;\n if (this.mode == \"company\") {\n request = this.securityLogService.getLogDetails(item.id);\n }\n else if (this.mode == \"system\") {\n request = this.securityLogService.getSystemLogDetails(item.id);\n }\n\n request.subscribe(res => {\n this.inProgress = false;\n this.details = res;\n if (this.details)\n this.modalService.show(template, 'modal-lg');\n else\n this.toastr.error('Access denied!');\n });\n }\n\n onSiteIdSelect(siteId: number) {\n this.siteId = siteId;\n }\n\n}\n\n","export enum AccessControlUnitGateStatus {\n Open = 1,\n Close = 2\n}\n","export enum AccessControlUnitGateType {\n Entry = 1,\n Exit = 2,\n Evacuation = 3\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError } from 'rxjs/operators';\nimport { AccessControlUnitEvacuationStatusModel } from '../models/access-control-unit-evacuation-status-model';\nimport { AccessControlUnitOpenCloseEvacuationModel } from '../models/access-control-unit-open-close-model';\nimport { AccessControlUnitGateStatusViewModel } from '../models/access-unit-control-gate-status-view-model';\nimport { ErrorService } from './error.service';\nimport { CommandParamModel, BackhaulResponse } from '../models/manage_gates_viewmodel';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AccessControlUnitService {\n\n baseUrl = '/api/accessControlUnit';\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n public openGate(model: AccessControlUnitOpenCloseEvacuationModel) {\n return this._http.post(`${this.baseUrl}/open-gate`, model).pipe(catchError(this._errorService.handleError));\n }\n\n public getEvacMode(model: AccessControlUnitEvacuationStatusModel) {\n return this._http.post(`${this.baseUrl}/get-evac-mode`, model).pipe(catchError(this._errorService.handleError));\n }\n public setEvacMode(model: AccessControlUnitOpenCloseEvacuationModel) {\n return this._http.post(`${this.baseUrl}/set-evac-mode`, model).pipe(catchError(this._errorService.handleError));\n }\n public GetClientLogs(serial: string) {\n return this._http\n .get(`${this.baseUrl}/get-client-logs?serial=${serial}`)\n .pipe(catchError(this._errorService.handleError));\n }\n public toggle(model: CommandParamModel) {\n return this._http\n .post(`${this.baseUrl}/toggle`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","
      \n \n
      \n

      Access Control Unit

      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Display Name
      {{item.displayName}}\n \n \n \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { forkJoin } from 'rxjs';\nimport { AccessControlUnitGateStatus } from 'src/app/enums/access-control-unit-gate-status.enum';\nimport { AccessControlUnitGateType } from 'src/app/enums/access-control-unit-gate-type.enum';\nimport { AccessControlUnitOpenCloseEvacuationModel } from 'src/app/models/access-control-unit-open-close-model';\nimport { AccessControlUnitGateStatusViewModel } from 'src/app/models/access-unit-control-gate-status-view-model';\nimport { AccessControlUnitGateViewModel, SiteAccessControlUnitViewModel, SiteAccessControlViewModel } from 'src/app/models/site-access-control-unit-view-model';\nimport { AccessControlUnitService } from 'src/app/services/access-control-unit.service';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteService } from 'src/app/services/site.service';\n\n@Component({\n selector: 'obc-site-access-control-unit-manual',\n templateUrl: './site-access-control-unit-manual.component.html',\n styleUrls: ['./site-access-control-unit-manual.component.scss']\n})\nexport class SiteAccessControlUnitManualComponent implements OnInit {\n\n inProgress = false;\n @ViewChild('select') select: NgSelectComponent\n constructor(private layoutService: LayoutService, private siteService: SiteService, private modalService: ModalService, private accessControlUnitService: AccessControlUnitService) { }\n\n siteAccessControlUnits: SiteAccessControlViewModel[]\n selectedSiteAccessControlUnit: SiteAccessControlViewModel\n\n formControl: FormControl\n\n AccessControlUnitGateType = AccessControlUnitGateType\n AccessControlUnitGateStatus = AccessControlUnitGateStatus\n ngOnInit(): void {\n this.layoutService.header = 'Access Control Unit'\n this.formControl = new FormControl();\n\n this.formControl.valueChanges.subscribe(value => {\n this.inProgress = true;\n this.selectedSiteAccessControlUnit = this.siteAccessControlUnits.find(item => item.siteId == value);\n var evacuationGateStatuses = forkJoin(this.selectedSiteAccessControlUnit.accessControlUnits\n .map(item => item.accessControlUnitGates\n .filter(acug => acug.accessControlUnitGateType == AccessControlUnitGateType.Evacuation)\n .map(res => this.accessControlUnitService.getEvacMode({ evacuationIdentifier: res.identifier, siteId: this.selectedSiteAccessControlUnit.siteId, controlUnitIdentifier: item.controlUnitIdentifier }))[0])\n .filter(item => item))\n let subscription = evacuationGateStatuses.subscribe((res: AccessControlUnitGateStatusViewModel[]) => {\n res.forEach(item => {\n var acus = this.selectedSiteAccessControlUnit.accessControlUnits.find(acu => acu.accessControlUnitGates.find(acug => acug.identifier == item.identifier))\n let acug = acus.accessControlUnitGates.find(acug => acug.identifier == item.identifier)\n acug.accessControlUnitGateStatus = item.accessControlUnitGateStatus\n })\n },\n err => {\n this.modalService.error('Can not get Evacuation Status!')\n subscription.unsubscribe();\n this.inProgress = false;\n },\n () => {\n subscription.unsubscribe();\n this.inProgress = false;\n })\n\n })\n this.getSiteAccessControlUnits();\n }\n\n getSiteAccessControlUnits() {\n let subscription = this.siteService.getSiteAccessControlUnits().subscribe(res => {\n this.siteAccessControlUnits = res;\n this.select.element.focus();\n }, err => {\n this.modalService.error('Can not get site with access control units!');\n this.inProgress = false;\n subscription.unsubscribe();\n },\n () => {\n this.inProgress = false;\n subscription.unsubscribe();\n })\n }\n openGate(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel) {\n return this.accessControlUnitService.openGate(this.getAccessControlUnitOpenCloseModel(accessControlUnit, gate));\n }\n setEvacMode(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel) {\n return this.accessControlUnitService.setEvacMode(this.getAccessControlUnitOpenCloseModelToToggleEvacMode(accessControlUnit, gate));\n }\n\n handleGate(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel) {\n let message = gate.accessControlUnitGateType == AccessControlUnitGateType.Entry ? 'open entry gate' :\n gate.accessControlUnitGateType == AccessControlUnitGateType.Exit ? 'open exit gate' :\n (`${gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Open ? 'disable' : 'enable'} evacuation mode`);\n let subscription = this.modalService.confirm(`Are you sure you want to ${message}?`).subscribe(confirmResult => {\n if (!confirmResult) return;\n this.inProgress = true;\n if (gate.accessControlUnitGateType == AccessControlUnitGateType.Evacuation) {\n this.handleSetEvac(accessControlUnit, gate);\n }\n else {\n this.handleOpenGate(accessControlUnit, gate);\n }\n }, err => { subscription.unsubscribe(); },\n () => { subscription.unsubscribe(); })\n }\n\n handleSetEvac(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel) {\n let subscription = this.setEvacMode(accessControlUnit, gate).subscribe(res => {\n if (res) {\n this.modalService.success(`Evacuation mode was successfully ${gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Open ? 'disabled' : 'enabled'}.`);\n if (gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Close) gate.accessControlUnitGateStatus = AccessControlUnitGateStatus.Open;\n else gate.accessControlUnitGateStatus = AccessControlUnitGateStatus.Close\n }\n else {\n this.modalService.error(`Couldn't ${gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Open ? 'disable' : 'enable'} evacuation mode!`);\n }\n },\n err => {\n this.modalService.error(`Couldn't ${gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Open ? 'disable' : 'enable'} evacuation mode!`);\n subscription.unsubscribe();\n this.inProgress = false;\n }, () => {\n subscription.unsubscribe();\n this.inProgress = false;\n })\n }\n handleOpenGate(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel) {\n let subscription = this.openGate(accessControlUnit, gate).subscribe(res => {\n if (res)\n this.modalService.success(`Gate opened successfully`);\n else\n this.modalService.error(`Can not open Gate`);\n },\n err => {\n this.modalService.error(`Can not open Gate`);\n subscription.unsubscribe();\n this.inProgress = false;\n }, () => {\n subscription.unsubscribe();\n this.inProgress = false;\n })\n }\n getAccessControlUnitOpenCloseModel(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel): AccessControlUnitOpenCloseEvacuationModel {\n return {\n siteId: this.selectedSiteAccessControlUnit.siteId,\n gate: gate,\n controlUnitIdentifier: accessControlUnit.controlUnitIdentifier\n }\n }\n getAccessControlUnitOpenCloseModelToToggleEvacMode(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel): AccessControlUnitOpenCloseEvacuationModel {\n return {\n siteId: this.selectedSiteAccessControlUnit.siteId,\n gate: {\n identifier: gate.identifier,\n accessControlUnitGateStatus: gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Close ? AccessControlUnitGateStatus.Open : AccessControlUnitGateStatus.Close,\n accessControlUnitGateType: gate.accessControlUnitGateType\n } as AccessControlUnitGateViewModel,\n controlUnitIdentifier: accessControlUnit.controlUnitIdentifier\n }\n }\n getGateButtonTitle(gate: AccessControlUnitGateViewModel) {\n let openClose = 'Open'\n let title = ''\n let gateMode = 'Gate'\n\n switch (gate.accessControlUnitGateType) {\n case AccessControlUnitGateType.Entry:\n title = 'Entry'\n break;\n case AccessControlUnitGateType.Exit:\n title = 'Exit';\n break;\n case AccessControlUnitGateType.Evacuation:\n title = 'Evacuation'\n openClose = gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Close ? 'Enable' : 'Disable'\n gateMode = 'Mode'\n break;\n }\n\n return `${openClose} ${title} ${gateMode}`\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { LayoutService } from \"../../../services/layout.service\";\n\n@Component({\n selector: 'obc-template-company-asset-manager',\n templateUrl: './template-company-asset-manager.component.html',\n styleUrls: ['./template-company-asset-manager.component.scss']\n})\nexport class TemplateCompanyAssetManagerComponent implements OnInit {\n\n constructor(private layoutService: LayoutService,) { }\n\n ngOnInit(): void {\n this.layoutService.header = \"Asset Manager\";\n }\n\n}\n","
      \n
      \n
      \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n","
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n\n \n
      Global Dynamic Fields
      \n \n
      \n
      \n
      \n Name\n
      \n
      \n Type\n
      \n
      \n Is Barcode?\n
      \n
      \n Use In Search?\n
      \n
      \n \n
      \n
      \n \n\n
      \n
      \n {{item.fieldName}}{{item.isLongText ? ' (Long Text)' : ''}}\n
      \n\n
      \n {{item.type | toolDynamicFieldType}}{{item.type == ToolDynamicFieldType.File ? \"(\" + (item.fileType| questionAnswerFileFormat) + \")\" : \"\"}}\n
      \n
      \n {{item.isBarcode ? \"Yes\" : \"No\"}}\n
      \n
      \n {{item.isSearchable ? \"Yes\" : \"No\"}}\n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n\n\n
      \n
      \n {{toolDynamicFieldformGroup.controls.usage.value == ToolDynamicFieldUsage.ToolAssign ? \"Add Tool Assign Field\" : \"Add Tool Field\"}}\n
      \n
      \n
      \n\n
      \n \n
      \n \n
      \n
      \n \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n\n
      \n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { finalize } from 'rxjs/operators';\nimport { GlobalItemType } from 'src/app/enums/global-item-type.enum';\nimport { ToolDynamicFieldType } from 'src/app/enums/tool-dynamic-field-type.enum';\nimport { ToolDynamicFieldUsage } from 'src/app/enums/tool-dynamic-field-usage.enum';\nimport { BaseToolDynamicFieldViewModel, ToolDynamicFieldModel, ToolDynamicFieldViewModel } from 'src/app/models/inventory/tool-dynamic-field-model';\nimport { QuestionAnswerFileFormat } from 'src/app/models/questionParameters/question-answer-file-format';\nimport { ManageInventoryService } from 'src/app/services/manage-inventory.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-manage-global-dynamic-fields',\n templateUrl: './manage-global-dynamic-fields.component.html',\n styleUrls: ['./manage-global-dynamic-fields.component.scss']\n})\nexport class ManageGlobalDynamicFieldsComponent implements OnInit {\n\n GlobalItemType = GlobalItemType;\n ToolDynamicFieldType = ToolDynamicFieldType;\n ToolDynamicFieldUsage = ToolDynamicFieldUsage;\n QuestionAnswerFileFormat = QuestionAnswerFileFormat;\n\n toolDynamicFieldformGroup = new FormGroup({\n fieldName: new FormControl(null, [Validators.required]),\n usage: new FormControl(null, [Validators.required]),\n type: new FormControl(0, [Validators.required]),\n fileType: new FormControl(0, [Validators.required]),\n isBarcode: new FormControl(false, []),\n isSearchable: new FormControl(false, []),\n isLongText: new FormControl(false, []),\n isGlobalField: new FormControl(false, [Validators.required]),\n });\n inProgress: boolean;\n handlerToolDynamicField: any;\n\n allDynamicFields: ToolDynamicFieldViewModel[];\n get toolDynamicFields(): ToolDynamicFieldViewModel[] {\n return this.allDynamicFields?.filter(x => x.usage == ToolDynamicFieldUsage.Tool);\n }\n get toolAssignDynamicFields(): ToolDynamicFieldViewModel[] {\n return this.allDynamicFields?.filter(x => x.usage == ToolDynamicFieldUsage.ToolAssign);\n }\n\n constructor(private manageInventoryService: ManageInventoryService,\n private bsModalService: BsModalService,\n private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n loadData() {\n this.inProgress = true;\n this.manageInventoryService.getGlobalToolDynamicFields()\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.allDynamicFields = res;\n }, err => {\n this.modalService.error(err)\n });\n }\n\n onOpenToolDynamicField(template: any, usage: ToolDynamicFieldUsage) {\n this.toolDynamicFieldformGroup.controls.usage.setValue(usage)\n this.handlerToolDynamicField = this.bsModalService.show(template);\n }\n\n onToolDynamicFieldTypeChange() {\n this.toolDynamicFieldformGroup.controls.isBarcode.setValue(false);\n this.toolDynamicFieldformGroup.controls.isSearchable.setValue(false);\n this.toolDynamicFieldformGroup.controls.isLongText.setValue(false);\n }\n get isAddToolDynamicFieldButtonDisabled() {\n return !this.toolDynamicFieldformGroup.valid;\n }\n\n onAddToolDynamicField() {\n if (this.validateInfos() == false)\n return;\n\n this.inProgress = true;\n\n var model = {\n fieldName: this.toolDynamicFieldformGroup.controls.fieldName.value,\n usage: this.toolDynamicFieldformGroup.controls.usage.value,\n type: this.toolDynamicFieldformGroup.controls.type.value,\n fileType: this.toolDynamicFieldformGroup.controls.fileType.value,\n isBarcode: this.toolDynamicFieldformGroup.controls.isBarcode.value,\n isSearchable: this.toolDynamicFieldformGroup.controls.isSearchable.value,\n isLongText: this.toolDynamicFieldformGroup.controls.isLongText.value,\n } as BaseToolDynamicFieldViewModel;\n\n this.manageInventoryService.addGlobalToolDynamicField(model)\n .pipe(finalize(() => {\n this.inProgress = false;\n this.resetForm();\n this.loadData();\n this.handlerToolDynamicField.hide();\n }))\n .subscribe(res => {\n }, err => {\n this.modalService.error(err)\n });\n }\n validateInfos() {\n var usage = this.toolDynamicFieldformGroup.controls.usage.value;\n var type = this.toolDynamicFieldformGroup.controls.type.value;\n var isBarcode = this.toolDynamicFieldformGroup.controls.isBarcode.value;\n var isSearchable = this.toolDynamicFieldformGroup.controls.isSearchable.value;\n var isLongText = this.toolDynamicFieldformGroup.controls.isLongText.value;\n\n if (isBarcode == true &&\n (type == ToolDynamicFieldType.File ||\n type == ToolDynamicFieldType.Date)) {\n this.modalService.error(\"This field cannot be a barcode\");\n return false;\n }\n if (isSearchable == true &&\n (usage == ToolDynamicFieldUsage.ToolAssign ||\n type == ToolDynamicFieldType.File ||\n type == ToolDynamicFieldType.Date)) {\n this.modalService.error(\"This field cannot be searchable\");\n return false;\n }\n if (isLongText == true &&\n type != ToolDynamicFieldType.Text) {\n this.modalService.error(\"This field cannot be a long text\");\n return false;\n }\n return true;\n }\n\n resetForm() {\n this.toolDynamicFieldformGroup.reset();\n this.toolDynamicFieldformGroup.controls.type.setValue(ToolDynamicFieldType.Text);\n this.toolDynamicFieldformGroup.controls.fileType.setValue(QuestionAnswerFileFormat.AnyFile);\n this.toolDynamicFieldformGroup.controls.isBarcode.setValue(false);\n this.toolDynamicFieldformGroup.controls.isSearchable.setValue(false);\n this.toolDynamicFieldformGroup.controls.isLongText.setValue(false);\n this.toolDynamicFieldformGroup.controls.isGlobalField.setValue(false);\n }\n\n onRemoveToolDynamicField(itemId: number, usage: ToolDynamicFieldUsage) {\n this.modalService.confirm('Are you sure you want to remove this global field?')\n .subscribe(confirm => {\n if (confirm) {\n this.inProgress = true;\n var me = this;\n this.manageInventoryService.removeGlobalToolDynamicField(itemId)\n .pipe(finalize(() => { me.inProgress = false }))\n .subscribe(res => {\n me.loadData();\n }, err => {\n me.modalService.error(err)\n });\n }\n });\n }\n\n\n}\n","
      \n \n
      \n
      \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n\n\n
      \n \n \n
      \n
      \n \n\n
      \n
      \n\n \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n\n\n
      \n
      \n \n
      \n
      \n
      \n\n\n
      \n
      \n \n \n
      \n
      \n \n \n \n \n
      \n
      \n \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport {\n NotificationSettingItemModel,\n NotificationSettingItemViewModel,\n NotificationSettingViewModel,\n UserNotificationSettingModel,\n UserNotificationSettingViewModel\n} from 'src/app/models/notifications/viewmodels';\nimport { NotificationService } from 'src/app/services/notification.service';\nimport { UserService } from 'src/app/services/user.service';\nimport { minNumber } from 'src/app/helpers/general-functions';\nimport { LayoutService } from \"../../services/layout.service\";\n\n@Component({\n selector: 'obc-notification-setting',\n templateUrl: './notification-setting.component.html',\n styleUrls: ['./notification-setting.component.scss']\n})\nexport class NotificationSettingComponent implements OnInit {\n inProgress: boolean;\n userNotificationSettings: UserNotificationSettingViewModel;\n\n\n currentCompanyUserNotificationSettings: NotificationSettingViewModel;\n personalUserNotificationSettings: NotificationSettingViewModel;\n\n _isPersonalMode: boolean = true;\n advancedIsOpen: Record> = {};\n\n get isPersonalMode(): boolean {\n return this._isPersonalMode;\n }\n\n set isPersonalMode(value: boolean) {\n this._isPersonalMode = value;\n this.currentSetting = null;\n setTimeout(() => {\n this.currentSetting = this._isPersonalMode == true ? this.personalUserNotificationSettings : this.currentCompanyUserNotificationSettings;\n }, 10);\n }\n\n currentSetting: NotificationSettingViewModel;\n\n constructor(private notificationService: NotificationService,\n private userService: UserService,\n private layoutService: LayoutService,) { }\n\n\n ngOnInit(): void {\n this.loadSettings();\n //of(this.personalUserNotificationSettings.items).pipe(grou)\n this.layoutService.header = \"Notification Settings\";\n }\n\n loadSettings() {\n this.inProgress = true;\n this.notificationService.getUserNotificationSettings()\n .subscribe(res => {\n this.inProgress = false;\n this.userNotificationSettings = res;\n this.currentCompanyUserNotificationSettings =\n this.userNotificationSettings?.notificationSettings.filter(x => x.companyId === this.userService.currentCompanyId)[0];\n this.personalUserNotificationSettings =\n this.userNotificationSettings?.notificationSettings.filter(x => x.companyId === null)[0];\n this.currentSetting = this.isPersonalMode == true ? this.personalUserNotificationSettings : this.currentCompanyUserNotificationSettings;\n });\n }\n\n getOrderOfGroupedNotificationItems(groupedItem: { key: string, value: NotificationSettingItemViewModel[] }) {\n return minNumber(groupedItem.value.map(i => i.order));\n }\n\n getAggregatedSetting(title: string, list: NotificationSettingItemViewModel[]) {\n var count = list.length;\n var enabledCount = list.filter(x => x.status.isEnabled).length;\n var pushEnabledCount = list.filter(x => x.status.isEnabled && x.status.isPushNotificationEnabled).length;\n var emailEnabledCount = list.filter(x => x.status.isEnabled && x.status.isEmailEnabled).length;\n\n var enabledPartialyEnabled = enabledCount > 0 && enabledCount < count;\n var pushEnabledPartialyEnabled = pushEnabledCount > 0 && pushEnabledCount < count;\n var emailEnabledPartialyEnabled = emailEnabledCount > 0 && emailEnabledCount < count;\n\n let result = {\n isAggregated: true,\n title: title,\n list: list,\n status:\n {\n isEnabled: enabledCount > 0,\n isPushNotificationEnabled: pushEnabledCount > 0,\n isEmailEnabled: emailEnabledCount > 0,\n isEnabledPartially: enabledPartialyEnabled,\n isPushNotificationEnabledPartially: pushEnabledPartialyEnabled,\n isEmailEnabledPartially: emailEnabledPartialyEnabled,\n }\n }\n return result;\n }\n\n setAdvancedIsOpen(groupTitle) {\n this.advancedIsOpen[groupTitle] = !this.advancedIsOpen[groupTitle];\n }\n\n onSettingEnabledChanged(setting: NotificationSettingItemViewModel, isEnabled: boolean) {\n if (setting.isAggregated) {\n setting.list.forEach(s => s.status.isEnabled = isEnabled);\n }\n else {\n setting.status.isEnabled = isEnabled;\n }\n }\n\n onSettingWayEnabledChanged(setting: NotificationSettingItemViewModel, isEnabled: boolean, isEmailWay: boolean) {\n if (setting.isAggregated) {\n if (isEmailWay)\n setting.list.forEach(s => s.status.isEmailEnabled = isEnabled);\n else\n setting.list.forEach(s => s.status.isPushNotificationEnabled = isEnabled);\n }\n else {\n if (isEmailWay)\n setting.status.isEmailEnabled = isEnabled;\n else\n setting.status.isPushNotificationEnabled = isEnabled;\n }\n }\n save() {\n this.inProgress = true;\n var data = this.currentSetting.items.map(s => { return { notificationType: s.notificationType, status: s.status } as NotificationSettingItemModel; });\n this.notificationService.updateSettings({ companyId: this.currentSetting.companyId, items: data } as UserNotificationSettingModel)\n .subscribe(res => {\n this.inProgress = false;\n this.loadSettings();\n });\n }\n\n}\n","
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { ProductPlanFeature } from 'src/app/enums/product-plan-feature.enum';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { Dictionary } from 'src/app/models/dictionaty';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-permission-container',\n templateUrl: './permission-container.component.html',\n styleUrls: ['./permission-container.component.scss']\n})\nexport class PermissionContainerComponent implements OnInit {\n PermissionTab = PermissionTab;\n showTabContentFlags: Dictionary = {};\n currentTab: number = 0;\n constructor(\n private userService: UserService,\n private layoutService: LayoutService) { }\n\n ngOnInit(): void {\n this.layoutService.header = \"Permissions\";\n\n if (this.isCompanyHost)\n this.setTabAsShown(PermissionTab.CompanyHost);\n else if (this.isSiteHost)\n this.setTabAsShown(PermissionTab.SiteHost);\n else if (this.isCompanyAdmin)\n this.setTabAsShown(PermissionTab.Frequents);\n else if (this.isCompanyAdmin)\n this.setTabAsShown(PermissionTab.TaggedList);\n }\n\n setTabAsShown(tab: PermissionTab) {\n this.currentTab = tab;\n this.showTabContentFlags[tab.toString()] = true;\n }\n\n displayTab(tab: PermissionTab) {\n return this.showTabContentFlags[tab.toString()] == true;\n }\n\n\n get isCompanyHost() {\n return this.userService.hasUserPermissionForCompany(UserPermission.CompanyHost);\n }\n get isSiteHost() {\n return this.userService.hasUserPermissionForCompany(UserPermission.SiteHost) && this.userService.hasCompanyFeature(ProductPlanFeature.SiteHosts);\n }\n\n get isCompanyAdmin() {\n return this.userService.isCompanyAdminUser();\n }\n\n get showTagedList() {\n return this.userService.hasUserPermissionForCompany(UserPermission.ManageViewTaggedUser) && this.userService.hasCompanyFeature(ProductPlanFeature.Automation);\n }\n\n}\n\nenum PermissionTab {\n CompanyHost,\n SiteHost,\n Frequents,\n Employees,\n TaggedList,\n Temporarily,\n Blocked,\n}","
      \n \n \n\n \n \n Split button!\n \n\n
      \n \n
      \n
      \n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'obc-dropdown-button',\n templateUrl: './dropdown-button.component.html',\n})\nexport class DropdownButtonComponent {}\n","export class EvacuationViewModel {\n evacuationId: number;\n createByUserFullName: string;\n createDateTime: Date;\n mode: EvacuationMode;\n status: EvacuationStatus;\n totalPresentPeople: number;\n totalPeople: number;\n}\nexport class EvacuationRepotViewModel {\n evacuationViewModels: EvacuationViewModel[];\n allowToCreateEmergencyEvacuation: boolean;\n allowToCreateDrillEvacuation: boolean;\n}\nexport class EvacuationPersonViewModel {\n evacuationPersonId: number;\n userId: number;\n siteAttendanceId: number;\n mobile: string;\n firstName: string;\n lastName: string;\n supplierName: string;\n isPresent: boolean;\n}\nexport class EvacuationItemViewModel {\n evacuationViewModel: EvacuationViewModel;\n evacuationPersonViewModels: EvacuationPersonViewModel[];\n allowToEditEvacuation: boolean;\n}\nexport class EvacuationLogViewModel {\n evacuationId: number;\n dateTime: Date;\n userFullName: string;\n userMobileNumber: string;\n logItemDescriptions: any[];\n}\nexport enum EvacuationMode {\n Drill = 0,\n Emergency = 1,\n}\nexport enum EvacuationStatus {\n Draft = 0,\n Finalized = 1,\n}\nexport class EvacuationReportQueryModel {\n siteId: number;\n mode: EvacuationMode;\n status: EvacuationStatus;\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { EvacuationMode } from '../models/evacuation/evacuation-viewmodels';\n\n@Pipe({\n name: 'evacuationMode'\n})\nexport class EvacuationModePipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == EvacuationMode.Drill) return 'Drill';\n if (value == EvacuationMode.Emergency) return 'Emergency';\n return value?.toString() ?? '?';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { EvacuationStatus } from '../models/evacuation/evacuation-viewmodels';\n\n@Pipe({\n name: 'evacuationStatus'\n})\nexport class EvacuationStatusPipe implements PipeTransform {\n\n transform(value: any): string {\n if (value == EvacuationStatus.Draft) return 'Draft';\n if (value == EvacuationStatus.Finalized) return 'Finalised';\n return value?.toString() ?? '?';\n }\n\n}\n","\n
      \n
      \n Evacuation\n \n
      \n
      \n
      \n \n {{evacuation.evacuationViewModel.mode\n |\n evacuationMode}}\n \n {{evacuation.evacuationViewModel.status\n | evacuationStatus}}\n \n {{evacuation.evacuationViewModel.createByUserFullName }}\n \n {{evacuation.evacuationViewModel.createDateTime | datetime}}\n \n {{evacuation.evacuationViewModel.totalPeople}}\n \n {{evacuation.evacuationViewModel.totalPresentPeople}}\n
      \n
      \n
      \n  \n \n\n
      \n
      \n
      \n
      \n
      \n
      0\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Evacuation People
      \n \n
      \n \n \n
      \n
      \n
      {{item.key== \"\" ? \"No Supplier\": item.key}}
      \n
      {{getPresentCount(item.value)}}/{{item.value?.length}}\n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      NameMobilePresent
      {{person.firstName}} {{person.lastName}}{{person.mobile | mobile}}\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n \n\n\n\n
      \n
      Evacuation Logs\n \n
      \n
      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      DateByOperations
      {{log.dateTime | datetime}}{{log.userFullName}} ({{log.userMobileNumber |\n mobile}})\n \n
        \n
      • \n {{l.key}}: {{l.value}}\n
      • \n
      \n
      \n
      \n
      \n
      \n","import { debounceTime, filter } from 'rxjs/operators';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { EvacuationItemViewModel, EvacuationLogViewModel, EvacuationMode, EvacuationPersonViewModel, EvacuationStatus } from 'src/app/models/evacuation/evacuation-viewmodels';\nimport { QuestionAnswerInputModel } from 'src/app/models/question-answer-inputmodel';\nimport { EvacuationService } from 'src/app/services/evacuation.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-evacuation-details',\n templateUrl: './evacuation-details.component.html',\n styleUrls: ['./evacuation-details.component.scss']\n})\nexport class EvacuationDetailsComponent implements OnInit {\n EvacuationMode = EvacuationMode;\n EvacuationStatus = EvacuationStatus;\n\n searchEvacuationPerson: EvacuationPersonViewModel[];\n evacuation: EvacuationItemViewModel;\n evacuationLogs: EvacuationLogViewModel[];\n _evacuationId: number;\n siteAttendanceToShowCheckIn: QuestionAnswerInputModel;\n inProgress: boolean;\n filterFormcontrol = new FormControl();\n\n get evacuationId(): number {\n return this._evacuationId;\n }\n\n @Input() set evacuationId(evacId: number) {\n if (this._evacuationId != evacId) {\n this._evacuationId = evacId;\n this.loadEvacuation();\n }\n }\n\n constructor(private evacuationService: EvacuationService, public modalService: ModalService) { }\n\n ngOnInit(): void {\n this.loadEvacuation();\n this.filterFormcontrol.valueChanges.pipe(\n debounceTime(500),\n ).subscribe((searchTerm) => {\n if (searchTerm == '')\n this.searchEvacuationPerson = this.evacuation.evacuationPersonViewModels;\n else {\n this.searchEvacuationPerson = this.evacuation.evacuationPersonViewModels.filter(x =>\n x.supplierName.toLowerCase().includes(searchTerm.toLowerCase()) ||\n x.firstName.toLowerCase().includes(searchTerm.toLowerCase()) ||\n x.lastName.toLowerCase().includes(searchTerm.toLowerCase()) ||\n x.mobile.toLowerCase().includes(searchTerm.toLowerCase()));\n }\n });\n }\n\n private loadEvacuation() {\n if (this.evacuationId) {\n this.inProgress = true;\n this.evacuationService.getEvacuation(this.evacuationId).subscribe(response => {\n this.inProgress = false;\n this.evacuation = response;\n this.searchEvacuationPerson = response.evacuationPersonViewModels;\n this.evacuation.evacuationPersonViewModels.forEach(item => {\n if (item.supplierName == null)\n item.supplierName = \"\";\n });\n });\n }\n }\n\n openPersonModal(person: EvacuationPersonViewModel, personDetailsTemplate) {\n this.siteAttendanceToShowCheckIn = { siteAttendanceId: person.siteAttendanceId } as QuestionAnswerInputModel;\n if (this.siteAttendanceToShowCheckIn)\n this.modalService.show(personDetailsTemplate, 'modal-lg');\n }\n\n openLogModal(logTemplate) {\n this.inProgress = true;\n this.evacuationService.getEvacuationLogs(this.evacuationId).subscribe(response => {\n this.inProgress = false;\n this.evacuationLogs = response;\n this.modalService.show(logTemplate, 'modal-lg');\n });\n }\n\n getPresentCount(items: EvacuationPersonViewModel[]): number {\n return items?.filter(x => x.isPresent == true).length;\n }\n\n advancedIsOpen: Record> = {};\n setAdvancedIsOpen(e, groupTitle) {\n if (e.target.id != \"btnViewCheckin\") {\n\n if (this.advancedIsOpen[groupTitle] == null)\n this.advancedIsOpen[groupTitle] = true;\n else\n this.advancedIsOpen[groupTitle] = !this.advancedIsOpen[groupTitle];\n const keys = (Object.keys(this.advancedIsOpen) as Array);\n keys.forEach(item => {\n if (item != groupTitle) {\n this.advancedIsOpen[item] = false;\n }\n })\n }\n }\n\n exportCsv() {\n this.evacuationService.exportEvacuationPeople(this.evacuationId);\n }\n\n}\n","
      \n
      \n
      \n \n
      \n
      \n
      Evacuation Report
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n \n {{result.evacuationViewModels?.length}} Records\n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n
      ModeCreated ByCreated AtTotal People CountConfirmed CountStatus
      {{item.mode | evacuationMode}}{{item.createByUserFullName}}{{item.createDateTime | datetime}}{{item.totalPeople}}{{item.totalPresentPeople}}{{item.status | evacuationStatus}}\n \n \n \n \n
      \n
      \n No records found.\n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n\n\n \n\n","import { Component, OnInit } from '@angular/core';\nimport { SiteActiveStatus } from 'src/app/enums/site-active-status.enum';\nimport {\n EvacuationReportQueryModel,\n EvacuationRepotViewModel,\n EvacuationViewModel\n} from 'src/app/models/evacuation/evacuation-viewmodels';\nimport { EvacuationService } from 'src/app/services/evacuation.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { LayoutService } from \"../../services/layout.service\";\nimport { UserInfoViewModel } from \"../../models/user-info-viewmodel\";\nimport { UserService } from \"../../services/user.service\";\nimport { ExportCsvOutputModel } from \"../../models/export-csv-output-model\";\nimport { CsvReportRequestModel } from \"../../models/csv-report-request-model\";\nimport { catchError } from \"rxjs/operators\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ErrorService } from \"../../services/error.service\";\n\n@Component({\n selector: 'obc-evacuation-report',\n templateUrl: './evacuation-report.component.html',\n styleUrls: ['./evacuation-report.component.scss'],\n})\nexport class EvacuationReportComponent implements OnInit {\n SiteActiveStatus = SiteActiveStatus;\n\n inProgress: boolean;\n siteId: number;\n result: EvacuationRepotViewModel;\n evacuationId: number;\n userInfo: UserInfoViewModel;\n constructor(\n private layoutService: LayoutService,\n private modalService: ModalService, private evacuationService: EvacuationService,\n private userService: UserService,\n private toastr: ToastrService,\n private _errorService: ErrorService,) { }\n\n ngOnInit(): void {\n this.layoutService.header = \"Evacuation Report\";\n this.loadEvacuations();\n this.userService.info.subscribe(res => {\n this.userInfo = res;\n });\n }\n\n private loadEvacuations() {\n if (this.siteId) {\n this.evacuationService.getEvacuations({ siteId: this.siteId } as EvacuationReportQueryModel)\n .subscribe(response => {\n this.result = response;\n });\n }\n }\n\n onChangeSelectedSite(siteId: number) {\n this.siteId = siteId;\n this.loadEvacuations();\n }\n\n openEvcuationModal(evacuation: EvacuationViewModel, evacuationDetailsTemplate: any) {\n this.evacuationId = evacuation.evacuationId;\n this.modalService.show(evacuationDetailsTemplate, 'modal-lg');\n }\n\n exportCsv(exportInfo: ExportCsvOutputModel) {\n this.evacuationService.exportEvacuations({\n csvEmail: exportInfo.email,\n csvTitle: exportInfo.title,\n requestParams: { siteId: this.siteId } as EvacuationReportQueryModel,\n } as CsvReportRequestModel)\n .pipe(catchError(this._errorService.handleError))\n .subscribe({\n next: (res) => {\n if (res && res.success) {\n this.toastr.info(res.message);\n }\n },\n });\n }\n\n exportPdf(evacuationId: number) {\n this.evacuationService.exportEvacuationPdf(evacuationId);\n }\n}\n","
      \n
      \n \n
      \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n
      VersionFilesReview FormStatusApprove/Reject By
      \n

      No Data

      \n
      {{item.version}}\n \n\n
      \n \n \n
      \n\n\n 0\"\n [siteSupplierDocumentVersionId]=\"item.siteSupplierDocumentVersionId\"\n [hasPermissionToAddSupplierDocumentComment]=\"false\"\n [supplierDocCommentAcknowledgementText]=\"supplierDocCommentAcknowledgementText\"\n [comments]=\"item.comments\"\n [classes]=\"'ml-2 btn-sm'\"\n [noIcon]=\"true\"\n >\n \n
      \n \n \n \n {{item.status | supplierDocumentTypeStatusTooltip}}\n {{item.approveDeclinerUserFullName}} {{item.approveDeclineDateTime | datetime}}
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n
        \n
        \n \n
        \n
      \n
      \n
      \n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport { finalize } from \"rxjs/operators\";\nimport { SiteSupplierService } from \"../../../services/site-supplier.service\";\nimport { SiteSupplierDocumentVersionInfo } from \"../../../models/supplier-document/site-supplier-models\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { BehaviorSubject } from 'rxjs';\nimport { FileModel } from 'src/app/models/supplier-document/site-supplier-document-type-view-model.model';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'obc-view-site-supplier-document-version-history',\n templateUrl: './view-site-supplier-document-version-history.component.html',\n styleUrls: ['./view-site-supplier-document-version-history.component.scss']\n})\nexport class ViewSiteSupplierDocumentVersionHistoryComponent implements OnInit {\n\n siteSupplierDocumentVersions: SiteSupplierDocumentVersionInfo[] = [];\n @Input() supplierDocCommentAcknowledgementText: string;\n\n @Input() siteSupplierDocumentTypeId: number;\n inProgress = false;\n selectedFormDataId :number;\n\n _siteSupplierHashlink = new BehaviorSubject(null);\n @Input() set siteSupplierHashlink(value: string) {\n if (value != this._siteSupplierHashlink.value && value != null) {\n this._siteSupplierHashlink.next(value);\n }\n }\n\n get isSupplierUser(){\n return this._siteSupplierHashlink.value?.length > 0;\n }\n\n constructor(\n private siteSupplierService: SiteSupplierService,\n private bsModalService : BsModalService,\n private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.inProgress = true;\n this.siteSupplierService.getSiteSupplierDocumentVersionList(this.siteSupplierDocumentTypeId, this._siteSupplierHashlink.value)\n .pipe(finalize(() => {\n this.inProgress = false;\n }))\n .subscribe(res => {\n this.supplierDocCommentAcknowledgementText = res.supplierDocCommentAcknowledgementText;\n this.siteSupplierDocumentVersions = res.siteSupplierDocumentVersionsInfo;\n }, err => {\n this.modalService.error(err, \"Unable to get information\");\n });\n }\n\n bsModalRef = null;\n selectedFiles : FileModel[] = [];\n prefix : string;\n onOpenFileViewer(files: FileModel[], template: any, prefix : string) {\n this.selectedFiles = files;\n this.prefix = prefix;\n this.bsModalRef = this.bsModalService.show(template, {\n class:\"modal-lg\",\n ignoreBackdropClick: false,\n })\n }\n\n getFilePrefix(type: SiteSupplierDocumentVersionInfo) {\n return `${type.supplierDocumentTypeName}-${type.version}`;\n }\n onViewFilledForm(template: any, formDataId: number) {\n this.selectedFormDataId = formDataId;\n this.bsModalRef = this.bsModalService.show(template, {\n class: \"modal-lg\",\n ignoreBackdropClick: false,\n })\n }\n}\n","
      \n
      \n
      \n
      Supplier Document Report
      \n
      \n
      \n
      \n
      \n \n Only Show Latest Version\n \n \n \n
      \n
      \n
      \n \n\n \n \n \n \n\n \n \n \n \n\n \n
      \n
      \n
      \n
      ","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { LayoutService } from \"../../../services/layout.service\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { GridColumn, GridConfig, GridTemplate, RequestPayloadModeEnum } from \"../../../models/grid/grid.config\";\nimport { AttendanceDocumentReportViewModel } from \"../../../models/attendance-document-report-viewmodel\";\nimport { Table } from \"../../../enums/table.enum\";\nimport { FilterType } from \"../../../enums/filter-type.enum\";\nimport { BsModalService } from \"ngx-bootstrap/modal\";\nimport { SupplierDocumentService } from \"../../../services/supplier-document.service\";\nimport { SiteSupplierDocumentStatus } from 'src/app/enums/site-supplier-document-status';\nimport { StorageService } from 'src/app/services/storage.service';\n\nconst lastVersionKey = \"onlyLatestVersion\"\n\n@Component({\n selector: 'obc-supplier-document-report',\n templateUrl: './supplier-document-report.component.html',\n styleUrls: ['./supplier-document-report.component.scss']\n})\nexport class SupplierDocumentReportComponent implements OnInit {\n SiteSupplierDocumentStatus = SiteSupplierDocumentStatus;\n onlyLatestVersion = true;\n \n constructor(\n private layoutService: LayoutService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private supplierDocumentService: SupplierDocumentService,\n private storageService: StorageService\n ) { }\n\n ngOnInit() {\n this.layoutService.header = `Supplier Document Report`;\n this.prepareGridConfig();\n var lastToggleResult = this.storageService.get(lastVersionKey);\n if(lastToggleResult){\n this.onlyLatestVersion = lastToggleResult === \"true\";\n }\n\n }\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n\n onActiveChanged(event:boolean) {\n this.fetchPendingList(event);\n this.storageService.set(lastVersionKey, event ? \"true\" : \"false\")\n }\n\n fetchPendingList(key: boolean) {\n this.gridConfig.initialFilters.find(filter => filter.key === \"displayLatestOnly\").value = key;\n this.grid?.loadData();\n }\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: '/api/SupplierDocument/site-supplier-document-report',\n tableType: Table.SWMSReport,\n displayGeneralSearch: true,\n generalSearchPlaceholder: \"Filter result by Site Name, Supplier Name, Version Date and Document Type\",\n csvReportUrl: '/api/SupplierDocument/site-supplier-document-report-export-csv-as-job',\n requestPayloadMode: RequestPayloadModeEnum.SeparateQueryKey,\n csvExportSubject: \"Supplier Document Report\",\n initialFilters:[{\n key: \"displayLatestOnly\",\n value: this.onlyLatestVersion,\n displayInFilterRenderer: false\n }]\n });\n this.gridColumns = [\n {\n name: \"Site\",\n key: \"siteName\",\n sortBy: \"site\",\n type: FilterType.Site,\n propertyNameInQuery: 'siteIdList',\n },\n {\n name: \"Supplier\",\n key: \"supplierName\",\n sortBy: \"supplier\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'supplierIdList',\n },\n {\n name: \"Document Title\",\n key: \"supplierDocumentTypeName\",\n sortBy: \"title\",\n type: FilterType.DocumentType,\n propertyNameInQuery: 'supplierIdList',\n enableFilter: false,\n },\n {\n name: \"Document Type\",\n key: \"documentKindName\",\n sortBy: \"documentKindId\",\n type: FilterType.SupplierDocumentKind,\n propertyNameInQuery: 'documentKindList',\n },\n {\n name: \"Date Submitted\",\n type: FilterType.DateTimeRange,\n key: \"registerDateTime\",\n propertyNameInQuery: 'submitDateRange',\n isArray: false,\n },\n {\n name: \"Version\",\n key: \"displayVersion\",\n sortBy: \"version\",\n propertyNameInQuery: 'statusList',\n enableFilter: false,\n },\n {\n name: \"Review Status\",\n type: FilterType.SiteSupplierDocumentVersionStatus,\n key: \"status\",\n sortBy: \"status\",\n propertyNameInQuery: 'statusList',\n },\n {\n name: \"Document History\",\n key: 'documentHistory',\n enableSort: false,\n enableFilter: false,\n visible: false,\n showAsColumn: false,\n displayInCheckBoxSettings: true,\n },\n {\n name: \"See Deactivated Sites\",\n key: 'includeDisableSites',\n enableSort: false,\n enableFilter: false,\n visible: false,\n showAsColumn: false,\n hasIncludeFilter: true,\n propertyNameInQuery: \"includeDisableSites\",\n displayInCheckBoxSettings: true,\n },\n {\n name: \"Expiration Date\",\n type: FilterType.DateTimeRange,\n key: \"expirationDate\",\n propertyNameInQuery: 'expirationDateRange',\n isArray: false,\n },\n {\n name: \"Details\",\n key: 'viewDetails',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails'),\n visible: true,\n }\n ];\n }\n\n data;\n\n openModal(template, data) {\n this.data = data;\n this.modalService.show(template, \"modal-lg\");\n }\n\n closeModal() {\n this.grid.loadData(0);\n }\n\n exportPdf(siteSupplierDocumentVersionId: number) {\n this.supplierDocumentService.exportDataAsPdf(siteSupplierDocumentVersionId);\n }\n\n siteSupplierDocumentTypeId = null;\n\n onViewVersions(template: any, siteSupplierDocumentTypeId: number) {\n this.siteSupplierDocumentTypeId = siteSupplierDocumentTypeId;\n this.bsModalService.show(template, {\n class: \"modal-lg\",\n })\n }\n\n}\n\n","
      \n
      \n
      \n
      Procore Sync Monitoring
      \n \n \n
      \n \n \n {{item?.companyTitle}} ({{item?.companyId}})\n \n \n
      \n
      \n Last Integration Start Date\n
      \n {{item?.procoreIntegrationStartDateTime | datetime}}\n (In Progress)\n
      \n
      \n
      \n Last Integration End Date\n
      \n {{item?.procoreIntegrationEndDateTime | datetime}}\n
      \n
      \n
      \n Last Integration Error Date\n
      \n {{item?.procoreIntegrationLastFailureDateTime | datetime}}\n ({{item?.procoreIntegrationFailureCount}})\n
      \n
      \n
      \n
      \n \n
      \n
      \n Last Integration Start Date\n
      \n {{item?.procoreExportFilesIntegrationStartDateTime | datetime}}\n (In\n Progress)\n
      \n
      \n
      \n Last Integration End Date\n
      \n {{item?.procoreExportFilesIntegrationEndDateTime | datetime}}\n
      \n
      \n
      \n Last Integration Error Date\n
      \n {{item?.procoreExportFilesIntegrationLastFailureDateTime | datetime}}\n ({{item?.procoreExportFilesIntegrationFailureCount}})\n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n \n
      \n
      \n \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { ProcoreSyncMonitoringReportViewModel } from 'src/app/models/procore-sync-monitoring-report-view-model';\n\n@Component({\n selector: 'obc-procore-sync-monitoring',\n templateUrl: './procore-sync-monitoring.component.html',\n styleUrls: ['./procore-sync-monitoring.component.scss']\n})\nexport class ProcoreSyncMonitoringComponent implements OnInit {\n constructor() { }\n\n ngOnInit(): void {\n this.prepareGridConfig();\n }\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: '/api/procore/procore-sync-monitoring-report',\n tableType: Table.ProcoreSyncMonitoringReport,\n displayGeneralSearch: true,\n displayQuestionsFilter: false,\n generalSearchPlaceholder: 'Filter result by Company Title, Connection Mode',\n csvReportUrl: '/api/procore/export-procore-sync-monitoring-report-csv',\n });\n this.gridColumns = [\n {\n name: \"Company Title\",\n key: \"companyTitles\",\n propertyNameInQuery: 'companyTitles',\n enableFilter:true,\n enableSort:true,\n sortBy:'companyTitle',\n type:FilterType.Text,\n gridTemplate: new GridTemplate().ComponentTemplateName('companyTitle').CsvFields([\n 'companyId',\n 'companyTitle',\n ]),\n },\n {\n name: \"Connection Mode\",\n key: \"procoreConnectionMode\",\n propertyNameInQuery: 'procoreConnectionMode',\n enableFilter:false,\n enableSort:true,\n sortBy:'procoreConnectionMode',\n type:FilterType.Text,\n },\n {\n name: \"Sync Status\",\n key: \"syncStatus\",\n enableSort:true,\n enableFilter:false,\n type: FilterType.DateTimeRange,\n sortBy:'procoreIntegrationStartDateTime',\n gridTemplate: new GridTemplate().ComponentTemplateName('syncStatus').CsvFields([\n 'procoreIntegrationStartDateTime',\n 'isProcoreIntegrationInProgress',\n 'procoreIntegrationEndDateTime',\n 'procoreIntegrationLastFailureDateTime',\n 'procoreIntegrationFailureCount',\n ])\n },\n {\n name: \"Export Files Sync Status\",\n key: \"syncFilesStatus\",\n enableFilter:false,\n enableSort:false,\n gridTemplate: new GridTemplate().ComponentTemplateName('syncFilesStatus').CsvFields([\n 'procoreExportFilesIntegrationStartDateTime',\n 'isProcoreExportFilesIntegrationInProgress',\n 'procoreExportFilesIntegrationEndDateTime',\n 'procoreExportFilesIntegrationLastFailureDateTime',\n 'procoreExportFilesIntegrationFailureCount',\n ])\n },\n {\n name: \"Import Sites\",\n key: \"importSites\",\n enableFilter:false,\n enableSort:false,\n gridTemplate: new GridTemplate().ComponentTemplateName('importSites').CsvFields([\n 'procoreImportSitesEnabled',\n 'procoreLastImportSites'\n ])\n },\n {\n name: \"Import Directories\",\n key: \"importDirectories\",\n enableFilter:false,\n enableSort:false,\n gridTemplate: new GridTemplate().ComponentTemplateName('importDirectories').CsvFields([\n 'procoreImportCompanyDirectoryEnabled',\n 'procoreLastImportCompanyDirectory',\n 'procoreImportProjectDirectoryEnabled',\n 'procoreLastImportProjectDirectory'\n ])\n },\n {\n name: \"Import Users\",\n key: \"importUsers\",\n enableFilter:false,\n enableSort:false,\n gridTemplate: new GridTemplate().ComponentTemplateName('importUsers').CsvFields([\n 'procoreImportUsersEnabled',\n 'procoreLastImportUsers'\n ]),\n },\n {\n name: \"Import Roles\",\n key: \"importRoles\",\n enableFilter:false,\n enableSort:false,\n gridTemplate: new GridTemplate().ComponentTemplateName('importRoles').CsvFields([\n 'procoreImportCompanyRolesEnabled',\n 'procoreImportCompanyRolesLastSyncDate',\n 'procoreImportProjectUserRolesEnabled',\n 'procoreImportProjectUserRolesLastSyncDate'\n ]),\n },\n {\n name: \"Export Checkins As\",\n key: \"exportCheckinsAs\",\n enableFilter:false,\n enableSort:false,\n gridTemplate: new GridTemplate().ComponentTemplateName('exportCheckinsAs').CsvFields([\n 'procoreExportSiteAttendanceAsTimeCardMode',\n 'procoreExportSiteAttendanceAsVisitorLogMode',\n 'procoreExportSiteAttendanceAsManpowerMode',\n 'procoreLastExportSiteAttendances'\n ]),\n },\n {\n name: \"Export Documents\",\n key: \"exportDocuments\",\n enableFilter:false,\n enableSort:false,\n gridTemplate: new GridTemplate().ComponentTemplateName('exportDocuments').CsvFields([\n 'procoreUploadSiteSupplierDocumentsEnabled',\n 'procoreLastUploadSiteSupplierDocuments',\n 'procoreUploadSiteSupplierDocumentVersionSignOffsEnabled',\n 'procoreLastUploadSiteSupplierDocumentVersionSignOffs',\n 'procoreUploadSiteInductionsEnabled',\n 'procoreLastUploadSiteInductions',\n 'procoreUploadPermitFormsEnabled',\n 'procoreLastUploadPermitForms',\n 'procoreUploadSiteAssetsFormEnabled',\n 'procoreLastUploadSiteAssetForms'\n ]),\n }\n ];\n }\n}\n","
      \n \n
      \n \n\n \n \n {{item.registeredClientViewModel?.registerTime|datetime}}\n \n\n \n \n {{item.siteAccessControlViewModel?.siteName}}\n \n\n \n \n
        \n
      • \n {{additionalInfo.key}}: {{additionalInfo.value}}\n
      • \n
      \n
      \n\n \n \n

      Last Sync: {{item?.registeredClientViewModel?.keyboardInputDeviceRefreshDateTime|datetime}}

      \n
        \n
      • \n {{keyboardInputDeviceDic.Dev}}: {{keyboardInputDeviceDic.DevPath}}\n
      • \n
      \n
      \n\n \n \n
      \n
      \n \n \n \n
      \n
      \n\n \n
      \n \n \n \n
      \n\n \n
      \n \n \n \n
      \n
      \n \n \n \n
      \n
      \n\n \n \n
      \n
      \n
      Client Logs ({{identifire}})
      \n
      \n
      \n
      \n
      \n \n\n \n \n \n \n\n \n \n
      \n
      \n
      Log.Model
      \n
      \n
      \n
      \n
      \n {{logModel|json}}\n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n","import { Component, OnInit } from '@angular/core';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { Table } from '../../../enums/table.enum';\nimport { ManageGatesViewModel, CommandParamModel } from '../../../models/manage_gates_viewmodel';\nimport * as _ from 'lodash';\nimport { FilterType } from '../../../enums/filter-type.enum';\nimport { AccessControlUnitService } from '../../../services/access-control-unit.service';\nimport { AccessControlUnitOpenCloseEvacuationModel } from '../../../models/access-control-unit-open-close-model';\nimport { AccessControlUnitGateViewModel, SiteAccessControlUnitViewModel } from '../../../models/site-access-control-unit-view-model';\nimport { AccessControlUnitGateStatus } from '../../../enums/access-control-unit-gate-status.enum';\nimport { AccessControlUnitGateType } from 'src/app/enums/access-control-unit-gate-type.enum';\nimport { ModalService } from '../../../services/modal.service';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({\n selector: 'obc-manage-gates',\n templateUrl: './manage-gates.component.html',\n styleUrls: ['./manage-gates.component.css']\n})\nexport class ManageGatesComponent implements OnInit {\n inProgress = false;\n logModel = \"\";\n identifire = \"\";\n toggleDocker = \"\";\n gridConfig: GridConfig = {} as GridConfig;\n gridColumns: GridColumn[];\n logGridConfig: GridConfig = {} as GridConfig;\n logGridColumns: GridColumn[];\n\n constructor(\n private layoutService: LayoutService,\n private accessControlUnitService: AccessControlUnitService,\n private modalService: ModalService,\n private toastr: ToastrService) { }\n\n ngOnInit() {\n this.layoutService.header = \"Manage Gates\";\n this.prepareGridConfig();\n }\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: '/api/AccessControlUnit/get-gate-list',\n tableType: Table.CardReport,\n });\n\n this.logGridConfig = new GridConfig({\n apiUrl: '/api/AccessControlUnit/get-client-logs',\n tableType: Table.CardReport,\n initialFilters: [{ key: \"serial\", value: \"\" }],\n });\n localStorage.setItem(\"items_per_page_manage-gates\", \"100\");\n\n this.gridColumns = [\n {\n name: \"Identifier\",\n key: \"identifier\",\n enableSort: false,\n enableFilter: false,\n },\n {\n name: \"Status\",\n key: \"isOnline\",\n displayFunction: (item) => item.isOnline ? \"Online\" : \"Offline\",\n enableSort: false,\n enableFilter: false,\n },\n {\n name: \"Company\",\n key: \"companyTitle\",\n enableSort: false,\n enableFilter: false,\n },\n {\n name: \"Site\",\n key: \"siteName\",\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('siteName'),\n },\n {\n name: \"RegisterTime\",\n key: \"registerTime\",\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('registerTime'),\n },\n {\n name: \"Additional Info\",\n key: 'additionalInfo',\n enableSort: false,\n enableFilter: false,\n type: FilterType.Template,\n gridTemplate: new GridTemplate().ComponentTemplateName('additionalInfo'),\n },\n {\n name: \"Keyboard Input Device\",\n key: \"keyboardInputDevices\",\n enableSort: false,\n enableFilter: false,\n type: FilterType.Template,\n gridTemplate: new GridTemplate().ComponentTemplateName('keyboardInputDevice'),\n },\n {\n name: \"Details\",\n key: \"Details\",\n enableSort: false,\n enableFilter: false,\n type: FilterType.Template,\n gridTemplate: new GridTemplate().ComponentTemplateName('toggle'),\n },\n ];\n this.logGridColumns = [\n {\n name: \"Caller\",\n key: \"caller\",\n enableSort: false,\n enableFilter: false,\n },\n {\n name: \"Timestamp\",\n key: \"timestamp\",\n type: FilterType.DateTimeRange,\n enableSort: false,\n enableFilter: false,\n },\n {\n name: \"Details\",\n key: \"Details\",\n enableSort: false,\n enableFilter: false,\n type: FilterType.Template,\n gridTemplate: new GridTemplate().ComponentTemplateName('showJson'),\n },\n ];\n }\n\n getGateButtonTitle(gate: AccessControlUnitGateViewModel) {\n let openClose = 'Open'\n let title = ''\n let gateMode = 'Gate'\n\n switch (gate.accessControlUnitGateType) {\n case AccessControlUnitGateType.Entry:\n title = 'Entry'\n break;\n case AccessControlUnitGateType.Exit:\n title = 'Exit';\n break;\n case AccessControlUnitGateType.Evacuation:\n title = 'Evacuation'\n openClose = gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Close ? 'Enable' : 'Disable'\n gateMode = 'Mode'\n break;\n }\n\n return `${openClose} ${title} ${gateMode}`\n }\n\n handleGate(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel, siteId: number) {\n let message = gate.accessControlUnitGateType == AccessControlUnitGateType.Entry ?\n 'open entry gate' :\n gate.accessControlUnitGateType == AccessControlUnitGateType.Exit ?\n 'open exit gate' :\n (`${gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Open ? 'disable' : 'enable'} evacuation mode`);\n\n let subscription = this.modalService.confirm(`Are you sure you want to ${message}?`)\n .subscribe(\n confirmResult => {\n if (!confirmResult)\n return;\n\n if (gate.accessControlUnitGateType == AccessControlUnitGateType.Evacuation) {\n this.handleSetEvac(accessControlUnit, gate, siteId);\n }\n else {\n this.handleOpenGate(accessControlUnit, gate, siteId);\n }\n }, err => { subscription.unsubscribe(); },\n () => { subscription.unsubscribe(); }\n )\n }\n\n handleSetEvac(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel, siteId: number) {\n this.inProgress = true;\n\n let subscription = this\n .setEvacMode(accessControlUnit, gate, siteId)\n .subscribe(res => {\n if (res) {\n this.toastr.success(`Evacuation mode was successfully ${gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Open ? 'disabled' : 'enabled'}.`);\n\n if (gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Close) gate.accessControlUnitGateStatus = AccessControlUnitGateStatus.Open;\n else gate.accessControlUnitGateStatus = AccessControlUnitGateStatus.Close\n }\n else {\n this.toastr.error(`Couldn't ${gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Open ? 'disable' : 'enable'} evacuation mode!`);\n }\n },\n err => {\n this.toastr.error(`Couldn't ${gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Open ? 'disable' : 'enable'} evacuation mode!`);\n subscription.unsubscribe();\n this.inProgress = false;\n }, () => {\n subscription.unsubscribe();\n this.inProgress = false;\n })\n }\n\n setEvacMode(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel, siteId: number) {\n return this.accessControlUnitService.setEvacMode(this.getAccessControlUnitOpenCloseModelToToggleEvacMode(accessControlUnit, gate, siteId));\n }\n\n getAccessControlUnitOpenCloseModelToToggleEvacMode(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel, siteId: number): AccessControlUnitOpenCloseEvacuationModel {\n return {\n siteId: siteId,//this.selectedSiteAccessControlUnit.siteId,\n gate: {\n identifier: gate.identifier,\n accessControlUnitGateStatus: gate.accessControlUnitGateStatus == AccessControlUnitGateStatus.Close ? AccessControlUnitGateStatus.Open : AccessControlUnitGateStatus.Close,\n accessControlUnitGateType: gate.accessControlUnitGateType\n } as AccessControlUnitGateViewModel,\n controlUnitIdentifier: accessControlUnit.controlUnitIdentifier\n }\n }\n\n handleOpenGate(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel, siteId: number) {\n this.inProgress = true;\n\n let subscription = this\n .openGate(accessControlUnit, gate, siteId)\n .subscribe(res => {\n if (res)\n this.toastr.success(`Gate opened successfully`);\n else\n this.toastr.error(`Can not open Gate`);\n },\n err => {\n this.toastr.error(`Can not open Gate`);\n subscription.unsubscribe();\n this.inProgress = false;\n }, () => {\n subscription.unsubscribe();\n this.inProgress = false;\n })\n }\n\n openGate(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel, siteId: number) {\n return this.accessControlUnitService.openGate(this.getAccessControlUnitOpenCloseModel(accessControlUnit, gate, siteId));\n }\n\n getAccessControlUnitOpenCloseModel(accessControlUnit: SiteAccessControlUnitViewModel, gate: AccessControlUnitGateViewModel, siteId: number): AccessControlUnitOpenCloseEvacuationModel {\n return {\n siteId: siteId,// this.selectedSiteAccessControlUnit.siteId,\n gate: gate,\n controlUnitIdentifier: accessControlUnit.controlUnitIdentifier\n }\n }\n\n showClientLogs(template, item: ManageGatesViewModel) {\n this.identifire = item.identifier;\n this.logGridConfig.initialFilters.filter(x => x.key == \"serial\")[0].value = item.registeredClientViewModel.serial;\n this.modalService.show(template, \"modal-xl\");\n }\n\n showLogModelJson(template, item) {\n this.logModel = item.model;\n this.modalService.show(template, \"bg-warning p-1 mt-5\");\n }\n\n toggle(item: ManageGatesViewModel) {\n if (!item.toggle) {\n this.toastr.error(\"Please enter command prompt...\")\n return\n }\n\n this.inProgress = true;\n\n let commandParamModel: CommandParamModel = {\n ControlUnitId: item.identifier,\n Command: `toggle ${item.toggle}`\n };\n\n let subscription = this\n .accessControlUnitService\n .toggle(commandParamModel)\n .subscribe(res => {\n if (res.success)\n this.toastr.success(`Toggled successfully`);\n else\n this.toastr.error(`Toggle Error: ${res.message}`);\n }, err => {\n this.toastr.error(`Toggle Error`);\n subscription.unsubscribe();\n this.inProgress = false;\n }, () => {\n subscription.unsubscribe();\n this.inProgress = false;\n })\n }\n}\n","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[componentLoader]'\n})\nexport class ComponentLoaderDirective {\n\n constructor(public viewContainerRef: ViewContainerRef) { }\n\n}","
      \n
      \n \n
      \n
      \n
      \n
      \n {{workflow?.displayName}} ( {{workflow?.currentActivity.title}} )\n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n {{d.title}}: {{d.value}}\n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      ","import { Component, EventEmitter, Input, OnInit, Output, Type, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { WORKFLOW_COMPONENT } from 'src/app/app.module';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { ComponentLoaderDirective } from '../ComponentLoaderDirective';\nimport { WorkflowService } from '../../services/workflow.service';\nimport { IWorkflowStep } from '../IWorkflowStep';\nimport { CommandView } from 'src/app/models/workflow/command-view';\nimport { ContinueWorkflowQueryViewModel, SaveStepViewModel } from 'src/app/models/workflow/continue-workflow-query-viewModel';\nimport { WorkflowInfoViewModel } from 'src/app/models/workflow/workflow-info-viewmodel';\nimport { finalize } from 'rxjs';\nimport { VariableDefinitionType, VariableValueDefinition } from 'src/app/models/workflow/variable-difinition';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { FormGroup } from '@angular/forms';\nimport { UserService } from 'src/app/services/user.service';\nimport { CompanyStatus } from 'src/app/enums/company-status.enum';\nimport { PortalDisplayMode } from 'src/app/enums/portal-display-mode.enum';\nimport { WorkflowVariableValue } from 'src/app/models/workflow/workflow-variable-value';\nimport { reject } from 'lodash';\nimport { DefaultWorkflowDisplayMode } from 'src/app/enums/constants';\nimport { FormService } from 'src/app/services/form.service';\n\n@Component({\n selector: 'obc-workflow-engine',\n templateUrl: './workflow-engine.component.html',\n styleUrls: ['./workflow-engine.component.scss']\n})\nexport class WorkflowEngineComponent implements OnInit {\n formSelected: boolean = false;\n @ViewChild(ComponentLoaderDirective, { static: true }) componentLoader!: ComponentLoaderDirective;\n\n @Input() workflowInstanceId: string;\n @Output() public workflowEningeModalHide = new EventEmitter();\n step: IWorkflowStep;\n workflow: WorkflowInfoViewModel;\n note: string;\n loadErrorMessage: string;\n hasError: boolean = false;\n backtopageParam: string;\n returnQueryParam: Params;\n inProgress: boolean = false;\n returnUrl: string = '';\n VariableDefinitionType = VariableDefinitionType;\n DatetimePickerMode = DatetimePickerMode;\n PortalDisplayModeEnum = PortalDisplayMode;\n\n portalDisplayMode: PortalDisplayMode = DefaultWorkflowDisplayMode;\n\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private workflowService: WorkflowService,\n private modalService: ModalService,\n private toastrService: ToastrService,\n private formService: FormService,\n private userService: UserService) {\n }\n\n handleParam(): Promise {\n return new Promise((resolve, reject) => {\n this.route.queryParams.subscribe((param) => {\n this.returnUrl = param?.returnPath\n this.route.params.subscribe((param) => {\n resolve(param['id']);\n });\n });\n\n });\n }\n\n public getComponentByName(componentName: string): Component {\n let foundComponent = WORKFLOW_COMPONENT[componentName];\n return foundComponent as Component;\n }\n\n ngOnInit(): void {\n this.portalDisplayMode = this.userService.getCompanyWorkflowDisplayMode();\n\n if (this.portalDisplayMode == PortalDisplayMode.Page) {\n this.handleParam().then(tId => {\n this.workflowInstanceId = tId;\n this.loadStepComponent();\n });\n }\n else if (this.portalDisplayMode == PortalDisplayMode.PopUp) {\n if (this.workflowInstanceId)\n this.loadStepComponent();\n else\n this.workflowEningeModalHide.emit();\n }\n }\n\n /**\n * Load step's info\n */\n loadStepComponent() {\n\n this.inProgress = true;\n this.workflowService\n .getWorkflowByInstanceId(this.workflowInstanceId)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(\n (result) => {\n if (result != null) {\n this.workflow = result;\n this.workflow.hasForm = false;\n this.workflow.variableFormGroup = new FormGroup({});\n let component = this.getComponentByName(this.workflow.currentActivity.userControlAddress);\n let viewContainerRef = this.componentLoader.viewContainerRef;\n viewContainerRef.clear();\n\n const stepComponentData = viewContainerRef.createComponent(component as Type);\n this.step = stepComponentData.instance as IWorkflowStep;\n this.initWorkflow().then((res) => {\n if (res == false) {\n //back to cartable\n this.handleUnknownException();\n }\n });\n }\n else {\n this.hasError = true;\n this.loadErrorMessage = \"There is no form!\";\n this.handleUnknownException();\n }\n },\n (error) => {\n this.hasError = true;\n this.loadErrorMessage = \"There is an error!\";\n this.handleUnknownException();\n });\n }\n\n private handleUnknownException() {\n\n if (this.portalDisplayMode == PortalDisplayMode.PopUp) {\n this.formService.isFormDirty.next(false);\n //this.workflowEningeModalHide.emit();\n }\n else if (this.portalDisplayMode == PortalDisplayMode.Page) {\n //back to cartable\n if (this.returnUrl)\n this.router.navigate([this.returnUrl]);\n else\n this.router.navigate(['/workflow-cartable']);\n }\n }\n\n initWorkflow(): Promise {\n return new Promise((resolve, _) => {\n var initialResult = this.step.initWorkflow(this.workflow);\n if (!initialResult) {\n resolve(initialResult);\n }\n else {\n if ((>initialResult).then !== undefined) {\n (>initialResult).then((res) => {\n resolve(res);\n });\n }\n else {\n resolve(initialResult);\n }\n }\n });\n }\n\n commandFired(command: CommandView) {\n this.inProgress = true;\n this.validateCommand(command).then(() => {\n this.confirmCommand(command).then(() => {\n\n this.saveStep(command).then((res) => {\n if (res && res.continue) {\n let workflowVariableValues = [];\n\n this.workflow.currentActivity.variableList?.forEach(variable => {\n workflowVariableValues.push({\n key: variable.key,\n value: this.workflow.variableFormGroup.value[variable.key]\n });\n });\n\n this.workflowService\n .continueWorkflow(\n this.workflowInstanceId,\n {\n activityId: this.workflow.currentActivity.id,\n workflowInstanceId: this.workflowInstanceId,\n commandKey: command.key,\n commandRoles: command.roleList,\n form: res?.data,\n note: this.workflow.currentActivity.note,\n variables: workflowVariableValues,\n })\n .pipe(finalize(() => this.inProgress = false))\n .subscribe((response) => {\n if (response != null && response.executed) {\n this.toastrService.success('Workflow has been done successfully');\n\n if (this.portalDisplayMode == PortalDisplayMode.PopUp) {\n this.formService.isFormDirty.next(false);\n this.workflowEningeModalHide.emit();\n }\n else if (this.portalDisplayMode == PortalDisplayMode.Page) {\n //back to cartable\n if (this.returnUrl)\n this.router.navigate([this.returnUrl]);\n else\n this.router.navigate(['/workflow-cartable']);\n }\n }\n else {\n this.toastrService.error((response.message?.length ?? 0) ? response.message : 'Continuing the workflow encountered an error');\n this.inProgress = false\n }\n });\n }\n else {\n this.inProgress = false;\n this.toastrService.warning('Saving step and continuing the workflow encountered an error');\n }\n });\n }, reject => {\n this.inProgress = false\n });\n }, (errorMessage: string) => {\n this.toastrService.warning((errorMessage?.length ?? 0) ? errorMessage : \"Something is wrong\");\n this.inProgress = false;\n });\n }\n\n saveStep(command: CommandView): Promise {\n return new Promise((resolve, reject) => {\n var saveStepResult = this.step.saveStep(command, this.note);\n if (!saveStepResult) {\n resolve(null);\n }\n else {\n if ((>saveStepResult).then !== undefined) {\n (>saveStepResult).then((res) => {\n resolve(res);\n });\n }\n else {\n resolve(saveStepResult);\n }\n }\n });\n }\n\n\n confirmCommand(command: CommandView): Promise {\n return new Promise((resolve, reject) => {\n if (command.confirmMessage) {\n this.modalService\n .confirm(command.confirmMessage)\n .subscribe(response => {\n if (response === true) {\n resolve()\n }\n else {\n reject('')\n }\n });\n }\n else\n resolve();\n })\n }\n\n\n validateCommand(command: CommandView): Promise {\n return new Promise((resolve, reject) => {\n var isValidVariables = this.workflow.variableFormGroup.valid;\n if (!isValidVariables) {\n reject('Answer all required questions.');\n return;\n }\n var validationResult = this.step.validateStep(command, this.note);\n\n if (typeof validationResult == 'boolean') {\n if (validationResult)\n resolve();\n else\n reject();\n }\n else {\n validationResult\n .then((result) => {\n if (result)\n resolve();\n else\n reject();\n }, () => {\n reject();\n });\n }\n })\n }\n\n returnTo() {\n var returnPath = this.route.snapshot.queryParams['returnPath'];\n this.router.navigate((returnPath?.length ?? 0) ? [returnPath] : ['/workflow-cartable']);\n }\n}\n","import { FilterType } from \"src/app/enums/filter-type.enum\";\n\nexport interface WorkflowListViewModel {\n title: string;\n instanceId: string;\n definitionId: string;\n companyId: string;\n version: number;\n createdAt: Date;\n lastExecutedAt?: Date;\n activityId: string;\n variables: WorkflowVariable[];\n}\nexport interface WorkflowVariable {\n title: string;\n value: string;\n\n columnType: FilterType;\n dataType: ObcEntityType;\n filterType: FilterType;\n order: number;\n}\n\nexport enum ObcEntityType {\n None = 0,\n Supplier = 1,\n Site = 2,\n}","
      \n
      \n
      \n
      Workflow Cartable
      \n
      \n
      \n
      \n
      \n
      \n \n \n
        \n
      • \n {{d.title}}: {{d.value}}\n
      • \n
      \n
      \n \n \n View Details\n \n \n \n \n
      \n
      \n
      \n
      \n
      \n\n \n \n\n\n\n \n \n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { DefaultWorkflowDisplayMode } from 'src/app/enums/constants';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { PortalDisplayMode } from 'src/app/enums/portal-display-mode.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { ObcEntityType, WorkflowListViewModel } from 'src/app/models/workflow/workflow-list-viewmodel';\nimport { FormService } from 'src/app/services/form.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { UserService } from 'src/app/services/user.service';\n\n@Component({\n selector: 'obc-workflow-cartable',\n templateUrl: './workflow-cartable.component.html',\n styleUrls: ['./workflow-cartable.component.scss']\n})\nexport class WorkflowCartableComponent implements OnInit {\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n inProgress: boolean;\n portalDisplayMode: PortalDisplayMode = DefaultWorkflowDisplayMode;\n selectedInstanceId: string;\n dirtyCheckSubscribe;\n selectedFormDirtyState: boolean = false;\n @ViewChild('grid') grid: any;\n \n constructor(\n private bsModalService: BsModalService,\n private userService: UserService,\n private formService: FormService,\n private modalService: ModalService,\n private router: Router) {\n }\n\n ngOnInit(): void {\n this.portalDisplayMode = this.userService.getCompanyWorkflowDisplayMode();\n this.prepareGridConfig();\n }\n\n\n openWorkflowEngine(instanceId: string, modalTemplate: any) {\n this.selectedInstanceId = instanceId;\n\n if (this.portalDisplayMode == PortalDisplayMode.PopUp) {\n this.formService.isFormDirty.next(false);\n this.bsModalService.show(modalTemplate, {\n class: \"modal-lg modal-full-width\",\n ignoreBackdropClick: true,\n keyboard: false,\n });\n this.dirtyCheckSubscribe = this.formService.isFormDirty.asObservable().subscribe(e => {\n this.selectedFormDirtyState = e;\n });\n }\n else if (this.portalDisplayMode == PortalDisplayMode.Page) {\n this.router.navigate(['/workflow-engine/' + this.selectedInstanceId]);\n }\n }\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: '/api/workflow/cartable/',\n tableType: Table.Workflow,\n displayGeneralSearch: true,\n generalSearchPlaceholder: \"Filter result by Workflow Name\",\n generalSearchMinimumCharsToSearch: 1,\n });\n\n this.gridColumns = [\n {\n name: \"Workflow Name\",\n key: \"title\",\n sortBy: \"title\",\n type: FilterType.Text,\n propertyNameInQuery: 'title',\n isArray: false,\n enableFilter: true,\n enableSort: true,\n displayFunction: (data) => { return data.title + (data.version ? ` (v${data.version})` : '') },\n },\n {\n name: \"Current Step\",\n key: \"activityTitle\",\n type: FilterType.SingleText,\n enableFilter: false,\n enableSort: false\n },\n {\n name: \"Supplier\",\n key: \"supplier\",\n //sortBy: \"title\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'supplier',\n isArray: true,\n enableFilter: false,\n enableSort: false,\n displayFunction: (data) => { return data.variables.find(d => d.dataType == ObcEntityType.Supplier)?.value; }\n },\n {\n name: \"Additional Info\",\n key: \"AdditionalInfo\",\n type: FilterType.Template,\n enableFilter: false,\n enableSort: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('additional-info-template'),\n },\n {\n name: \"Created By\",\n key: \"workflowStarter\",\n sortBy: \"workflowStarter\",\n type: FilterType.Text,\n propertyNameInQuery: 'workflowStarter',\n isArray: false,\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Created At\",\n key: \"createdAt\",\n sortBy: \"createdAt\",\n type: FilterType.DateTimeRange,\n propertyNameInQuery: 'createdAtDateRange',\n isArray: false,\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Last Executed At\",\n key: \"lastExecutedAt\",\n sortBy: \"lastExecutedAt\",\n type: FilterType.DateTimeRange,\n isArray: false,\n propertyNameInQuery: 'lastExecutedAtDateRange',\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Details\",\n key: 'viewDetails',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails'),\n visible: true,\n }\n ];\n\n }\n\n instanceId: string;\n onOpenHistory(template: any, workflowInstanceId: string) {\n this.instanceId = workflowInstanceId;\n this.bsModalService.show(template, { class: 'modal-xl' });\n }\n\n closeModal() {\n try {\n \n if (!this.selectedFormDirtyState) {\n this.dirtyCheckSubscribe?.unsubscribe();\n this.bsModalService.hide();\n this.reloadCartable();\n } else {\n this.modalService.confirm('Exit and lose progress?', '', 'Yes, exit', 'No, go back and continue')\n .subscribe(res => {\n if (res == true) {\n this.dirtyCheckSubscribe.next(false);\n this.dirtyCheckSubscribe?.unsubscribe();\n this.bsModalService.hide();\n this.reloadCartable();\n }\n });\n }\n } catch {\n }\n }\n\n showTerminateButton(item) {\n return false && this.userService.isCompanyAdminUser();\n }\n\n reloadCartable(){\n this.grid.reloadData();\n }\n}\n","
      \n
      \n
      \n
      Supplier Document SDS
      \n
      \n \n \n 0\"\n [siteSupplierDocumentVersionId]=\"item?.siteSupplierDocumentVersionId\"\n [supplierDocCommentAcknowledgementText]=\"item?.supplierDocCommentAcknowledgementText\"\n [comments]=\"item?.supplierDocumentVersionComments\" [classes]=\"'ml-2 btn-sm pull-right '\"\n [noIcon]=\"true\">\n \n \n \n \n\n \n \n \n \n\n \n
      \n
      \n
      \n
      ","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BsModalService } from \"ngx-bootstrap/modal\";\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { AttendanceDocumentReportViewModel } from 'src/app/models/attendance-document-report-viewmodel';\nimport { GridColumn, GridConfig, GridTemplate, RequestPayloadModeEnum } from 'src/app/models/grid/grid.config';\nimport { TableSetting } from 'src/app/models/table-setting';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SupplierDocumentService } from 'src/app/services/supplier-document.service';\n\n@Component({\n selector: 'obc-other-site-supplier-document-report',\n templateUrl: './other-site-supplier-document-report.component.html',\n styleUrls: ['./other-site-supplier-document-report.component.scss']\n})\nexport class OtherSiteSupplierDocumentReportComponent implements OnInit {\n attendanceId: string;\n\n constructor(\n private route: ActivatedRoute,\n private layoutService: LayoutService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private supplierDocumentService: SupplierDocumentService\n ) { }\n\n handleParam(): Promise {\n return new Promise((resolve, reject) => {\n this.route.queryParams.subscribe((param) => {\n this.route.params.subscribe((param) => {\n resolve(param['attId']);\n });\n });\n });\n }\n\n ngOnInit() {\n this.layoutService.header = `Supplier Document Report (SDS)`;\n this.handleParam().then(id => {\n this.attendanceId = id;\n this.prepareGridConfig();\n });\n\n }\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: '/api/SupplierDocument/site-supplier-document-sm',\n tableType: Table.SWMSReport,\n displayGeneralSearch: true,\n generalSearchPlaceholder: \"Filter result by Title, Supplier Name, Version Date and Document Type\",\n requestPayloadMode: RequestPayloadModeEnum.SeparateQueryKey,\n initialFilters: [{ key: \"SiteAttendanceId\", value: this.attendanceId }]\n });\n this.gridColumns = [\n {\n name: \"Supplier\",\n key: \"supplierName\",\n sortBy: \"supplier\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'supplierIdList',\n },\n {\n name: \"Document Title\",\n key: \"supplierDocumentTypeName\",\n sortBy: \"title\",\n type: FilterType.DocumentType,\n propertyNameInQuery: 'supplierIdList',\n enableFilter: false,\n },\n {\n name: \"Expiration Date\",\n key: \"expirationDate\",\n sortBy: \"expirationDate\",\n type: FilterType.DateTimeRange,\n isArray: false,\n propertyNameInQuery: 'expirationDateRange',\n },\n {\n name: \"Date Submitted\",\n type: FilterType.DateTimeRange,\n key: \"registerDateTime\",\n propertyNameInQuery: 'submitDateRange',\n isArray: false,\n },\n {\n name: \"Version\",\n key: \"displayVersion\",\n sortBy: \"version\",\n propertyNameInQuery: 'statusList',\n enableFilter: false,\n },\n {\n name: \"Review Status\",\n type: FilterType.SiteSupplierDocumentVersionStatus,\n key: \"status\",\n sortBy: \"status\",\n propertyNameInQuery: 'statusList',\n },\n {\n name: \"Document History\",\n key: 'documentHistory',\n enableSort: false,\n enableFilter: false,\n visible: false,\n showAsColumn: false,\n displayInCheckBoxSettings: true,\n },\n {\n name: \"See Deactivated Sites\",\n key: 'includeDisableSites',\n enableSort: false,\n enableFilter: false,\n visible: false,\n showAsColumn: false,\n hasIncludeFilter: true,\n propertyNameInQuery: \"includeDisableSites\",\n displayInCheckBoxSettings: true,\n },\n {\n name: \"Details\",\n key: 'viewDetails',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails'),\n visible: true,\n }\n ];\n }\n\n data;\n\n openModal(template, data) {\n this.data = data;\n this.modalService.show(template, \"modal-lg\");\n }\n\n closeModal() {\n this.grid.loadData(0);\n }\n\n exportPdf(siteSupplierDocumentVersionId: number) {\n this.supplierDocumentService.exportDataAsPdf(siteSupplierDocumentVersionId);\n }\n\n siteSupplierDocumentTypeId = null;\n\n onViewVersions(template: any, siteSupplierDocumentTypeId: number) {\n this.siteSupplierDocumentTypeId = siteSupplierDocumentTypeId;\n this.bsModalService.show(template, {\n class: \"modal-lg\",\n })\n }\n\n checkGridSettingsForHistoryButton(settings: TableSetting) {\n return !!settings.columnSettings?.find((item) => item.key == 'documentHistory' && item.visible == true);\n }\n}\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { LayoutService } from 'src/app/services/layout.service';\n\n@Component({\n selector: 'obc-template-company-visitor-types',\n templateUrl: './template-company-visitor-types.component.html',\n styleUrls: ['./template-company-visitor-types.component.scss']\n})\nexport class TemplateCompanyVisitorTypesComponent implements OnInit {\n\n constructor(private layoutService: LayoutService) { }\n\n ngOnInit(): void {\n this.layoutService.header = \"Visitor Types\";\n }\n\n}\n","
      \n
      \n
      \n \n
      \n
      \n
      \n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ErrorService } from './error.service';\nimport { ResetProcoreSyncData, ResetProcoreSyncDataItem, ResetProcoreSyncModel } from '../models/procore/reset-procore-sync-model';\nimport { Observable, catchError } from 'rxjs';\nimport { ServerResult, ServerResultData } from '../models/server-result-data';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProcoreService {\n\n constructor(private _http: HttpClient, private _errorService: ErrorService) { }\n\n getProcoreResetData(request: ResetProcoreSyncModel): Observable> {\n return this._http.post>(`/api/procore/procore-sync-reset-data`, request)\n .pipe(catchError(this._errorService.handleError));\n }\n\n procoreSyncReset(request: ResetProcoreSyncModel): Observable {\n return this._http.post(`/api/procore/procore-sync-reset`, request)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","
      \n \n \n {{item.title}}\n \n \n
      ","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { CompaniesQueryModel } from 'src/app/models/get-companies-query-model';\nimport { CompanyService } from 'src/app/services/company.service';\n\n@Component({\n selector: 'obc-company-selector',\n templateUrl: './company-selector.component.html',\n styleUrls: ['./company-selector.component.scss']\n})\nexport class CompanySelectorComponent implements OnInit {\n placeholder = 'Select Company';\n\n constructor(private companyService: CompanyService) { }\n\n _companyId: number = null;\n _required = false;\n\n @Input() selectFirstItemOfOneItemArray: boolean = false;\n @Input() set companyId(value: number,) {\n if (value === undefined || value === null)\n return;\n this._companyId = value;\n };\n\n @Input() set required(value: boolean) {\n if (value) {\n this._required = true;\n this.formControl?.setValidators(Validators.required);\n }\n };\n\n @ViewChild('selector') selector: NgSelectComponent;\n\n companies$: Observable;\n term$ = new BehaviorSubject(null)\n formControl = new FormControl(null);\n @Output() selectedCompanyId = new EventEmitter();\n @Output() selectedCompany = new EventEmitter();\n companies: CompanyViewModel[] = [];\n inProgress = false;\n\n ngOnInit() {\n this.getCompanies();\n this.formControl.valueChanges.subscribe(res => {\n if (this.companies) {\n if (res == null || res == 0) {\n this.selectedCompanyId.emit(null);\n this.selectedCompany.emit(null);\n } else {\n let company = this.companies.find(x => x.id == res);\n if (company == null) {\n } else {\n this.selectedCompany.emit(company);\n this.selectedCompanyId.emit(company.id);\n }\n }\n }\n });\n }\n\n private getCompanies() {\n this.inProgress = true;\n this.companyService.getCompanies({ searchTerm: this.term$.value } as CompaniesQueryModel)\n .subscribe(\n {\n next:\n (res) => {\n this.companies = res.data;\n this.companies$ = of(this.companies);\n if (this._companyId !== undefined && this._companyId !== null)\n this.formControl.setValue(this._companyId);\n else if (this.selectFirstItemOfOneItemArray == true && this.companies?.length == 1) {\n this.formControl.setValue(this.companies[0].id);\n }\n },\n complete: () => {\n this.inProgress = false;\n }\n }\n );\n }\n\n reachToEnd = false;\n reachToEndTerm = \"\";\n\n onScrollToEnd() {\n this.reachToEnd = true;\n this.reachToEndTerm = this.term$.value;\n this.term$.next(this.term$.value)\n }\n\n public clearInput() {\n this.selector.handleClearClick();\n }\n\n filterForms(res) {\n return res.data?.filter((form) => {\n //if (!this.excludeFormIds?.length || this.excludeFormIds.indexOf(form.id) == -1) {\n return form;\n //}\n }).sort((a, b) => a.name.localeCompare(b.title));\n }\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { SiteSelectorComponent } from '../site-selector.component';\nimport { SiteService } from 'src/app/services/site.service';\nimport { Observable } from 'rxjs';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\n\n@Component({\n selector: 'obc-specific-company-site-selector',\n templateUrl: '../site-selector.component.html',\n styleUrls: ['../site-selector.component.scss']\n})\nexport class SpecificCompanySiteSelectorComponent extends SiteSelectorComponent implements OnInit {\n _companyId: number;\n @Input() set companyId(value: number) {\n this._companyId = value;\n super.loadSiteList();\n }\n\n constructor(private _siteService: SiteService) { super(_siteService); }\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n\n getSiteList(): Observable {\n return this._siteService.getAllCompanySites(this._companyId);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IntegrationOperation, ProcoreIntegrationType } from '../enums/procore-integration-type.enum';\n\n@Pipe({\n name: 'integrationOperation'\n})\nexport class IntegrationOperationPipe implements PipeTransform {\n\n transform(value: IntegrationOperation): string {\n if (value == IntegrationOperation.ImportSites) return 'Import Site';\n if (value == IntegrationOperation.ImportProjectUsers) return 'Import User';\n if (value == IntegrationOperation.ExportSiteAttendances) return 'Export Site Attendance';\n if (value == IntegrationOperation.ExportSiteSupplierDocuments) return 'Upload Site Supplier Documents';\n if (value == IntegrationOperation.ExportSiteInductions) return 'Upload Site Inductions';\n if (value == IntegrationOperation.ImportCompanyDirectory) return 'Import Company Directory';\n if (value == IntegrationOperation.ImportProjectDirectory) return 'Import Project Directory';\n if (value == IntegrationOperation.ExportPermitForms) return 'Upload Permit Forms';\n if (value == IntegrationOperation.ExportSiteAssetForms) return 'Upload Site Asset Forms';\n if (value == IntegrationOperation.ExportSiteBriefings) return 'Upload Site Briefings';\n if (value == IntegrationOperation.ImportCompanyRoles) return 'Import Company Roles';\n if (value == IntegrationOperation.ImportProjectUserRoles) return 'Import Project User Roles';\n\n\n\n if (value == IntegrationOperation.ExportTimeCards) return 'Export Time Cards';\n if (value == IntegrationOperation.ExportAggregatedManpower) return 'Export Aggregated Manpower';\n if (value == IntegrationOperation.ExportVisitorLogs) return 'Export Visitor Logs';\n if (value == IntegrationOperation.ExportManpowerLogs) return 'Export Manpower Logs';\n if (value == IntegrationOperation.ImportAttendances) return 'Import Attendances';\n if (value == IntegrationOperation.ExportEvacuations) return 'Export Evacuations';\n\n return value != null ? String(value) : '';\n }\n}\n","
      \n
      \n\n
      \n
      \n
      Procore Force ReSync
      \n
      \n
      \n \n
      \n\n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n \n \n \n {{site.name}}\n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n Sync Type\n \n Total Record Count To ReSync\n \n Total Record Count to Sync\n
      \n {{item.type | integrationOperation }}\n \n {{item.itemCountToResync }}\n \n {{item.itemCountToSync}}\n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { IntegrationOperation, ProcoreIntegrationType } from 'src/app/enums/procore-integration-type.enum';\nimport { CompanyViewModel } from 'src/app/models/company-viewmodel';\nimport { DateRangeModel } from 'src/app/models/filter-models/filter-date-range-model';\nimport { ResetProcoreSyncData, ResetProcoreSyncDataItem, ResetProcoreSyncModel } from 'src/app/models/procore/reset-procore-sync-model';\nimport { ServerResultData } from 'src/app/models/server-result-data';\nimport { SiteViewModel } from 'src/app/models/site-viewmodel';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { ProcoreService } from 'src/app/services/procore.service';\nimport { SiteService } from 'src/app/services/site.service';\n\n@Component({\n selector: 'obc-procore-force-to-sync',\n templateUrl: './procore-force-to-sync.component.html',\n styleUrls: ['./procore-force-to-sync.component.scss']\n})\nexport class ProcoreForceToSyncComponent implements OnInit {\n inProgress: boolean = false;\n\n DatetimePickerMode = DatetimePickerMode;\n procoreSyncTypes: IntegrationOperation[] = [\n IntegrationOperation.ExportTimeCards,\n IntegrationOperation.ExportVisitorLogs,\n IntegrationOperation.ExportManpowerLogs,\n //IntegrationOperation.ExportAggregatedManpower,\n IntegrationOperation.ExportSiteSupplierDocuments,\n IntegrationOperation.ExportPermitForms,\n IntegrationOperation.ExportSiteInductions,\n IntegrationOperation.ExportSiteAssetForms,\n IntegrationOperation.ExportSiteBriefings,\n ];\n\n selectedCompany: CompanyViewModel;\n selectedSites: SiteViewModel[] = [];\n selectedProcoreIntegrationType: IntegrationOperation[] = [];\n dateRange: DateRangeModel = { from: null, to: null };\n resetData: ResetProcoreSyncData;\n\n get isValid() {\n return this.selectedCompany?.id &&\n this.selectedSites?.length &&\n this.selectedProcoreIntegrationType?.length &&\n this.dateRange?.from &&\n this.dateRange?.to &&\n this.dateRange.from < this.dateRange.to;\n }\n\n get requestModel(): ResetProcoreSyncModel {\n return {\n companyId: this.selectedCompany.id,\n siteIdList: this.selectedSites.map(s => s.id),\n dateRange: this.dateRange,\n integrationOperationsToReset: this.selectedProcoreIntegrationType,\n } as ResetProcoreSyncModel;\n }\n\n constructor(private siteService: SiteService, private procoreService: ProcoreService, private modalService: ModalService) { }\n\n ngOnInit(): void {\n\n }\n onSelectedCompany($event: CompanyViewModel) {\n this.selectedCompany = $event;\n this.selectedSites = [];\n this.resetData = null;\n this.loadSites();\n }\n loadSites() {\n this.siteService.getAllCompanySites(this.selectedCompany.id);\n }\n\n onSiteSelect(site: SiteViewModel) {\n if (!this.selectedSites.some(s => s.id == site.id))\n this.selectedSites.push(site);\n }\n\n removeSelectedSite(siteId: any) {\n this.selectedSites = this.selectedSites.filter(s => s.id != siteId);\n }\n\n onSelectSyncType(procoreIntegrationType: IntegrationOperation, values: any) {\n if (values.currentTarget.checked && !this.selectedProcoreIntegrationType.some(d => d == procoreIntegrationType))\n this.selectedProcoreIntegrationType.push(procoreIntegrationType);\n else\n this.selectedProcoreIntegrationType = this.selectedProcoreIntegrationType.filter(d => d != procoreIntegrationType);\n }\n getIntegrationDescription(type: IntegrationOperation) {\n if (type == IntegrationOperation.ExportPermitForms)\n return 'Include Permit Events';\n if (type == IntegrationOperation.ExportSiteAssetForms)\n return 'Site Asset, Asset Operator and Asset Operation Forms';\n return '';\n\n }\n onSelectFromDate(date: Date) {\n this.dateRange.from = date;\n }\n onSelectToDate(date: Date) {\n this.dateRange.to = date;\n }\n\n getProcoreResetData() {\n this.resetData = null;\n this.procoreService.getProcoreResetData(this.requestModel)\n .subscribe(\n res => {\n if (res.success)\n this.resetData = res.data;\n else\n this.modalService.error(res.message ?? 'Fetching data was failed!');\n });\n }\n\n resetSyncStatus() {\n this.procoreService.procoreSyncReset(this.requestModel)\n .subscribe(res => {\n if (res.success) {\n this.resetData = null;\n this.modalService.success('Reset request was registered.')\n }\n });\n }\n cancelSync() {\n this.resetData = null;\n }\n\n}\n","
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      Company Workflow Management for {{companyTitle}}
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n {{ item?.workflowType | WorkflowTypeFilter }}\n \n \n {{item?.creatorUserInfo?.fullName}}\n ({{item?.creatorUserInfo?.mobile}})\n \n \n
      \n\n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { FormType } from 'src/app/enums/form-type';\nimport { MessageType } from 'src/app/enums/message-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { WorkflowType } from 'src/app/enums/workflow/workflow-type';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { CompanyWorkflowTemplateViewModel as CompanyWorkflowTemplateViewModel } from 'src/app/models/workflow/company-workflow-template-view-model';\nimport { VariableDefinitionType } from 'src/app/models/workflow/variable-difinition';\n\n@Component({\n selector: 'obc-company-workflow-template',\n templateUrl: './company-workflow-template.component.html',\n styleUrls: ['./company-workflow-template.component.scss']\n})\nexport class CompanyWorkflowTemplateComponent implements OnInit {\n dataModel: CompanyWorkflowTemplateViewModel = {};\n\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n isActiveAdvancedMode: boolean = false;\n inProgress: boolean = false;\n selectedInstanceId: string;\n WorkflowType = WorkflowType;\n FilterType = FilterType;\n FormType = FormType;\n MessageType = MessageType;\n VariableDefinitionType = VariableDefinitionType;\n\n isEditMode: boolean = false;\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private bsModalService: BsModalService) {\n }\n\n onCloseWorkflowPopup() {\n this.bsModalService.hide();\n this.dataModel = {};\n this.dataModel.companyId = this.companyId;\n\n this.grid.loadData();\n }\n\n\n companyId: number;\n companyTitle: string;\n ngOnInit(): void {\n this.route.params.subscribe((params: Params) => {\n this.companyId = params['companyId'] ? +params['companyId'] : null;\n this.companyTitle = decodeURIComponent(params['companyTitle'] ? params['companyTitle'] : '');\n\n if (!this.companyId) {\n this.router.navigate(['/manage-companies']);\n }\n else {\n this.prepareGridConfig();\n }\n });\n }\n\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: `/api/companyWorkflowTemplate/get-company-workflow-templates/${this.companyId}`,\n tableType: Table.Workflow,\n displayGeneralSearch: true,\n generalSearchPlaceholder: \"Filter result by Workflow Name\",\n generalSearchMinimumCharsToSearch: 1,\n });\n\n this.gridColumns = [\n {\n name: \"Workflow Title\",\n key: \"title\",\n sortBy: \"title\",\n type: FilterType.SingleText,\n propertyNameInQuery: 'title',\n isArray: false,\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Workflow Type\",\n key: \"workflowType\",\n sortBy: \"workflowType\",\n gridTemplate: new GridTemplate().ComponentTemplateName('workflowType'),\n propertyNameInQuery: 'workflowType',\n isArray: false,\n enableFilter: false,\n enableSort: true,\n },\n {\n name: \"Workflow Sub Type\",\n key: \"workflowSubTitle\",\n sortBy: \"workflowSubTitle\",\n propertyNameInQuery: 'workflowSubTitle',\n enableFilter: false,\n enableSort: true,\n },\n {\n name: \"Version\",\n key: \"version\",\n sortBy: \"version\",\n type: FilterType.SingleText,\n propertyNameInQuery: 'version',\n isArray: false,\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Created By\",\n key: \"creatorUserInfo\",\n sortBy: \"creatorUserInfo\",\n type: FilterType.Text,\n gridTemplate: new GridTemplate().ComponentTemplateName('creatorUserInfo'),\n propertyNameInQuery: 'creatorUserInfo',\n isArray: false,\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Created At\",\n key: \"createDate\",\n sortBy: \"createDate\",\n type: FilterType.DateTimeRange,\n propertyNameInQuery: 'createDateDateRange',\n isArray: false,\n enableFilter: true,\n enableSort: true,\n },\n {\n key: \"actions\",\n name: \"Actions\",\n gridTemplate: new GridTemplate().ComponentTemplateName('actions'),\n enableFilter: false,\n enableSort: false,\n visible: true,\n }\n ];\n\n }\n\n onAddWorkflow(template: any) {\n this.dataModel = {};\n this.isEditMode = false;\n this.dataModel.companyId = this.companyId;\n this.bsModalService.show(template, { class: 'modal-xl modal-full-width', ignoreBackdropClick: true });\n }\n\n\n\n viewDetails(item, template: any) {\n this.dataModel = {};\n this.isEditMode = true;\n this.dataModel = item;\n this.dataModel.workflowInfo?.placeholderList?.map(item => {\n item.disabled = item.accessMode.toLowerCase() == 'advanced' && this.isActiveAdvancedMode == false;\n });\n\n this.dataModel.workflowInfo?.placeholderList?.filter(p => p.type == FilterType.ActionList).map(item => {\n let commandList = JSON.parse(item.value.toString())\n item.parsedValue = [];\n commandList.forEach(value => {\n item.parsedValue.push(\n {\n RoleList: value.RoleList,\n ConfirmMessage: value.ConfirmMessage,\n CssClass: value.CssClass,\n Key: value.Key,\n Text: value.Text,\n Placeholder: JSON.parse(JSON.stringify(value.Text))\n }\n )\n });\n });\n this.bsModalService.show(template, { class: 'modal-xl modal-full-width', ignoreBackdropClick: true });\n }\n\n}\n","\nexport enum GenericFormSubmissionMethod {\n EndUser = 0,\n PermitEvent = 1,\n AutoRenew = 2\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ErrorService } from './error.service';\nimport { catchError } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiteBriefingService {\n private apiUrl = '/api/SiteBriefing'\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n getSignedList(siteBriefingQueryModel: any) {\n return this.http.post(`${this.apiUrl}/get-signed-list`, siteBriefingQueryModel)\n .pipe(catchError(this._errorService.handleError));\n }\n\n deactive(SiteBriefingDeactivateRequestModel: any) {\n return this.http.post(`${this.apiUrl}/deactive`, SiteBriefingDeactivateRequestModel)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","
      \n
      View Form
      \n
      \n \n
      \n
      \n
      \n \n \n \n \n \n \n\n \n \n \n \n\n \n {{item.signedBy?.fullName}}\n \n \n \n \n
      \n","import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { BaseGridComponent } from 'src/app/custom-controls/grid/base-grid.component';\nimport { FileType } from 'src/app/enums/file-type.enum';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { AsyncResult } from 'src/app/models/helper-models';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-site-briefing-form-viewer',\n templateUrl: './site-briefing-form-viewer.component.html',\n styleUrls: ['./site-briefing-form-viewer.component.scss']\n})\nexport class SiteBriefingFormViewerComponent implements OnInit, AfterViewInit {\n\n _selectedFormDataId: number = null;\n @Input() set selectedFormDataId(id: number) {\n this._selectedFormDataId = id;\n this.initialFilters.find((item) => item.key == 'formDataId').value = this.selectedFormDataId;\n //this.loadData();\n };\n get selectedFormDataId() {\n return this._selectedFormDataId;\n }\n\n @ViewChild('gridSignature') grid: BaseGridComponent;\n signaturesGridColumns: GridColumn[] = [];\n signaturesGridConfig: GridConfig = {} as GridConfig;\n initialFilters = [{ key: 'formDataId', value: 38425, displayInFilterRenderer: false }];\n\n constructor(private modalService: ModalService) { }\n\n\n loadData() {\n this.grid.loadData(0);\n }\n\n ngOnInit(): void {\n this.configGrid();\n }\n\n configGrid(): void {\n this.signaturesGridConfig = new GridConfig({\n apiUrl: '/api/SiteBriefing/get-signed-list',\n tableType: Table.SiteBriefingReportSignature,\n initialFilters: this.initialFilters,\n displayRefreshButton: false,\n apiResultCallback: (res) => {\n\n res.data.forEach(item => {\n item.fileUrl = item.signatureUrl;\n item.fileType = FileType.Image;\n });\n\n return {\n data: res?.data,\n totalCount: res?.totalCount,\n }\n }\n });\n\n this.signaturesGridColumns = [\n {\n name: \"Name\",\n key: \"fullName\",\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Mobile\",\n key: \"mobile\",\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Sign Date\",\n key: \"signDateTime\",\n type: FilterType.DateTimeRange,\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Signed By\",\n key: \"signedBy\",\n gridTemplate: new GridTemplate().ComponentTemplateName('signedBy'),\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Signature\",\n key: \"signatureUrl\",\n gridTemplate: new GridTemplate().ComponentTemplateName('sigTemplate'),\n enableFilter: false,\n enableSort: false,\n },\n ];\n }\n\n ngAfterViewInit(): void {\n this.loadData();\n }\n\n closeModal(_: AsyncResult) {\n this.modalService.hide();\n }\n}\n","
      \n
      \n
      \n \n
      Site Briefing Report
      \n
      \n \n Include Inactive Site Briefing Forms: \n \n \n \n \n\n \n {{item.status | SiteBriefingStatusPipe}}\n \n \n {{item.submittedByFullName }}\n Auto-Renew\n \n\n \n
      \n \n\n
      \n \n
        \n
      • \n \n
      • \n
      • \n \n
      • \n
      \n
      \n\n
      \n
      \n\n \n \n \n\n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { Table } from 'src/app/enums/table.enum';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { GridColumn, GridConfig, GridTemplate, InitialFilter } from \"../../../models/grid/grid.config\";\nimport { AttendanceDocumentReportViewModel } from \"../../../models/attendance-document-report-viewmodel\";\nimport { SiteBriefingStatusPipe } from 'src/app/pipes/site-briefing-status.pipe';\nimport { SiteBriefingStatus } from 'src/app/enums/site-briefing-status';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { SiteBriefingService } from 'src/app/services/site-briefing-service';\nimport { FormService } from 'src/app/services/form.service';\nimport { FormDataPdfQueryModel } from 'src/app/models/form/form-data-pdf-query-model';\nimport { SiteBriefingViewModel } from 'src/app/models/site-briefing-viewmodel';\nimport { GenericFormSubmissionMethod } from 'src/app/enums/generic-form-submission-method.enum';\n\n@Component({\n selector: 'obc-site-briefing-report',\n templateUrl: './site-briefing-report.component.html',\n styleUrls: ['./site-briefing-report.component.scss'],\n})\n\nexport class SiteBriefingReportComponent implements OnInit {\n @ViewChild('grid') grid: any;\n\n inProgress: boolean = false;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n selectedFormDataId: number;\n SiteBriefingStatus = SiteBriefingStatus;\n GenericFormSubmissionMethod = GenericFormSubmissionMethod;\n SiteBriefingStatusPipe = SiteBriefingStatusPipe;\n includeInactiveSiteBriefingForms: boolean = false;\n initialFilters: InitialFilter[] = [{ key: 'includeInactiveSiteBriefingForms', value: false, }];\n\n constructor(\n private layoutService: LayoutService,\n private siteBriefingService: SiteBriefingService,\n private modalService: ModalService,\n private formService: FormService) { }\n\n ngOnInit() {\n this.layoutService.header = 'Site Briefing Report';\n this.prepareGridConfig();\n }\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: '/api/SiteBriefing/report',\n tableType: Table.SiteBriefingReport,\n displayGeneralSearch: true,\n generalSearchPlaceholder: \"Filter result by Site Name, Submitted by and Site Briefing type\",\n generalSearchMinimumCharsToSearch: 1,\n initialFilters: this.initialFilters,\n csvReportUrl: '/api/SiteBriefing/report-csv-as-job',\n apiResultCallback: (res) => {\n return {\n data: res?.data?.data,\n totalCount: res?.data?.totalCount,\n }\n }\n });\n this.gridColumns = [\n {\n name: \"Site\",\n key: \"siteTitle\",\n type: FilterType.Site,\n propertyNameInQuery: 'siteIds',\n },\n {\n name: \"Submitted By\",\n key: \"submittedByFullName\",\n type: FilterType.User,\n propertyNameInQuery: 'submittedBy',\n gridTemplate: new GridTemplate().ComponentTemplateName('submittedBy'),\n },\n {\n name: \"Mobile\",\n key: \"submittedByMobile\",\n type: FilterType.Mobile,\n propertyNameInQuery: 'submittedByMobiles',\n },\n {\n name: \"Site Briefing Type\",\n key: \"siteBriefingType\",\n type: FilterType.SiteBriefingForm,\n propertyNameInQuery: 'siteBriefingTypes',\n },\n {\n name: \"Date Submitted\",\n key: \"startDate\",\n type: FilterType.DateTimeRange,\n isArray: false,\n propertyNameInQuery: 'startDate',\n },\n {\n name: \"Status\",\n key: \"status\",\n type: FilterType.SiteBriefingStatus,\n propertyNameInQuery: 'statuses',\n gridTemplate: new GridTemplate().ComponentTemplateName('status'),\n },\n {\n name: \"Actions\",\n key: \"\",\n gridTemplate: new GridTemplate().ComponentTemplateName('actions'),\n enableFilter: false,\n enableSort: false,\n },\n ];\n\n }\n\n openModal(template: any, selectedFormDataId: number) {\n this.selectedFormDataId = selectedFormDataId;\n this.modalService.show(template, 'modal-lg');\n }\n\n\n deactiveClicked(formDataId: number) {\n this.modalService\n .confirm('Are you sure you want to deactive selected Site Briefing?', 'Deactivation')\n .subscribe(resp => {\n if (resp === true) {\n this.inProgress = true;\n this.siteBriefingService\n .deactive({ formDataId })\n .subscribe(\n res => {\n if (res.success) {\n this.grid.loadData(0);\n } else {\n this.modalService.error(res.message);\n this.inProgress = false;\n }\n }, err => {\n this.modalService.error(err);\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n });\n }\n\n exportPdf(item) {\n this.formService.ExportFormDataAsPdf({ formDataId: item.id, siteId: item.siteId, IncludeAnnouncements: true } as FormDataPdfQueryModel);\n }\n\n onIncludeInactiveSiteBriefingFormsChanged(value: boolean) {\n this.gridColumns.find(x => x.key == \"siteBriefingType\").filterSettings = { includeInactiveItems: value };\n this.initialFilters.find(x => x.key == \"includeInactiveSiteBriefingForms\").value = value;\n this.grid?.loadData();\n }\n}\n","
      \n
      \n
      Induction Details
      \n
      \n \n
      \n
      \n
      \n \n
      \n {{ errorMessage }}\n
      \n \n\n \n
      \n \n \n
      \n
      \n
      \n
      \n\n\n\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ReasonToReject } from 'src/app/models/ai/ai-response';\nimport { AsyncResult } from 'src/app/models/helper-models';\nimport { SiteInductionFilledInfoViewModel } from 'src/app/models/induction/site-induction-filled-info-view-model';\nimport { InductionService } from 'src/app/services/induction-service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-site-induction-detail',\n templateUrl: './site-induction-detail.component.html',\n styleUrls: ['./site-induction-detail.component.scss']\n})\nexport class SiteInductionDetailComponent implements OnInit {\n @Output() public result = new EventEmitter();\n @Input() siteInductionId: number;\n @Input() showCloseButton: boolean = true;\n @Input() onlyDisplayFilledInfo: boolean = false;\n @Input() highlightQuestionData: ReasonToReject[];\n needParentRefresh: boolean = false;\n errorMessage = '';\n inProgress: boolean = false;\n siteInductionFilledInfo: SiteInductionFilledInfoViewModel;\n constructor(private inductionService: InductionService,\n private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.getSiteInductionInfo();\n }\n\n getSiteInductionInfo() {\n this.inProgress = true;\n this.inductionService.getSiteInductionFilledInfo(this.siteInductionId).subscribe(\n res => {\n if (res.success) {\n this.siteInductionFilledInfo = res.data;\n } else {\n this.modalService.error(res.message);\n this.inProgress = false;\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n this.inProgress = false;\n }, () => {\n this.inProgress = false;\n }\n )\n }\n onApproveOrReject(result: AsyncResult) {\n this.needParentRefresh = true;\n this.result.emit({ isFinished: result.isFinished, isSucceeded: result.isSucceeded, needParentRefresh: true })\n this.getSiteInductionInfo();\n }\n\n}\n","\nexport interface ReasonToReject {\n questionId: number;\n reason: string;\n}\n\nexport interface AiRecommendationBase {\n isFailed: boolean;\n confidence: number;\n decision: AiDecision;\n description: string;\n}\n\nexport enum AiDecision {\n Unknown,\n Approve,\n Reject,\n}\n\n\nexport interface InductionRecommendation extends AiRecommendationBase {\n answersLeadToNegativeResult: ReasonToReject[];\n}\n","
      \n
      \n
      \n Request Revision - {{requestorUserFullname}}\n \n ({{currentSiteInductionHistoryLog?.title}})\n {{currentSiteInductionHistoryLog?.statusText}}\n \n
      \n
      \n \n
      \n
      \n
      \n\n
      \n
      \n
      \n \n
      \n
      \n
      Comments
      \n
      \n
      \n {{getCommentPanelContent()}}\n
      \n
      \n
      \n
      \n
      \n \n AI feedback\n Exprimental\n
      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n Decision:\n Approve\n Reject\n Unknown\n \n

      Confidence: {{aiResponse.confidence}}

      \n
      0\" style=\"text-align: left;\">{{aiResponse.description}}
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      History
      \n
      \n
      \n \n \n \n
      \n \n Latest Version\n
      \n
      \n \n {{ historyData.registerDate | datetime }}\n ({{historyData.title}})\n \n {{getHistoryItemButtonText(historyData)}}\n \n
      \n
      \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      \n {{historyData.title}}\n {{ historyData.date | datetime }}\n
      \n
      \n {{ historyData.userName }}\n
      \n
      \n {{historyData.description}}\n
      \n
      \n
      ","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ApproveEntityType } from \"../../../enums/approve-entity-type\";\nimport { InductionService } from \"../../../services/induction-service\";\nimport {\n SiteInductionHistoryLogModel,\n SiteInductionHistoryLogViewModel\n} from \"../../../models/induction/site-induction-history-log-model\";\nimport { BasePagingModel } from \"../../../models/paging_model\";\nimport { InductionReviewMode, SiteInductionStatus } from \"../../../enums/site-induction-status\";\nimport { ModalService } from \"../../../services/modal.service\";\nimport { SiteInductionStatusPipe } from 'src/app/pipes/site-induction-status.pipe';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\nimport { UserService } from 'src/app/services/user.service';\nimport { ApproveService } from 'src/app/services/approve-service';\nimport { AiDecision, InductionRecommendation } from 'src/app/models/ai/ai-response';\n\n@Component({\n selector: 'obc-request-revision',\n templateUrl: './request-revision.component.html',\n styleUrls: ['./request-revision.component.scss']\n})\nexport class RequestRevisionComponent implements OnInit {\n\n @Input() siteInductionId: number;\n currentSiteInductionId: number;\n currentSiteInductionHistoryLog: SiteInductionHistoryLogViewModel;\n ApproveEntityType = ApproveEntityType;\n SiteInductionStatus = SiteInductionStatus;\n hasPermissionToReview: boolean = false;\n isAiEnabled: boolean = false;\n AiDecision = AiDecision;\n\n @Input() modalRef: any;\n @Output() onRefresh: EventEmitter = new EventEmitter();\n\n refreshParent: boolean = false;\n displayHistory: boolean = false;\n requestorUserFullname: string = '';\n aiResponse: InductionRecommendation;\n aiResponseInProgress: boolean = false;\n\n constructor(private inductionService: InductionService,\n private modalService: ModalService,\n private siteInductionStatusPipe: SiteInductionStatusPipe,\n private userService: UserService,\n private approveService: ApproveService) { }\n\n historyLogData: SiteInductionHistoryLogViewModel[];\n companyUserProfile: any;\n ngOnInit(): void {\n this.currentSiteInductionId = this.siteInductionId;\n this.inductionService.inductionHistoryLog({\n siteInductionId: this.siteInductionId,\n pagingInfo: {\n pageNumber: 0,\n pageSize: 20,\n } as BasePagingModel,\n } as SiteInductionHistoryLogModel).subscribe((res) => {\n if (res.success && res.data) {\n this.historyLogData = res.data.data;\n this.requestorUserFullname = this.historyLogData[0].requestorUserFullname;\n this.currentSiteInductionHistoryLog = this.historyLogData?.find(x => x.siteInductionId == this.currentSiteInductionId);\n this.hasPermissionToReview = this.historyLogData[0].hasApprovePermission;\n }\n });\n this.isAiEnabled = this.userService.isAiEnabled();\n }\n\n getHistoryItemButtonText(historyData: SiteInductionHistoryLogViewModel) {\n return this.hasPermissionToReview && historyData.status == SiteInductionStatus.PendingToApprove ? 'Review' : 'View'\n }\n\n _showInductionPanel: boolean = true;\n showInductionPanel(): any {\n return this._showInductionPanel && this.currentSiteInductionHistoryLog;\n }\n\n displayHistoryFunc() {\n this.displayHistory = !this.displayHistory;\n }\n closeModal() {\n this.modalService.hide(this.modalRef);\n\n if (this.refreshParent)\n this.onRefresh.emit();\n }\n\n isRequestRevision() {\n return this.currentSiteInductionHistoryLog?.reviewMode == InductionReviewMode.RequestRevision;\n }\n\n onRefreshFunc() {\n this.refreshParent = true;\n this.closeModal();\n }\n\n showSiteInduction(historyData: SiteInductionHistoryLogViewModel) {\n this.currentSiteInductionHistoryLog = null;\n this.currentSiteInductionId = null;\n setTimeout(() => {\n this.currentSiteInductionId = historyData.siteInductionId;\n this.currentSiteInductionHistoryLog = historyData;\n }, 100);\n }\n\n getSiteInductionIcon(siteInductionLog: SiteInductionHistoryLogViewModel) {\n switch (siteInductionLog.status) {\n case SiteInductionStatus.ApprovedByHost:\n case SiteInductionStatus.AutoApproved:\n return \"fa-envelope\";\n case SiteInductionStatus.RejectByHost:\n return \"fa-times\";\n case SiteInductionStatus.PendingToApprove:\n return \"fa-history\";\n default:\n return \"\";\n }\n }\n\n showEntireReviewPanel() {\n return this.currentSiteInductionHistoryLog?.reviewMode != InductionReviewMode.Hidden;\n }\n\n showReviewPanel() {\n return this.hasPermissionToReview &&\n (this.currentSiteInductionHistoryLog?.reviewMode == InductionReviewMode.RequestRevision ||\n this.currentSiteInductionHistoryLog?.reviewMode == InductionReviewMode.ApproveReject);\n }\n\n getCommentPanelContent() {\n return (this.currentSiteInductionHistoryLog?.requestRevisionDescription?.length ?? 0) ?\n this.currentSiteInductionHistoryLog?.requestRevisionDescription :\n (this.currentSiteInductionHistoryLog?.approveDescription?.length ?? 0) ?\n this.currentSiteInductionHistoryLog?.approveDescription :\n (this.currentSiteInductionHistoryLog?.rejectDescription?.length ?? 0) ?\n this.currentSiteInductionHistoryLog?.rejectDescription :\n \"No Comment\";\n }\n\n getStyleCssClass() {\n return this.currentSiteInductionHistoryLog?.status == SiteInductionStatus.PendingToApprove ? 'warning' :\n this.currentSiteInductionHistoryLog?.status == SiteInductionStatus.ApprovedByHost ||\n this.currentSiteInductionHistoryLog?.status == SiteInductionStatus.AutoApproved ? 'success' :\n 'danger';\n }\n\n isHistoryPanelOpen(historyData: SiteInductionHistoryLogViewModel) {\n if (historyData.siteInductionId == this.siteInductionId)\n return true;\n var historyDataIndex = this.historyLogData.findIndex(x => x.siteInductionId == historyData.siteInductionId);\n if (historyDataIndex == 1 && this.historyLogData[0].status == SiteInductionStatus.PendingToApprove)\n return true;\n return false;\n }\n\n getStatusText(status: SiteInductionStatus) {\n return this.siteInductionStatusPipe.transform(status);\n }\n\n getAiRecommendation() {\n this.aiResponseInProgress = true;\n this.approveService.askAi(this.siteInductionId).subscribe((res) => {\n this.aiResponse = res;\n this.aiResponseInProgress = false;\n });\n }\n}\n","
      \n
      \n
      \n \n
      Induction Report
      \n
      \n
      \n
      \n Include : \n
      \n
      \n
      \n Expired Inductions: \n \n \n
      \n
      \n \n Inactive Inductions:\n \n \n \n \n
      \n
      \n
      \n \n \n \n {{item.inductionTitle}}\n \n\n Expired \n \n\n \n \n {{item.status | siteInductionStatus}}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      \n\n\n \n \n\n","import { Component, OnInit, Input, ViewChild } from \"@angular/core\";\nimport { ApproveEntityType } from \"src/app/enums/approve-entity-type\";\nimport { Constants } from \"src/app/enums/constants\";\nimport { FilterType } from \"src/app/enums/filter-type.enum\";\nimport { SiteInductionStatus } from \"src/app/enums/site-induction-status\";\nimport { Table } from \"src/app/enums/table.enum\";\nimport { UserPermission } from \"src/app/enums/user-permission.enum\";\nimport { AttendanceDocumentReportViewModel } from \"src/app/models/attendance-document-report-viewmodel\";\nimport { InitialFilter, GridColumn, GridConfig, InitialFilterUsage, GridTemplate } from \"src/app/models/grid/grid.config\";\nimport { AsyncResult } from \"src/app/models/helper-models\";\nimport { SiteInductionFullInfoViewModel } from \"src/app/models/induction/site-induction-full-info-view-model\";\nimport { QuestionAnswerInputModel } from \"src/app/models/question-answer-inputmodel\";\nimport { LayoutService } from \"src/app/services/layout.service\";\nimport { ModalService } from \"src/app/services/modal.service\";\nimport { UserService } from \"src/app/services/user.service\";\nimport { ApproveService } from \"../../../services/approve-service\";\nimport { ApproveEntityTypePipe } from 'src/app/pipes/approve-entity-type.pipe';\nimport { ToastrService } from 'ngx-toastr';\n\n\n@Component({\n selector: 'obc-induction-report',\n templateUrl: './induction-report.component.html',\n styleUrls: ['./induction-report.component.scss'],\n})\nexport class InductionReportComponent implements OnInit {\n @Input() selectedUserId: number = null;\n @Input() siteIdList: number[] = [];\n @Input() isReportMode: boolean = false;\n @ViewChild('grid') grid: any;\n includeExpiredInductions: boolean = false;\n includeInactiveInductions: boolean = false;\n selectedSiteInductionId: number;\n\n inProgress: boolean = false;\n isRefreshRequired: boolean = false;\n questionAnswerInputModel: QuestionAnswerInputModel = new QuestionAnswerInputModel();\n initialFilters: InitialFilter[] = [];\n UserPermission = UserPermission;\n SiteInductionStatus = SiteInductionStatus;\n\n constructor(\n private layoutService: LayoutService,\n private modalService: ModalService,\n public userService: UserService,\n public approveService: ApproveService,\n private approveEntityTypePipe: ApproveEntityTypePipe,\n private toastr: ToastrService,\n ) {\n }\n\n ngOnInit() {\n if (!this.isReportMode)\n this.layoutService.header = 'Induction Report';\n\n this.prepareGridConfig();\n }\n\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n prepareGridConfig() {\n let currentDate = new Date();\n currentDate.setFullYear(currentDate.getFullYear() - 1);\n\n if (!this.isReportMode) {\n this.initialFilters.push(\n {\n key: 'status', value: [\n { label: 'Approved', key: SiteInductionStatus.ApprovedByHost },\n { label: 'Auto Approved', key: SiteInductionStatus.AutoApproved },\n { label: 'Pending Approval', key: SiteInductionStatus.PendingToApprove },\n ],\n displayInFilterRenderer: true,\n },\n );\n }\n\n this.initialFilters.push(\n { key: 'includeInactiveInductionForms', value: false, },\n {\n key: 'includeExpiredInductions',\n value: this.isReportMode,\n displayInFilterRenderer: false,\n },\n {\n key: 'includeQuestionAnswers',\n value: true,\n displayInFilterRenderer: false,\n usage: InitialFilterUsage.CSV,\n });\n\n if (this.selectedUserId) {\n this.initialFilters.push({ key: 'userIds', value: [this.selectedUserId], displayInFilterRenderer: false } as InitialFilter);\n }\n if (this.siteIdList?.length ?? 0) {\n this.initialFilters.push({ key: 'siteIds', value: this.siteIdList, displayInFilterRenderer: false } as InitialFilter);\n }\n\n this.gridConfig = new GridConfig({\n apiUrl: this.isReportMode ? '/api/workerprofile/site-induction-report' : '/api/Induction/site-induction-report',\n tableType: Table.InductionReport,\n forceHideAllControlButtons: this.isReportMode,\n displayQuestionsFilter: true,\n displayGeneralSearch: true,\n generalSearchPlaceholder: \"Filter result by Induction Title, Induction Number, User, Supplier and Site fields\",\n generalSearchMinimumCharsToSearch: 1,\n initialFilters: this.initialFilters,\n csvReportUrl: '/api/Induction/site-induction-report-csv-as-job',\n cacheKeyPrefix: this.isReportMode ? Constants.WORKER_PROFILE_REPORT_PREFIX : '',\n hideEmptyColumns: !this.isReportMode,\n apiResultCallback: (res) => {\n return {\n data: res?.data?.data,\n totalCount: res?.data?.totalCount,\n }\n }\n });\n this.gridColumns = [\n {\n name: \"Induction Title\",\n key: \"inductionTitle\",\n type: FilterType.InductionId,\n gridTemplate: new GridTemplate().ComponentTemplateName('inductionTitle')\n .CsvFields([\n 'inductionTitle',\n 'isExpired',\n ]),\n propertyNameInQuery: 'inductionIds',\n },\n {\n name: \"Induction Number\",\n key: \"inductionKey\",\n enableFilter: false,\n enableSort: false,\n },\n !this.isReportMode ? {\n name: \"Full Name\",\n key: \"user\",\n type: FilterType.User,\n propertyNameInQuery: 'userIds',\n populateData: (row) => {\n return {\n userMobile: row.userMobile,\n fullName: row.user,\n userId: row.userId,\n }\n },\n gridTemplate: new GridTemplate().FullNameMobile({\n fullName: 'user',\n mobile: 'userMobile',\n userId: 'userId'\n }).CsvFields([\n 'user',\n 'userMobile',\n ]),\n } : null,\n {\n name: \"Supplier\",\n key: \"supplierName\",\n sortBy: \"supplier\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'suppliers',\n },\n {\n name: \"Date\",\n key: \"checkinDate\",\n type: FilterType.DateTimeRange,\n propertyNameInQuery: 'checkinDateRange',\n isArray: false,\n },\n {\n name: \"Expiration Date\",\n key: \"expiredDate\",\n type: FilterType.DateTimeRange,\n propertyNameInQuery: 'expiredDateRange',\n isArray: false,\n visible: false,\n },\n {\n name: \"Status\",\n key: \"status\",\n sortBy: \"currentStatus\",\n type: FilterType.Induction,\n gridTemplate: new GridTemplate().ComponentTemplateName('currentStatus'),\n propertyNameInQuery: 'currentStatusIds',\n },\n {\n name: \"Site\",\n key: \"siteName\",\n sortBy: \"site\",\n type: FilterType.Site,\n propertyNameInQuery: 'siteIds',\n gridTemplate: new GridTemplate().SiteNameReference({\n siteName: 'site',\n siteReference: 'siteReference',\n }).CsvFields([\n 'site',\n 'siteReference',\n ]),\n },\n {\n name: \"Actions\",\n key: 'viewDetails',\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails'),\n visible: true,\n }\n ].filter((q) => !!q);\n }\n\n\n openModal(template, siteInductionId: number, cssStyle: string = 'modal-lg') {\n this.isRefreshRequired = false;\n this.selectedSiteInductionId = siteInductionId;\n this.modalService.show(template, cssStyle)\n .subscribe((res) => {\n if (this.isRefreshRequired) {\n this.grid?.loadData();\n this.isRefreshRequired = false;\n }\n });\n }\n\n closeModal(_: AsyncResult) {\n this.modalService.hide();\n }\n\n hasResetPermission(siteId: number): boolean {\n return this.userService.hasAdminPermissionOnSite(siteId);\n }\n\n resetInductionStatus(siteInductionId: number) {\n const entityTypeTitle = this.approveEntityTypePipe.transform(ApproveEntityType.Induction);\n this.modalService\n .confirm(\n 'Are you sure you want to reset this induction to pending status?'\n )\n .subscribe((confirm) => {\n if (confirm) {\n this.inProgress = true;\n let subscription =\n this.approveService\n .resetEntityStatus({ entityId: siteInductionId, approveEntityType: ApproveEntityType.Induction })\n .subscribe(res => {\n if (res)\n this.toastr.success(`${entityTypeTitle} status has successfully reset!`);\n else\n this.toastr.error(`Can not reset ${entityTypeTitle} status!`)\n }, _ => {\n this.toastr.error(`Can not reset ${entityTypeTitle} status! Some error happened`)\n }, () => {\n subscription.unsubscribe();\n this.fetchPendingList();\n this.inProgress = false;\n })\n }\n });\n }\n\n fetchPendingList() {\n this.grid?.loadData();\n }\n\n onInductionUpdated() {\n this.isRefreshRequired = true;\n }\n\n isShowTemplateColumns(mainColumn, detailColumn) {\n return this.grid.isShowTemplateColumns(mainColumn, detailColumn);\n }\n\n onIncludeExpiredInductionsChanged(value: boolean) {\n this.initialFilters.find(x => x.key == \"includeExpiredInductions\").value = value;\n this.grid?.loadData();\n }\n\n onIncludeInactiveInductionsChanged(value: boolean) {\n this.gridColumns.find(x => x.key == \"inductionTitle\").filterSettings = { includeInactiveItems: value };\n this.initialFilters.find(x => x.key == \"includeInactiveInductionForms\").value = value;\n this.grid?.loadData();\n }\n\n isReadyToRequestRevision(item: SiteInductionFullInfoViewModel) {\n return (item.status == SiteInductionStatus.ApprovedByHost || item.status == SiteInductionStatus.AutoApproved) &&\n !item.isExpired;\n }\n ApproveEntityType = ApproveEntityType;\n\n askAi(item: any) {\n this.approveService.askAi(item.siteInductionId).subscribe(res => {\n this.toastr.success('AI Answer: ' + res);\n console.log(res);\n });\n }\n}\n","export enum WorkerProfileField {\n FirstName = 0,\n LastName = 1,\n Mobile = 2,\n VisitorType = 3,\n Supplier = 4,\n Email = 5,\n Gender = 6,\n DOB = 7,\n EmergencyContact= 8,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ErrorService } from './error.service';\nimport { Observable, catchError } from 'rxjs';\nimport { WorkerProfileViewModel } from '../models/userProfile/worker-profile-view-model';\nimport { WorkerProfileRequestModel } from \"../models/userProfile/worker-profile-request-model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WorkerProfileService {\n apiUrl: string = \"/api/workerprofile\";\n constructor(private http: HttpClient, private _errorService: ErrorService) { }\n\n loadWorkerProfile(userId: number): Observable {\n return this.http.get(`${this.apiUrl}/get/${userId}`)\n .pipe(catchError(this._errorService.handleError));\n }\n\n updateUserProfile(model: WorkerProfileRequestModel): Observable {\n return this.http.post(`${this.apiUrl}/update-user-profile`, model)\n .pipe(catchError(this._errorService.handleError));\n }\n}\n","
      \n
      \n
      \n \n
      \n ]\n \n \n \n \n \n \n \n \n
      \n
      \n
      \n
      ","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate, InitialFilterUsage } from 'src/app/models/grid/grid.config';\nimport { SupplierDocumentSignOff } from 'src/app/models/supplier-document/supplier-document-signoff';\nimport { Constants } from \"../../../../enums/constants\";\n\n@Component({\n selector: 'obc-supplier-document-signoff-report',\n templateUrl: './supplier-document-signoff-report.component.html',\n styleUrls: ['./supplier-document-signoff-report.component.scss']\n})\nexport class SupplierDocumentSignoffReportComponent implements OnInit {\n @Input() selectedUserId: number = null;\n @Input() siteIdList: number[] = [];\n @Input() isReportMode: boolean = false;\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n\n constructor() { }\n\n ngOnInit(): void {\n this.prepareGridConfig();\n }\n\n prepareGridConfig() {\n let currentDate = new Date();\n currentDate.setFullYear(currentDate.getFullYear() - 1);\n\n let initialFilters = [];\n if (this.selectedUserId) {\n initialFilters.push({ key: 'userId', value: this.selectedUserId });\n }\n if (this.siteIdList?.length) {\n initialFilters.push({ key: 'siteIdList', value: this.siteIdList });\n }\n\n this.gridConfig = new GridConfig({\n apiUrl: '/api/supplierdocument/get-supplier-document-signoff',\n tableType: Table.SupplierDocumentSignOffReport,\n forceHideAllControlButtons: this.isReportMode,\n displayQuestionsFilter: false,\n displayGeneralSearch: false,\n initialFilters: initialFilters,\n cacheKeyPrefix: this.isReportMode ? Constants.WORKER_PROFILE_REPORT_PREFIX : '',\n });\n this.gridColumns = [\n {\n name: \"Site\",\n key: \"siteName\",\n type: FilterType.Site,\n propertyNameInQuery: 'siteIdList',\n enableFilter: true,\n enableSort: true,\n order: 0,\n },\n {\n name: \"Supplier\",\n key: \"supplierName\",\n type: FilterType.Supplier,\n propertyNameInQuery: 'supplierIdList',\n enableFilter: true,\n enableSort: true,\n order: 1,\n },\n {\n name: \"Document Type\",\n key: \"siteSupplierDocumentType\",\n type: FilterType.Text,\n propertyNameInQuery: 'siteSupplierDocumentTypeSearchTerm',\n isArray: false,\n enableFilter: true,\n enableSort: true,\n order: 2,\n },\n {\n name: \"Version\",\n key: \"siteSupplierDocumentVersion\",\n enableFilter: false,\n enableSort: false,\n order: 3,\n },\n {\n name: \"SignOff Date\",\n key: \"signOffDate\",\n type: FilterType.DateTime,\n enableFilter: false,\n enableSort: false,\n order: 4,\n },\n {\n name: \"Actions\",\n key: \"fileUrls\",\n type: FilterType.Template,\n enableFilter: false,\n enableSort: false,\n order: 5,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewDetails')\n },\n ]\n };\n}\n","
      \n
      \n
      \n
      \n \n \n
      \n \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { SiteBriefingSignOff } from 'src/app/models/site-briefings/site-briefing-signoff';\nimport { MobilePipe } from 'src/app/pipes/mobile.pipe';\nimport { Constants } from \"../../../../enums/constants\";\nimport { SiteBriefingStatus } from 'src/app/enums/site-briefing-status';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { isArray, property } from 'lodash';\n\n@Component({\n selector: 'obc-site-briefing-signoff',\n templateUrl: './site-briefing-signoff.component.html',\n styleUrls: ['./site-briefing-signoff.component.scss']\n})\nexport class SiteBriefingSignoffComponent implements OnInit {\n SiteBriefingStatus = SiteBriefingStatus;\n\n\n @Input() selectedUserId: number = null;\n @Input() siteIdList: number[] = [];\n @Input() isReportMode: boolean = false;\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n selectedFormDataId: number;\n\n constructor(private mobilePipe: MobilePipe, private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.prepareGridConfig();\n }\n\n prepareGridConfig() {\n\n let initialFilters = [];\n if (this.selectedUserId) {\n initialFilters.push({ key: 'userId', value: this.selectedUserId });\n }\n if (this.siteIdList?.length ?? 0) {\n initialFilters.push({ key: 'siteIdList', value: this.siteIdList });\n }\n this.gridConfig = new GridConfig({\n apiUrl: '/api/sitebriefing/get-site-briefing-signoff',\n tableType: Table.SiteBriefingSignOffReport,\n forceHideAllControlButtons: this.isReportMode,\n displayQuestionsFilter: false,\n displayGeneralSearch: false,\n initialFilters: initialFilters,\n cacheKeyPrefix: this.isReportMode ? Constants.WORKER_PROFILE_REPORT_PREFIX : '',\n });\n this.gridColumns = [\n {\n name: \"Site\",\n key: \"siteName\",\n type: FilterType.Site,\n enableFilter: true,\n enableSort: true,\n propertyNameInQuery: 'siteIdList',\n },\n {\n name: \"Name\",\n key: \"formName\",\n type: FilterType.SiteBriefingForm,\n propertyNameInQuery: 'formIdList',\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Submitted On\",\n key: \"siteBriefingSubmitDate\",\n propertyNameInQuery: 'siteBriefingSubmitDate',\n type: FilterType.DateTimeRange,\n isArray: false,\n enableFilter: true,\n enableSort: true,\n },\n this.isReportMode ? {\n name: \"Submitted By\",\n key: \"submittedByUser\",\n enableFilter: false,\n enableSort: false,\n displayFunction: (row) => {\n return row.user?.firstName + ' ' + row.user?.lastName + ' (' + this.mobilePipe.transform(row.user?.mobile) + ')';\n }\n } : null,\n {\n name: \"SignOff Date\",\n key: \"signOffDate\",\n type: FilterType.DateTimeRange,\n enableFilter: false,\n enableSort: false,\n },\n !this.isReportMode ? {\n name: \"User\",\n key: \"user\",\n enableFilter: false,\n enableSort: false,\n displayFunction: (row) => {\n return row.user?.firstName + ' ' + row.user?.lastName + ' (' + this.mobilePipe.transform(row.user?.mobile) + ')';\n }\n } : null,\n {\n name: \"Signed By\",\n key: \"signedByUser\",\n enableFilter: false,\n enableSort: false,\n displayFunction: (row) => {\n return row.signedByUser\n ? `${row.signedByUser.firstName} ${row.signedByUser.lastName} (${this.mobilePipe.transform(row.signedByUser.mobile)})`\n : '';\n }\n },\n {\n name: \"Actions\",\n key: \"\",\n gridTemplate: new GridTemplate().ComponentTemplateName('actions'),\n enableFilter: false,\n enableSort: false,\n },\n ].filter((q) => !!q);\n };\n\n openModal(template: any, selectedFormDataId: number) {\n this.selectedFormDataId = selectedFormDataId;\n this.modalService.show(template, 'modal-lg');\n }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig } from 'src/app/models/grid/grid.config';\nimport { UserProfileCardViewModel } from 'src/app/models/userProfile/worker-profile-view-model';\nimport { ModalService } from \"../../../../services/modal.service\";\n\n@Component({\n selector: 'obc-worker-profile-card-history',\n templateUrl: './worker-profile-card-history.component.html',\n styleUrls: ['./worker-profile-card-history.component.scss']\n})\nexport class WorkerProfileCardHistoryComponent implements OnInit {\n @Input() companyUserCardId: number = null;\n @Input() modalReference: any;\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n constructor(private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.prepareGridConfig();\n }\n\n prepareGridConfig() {\n\n let initialFilters = [];\n if (this.companyUserCardId) {\n initialFilters.push({ key: 'companyUserCardId', value: this.companyUserCardId });\n }\n\n this.gridConfig = new GridConfig({\n apiUrl: '/api/workerprofile/get-user-card-history',\n tableType: Table.WorkerProfileCards,\n forceHideAllControlButtons: true,\n displayQuestionsFilter: false,\n displayGeneralSearch: false,\n initialFilters: initialFilters,\n });\n this.gridColumns = [\n {\n name: \"Type\",\n key: \"documentTypeTitle\",\n type: FilterType.Text,\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Update Date\",\n key: \"dateTime\",\n type: FilterType.DateTime,\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Title\",\n key: \"documentTitle\",\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Expiry Date\",\n key: \"expireDate\",\n type: FilterType.DateRange,\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Status\",\n key: \"documentExpiryStatus\",\n type: FilterType.DocumentExpiryStatus,\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"File\",\n key: \"fileUrls\",\n type: FilterType.File,\n enableSort: false,\n enableFilter: false,\n displayFunction: (_) => { return 'View' },\n },\n ]\n };\n\n closePopup() {\n this.modalService.hide(this.modalReference);\n }\n}\n","
      \n
      \n
      \n
      \n
      Card History
      \n
      \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n","
      \n
      \n
      \n \n
      \n \n \n\n
      \n \n \n \n \n
      \n\n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { UserProfileCardViewModel } from 'src/app/models/userProfile/worker-profile-view-model';\nimport { Constants } from \"../../../../enums/constants\";\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-worker-profile-card-report',\n templateUrl: './worker-profile-card-report.component.html',\n styleUrls: ['./worker-profile-card-report.component.scss']\n})\nexport class WorkerProfileCardReportComponent implements OnInit {\n @Input() selectedUserId: number = null;\n @Input() isReportMode: boolean = false;\n @Input() siteId: number = null;\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n companyUserCardId: number;\n\n constructor(private modalService: ModalService) { }\n\n ngOnInit(): void {\n this.prepareGridConfig();\n }\n\n prepareGridConfig() {\n\n let initialFilters = [];\n if (this.selectedUserId) {\n initialFilters.push({ key: 'userId', value: this.selectedUserId });\n }\n if (this.siteId) {\n initialFilters.push({ key: 'siteId', value: this.siteId });\n }\n\n this.gridConfig = new GridConfig({\n apiUrl: '/api/workerprofile/get-user-cards',\n tableType: Table.WorkerProfileCards,\n forceHideAllControlButtons: this.isReportMode,\n displayQuestionsFilter: false,\n displayGeneralSearch: false,\n initialFilters: initialFilters,\n cacheKeyPrefix: this.isReportMode ? Constants.WORKER_PROFILE_REPORT_PREFIX : '',\n });\n this.gridColumns = [\n {\n name: \"Type\",\n key: \"documentTypeTitle\",\n type: FilterType.DocumentType,\n propertyNameInQuery: 'documentTypeIdList',\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Update Date\",\n key: \"dateTime\",\n propertyNameInQuery: 'updateDateTime',\n isArray: false,\n type: FilterType.DateTimeRange,\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Title\",\n key: \"documentTitle\",\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"Expiry Date\",\n key: \"expireDate\",\n propertyNameInQuery: 'expireDate',\n type: FilterType.DateTimeRange,\n isArray: false,\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Status\",\n key: \"documentExpiryStatus\",\n propertyNameInQuery: 'documentExpiryStatusList',\n type: FilterType.DocumentExpiryStatus,\n enableFilter: true,\n enableSort: true,\n },\n {\n name: \"Actions\",\n key: \"\",\n gridTemplate: new GridTemplate().ComponentTemplateName('actions'),\n enableFilter: false,\n enableSort: false,\n },\n ]\n };\n\n historyPopUpReference: any;\n openModal(template: any, companyUserCardId: number) {\n this.companyUserCardId = companyUserCardId;\n this.historyPopUpReference = this.modalService.show(template, 'modal-lg');\n }\n}\n","export enum ActorType {\n User = 0,\n JobServer = 1,\n Anonymous = 2,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ObcEventLogTypeEnum, UserActivityEventType, UserProfileField } from '../enums/obc-event-log-type.enum';\n\n@Pipe({\n name: 'workerProfileSubType'\n})\nexport class WorkerProfileSubTypePipe implements PipeTransform {\n\n transform(value: unknown, eventType: ObcEventLogTypeEnum): string {\n if (eventType == ObcEventLogTypeEnum.UserActivity) {\n switch (value) {\n case UserActivityEventType.CheckIn: return 'CheckIn';\n case UserActivityEventType.FinaliseCheckIn: return 'Finalise CheckIn';\n case UserActivityEventType.HostCheckIn: return 'Host CheckIn';\n case UserActivityEventType.CheckOut: return 'CheckOut';\n case UserActivityEventType.FinaliseCheckOut: return 'Finalise CheckOut';\n case UserActivityEventType.HostCheckOut: return 'Host CheckOut';\n case UserActivityEventType.SubmitInduction: return 'Submit Induction';\n case UserActivityEventType.SignOffSiteBriefing: return 'SignOff Site Briefing';\n case UserActivityEventType.SignOffSupplierDocument: return 'SignOff Supplier Document';\n case UserActivityEventType.PreCheckIn: return 'Pre CheckIn';\n case UserActivityEventType.FillForm: return 'Fill Form';\n }\n }\n\n if (eventType == ObcEventLogTypeEnum.UpdateUserProfile) {\n switch (value) {\n case UserProfileField.CompanySupplierId: return 'Company Supplier';\n case UserProfileField.VisitorTypeId: return 'Visitor Type';\n case UserProfileField.FirstName: return 'First Name';\n case UserProfileField.LastName: return 'Last Name';\n case UserProfileField.Email: return 'Email';\n case UserProfileField.ProfileImage: return 'Profile Image';\n case UserProfileField.DateOfBirth: return 'Date Of Birth';\n case UserProfileField.EmergencyContact: return 'Emergency Contact';\n case UserProfileField.Gender: return 'Gender';\n }\n }\n\n return value?.toString() ?? '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { KeyValue } from '../models/helper-models';\n\n@Pipe({\n name: 'objectToListKeyValue'\n})\nexport class ObjectToListKeyValuePipe implements PipeTransform {\n\n transform(obj: any): KeyValue[] {\n let list: KeyValue[] = [];\n for (let key in obj) {\n list.push({ key: key, value: obj[key] });\n }\n return list;\n }\n\n}\n","
      \n
      \n
      \n \n
      \n \n \n
      \n Anonymous User\n
      \n
      \n {{data.actor.firstName + ' ' + data.actor.lastName}}\n ({{ data.actor.mobile|mobile }})\n
      \n
      \n \n {{data.eventType | workerProfileLogType}}\n \n \n {{(data.userProfileType ?? data.userActivityType) | workerProfileSubType:data.eventType}}\n
      \n
        \n \n
      • \n {{item.key}}: \n {{item.value}}\n [Empty]\n
      • \n
        \n
      \n
      \n
      \n
        \n \n
      • \n {{item.key}}: \n {{item.value}}\n
      • \n
        \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n
      ","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { ObcEventLogViewModel } from 'src/app/models/userProfile/worker-profile-view-model';\nimport { Constants } from \"../../../../enums/constants\";\nimport { ActorType } from 'src/app/enums/actor-type';\n\n@Component({\n selector: 'obc-worker-profile-history',\n templateUrl: './worker-profile-history.component.html',\n styleUrls: ['./worker-profile-history.component.scss']\n})\nexport class WorkerProfileHistoryComponent implements OnInit {\n ActorType = ActorType;\n\n @Input() selectedUserId: number = null;\n @Input() siteId: number = null;\n @Input() isReportMode: boolean = false;\n\n @ViewChild('grid') grid: any;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n\n constructor() { }\n\n ngOnInit(): void {\n this.prepareGridConfig();\n }\n\n prepareGridConfig() {\n\n let initialFilters = [];\n if (this.selectedUserId) {\n initialFilters.push({ key: 'userId', value: this.selectedUserId });\n }\n if (this.siteId) {\n initialFilters.push({ key: 'siteId', value: this.siteId });\n }\n\n this.gridConfig = new GridConfig({\n apiUrl: '/api/workerprofile/get-user-history',\n tableType: Table.WorkerProfileHistory,\n forceHideAllControlButtons: this.isReportMode,\n displayQuestionsFilter: false,\n displayGeneralSearch: false,\n initialFilters: initialFilters,\n cacheKeyPrefix: this.isReportMode ? Constants.WORKER_PROFILE_REPORT_PREFIX : '',\n });\n this.gridColumns = [\n {\n name: \"Date/Time\",\n key: \"dateTime\",\n type: FilterType.DateTimeRange,\n propertyNameInQuery: 'date',\n isArray: false,\n enableFilter: true,\n enableSort: false,\n },\n {\n name: \"Performed by\",\n key: \"actor\",\n type: FilterType.Template,\n enableFilter: false,\n enableSort: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('actor'),\n\n },\n {\n name: \"Activity Type\",\n key: \"eventType\",\n type: FilterType.EventLogType,\n propertyNameInQuery: 'eventLogType',\n gridTemplate: new GridTemplate().ComponentTemplateName('logType'),\n isArray: false,\n enableFilter: true,\n enableSort: false,\n },\n {\n name: \"Activity Details\",\n key: 'dataAsJson',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('details'),\n visible: true,\n }\n ]\n };\n\n getSubType(dataAsJson: string, eventType: number): string {\n let jsonParsed = JSON.parse(dataAsJson);\n if (eventType == 0)\n return jsonParsed.userActivityEventType;\n else\n return jsonParsed.userProfileField;\n }\n}\n","
      \n \n
      \n {{errorMessage}}\n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n
      ","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { TabDirective, TabsetComponent } from 'ngx-bootstrap/tabs';\nimport { cleanAndGetField, WorkerProfileViewModel } from 'src/app/models/userProfile/worker-profile-view-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { WorkerProfileService } from 'src/app/services/worker-profile.service';\n\n@Component({\n selector: 'obc-work-profile-tab',\n templateUrl: './work-profile-tab.component.html',\n styleUrls: ['./work-profile-tab.component.scss']\n})\nexport class WorkProfileTabComponent implements OnInit {\n\n showTab = [1];\n @Input() siteId: number | null = null;\n @Input() selectedSites: number[] = null;\n\n get calculatedSelectedSites() {\n // the default value foe seletedSites can be null as well I guess?\n return this.selectedSites ?? [];\n }\n _userId;\n showPanel = true;\n isLoading: boolean = true;\n profile: WorkerProfileViewModel | undefined;\n cleanedFields: any[] = [];\n errorMessage: string | null = null;\n\n @Input() set userId(userId: number) {\n this._userId = userId;\n if (userId) {\n this.loadWorkerProfile();\n }\n }\n\n @ViewChild('tabset') tabset: TabsetComponent;\n\n @Input() isModalTab: boolean = false;\n\n constructor(private workerProfileService: WorkerProfileService, private modalService: ModalService) { }\n ngOnInit(): void {\n\n }\n\n sortAndShow() {\n this.tabset.tabs.sort((first: TabDirective, second: TabDirective) => { return (first.id > second.id) ? 1 : -1 });\n this.showTab = this.isModalTab ? [1, 0] : [0, 1]; // Because of first tab (User Info) is hidden in non-modal view\n }\n\n private loadWorkerProfile(): void {\n if (!this._userId) {\n console.error('User ID is undefined. Cannot load worker profile.');\n return;\n }\n\n this.isLoading = true;\n this.errorMessage = null;\n this.workerProfileService.loadWorkerProfile(this._userId).subscribe({\n next: (profile: any) => {\n this.profile = profile;\n this.cleanedFields = cleanAndGetField(profile); // Get cleaned fields\n this.isLoading = false;\n this.sortAndShow();\n },\n error: (error) => {\n this.isLoading = false;\n this.errorMessage = \"loading user detail fail, please try again\";\n }\n });\n }\n\n}\n\n","
      \n \n \n \n
      \n\n\n\n
      \n
      \n
      \n
      \n \n
      \n {{ getProfileAvatarText() }}\n
      \n
      \n
      \n
      \n
      \n
      Basic Information
      \n
      \n
      \n
      \n \n
      \n \n {{ this.profile.firstName ? this.profile.firstName : \"N/A\" }}\n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n {{ this.profile.lastName ? this.profile.lastName : \"N/A\" }}\n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n {{ profile.mobile | mobile }}\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n {{ this.profile.companySupplierTitle ?\n this.profile.companySupplierTitle : \"N/A\" }}\n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n {{ this.profile.visitorTypeTitle ? this.profile.visitorTypeTitle :\n \"N/A\" }}\n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n {{ this.profile.email ? this.profile.email : \"N/A\" }}\n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n {{ +this.profile.gender | gender }}\n N/A\n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n \n {{ isSetDOB() ? (this.profile.dateOfBirth | date) : \"N/A\" }}\n \n \n \n
      \n
      \n
      \n
      \n
      Emergency Contact Information
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      ","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {UserAutoCompleteFilterByFields} from 'src/app/enums/user-auto-complete-target-fields';\nimport {WorkerProfileViewModel} from 'src/app/models/userProfile/worker-profile-view-model';\nimport {WorkerProfileService} from 'src/app/services/worker-profile.service';\nimport {FormControl, FormGroup, Validators} from \"@angular/forms\";\nimport {DatetimePickerMode} from \"../../../enums/datetime-picker-mode.enum\";\nimport {Gender} from \"../../../enums/gender.enum\";\nimport {CheckedVisitorType} from \"../../../models/visitor-type\";\nimport {EmergencyContactEmitResponse} from \"../../../models/emergency-contact-emit-response\";\nimport * as moment from \"moment/moment\";\nimport {dateFormat} from \"../../../helpers/date-time-format\";\nimport {ToastrService} from \"ngx-toastr\";\nimport {Subscription} from \"rxjs\";\nimport {UserService} from 'src/app/services/user.service';\nimport {WorkerProfileField} from \"src/app/enums/worker-profile-field.enum\";\n\n@Component({\n selector: 'obc-worker-profile',\n templateUrl: './worker-profile.component.html',\n styleUrls: ['./worker-profile.component.scss']\n})\nexport class WorkerProfileComponent implements OnInit {\n UserAutoCompleteFilterByFields = UserAutoCompleteFilterByFields;\n isInProcess: boolean = false;\n showPanels: boolean = true;\n hasAccessToEdit: boolean = false;\n isGodUser: boolean = false;\n _profile: WorkerProfileViewModel;\n infoFormGroupSubscription: Subscription;\n ProfileField = WorkerProfileField;\n\n get EditableFields() { return this._profile.editableFields; }\n isInEditMode(profileField: WorkerProfileField) {\n return this.isEditMode && this.EditableFields.some(p => p == profileField);\n }\n\n get profile() {\n return this._profile;\n }\n\n _siteId: number;\n get siteId() {\n return this._siteId;\n }\n\n @Input() set siteId(sid: number) {\n this._siteId = sid;\n this.reloadAll();\n }\n\n get selectedSiteArray() {\n return this.siteId ? [this.siteId] : [];\n }\n\n @Input() set profile(data: WorkerProfileViewModel) {\n this._profile = data;\n this.isEditMode = false;\n this.isEditFormDirty.next(false);\n\n this.setProfileDataToControls();\n }\n\n @Output() isEditFormDirty: EventEmitter = new EventEmitter();\n @Output() onProfileUpdated: EventEmitter = new EventEmitter();\n\n reloadAll() {\n this.calculateEditAccess();\n this.isInProcess = true;\n this.showTab = [];\n this.showPanels = false;\n setTimeout(() => {\n this.showTab = [1];\n this.showPanels = true;\n this.isInProcess = false;\n }, 10);\n }\n\n showEditButton() {\n return !this.isEditMode && this.hasAccessToEdit;\n }\n\n setProfileDataToControls() {\n this.infoFormGroup = new FormGroup({});\n this.infoFormGroup.addControl('firstName', new FormControl(this.profile?.firstName))\n this.infoFormGroup.addControl('lastName', new FormControl(this.profile?.lastName))\n this.infoFormGroup.addControl('companySupplierTitle', new FormControl(this.profile?.companySupplierTitle))\n this.infoFormGroup.addControl('companySupplier', new FormControl(this.profile?.companySupplierId))\n this.infoFormGroup.addControl('visitorType', new FormControl(this.profile?.visitorTypeId ?? null))\n this.infoFormGroup.addControl('visitorTypeTitle', new FormControl(this.profile?.visitorTypeTitle ?? null))\n this.infoFormGroup.addControl('email', new FormControl(this.profile?.email, [Validators.email]))\n this.infoFormGroup.addControl('gender', new FormControl(this.profile?.gender))\n this.infoFormGroup.addControl('dateOfBirth', new FormControl(\n this.profile?.dateOfBirth ? new Date(this.profile?.dateOfBirth) : null)\n )\n this.infoFormGroup.addControl('emergencyContact', new FormControl(this.profile?.emergencyContact));\n\n this.calculateEditAccess();\n }\n\n showTab = [1];\n\n constructor(\n private workerProfileService: WorkerProfileService,\n private toast: ToastrService,\n private userService: UserService) { }\n\n ngOnInit(): void {\n this.calculateEditAccess();\n }\n\n private calculateEditAccess() {\n this.hasAccessToEdit = this.userService.hasAccessToEditUserDirectory(this.siteId);\n this.isGodUser = this.userService.isGodUser();\n }\n\n isSetGender() {\n return this.profile.gender !== undefined && this.profile.gender !== null;\n }\n\n isSetDOB() {\n return this.profile.dateOfBirth !== undefined\n && this.profile.dateOfBirth !== null\n && this.profile.dateOfBirth.toString() !== \"Invalid Date\";\n }\n\n getProfileAvatarText() {\n return this.profile?.firstName?.charAt(0).toUpperCase() +\n this.profile?.lastName?.charAt(0).toUpperCase();\n }\n\n infoFormGroup: FormGroup = new FormGroup({});\n\n isEditMode: boolean = false;\n initialEditFormGroupSnapshot: string;\n updatedEditFormGroupSnapshot: string;\n onEditProfileButtonClicked() {\n this.isEditMode = !this.isEditMode;\n if (this.isEditMode) {\n this.infoFormGroupSubscription?.unsubscribe();\n this.setProfileDataToControls();\n this.getSnapshotOfFormGroupData(this.profile);\n this.infoFormGroupSubscription = this.infoFormGroup.valueChanges.subscribe((res) => {\n this.getSnapshotOfFormGroupData(res);\n });\n }\n }\n\n getSnapshotOfFormGroupData(data) {\n let stringifiedKeyValueList = [];\n for (const [key, value] of Object.entries(data)) {\n let entryValue: any = value;\n if (key == 'gender') {\n entryValue = this.getGenderValue();\n } else if (key == 'dateOfBirth') {\n entryValue = moment.utc(entryValue).local().format(\"YYYY-MM-DD\");\n }\n stringifiedKeyValueList.push(`${key}:${JSON.stringify(entryValue)}`);\n }\n if (!this.initialEditFormGroupSnapshot) {\n this.initialEditFormGroupSnapshot = stringifiedKeyValueList.join(\"\");\n } else {\n this.updatedEditFormGroupSnapshot = stringifiedKeyValueList.join(\"\");\n\n this.isEditFormDirty.next(this.isInfoFormGroupUpdated());\n }\n }\n\n isInfoFormGroupUpdated(): boolean {\n return this.initialEditFormGroupSnapshot != this.updatedEditFormGroupSnapshot;\n }\n\n isSaveButtonDisabled() {\n return this.infoFormGroup.invalid || !this.isInfoFormGroupUpdated();\n }\n\n onSaveProfileButton() {\n this.isInProcess = true;\n const reqModel = {\n dateOfBirth: this.infoFormGroup.controls.dateOfBirth.value ? moment(this.infoFormGroup.controls.dateOfBirth.value, dateFormat).utcOffset(0, true).toDate() : null,\n email: this.infoFormGroup.controls.email.value,\n emergencyContact: this.infoFormGroup.controls.emergencyContact.value,\n firstName: this.infoFormGroup.controls.firstName.value,\n lastName: this.infoFormGroup.controls.lastName.value,\n companyId: this.profile.companyId,\n siteId: this.siteId,\n userId: this.profile.userId,\n gender: this.getGenderValue(),\n companySupplierId: this.infoFormGroup.controls.companySupplier.value,\n visitorTypeId: this.infoFormGroup.controls.visitorType.value ?\n +this.infoFormGroup.controls.visitorType.value : null,\n };\n this.workerProfileService.updateUserProfile(reqModel).subscribe({\n next: (newProfile) => {\n this.toast.success(`Profile was updated successfully`);\n this.infoFormGroupSubscription?.unsubscribe();\n this.profile = newProfile;\n this.onProfileUpdated.emit();\n this.initialEditFormGroupSnapshot = null;\n this.isEditMode = false;\n this.isInProcess = false;\n this.isEditFormDirty.next(false);\n },\n error: (_) => {\n this.toast.error(`Something went wrong!`);\n this.isInProcess = false;\n },\n })\n }\n\n getGenderValue() {\n let genderControl = this.infoFormGroup.controls.gender;\n if (genderControl?.value == null || genderControl?.value === \"null\") {\n return null;\n }\n return +genderControl?.value;\n }\n\n selectVisitorType(data: CheckedVisitorType) {\n this.infoFormGroup.controls.visitorType.setValue(data?.id)\n this.infoFormGroup.controls.visitorTypeTitle.setValue(data?.title)\n }\n\n updateEmergencyContact(data: EmergencyContactEmitResponse) {\n if (data?.value && data?.isValid) {\n this.infoFormGroup?.controls.emergencyContact.setValue(JSON.stringify(data.value));\n }\n if (data?.isValid) {\n this.infoFormGroup?.controls.emergencyContact.setErrors(null);\n } else {\n this.infoFormGroup?.controls.emergencyContact.setErrors({ 'incorrect': true });\n }\n this.infoFormGroup?.updateValueAndValidity();\n }\n\n onSelectSupplier(data) {\n this.infoFormGroup.controls.companySupplierTitle.setValue(data?.name);\n this.infoFormGroup.controls.companySupplierTitle.updateValueAndValidity();\n this.infoFormGroup.updateValueAndValidity();\n }\n\n DatetimePickerMode = DatetimePickerMode;\n Gender = Gender;\n}\n","\n\n
      \n
      User Directory
      \n
      \n
      \n
      \n \n
      \n
      \n\n
      \n
      \n
      \n \n
      \n
      \n
      \n \n \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n\n\n
      \n
      User Details
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { BaseGridComponent } from 'src/app/custom-controls/grid/base-grid.component';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate, InitialFilter } from 'src/app/models/grid/grid.config';\nimport { WorkerProfileViewModel } from 'src/app/models/userProfile/worker-profile-view-model';\nimport { MobilePipe } from 'src/app/pipes/mobile.pipe';\nimport { LayoutService } from 'src/app/services/layout.service';\nimport { ModalService } from \"../../../services/modal.service\";\nimport { Observable, of, Subscription } from 'rxjs';\nimport { UserPermission } from 'src/app/enums/user-permission.enum';\n\n@Component({\n selector: 'obc-user-directory',\n templateUrl: './user-directory.component.html',\n styleUrls: ['./user-directory.component.scss']\n})\nexport class UserDirectoryComponent implements OnInit {\n\n\n @ViewChild('grid') grid: BaseGridComponent;\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n showProfilePanel: boolean = false;\n selectedUserProfile: WorkerProfileViewModel;\n initialFilters: InitialFilter[] = [];\n selectedSiteId: number;\n UserPermission = UserPermission;\n siteRequiredPermissions = UserPermission.ViewReports | UserPermission.EditUserDirectory;\n\n constructor(private layoutService: LayoutService,\n private mobilePipe: MobilePipe,\n private modalService: ModalService\n ) { }\n\n ngOnInit(): void {\n this.prepareGridConfig();\n this.layoutService.header = \"User Directory\";\n }\n\n prepareGridConfig() {\n this.gridConfig = new GridConfig({\n apiUrl: '/api/workerprofile/get-user-directory',\n tableType: Table.UserDirectory,\n forceHideAllControlButtons: false,\n displayQuestionsFilter: false,\n displayGeneralSearch: true,\n generalSearchPlaceholder: 'Search by name, mobile, supplier or visitor type',\n generalSearchApiKeyName: 'searchTerm',\n generalSearchMinimumCharsToSearch: 2,\n initialFilters: this.initialFilters,\n });\n this.gridColumns = [\n {\n name: \"Profile Image\",\n key: \"profileImageUrl\",\n type: FilterType.Image,\n enableFilter: false,\n enableSort: false,\n },\n {\n name: \"User\",\n key: \"user\",\n propertyNameInQuery: 'userIdList',\n type: FilterType.User,\n enableFilter: true,\n enableSort: true,\n displayFunction: (profile) => {\n return `${profile.firstName} ${profile.lastName} (${this.mobilePipe.transform(profile.mobile)})`;\n },\n hideEmptyColumnsEmptinessConditionCallback: (_) => {\n return false;\n },\n },\n {\n name: \"Supplier\",\n key: \"companySupplierTitle\",\n propertyNameInQuery: 'supplierIdList',\n type: FilterType.Supplier,\n enableFilter: true,\n enableSort: true,\n isArray: true,\n },\n {\n name: \"Visitor Type\",\n key: \"visitorTypeTitle\",\n propertyNameInQuery: 'visitorTypeIdList',\n type: FilterType.VisitorType,\n enableFilter: true,\n enableSort: true,\n isArray: true,\n },\n {\n name: \"Details\",\n key: 'View Profile',\n type: FilterType.Template,\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('viewProfile'),\n visible: true,\n }\n ]\n };\n\n onSelectSite(site) {\n this.selectedSiteId = site?.id;\n\n this.initialFilters = this.initialFilters.filter(f => f.key != 'siteIds');\n\n if (this.selectedSiteId)\n this.initialFilters.push({ key: 'siteIds', value: [this.selectedSiteId] });\n\n this.grid.gridConfig.initialFilters = this.initialFilters;\n this.grid?.loadData(0);\n if (this.showProfilePanel) {\n\n }\n }\n\n showProfile(profile: WorkerProfileViewModel) {\n this.selectedUserProfile = profile;\n this.showProfilePanel = true;\n }\n\n confirmIgnoreUnsavedChanges() {\n if (this.isEditFormDirtyFlag) {\n return this.modalService.confirm('There are unsaved changes. Are you sure you want to leave?', 'Unsaved Changes');\n } else {\n return of(true);\n }\n }\n\n onBackButton() {\n this.confirmIgnoreUnsavedChanges()\n .subscribe(res => {\n if (res)\n this.navigateBack()\n });\n }\n\n canDeactivate(): Observable | Observable | Promise | boolean {\n return this.confirmIgnoreUnsavedChanges();\n }\n\n navigateBack() {\n this.selectedUserProfile = null;\n this.showProfilePanel = false;\n }\n\n onProfileUpdated() {\n this.grid?.loadData();\n }\n\n isEditFormDirtyFlag: boolean = false;\n isEditFormDirty(value: boolean) {\n this.isEditFormDirtyFlag = value;\n }\n\n\n}\n","\n
      \n
      \n \n {{ getProviderTag() || 'No Provider Assigned' }}\n \n \n
      \n
      \n\n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { CountrySmsInfo, SmsProvider } from 'src/app/models/sms-provider-model';\nimport { CountryService } from 'src/app/services/country.service';\nimport { ModalService } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'app-plan-toggle',\n templateUrl: './toggle-selector.component.html',\n})\nexport class ToggleSelectorComponent implements OnInit {\n \n @Input() country: CountrySmsInfo; // Input for the company object\n @Input() smsProviders: SmsProvider[] = []; // Input for the list of plans\n\n ngOnInit(): void {\n this.planControl.setValue(this.country?.smsProvider);\n }\n constructor(private countryService: CountryService, private modal: ModalService){}\n\n isEditMode = false; // Controls whether we are in \"view\" or \"edit\" mode\n\n planControl = new FormControl(null); \n\n switchMode(): void {\n this.isEditMode = !this.isEditMode;\n }\n\n getProviderTag(): string {\n const provider = this.smsProviders.find((p) => p.value === this.country.smsProvider);\n return provider ? provider.displayText : 'Provider Not Selected'; // Adjust fallback if needed\n }\n\n setActivePlan(): void {\n const countryId = this.country.id; \n const smsProvider = this.planControl.value;\n \n this.countryService.updateSmsProvider(countryId, smsProvider).subscribe({\n next: (_) => {\n this.country.smsProvider = smsProvider; // Update only on success\n this.switchMode();\n },\n error: (_) => {\n console.log(_)\n this.modal.error(\"updating SMS message provider fail!\");\n }\n });\n }\n}\n","
      \n
      Test SMS providers
      \n
      \n
      \n
      \n \n
      \n \n \n
      \n\n \n
      \n \n \n
      \n\n \n
      \n \n
      \n
      \n
      \n
      \n
      ","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { SmsProvider } from 'src/app/models/sms-provider-model';\nimport { CountryService } from 'src/app/services/country.service';\n\n@Component({\n selector: 'obc-test-message-component',\n templateUrl: './test-message-component.component.html'\n})\nexport class TestMessageComponentComponent implements OnInit {\n\n @Input() smsProviders:SmsProvider[];\n\n constructor(private countryService: CountryService) { }\n\n mobileFormGroup;\n placeholder: string = \"Mobile number in international format like +61xxxxxxxxx\";\n\n ngOnInit() {\n let mobilePattern = /^\\+[0-9]{8,}$/;\n this.mobileFormGroup = new FormGroup({\n smsProvider: new FormControl(null),\n mobileNumber: new FormControl('', [Validators.required, Validators.pattern(mobilePattern)])\n });\n }\n\n sendMessage = () => {\n const selectedSmsProvider = this.mobileFormGroup.get('smsProvider')?.value;\n const numberToTest = this.mobileFormGroup.get('mobileNumber')?.value;\n this.countryService.testSmsProvider(selectedSmsProvider, numberToTest).subscribe();\n }\n\n}\n","
      \n
      \n
      Countries
      \n
      \n
      \n \n \n \n \n \n \n
      \n
      \n","import { UserEditPhoneComponent } from './components/user-edit-phone/user-edit-phone.component';\nimport { NoAccessComponent } from './components/no-access/no-access.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { SecureComponent } from './layout/secure/secure.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { CompanyComponent } from './components/company/company.component';\nimport { UserComponent } from './components/user/user.component';\nimport { PublicComponent } from './layout/public/public.component';\nimport { SiteAttendancePermissionComponent } from './components/site-permissions/site-attendance-permission/site-attendance-permission.component';\nimport { LoginComponent } from './auth/login/login.component';\nimport { QuestionManagerComponent } from './components/question/question-manager/question-manager.component';\nimport { SiteActivityComponent } from './components/site-activity/site-activity.component';\nimport { SiteAttendanceComponent } from './components/site-attendance/site-attendance.component';\nimport { UserDocumentTypesComponent } from './components/user-document-types/user-document-types.component';\nimport { GodComponent } from './components/god/god.component';\nimport { ManageCompaniesComponent } from './components/god/manage-companies/manage-companies.component';\nimport { SiteAttendanceBlockedUserComponent } from './components/site-permissions/site-attendance-blocked-user/site-attendance-blocked-user.component';\nimport { ManageVideosComponent } from './components/manage-videos/manage-videos.component';\nimport { VideoListComponent } from './components/video-list/video-list.component';\nimport { ManualCheckComponent } from './components/manual-check/manual-check.component';\nimport { NotFoundPageComponent } from './components/not-found-page/not-found-page.component';\nimport { CompanyGuardService } from './services/company-guard.service';\nimport { CompanyUserComponent } from './components/site-permissions/company-user/company-user.component';\nimport { FlaggedUserComponent } from './components/site-permissions/flagged-user/flagged-user.component';\nimport { CompanyOwnerComponent } from './components/company-owner/company-owner.component';\nimport { BillingComponent } from './components/company-owner/billing/billing.component';\nimport { UserProfileComponent } from './components/user-profile/user-profile.component';\nimport { ChangePasswordComponent } from './components/change-password/change-password.component';\nimport { CompanySettingsComponent } from './components/company-settings/company-settings.component';\nimport { ManagePlansComponent } from './components/god/manage-plans/manage-plans.component';\nimport { SiteAutomationsComponent } from './components/company-owner/site-automations/site-automations.component';\nimport { CardDesignerComponent } from './components/designer/card-designer/card-designer.component';\nimport { AnonymousComponent } from './layout/anonymouse/anonymous.component';\nimport { AnonymousCheckComponent } from './components/anonymous-check/anonymous-check.component';\nimport { AnonymousCheckinComponent } from './components/anonymous-check/anonymous-checkin/anonymous-checkin.component';\nimport { SuccessfullAnonymousCheckinComponent } from './components/anonymous-check/anonymous-checkin/successfull-anonymous-checkin/successfull-anonymous-checkin.component';\nimport { ManageIndustryTypesComponent } from './components/god/manage-industry-types/manage-industry-types.component';\nimport { AnnouncementManagerComponent } from './components/announcement-manager/announcement-manager.component';\nimport { ScannableItemsComponent } from './components/scannables/scannable-items/scannable-items.component';\nimport { ScannableGroupsComponent } from './components/scannables/scannable-groups/scannable-groups.component';\nimport { ImportSitesComponent } from './components/site/import-sites/import-sites.component';\nimport { MyScheduledReportsComponent } from './components/site-activity/my-scheduled-reports/my-scheduled-reports.component';\nimport {\n CompanyAdminGuardService,\n GodUserGuardService,\n OverLappedPermissionGuardService,\n PermissionGuardService,\n SiteAdminGuardService,\n SitesPageGuardService,\n} from './services/permission-guard.service';\nimport { SiteUserComponent } from './components/site-permissions/site-user/site-user.component';\nimport { CombinedUserPermissionList, UserPermission } from './enums/user-permission.enum';\nimport { AnonymousCheckoutComponent } from './components/anonymous-check/anonymous-checkout/anonymous-checkout.component';\nimport { FeatureGuardService } from './services/feature-guard.service';\nimport { ProductPlanFeature } from './enums/product-plan-feature.enum';\nimport { QuickSetupComponent } from './components/quick-setup/quick-setup.component';\nimport { HostPushNotificationComponent } from './components/host-push-notification/host-push-notification.component';\nimport { CompanyEmployeeComponent } from './components/site-permissions/company-employee/company-employee.component';\nimport { DocumentReportComponent } from './components/document-report/document-report.component';\nimport { CompanySupplierComponent } from './components/company-supplier/company-supplier.component';\nimport { EditCompanySupplierComponent } from './components/company-supplier/edit-company-supplier/edit-company-supplier.component';\nimport { InventoryToolReportComponent } from './components/inventory/reports/inventory-tool-report/inventory-tool-report.component';\nimport { FormManageComponent } from './components/form-manage/form-manage/form-manage.component';\nimport { InductionManageComponent } from './components/induction/induction-manage/induction-manage.component';\nimport { SupplierDocumentsComponent } from './components/supplier-documents/supplier-documents.component';\nimport { SiteSupplierDocumentUploaderContainerComponent } from './components/supplier-documents/site-supplier-document-uploader-container/site-supplier-document-uploader-container.component';\nimport { FormReportComponent } from './components/form-manage/form-report/form-report.component';\nimport { SiteManagementComponent } from \"./components/site-management/site-management.component\";\nimport { ProcoreConfigurationAccessCodeCallbackComponent } from './components/company-integrations/procore-configuration-access-code-callback/procore-configuration-access-code-callback.component';\nimport { CompanyIntegrationsComponent } from './components/company-integrations/company-integrations.component';\nimport { CanDeactivateGuard } from \"./services/can-deactivate-guard.service\";\nimport { PendingToApproveListComponent } from \"./components/pending-approval/pending-to-approve-list/pending-to-approve-list.component\";\nimport { MyobConfigurationAccessCodeCallbackComponent } from './components/company-integrations/myob-configuration-access-code-callback/myob-configuration-access-code-callback.component';\nimport { PermitReportComponent } from './components/form-manage/permit/permit-report/permit-report.component';\nimport { SupplierFormsComponent } from \"./components/supplier-forms/supplier-forms.component\";\nimport { SupplierAnonymousFormsComponent } from \"./components/supplier-forms/supplier-anonymous-forms/supplier-anonymous-forms.component\";\nimport { SupplierJoinToCompanyComponent } from \"./components/supplier-join-to-company/supplier-join-to-company.component\";\nimport { SecurityLogReportComponent } from './components/security-log-report/security-log-report.component';\nimport { SiteAccessControlUnitManualComponent } from './components/site-access-control-unit-manual/site-access-control-unit-manual.component';\nimport { ManageSiteAssetComponent } from './components/site-asset/manage-site-asset/manage-site-asset.component';\nimport { TemplateCompanyAssetManagerComponent } from './components/inventory/template-company-asset-manager/template-company-asset-manager.component';\nimport { ManageGlobalDynamicFieldsComponent } from './components/inventory/manage-global-dynamic-fields/manage-global-dynamic-fields.component';\nimport { NotificationSettingComponent } from './components/notification-setting/notification-setting.component';\nimport { PermissionContainerComponent } from './components/permission-container/permission-container.component';\nimport { EvacuationReportComponent } from './components/evacuation-report/evacuation-report.component';\nimport { GodUserPermission } from './enums/god-user-permission.enum';\nimport { SupplierDocumentReportComponent } from \"./components/supplier-documents/supplier-document-report/supplier-document-report.component\";\nimport { PermissionsSettingsComponent } from \"./components/company-settings/permissions-settings/permissions-settings.component\";\nimport { ProcoreSyncMonitoringComponent } from './components/procore-sync-monitoring/procore-sync-monitoring.component';\nimport { ManageGatesComponent } from './components/god/manage-gates/manage-gates.component';\nimport { WorkflowEngineComponent } from './workflow/workflow-engine/workflow-engine.component';\nimport { WorkflowCartableComponent } from './workflow/workflow-cartable/workflow-cartable.component';\nimport { OtherSiteSupplierDocumentReportComponent } from './components/other-site-supplier-document-report/other-site-supplier-document-report.component';\nimport { TemplateCompanyVisitorTypesComponent } from './components/template-company-visitor-types/template-company-visitor-types.component';\nimport { ProcoreForceToSyncComponent } from './components/god/procore-force-to-sync/procore-force-to-sync.component';\nimport { PdfViewerComponent } from \"./components/pdf-viewer/pdf-viewer.component\";\nimport { CompanyWorkflowTemplateComponent } from './components/god/company-workflow-template/company-workflow-template.component';\nimport { SiteBriefingReportComponent } from './components/form-manage/site-briefing-report/site-briefing-report.component';\nimport { InductionReportComponent } from './components/induction/induction-report/induction-report.component';\nimport { UserDirectoryComponent } from './components/worker-profile/user-directory/user-directory.component';\nimport { ManageSmsProviderComponent } from './components/god/manage-sms-provider/manage-sms-provider.component';\n\n\nconst routes: Routes = [\n { path: '', redirectTo: 'sites', pathMatch: 'full' },\n {\n path: '', component: PublicComponent, data: { title: 'Public Views' }, children: [\n { path: 'sign-in', component: LoginComponent },\n { path: 'supplier-join/:token', component: SupplierJoinToCompanyComponent },\n { path: 'myob-config', component: MyobConfigurationAccessCodeCallbackComponent },\n { path: 'procore-config', component: ProcoreConfigurationAccessCodeCallbackComponent },\n { path: 'load-pdf/:src', component: PdfViewerComponent },\n ]\n },\n {\n path: '', component: AnonymousComponent, children: [\n {\n path: '', component: AnonymousCheckComponent, children: [\n { path: 'anonymous-check-in/:session-id', component: AnonymousCheckinComponent },\n { path: 'anonymous', component: AnonymousCheckoutComponent },\n { path: 'successfull-anonymous-check-in', component: SuccessfullAnonymousCheckinComponent }\n ]\n },\n {\n path: \"anonymous-manage-site-supplier/:hashlink\", component: SiteSupplierDocumentUploaderContainerComponent, data: {},\n },\n {\n path: \"anonymous-manage-supplier-forms/:hashlink\", component: SupplierAnonymousFormsComponent, data: {},\n }\n ]\n },\n {\n path: '', component: SecureComponent, data: { title: 'Secure Views' }, children: [\n { path: '', redirectTo: 'sites', pathMatch: 'full' },\n { path: 'not-found', component: NotFoundPageComponent },\n { path: 'no-access', component: NoAccessComponent },\n\n { path: 'manual-check', component: ManualCheckComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.ManualCheckIn | UserPermission.ManualCheckOut } },\n { path: 'dashboard', component: DashboardComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: CombinedUserPermissionList } },\n {\n path: '', component: CompanyOwnerComponent, canActivate: [CompanyAdminGuardService, FeatureGuardService], data: { feature: ProductPlanFeature.Automation }, children: [\n { path: 'manage-automations/:id', component: SiteAutomationsComponent },\n { path: 'manage-automations', component: SiteAutomationsComponent },\n ]\n },\n { path: 'quick-setup', component: QuickSetupComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService] },\n { path: 'sites', component: CompanyComponent, canActivate: [CompanyGuardService, SitesPageGuardService] },\n { path: 'sites/:id', redirectTo: 'manage-site/:id' },\n { path: 'sites/:id/questions/:ischeckin', redirectTo: 'manage-site/:id' },\n { path: 'sites/:id/announcements', redirectTo: 'manage-site/:id' },\n { path: 'question', component: QuestionManagerComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService] },\n { path: 'inductions', component: InductionManageComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService] },\n { path: 'forms', component: FormManageComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService] },\n { path: 'supplier', component: CompanySupplierComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.SupplierManagement } },\n { path: 'supplier/:id/edit', component: EditCompanySupplierComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.SupplierManagement } },\n { path: 'academy', component: VideoListComponent },\n { path: 'user-permissions', component: SiteAttendancePermissionComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService] },\n { path: 'user-permissions/:type', component: SiteAttendancePermissionComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService] },\n { path: 'blocked-users', component: SiteAttendanceBlockedUserComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService] },\n { path: 'flagged-users', component: FlaggedUserComponent, canActivate: [CompanyGuardService, PermissionGuardService, FeatureGuardService], data: { feature: ProductPlanFeature.Automation, permission: UserPermission.ManageViewTaggedUser } },\n { path: 'manage-hosts', component: CompanyUserComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.CompanyHost } },\n { path: 'reports/site-activity/:mode', component: SiteActivityComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.ViewReports } },\n { path: 'reports/site-attendance', component: SiteAttendanceComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.ViewReports } },\n { path: 'reports/user-activity/:mode', component: SiteActivityComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.ViewReports } },\n { path: 'reports/my-scheduled-reports', component: MyScheduledReportsComponent, canActivate: [CompanyGuardService, PermissionGuardService, FeatureGuardService], data: { feature: ProductPlanFeature.SchaduleReport, permission: UserPermission.ViewReports } },\n { path: 'reports/card', component: DocumentReportComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.ViewReports } },\n { path: 'manage-announcements', component: AnnouncementManagerComponent, canActivate: [CompanyGuardService, OverLappedPermissionGuardService, FeatureGuardService], data: { feature: ProductPlanFeature.Announcements, permissions: [UserPermission.ManageSiteAnnouncement] } },\n { path: 'document-types', component: UserDocumentTypesComponent, canActivate: [CompanyGuardService] }, /// TODO duplicate usage must remove\n { path: 'card-designer', component: CardDesignerComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService] },\n { path: 'scannables', component: ScannableGroupsComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService, FeatureGuardService], data: { feature: ProductPlanFeature.Scannables } },\n { path: 'scannables/:id/items', component: ScannableItemsComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService, FeatureGuardService], data: { feature: ProductPlanFeature.Scannables } },\n { path: 'import-sites', component: ImportSitesComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService] },\n { path: 'site-users', component: SiteUserComponent, canActivate: [CompanyGuardService, PermissionGuardService, FeatureGuardService], data: { feature: ProductPlanFeature.SiteHosts, permission: UserPermission.SiteHost } },\n { path: 'host-push-notification', component: HostPushNotificationComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.SendPushNotification } },\n { path: 'employees', component: CompanyEmployeeComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService], data: {} },\n { path: 'reports/asset-report', component: InventoryToolReportComponent, canActivate: [CompanyGuardService, PermissionGuardService, FeatureGuardService], data: { feature: ProductPlanFeature.Inventory, permission: UserPermission.AssetTrackerAdmin } },\n { path: 'reports/induction-report', component: InductionReportComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.ViewReports } },\n { path: 'reports/form-report', component: FormReportComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.ViewReports } },\n { path: 'supplier-forms/:supplierId', component: SupplierFormsComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.SupplierManagement } },\n { path: 'supplier-documents/:supplierId', component: SupplierDocumentsComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.SupplierManagement } },\n { path: 'site-supplier-documents/:siteId', component: SupplierDocumentsComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.SupplierManagement } },\n { path: 'manage-site-supplier/:id/:supplierId/:siteId/:ref', component: SiteSupplierDocumentUploaderContainerComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.SupplierManagement } },\n //{ path: 'manage-site-supplier/:id/:supplierId', component: SiteSupplierDocumentUploaderContainerComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.SupplierManagement } },\n { path: 'manage-site/new', component: SiteManagementComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService], canDeactivate: [CanDeactivateGuard], data: {} },\n { path: 'manage-site/new-template', component: SiteManagementComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService], canDeactivate: [CanDeactivateGuard], data: {} },\n { path: 'manage-site/:id', component: SiteManagementComponent, canActivate: [CompanyGuardService, PermissionGuardService], canDeactivate: [CanDeactivateGuard], data: { permission: UserPermission.ModifySite } },\n { path: 'manage-site/supplier/:siteSupplierId', component: SiteManagementComponent, canActivate: [CompanyGuardService, PermissionGuardService], canDeactivate: [CanDeactivateGuard], data: { permission: UserPermission.ModifySite } },\n { path: 'reports/pending-approval', component: PendingToApproveListComponent, canActivate: [CompanyGuardService, PermissionGuardService], canDeactivate: [CanDeactivateGuard], data: { permission: UserPermission.ApproveRejectSiteInduction } },\n { path: 'reports/permit-report', component: PermitReportComponent, canActivate: [CompanyGuardService, PermissionGuardService], canDeactivate: [CanDeactivateGuard], data: { permission: UserPermission.ApproveRejectSiteInduction } },\n { path: 'reports/evacuations', component: EvacuationReportComponent, canActivate: [CompanyGuardService], canDeactivate: [CanDeactivateGuard], },\n { path: \"manage-site-supplier-documents/:hashlink\", component: SiteSupplierDocumentUploaderContainerComponent, data: {}, },\n { path: \"manage-site-supplier-forms/:hashlink\", component: SupplierAnonymousFormsComponent, data: {}, },\n { path: \"manage-site-supplier-forms\", component: SupplierAnonymousFormsComponent, data: {}, },\n { path: \"audit-log-report\", component: SecurityLogReportComponent, canActivate: [CompanyGuardService, CompanyAdminGuardService], },\n { path: 'site-assets/:siteId/:referer', component: ManageSiteAssetComponent, canActivate: [CompanyGuardService] },\n //{ path: 'site-assets/supplier/:siteSupplierId', component: ManageSiteAssetComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.AssetTrackerAdmin } },\n { path: \"site-access-control-unit\", component: SiteAccessControlUnitManualComponent, canActivate: [CompanyGuardService, SiteAdminGuardService], },\n { path: \"asset-manager\", component: TemplateCompanyAssetManagerComponent, canActivate: [CompanyGuardService], },\n { path: \"visitor-type-manager\", component: TemplateCompanyVisitorTypesComponent, canActivate: [CompanyGuardService], },\n { path: \"company-roles\", component: PermissionsSettingsComponent, canActivate: [CompanyGuardService], },\n { path: \"permissions\", component: PermissionContainerComponent, canActivate: [CompanyGuardService], },\n { path: 'reports/supplier-document', component: SupplierDocumentReportComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.ViewReports } },\n { path: 'workflow-cartable', component: WorkflowCartableComponent, canActivate: [CompanyGuardService] },\n { path: 'workflow-engine/:id', component: WorkflowEngineComponent, canActivate: [CompanyGuardService] },\n { path: 'sds-supplier-document/:attId', component: OtherSiteSupplierDocumentReportComponent, canActivate: [CompanyGuardService] },\n { path: 'user-directory', component: UserDirectoryComponent, canActivate: [CompanyGuardService, PermissionGuardService], canDeactivate: [CanDeactivateGuard], data: { permission: UserPermission.ViewReports | UserPermission.EditUserDirectory } },\n // { path: 'user/:id', component: UserComponent, canActivate: [CompanyGuardService] },\n {\n path: 'user', canActivate: [CompanyGuardService], component: UserComponent, children: [\n { path: 'profile', component: UserProfileComponent },\n { path: 'change-password', component: ChangePasswordComponent },\n { path: 'notification-settings', component: NotificationSettingComponent },\n ]\n },\n {\n path: '', component: GodComponent, canActivate: [CompanyGuardService, GodUserGuardService], children: [\n { path: 'user-documents', component: UserDocumentTypesComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ManageDocumentTypes } },\n { path: 'manage-companies', component: ManageCompaniesComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ManageCompanies } },\n { path: 'manage-videos', component: ManageVideosComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ManageVideos } },\n { path: 'manage-plans', component: ManagePlansComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ManagePlans } },\n { path: 'manage-industry-types', component: ManageIndustryTypesComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ManageIndustryTypes } },\n { path: 'asset-global-dynamic-fields', component: ManageGlobalDynamicFieldsComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ManageGlobalAssetFields } },\n { path: 'user-edit-phone', component: UserEditPhoneComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.EditMobileNumber } },\n { path: \"audit-log-report/:mode\", component: SecurityLogReportComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.AuditLog } },\n { path: \"procore-sync-monitoring\", component: ProcoreSyncMonitoringComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ProcoreSyncMonitoring } },\n { path: 'manage-gates', component: ManageGatesComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ManageGates } },\n { path: 'force-procore-sync', component: ProcoreForceToSyncComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ForceProcoreSync } },\n { path: 'company-workflow-template/:companyId/:companyTitle', component: CompanyWorkflowTemplateComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.WorkflowManagement } },\n { path: 'sms-service-provider', component: ManageSmsProviderComponent, canActivate: [GodUserGuardService], data: { godPermission: GodUserPermission.ManageSMSProvider } }\n ]\n },\n {\n path: '', component: CompanyOwnerComponent, canActivate: [CompanyAdminGuardService], children: [\n { path: 'billing', component: BillingComponent },\n { path: 'company-settings', component: CompanySettingsComponent },\n { path: 'company-integrations', component: CompanyIntegrationsComponent },\n ]\n },\n { path: 'reports/site-briefing-report', component: SiteBriefingReportComponent, canActivate: [CompanyGuardService, PermissionGuardService], data: { permission: UserPermission.ViewReports } },\n ]\n },\n { path: '**', redirectTo: 'sites' }\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { scrollPositionRestoration: 'enabled' })],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Component, OnInit } from '@angular/core';\nimport { FilterType } from 'src/app/enums/filter-type.enum';\nimport { Table } from 'src/app/enums/table.enum';\nimport { GridColumn, GridConfig, GridTemplate } from 'src/app/models/grid/grid.config';\nimport { SmsProvider } from 'src/app/models/sms-provider-model';\nimport { LayoutService } from 'src/app/services/layout.service';\n\n@Component({\n selector: 'obc-manage-sms-provider',\n templateUrl: './manage-sms-provider.component.html'\n})\nexport class ManageSmsProviderComponent implements OnInit {\n\n constructor(private layoutService: LayoutService) { }\n\n gridColumns: GridColumn[] = [];\n gridConfig: GridConfig = {} as GridConfig;\n smsProviders: SmsProvider[];\n inProgress = true;\n\n ngOnInit(): void {\n this.layoutService.header = \"Manage country SMS providers\";\n this.gridColumns = [\n {\n name: \"Country Prefix Code\",\n key: \"prefixCode\",\n type: FilterType.Text,\n enableSort: false,\n enableFilter: false,\n },\n {\n name: \"Country Name\",\n key: \"name\",\n type: FilterType.Text,\n enableSort: false,\n enableFilter: false,\n },\n {\n name: \"Country SMS Service Provider\",\n key: \"smsServiceProvider\",\n enableSort: false,\n enableFilter: false,\n gridTemplate: new GridTemplate().ComponentTemplateName('SMSServiceProvider'),\n },\n ];\n this.gridConfig =new GridConfig({\n apiUrl: \"/api/Country/SMSProviders\",\n tableType: Table.SMSProvider,\n displayGeneralSearch: false,\n displayQuestionsFilter: false,\n apiResultCallback: (res) => {\n this.smsProviders = res.smsProviders;\n this.inProgress = false;\n \n return {\n data: res?.countries,\n totalCount: res?.totalCount,\n }\n }\n })\n }\n\n}\n","export const environment = {\n production: true,\n recaptcha: { siteKey: '6Le2o8wlAAAAADjSiSbJmw5vzk4MJmpaVadGaZC3', },\n googleAnalyticsId: 'G-BG6DBXTF9N',\n pendoApiKey:'27e19e74-a34b-4dbf-6329-f269f55c9f6e',\n};\n","import { Injectable } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { environment } from '../../environments/environment';\n\n// Shamelessly stolen from https://lumin8media.com/blog/add-google-analytics-angular\ndeclare var gtag: Function;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GoogleAnalyticsService {\n constructor(private router: Router) { }\n\n public initialize() {\n if (!environment.googleAnalyticsId) {\n return;\n }\n\n this.onRouteChange();\n\n // dynamically add analytics scripts to document head\n try {\n const url = 'https://www.googletagmanager.com/gtag/js?id=';\n const gTagScript = document.createElement('script');\n gTagScript.async = true;\n gTagScript.src = `${url}${environment.googleAnalyticsId}`;\n document.head.appendChild(gTagScript);\n\n const dataLayerScript = document.createElement('script');\n dataLayerScript.innerHTML = `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${environment.googleAnalyticsId}', {'send_page_view': false});`;\n document.head.appendChild(dataLayerScript);\n } catch (e) {\n console.error('Error adding Google Analytics', e);\n }\n }\n\n // track visited routes\n private onRouteChange() {\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd && gtag) {\n gtag('config', environment.googleAnalyticsId, {\n page_path: event.urlAfterRedirects,\n });\n }\n });\n }\n\n // use gtag.js to send Google Analytics Events\n public event(action: string, eventCategory?: string, eventLabel?: string, value?: string) {\n gtag('event', action, {\n ...(eventCategory && { event_category: eventCategory }),\n ...(eventLabel && { event_label: eventLabel }),\n ...(value && { value: value }),\n });\n }\n}\n","
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n

      {{header}}

      \n
      \n
      \n
      \n \n
      \n \n
      \n
      \n

      {{message}}

      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      ","import { Component, OnInit } from '@angular/core';\nimport { ModalService, State, Options, Icon } from 'src/app/services/modal.service';\n\n@Component({\n selector: 'obc-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss']\n})\nexport class ModalComponent implements OnInit {\n visible: boolean = false;\n mode: string = '';\n message: string = '';\n header: string = '';\n state: State;\n isConfirm: boolean = false;\n icon: string = '';\n trueLabel: string = '';\n falseLabel: string = '';\n trueButtonClass: string = '';\n falseButtonClass: string = '';\n isDangerState: boolean = false;\n constructor(private modalService: ModalService) { }\n\n ngOnInit() {\n this.mode = '';\n this.modalService.confirmMessage.subscribe((option: Options) => {\n if (!option) { this.mode = ''; this.visible = false; return; };\n this.isDangerState = option.isDangerState ?? false;\n this.mode = State[option.state];\n this.visible = true;\n this.message = option.message;\n this.header = option.header;\n this.icon = this.isDangerState ? Icon[State['modal-block-danger']] : Icon[option.state];\n this.isConfirm = option.state === State[\"modal-block-primary\"];\n this.trueLabel = (!option.trueButtonLabel) ? this.isConfirm ? 'Yes' : 'Ok' : option.trueButtonLabel;\n this.falseLabel = (!option.trueButtonLabel) ? 'No' : option.falseButtonLabel;\n this.trueButtonClass = (!option.trueButtonClass) ? (this.isDangerState ? 'btn-danger' : 'btn-success') : option.trueButtonClass;\n this.falseButtonClass = (!option.falseButtonClass) ? (this.isDangerState ? 'btn-default' : 'btn-danger') : option.falseButtonClass;\n })\n }\n\n cleanup() {\n this.visible = false;\n this.message = '';\n\n }\n close() {\n this.do(null);\n }\n\n ok() {\n this.do(true);\n }\n\n cancel() {\n this.do(false);\n }\n\n do(result: boolean | null) {\n this.cleanup();\n this.modalService.closeConfirm(result);\n }\n}\n","import { pairwise } from 'rxjs/operators';\nimport { ViewportScroller } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { Router, NavigationEnd, RoutesRecognized, Scroll } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { LayoutService } from \"./services/layout.service\";\nimport { CaptchaMode } from './enums/captcha-mode';\nimport { GoogleAnalyticsService } from './services/google-analytics.service';\n\n@Component({\n selector: 'obc-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent {\n pageYOffset: number;\n title = 'obc-portal';\n\n private store: { [key: string]: [number, number] } = {};\n private captchaCheckThreshold = 50;\n\n constructor(private router: Router,\n private layoutService: LayoutService,\n public readonly viewportScroller: ViewportScroller,\n private readonly googleAnalyticsService: GoogleAnalyticsService) {\n\n this.layoutService.toggleDarkMode(this.layoutService.isInDarkMode);\n\n router.events\n .pipe(filter((evt: any) => evt instanceof RoutesRecognized), pairwise())\n .subscribe((events: NavigationEnd[]) => {\n var prevUrl = events[0].urlAfterRedirects;\n this.store[prevUrl] = this.viewportScroller.getScrollPosition();\n });\n\n this.router.events.pipe(filter(e => e instanceof Scroll)).subscribe((e: any) => {\n var currentUrl = e.routerEvent.url;\n if (this.store[currentUrl] != undefined)\n setTimeout(() => {\n this.viewportScroller.scrollToPosition(this.store[currentUrl]);\n }, 1000);\n });\n\n let removeRecaptcha = localStorage.getItem(\"captcha-mode\");\n if (removeRecaptcha == CaptchaMode.GoogleRecaptchaV3.toString()) {\n let captchaCheckInterval = setInterval(() => {\n if (this.captchaCheckThreshold < 1) {\n clearInterval(captchaCheckInterval);\n }\n else {\n var el = document.querySelector('.grecaptcha-badge') as HTMLElement;\n if (el) {\n el.style.setProperty(\"visibility\", \"visible\", \"important\");\n clearInterval(captchaCheckInterval);\n }\n }\n\n this.captchaCheckThreshold--;\n }, 100);\n }\n }\n\n ngOnInit() {\n this.googleAnalyticsService.initialize();\n }\n}\n","\n\n\n\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable, throwError as observableThrowError } from 'rxjs';\nimport { catchError, switchMap, tap } from \"rxjs/operators\";\nimport { CaptchaService } from './captcha.service';\nimport { UserService } from './user.service';\nimport { CaptchaMode } from '../enums/captcha-mode';\n\n@Injectable()\nexport class HttpHelperInterceptor implements HttpInterceptor {\n static WhiteListRouteRegexListFor401StatusCode: string[] = ['/sign-in.*', '/anonymous-check-in/.+', '/supplier-join/.*', '/anonymous-manage-site-supplier/.+'];\n private urlsCalledCount: { [url: string]: number } = {};\n private readonly API_MAX_TRY_COUNT: number = 5;\n\n constructor(\n private router: Router,\n private userService: UserService,\n private _captchaService: CaptchaService) { }\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n this.urlsCalledCount[request.url] = 1;\n\n if (!request.headers.has('Content-Type') && !request.headers.has('do-not-modify-content-type')) {\n request = request.clone({ headers: request.headers.set('Content-Type', 'application/json') });\n }\n\n let xsrfToken = this.userService.getXsrfToken();\n if (xsrfToken?.length) {\n request = request.clone({ headers: request.headers.set('X-XSRF-TOKEN', xsrfToken) });\n }\n\n if (this._captchaService.isCaptchaActive() && this._captchaService.UrlNeedToken(request.url)) {\n return this.getTokenAndCallRequest(request, next);\n }\n else {\n return this.nextHandle(next, request);\n }\n }\n\n nextHandle(next, request) {\n return next.handle(request)\n .pipe(\n tap(event => {\n if (event instanceof HttpResponse) {\n let xsrfToken = event?.headers?.get('XSRF-TOKEN');\n if (xsrfToken?.length) {\n this.userService.setXsrfToken(xsrfToken);\n }\n\n if (event.status === 205) {\n window.location.reload();\n }\n }\n }),\n catchError(err => {\n var url = this.router.url;\n if (err.status == 401 && HttpHelperInterceptor.WhiteListRouteRegexListFor401StatusCode.some((regex) => {\n var matched = new RegExp(regex).test(url);\n console.log('Current route(' + url + ') matched by ' + regex + ':' + matched);\n return matched;\n })) {\n return observableThrowError(err);\n }\n\n if (err instanceof HttpErrorResponse && err.status === 401) {\n if (this.userService.info.value && err.headers['invalid-session'] == 'false')\n this.router.navigate(['no-access', { 'returnPath': this.router.url }]);\n else\n this.router.navigate(['sign-in', { 'returnPath': this.router.url }]);\n }\n\n if (err instanceof HttpErrorResponse && err.status === 317) {\n this.urlsCalledCount[request.url]++;\n return this.getTokenAndCallRequest(request, next);\n }\n return observableThrowError(err);\n }),\n );\n }\n\n getTokenAndCallRequest(request: HttpRequest, next: HttpHandler): Observable> {\n return this._captchaService\n .getToken()\n .pipe(\n switchMap((token: string) => {\n request = request.clone({ headers: request.headers.set(\"X-CAPTCHA-TOKEN\", token) });\n return next.handle(request);\n }),\n catchError(error => {\n if (error instanceof HttpErrorResponse && error.status == 317) {\n this.urlsCalledCount[request.url]++;\n if (this.urlsCalledCount[request.url] < this.API_MAX_TRY_COUNT) {\n return this.getTokenAndCallRequest(request, next);\n }\n }\n\n return observableThrowError(error);\n }));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { PaginationModule } from 'ngx-bootstrap/pagination';\nimport { TabsModule } from 'ngx-bootstrap/tabs';\nimport { ProgressbarModule } from 'ngx-bootstrap/progressbar';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { AccordionModule } from 'ngx-bootstrap/accordion';\nimport { TimepickerModule } from 'ngx-bootstrap/timepicker';\nimport { AlertModule } from 'ngx-bootstrap/alert';\n\n@NgModule({\n declarations: [],\n imports: [\n PaginationModule.forRoot(),\n TabsModule.forRoot(),\n ProgressbarModule.forRoot(),\n BsDatepickerModule.forRoot(),\n ButtonsModule.forRoot(),\n BsDropdownModule.forRoot(),\n PopoverModule.forRoot(),\n AccordionModule.forRoot(),\n TimepickerModule.forRoot(),\n AlertModule.forRoot(),\n ],\n exports: [\n PaginationModule,\n TabsModule,\n ProgressbarModule,\n BsDatepickerModule,\n ButtonsModule,\n BsDropdownModule,\n PopoverModule,\n AccordionModule,\n TimepickerModule,\n AlertModule,\n ]\n})\nexport class NgxBootstrapModule { }\n","
      \n
      \n Upload {{documentKindTitle}} Documents\n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n \n
      \n \n
      \n \n \n \n\n \n
      \n 0\">\n
      \n \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      {{item.initData.filename}} [{{item.initData.length}} bytes]
      \n
      \n
      \n \n
      \n
      \n
      \n
      ","import { MaxFileSize } from './../../../enums/constants';\nimport { EventEmitter } from '@angular/core';\nimport { Component, HostListener, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { finalize } from 'rxjs/operators';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { dateFormat } from 'src/app/helpers/date-time-format';\nimport { getFileExtenstion, getFilename, toBase64 } from 'src/app/helpers/general-functions';\nimport { uuid4 } from 'src/app/helpers/uuid';\nimport { SiteSupplierDocumentTypeFileModel, SiteSupplierDocumentTypeVersionModel, SiteSupplierDocumentTypeWithCurrentVersionViewModel } from 'src/app/models/supplier-document/site-supplier-document-type-models';\nimport { VariableDefinitionMode, VariableDefinitionType, VariableValueDefinition } from 'src/app/models/workflow/variable-difinition';\nimport { WorkflowVariableValue } from 'src/app/models/workflow/workflow-variable-value';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteSupplierService } from 'src/app/services/site-supplier.service';\n\n\n@Component({\n selector: 'app-site-supplier-document-uploader',\n templateUrl: './site-supplier-document-uploader.component.html',\n styleUrls: ['./site-supplier-document-uploader.component.scss'],\n providers: [DatetimePipe]\n})\nexport class SiteSupplierDocumentUploaderComponent implements OnInit {\n VariableDefinitionType = VariableDefinitionType;\n DatetimePickerMode = DatetimePickerMode;\n\n currentDate: Date = new Date();\n fiveYearsLaterDate: Date = (new Date()).addDays(365 * 5);\n\n inProgress = false;\n _siteSupplierDocumentType: SiteSupplierDocumentTypeWithCurrentVersionViewModel = null;\n selectedFiles = [];\n @Output() hide = new EventEmitter()\n formGroup = new FormGroup({\n versionDate: new FormControl(null),\n expirationDate: new FormControl(null),\n siteSupplierDocumentTypeTitle: new FormControl(null, [Validators.required]),\n siteSupplierDocumentTypeDescription: new FormControl(null)\n });\n\n variableFormGroups = new FormGroup({});\n @HostListener('change', ['$event.target.files']) async emitFiles($event: FileList) {\n if ($event?.length)\n for (let index = 0; index < $event.length; index++) {\n const file = $event[index];\n this.setSiteSupplierDocumentTypeTitle(file);\n if (file.size > MaxFileSize * 1024000) {\n this.modalService.error(`maximum file size is ${MaxFileSize}mb`);\n continue;\n }\n var fileModel = {\n base64: (await toBase64(file)).toString(),\n extension: (getFileExtenstion(file.name)),\n filename: file.name,\n length: file.size,\n mimeType: file.type,\n guid: uuid4(),\n };\n this.selectedFiles.push(fileModel);\n }\n this.resetFileInput();\n }\n\n @Output() updateFileDone = new EventEmitter();\n @Input() documentKindId: number;\n @Input() documentKindTitle: string;\n @Input() siteSupplierId: number = null;\n @Input() set siteSupplierDocumentType(value: SiteSupplierDocumentTypeWithCurrentVersionViewModel) {\n\n if (value != this._siteSupplierDocumentType && value != null) {\n //console.log(\"siteSupplierDocumentType change\", value)\n // reset form\n this._siteSupplierDocumentType = value;\n this.formGroup.controls.siteSupplierDocumentTypeTitle.setValue(this._siteSupplierDocumentType.supplierDocumentTypeName);\n this.formGroup.controls.siteSupplierDocumentTypeDescription.setValue('');\n this.formGroup.controls.siteSupplierDocumentTypeTitle.disable();\n\n for (let v of this.variableList) {\n this.variableFormGroups.addControl(v.key, new FormControl(v.value, v.mode == VariableDefinitionMode.Mandatory ? [Validators.required] : []));\n }\n }\n else {\n if (value == null) {\n this.formGroup.controls.siteSupplierDocumentTypeTitle.setValue(null);\n this.formGroup.controls.siteSupplierDocumentTypeDescription.setValue(null);\n this.formGroup.controls.siteSupplierDocumentTypeTitle.enable();\n\n if (this._siteSupplierDocumentType != null) {\n for (let v of this.variableList) {\n this.variableFormGroups.addControl(v.key, new FormControl(v.value, v.mode == VariableDefinitionMode.Mandatory ? [Validators.required] : []));\n }\n }\n }\n }\n }\n\n @Input() siteSupplierHashlink: string = null;\n @Input() variableList: VariableValueDefinition[];\n\n constructor(\n private siteSupplierService: SiteSupplierService,\n private datetimePipe: DatetimePipe,\n private modalService: ModalService) { }\n\n ngOnInit() {\n }\n\n onRemoveFile(sortedfile: any) {\n var file = this.selectedFiles.find(x => {\n return sortedfile.guid == x.guid;\n });\n if (file == null) return;\n var index = this.selectedFiles.indexOf(file);\n if (index >= 0)\n this.selectedFiles.splice(index, 1);\n this.resetFileInput();\n }\n\n lovalVariables?: WorkflowVariableValue[];\n onAddSDTVersion() {\n let workflowVariableValues = [];\n this.variableList.forEach(variable => {\n workflowVariableValues.push({\n key: variable.key,\n value: this.variableFormGroups.value[variable.key]\n });\n });\n\n var model = {\n documentKindId: this.documentKindId,\n versionDate: this.formGroup.controls.versionDate.value ? this.datetimePipe.transform(this.formGroup.controls.versionDate.value, dateFormat) : null,\n //variables: this.formGroup.controls.expirationDate.value ? {\"ExpireDate\": this.formGroup.controls.expirationDate.value} : null,\n title: this.formGroup.controls.siteSupplierDocumentTypeTitle.value,\n description: this.formGroup.controls.siteSupplierDocumentTypeDescription.value,\n variables: workflowVariableValues,\n files: this.selectedFiles.map(x => {\n return {\n base64: x.base64.split(';base64,')[1],\n filename: x.filename,\n mimeType: x.mimeType,\n extension: x.extension,\n } as SiteSupplierDocumentTypeFileModel\n }),\n } as SiteSupplierDocumentTypeVersionModel;\n\n this.inProgress = true;\n this.siteSupplierService.addSiteSupplierDocumentTypeVersion(model, this.siteSupplierHashlink, this.siteSupplierId, this._siteSupplierDocumentType?.siteSupplierDocumentTypeId)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.reset();\n this.updateFileDone.emit();\n }, err => {\n this.modalService.error(err);\n })\n }\n showFileInput = true;\n resetFileInput() {\n this.showFileInput = false;\n setTimeout(() => {\n this.showFileInput = true;\n }, 100)\n }\n\n reset() {\n this.formGroup.reset();\n this.selectedFiles = [];\n this.resetFileInput();\n }\n\n formIsValid() {\n return this.selectedFiles?.length > 0 &&\n this.formGroup.controls.versionDate.valid &&\n this.formGroup.controls.siteSupplierDocumentTypeDescription.valid &&\n Object.values(this.variableFormGroups.controls)\n .filter(c => c.invalid).length === 0;\n }\n\n onChangeFilesOrder($event) {\n // nothing needed model is updated\n // this.selectedFiles = $event;\n // this.resetFileInput();\n\n }\n\n setSiteSupplierDocumentTypeTitle(file: File) {\n if (this.siteSupplierDocumentType == null && !this.formGroup.controls.siteSupplierDocumentTypeTitle.value) {\n var onlyfilename = getFilename(file.name);\n this.formGroup.controls.siteSupplierDocumentTypeTitle.setValue(onlyfilename);\n }\n }\n}\n","
      \n \n \n {{item.name}}\n \n \n
      \n","import {Component, EventEmitter, Input, OnInit, Output, ViewChild, OnChanges, SimpleChanges} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport {SupplierDocumentTypeViewModel} from \"../../models/supplier-document/supplier-document-models\";\nimport {SupplierDocumentService} from \"../../services/supplier-document.service\";\nimport {SiteSupplierViewModel} from \"../../models/supplier-document/site-supplier-view-model.model\";\nimport {NgSelectComponent} from \"@ng-select/ng-select\";\nimport {BaseSiteViewModel} from \"../../models/site-viewmodel\";\nimport { SiteSupplierService } from 'src/app/services/site-supplier.service';\n\n@Component({\n selector: 'obc-supplier-document-selector',\n templateUrl: './supplier-document-selector.component.html',\n styleUrls: ['./supplier-document-selector.component.scss']\n})\nexport class SupplierDocumentSelectorComponent implements OnInit {\n\n @ViewChild('selector') selector: NgSelectComponent;\n @Input() siteId;\n @Input() supplierId;\n @Input() excludedDocumentTypes: SupplierDocumentTypeViewModel[] = [];\n\n\n @Input() set control(value: FormControl) {\n this.formControl = value;\n this.formControl.valueChanges.subscribe(res => {\n this.selectedDocumentType.emit(this.supplierDocumentTypes?.find(x => x.id == res));\n })\n };\n formControl: FormControl;\n loading: boolean = false;\n $supplierDocumentTypes: Observable;\n supplierDocumentTypes: SupplierDocumentTypeViewModel[];\n supplierDocumentTypesBackUp: SupplierDocumentTypeViewModel[];\n term$ = new BehaviorSubject(null);\n @Output() selectedDocumentType = new EventEmitter();\n //@Input() supplierHashLink : string = null;\n\n\n constructor(private supplierDocumentService: SupplierDocumentService,\n private siteSupplierService: SiteSupplierService) { }\n\n ngOnInit() {\n\n // if(this.supplierHashLink) {\n // this.siteSupplierService.getSupplierDocumentTypes(this.supplierHashLink).subscribe(res => {\n // this.supplierDocumentTypesBackUp = res.data;\n // this.supplierDocumentTypes = JSON.parse(JSON.stringify(res.data));\n // this._update(this.excludedDocumentTypes);\n // this.term$.subscribe(term => {\n // this.$supplierDocumentTypes = of(this.supplierDocumentTypes);\n // });\n // })\n // } else {\n\n // }\n\n this.supplierDocumentService.getSupplierDocumentTypes().subscribe(res => {\n this.supplierDocumentTypesBackUp = res.data;\n this.supplierDocumentTypes = JSON.parse(JSON.stringify(res.data));\n this._update(this.excludedDocumentTypes);\n this.term$.subscribe(term => {\n this.$supplierDocumentTypes = of(this.supplierDocumentTypes);\n });\n })\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let exDocTypes = changes['excludedDocumentTypes']?.currentValue;\n if(exDocTypes) {\n this._update(exDocTypes);\n }\n }\n\n _update(excludedDocumentTypes: SupplierDocumentTypeViewModel[]) {\n this.supplierDocumentTypes = this.supplierDocumentTypesBackUp?.filter(function(el){\n return excludedDocumentTypes.filter(function(selected_el){\n return selected_el.id == el.id;\n }).length == 0\n });\n this.$supplierDocumentTypes = of(this.supplierDocumentTypes);\n setTimeout(() => {\n this.selector?.handleClearClick();\n }, 0);\n }\n\n}\n"," 0\">\n
      \n
      \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n VariableDefinitionType,\n VariableValueDefinition\n} from \"../../../models/workflow/variable-difinition\";\nimport { DatetimePickerMode } from \"../../../enums/datetime-picker-mode.enum\";\nimport { FormGroup } from \"@angular/forms\";\n\n@Component({\n selector: 'obc-workflow-variables-renderer',\n templateUrl: './workflow-variables-renderer.component.html',\n styleUrls: ['./workflow-variables-renderer.component.scss']\n})\nexport class WorkflowVariablesRendererComponent implements OnInit {\n VariableDefinitionType = VariableDefinitionType;\n DateTimePickerMode = DatetimePickerMode;\n @Input() formGroup: FormGroup;\n @Input() variablesList: VariableValueDefinition[] = [];\n constructor() { }\n ngOnInit(): void { }\n}\n","
      \n
      \n Upload {{workflowTitle}} Documents\n
      \n \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n \n \n \n \n \n
      \n
      \n \n \n \n\n \n
      \n
      \n \n\n
      \n
      \n
      \n \n {{item.filename}} [{{item.length}} bytes]\n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n
      \n

      You can drag and drop your files here or click Select Files button.

      \n \n\n

      Supported file\n types include PDF and images.

      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n\n","import { MaxFileSize } from './../../../enums/constants';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop';\nimport { finalize } from 'rxjs/operators';\nimport { DatetimePickerMode } from 'src/app/enums/datetime-picker-mode.enum';\nimport { dateFormat } from 'src/app/helpers/date-time-format';\nimport { getFileExtenstion, getFilename, toBase64 } from 'src/app/helpers/general-functions';\nimport { uuid4 } from 'src/app/helpers/uuid';\nimport { SiteSupplierDocumentTypeFileModel, SiteSupplierDocumentTypeVersionModel, SiteSupplierDocumentTypeWithCurrentVersionViewModel } from 'src/app/models/supplier-document/site-supplier-document-type-models';\nimport { VariableDefinitionMode, VariableDefinitionType, VariableValueDefinition } from 'src/app/models/workflow/variable-difinition';\nimport { WorkflowVariableValue } from 'src/app/models/workflow/workflow-variable-value';\nimport { DatetimePipe } from 'src/app/pipes/datetime.pipe';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteSupplierService } from 'src/app/services/site-supplier.service';\n\n@Component({\n selector: 'obc-site-supplier-document-multiple-uploader',\n templateUrl: './site-supplier-document-multiple-uploader.component.html',\n styleUrls: ['./site-supplier-document-multiple-uploader.component.scss']\n})\nexport class SiteSupplierDocumentMultipleUploaderComponent implements OnInit {\n currentDate: Date = new Date();\n fiveYearsLaterDate: Date = (new Date()).addYears(5);\n inProgress = false;\n DateTimePickerMode = DatetimePickerMode;\n\n model: SiteSupplierDocumentTypeUploadFormModel[] = [];\n\n @Output() hide = new EventEmitter()\n @Output() updateFileDone = new EventEmitter();\n\n @Input() variableList: VariableValueDefinition[];\n @Input() workflowTitle: string = null;\n @Input() documentKindId: number;\n @Input() siteSupplierId: number = null;\n @Input() siteSupplierHashlink: string = null;\n @Input() siteSupplierDocumentTypes: SiteSupplierDocumentTypeWithCurrentVersionViewModel[] = [];\n @Input() inputFiles: NgxFileDropEntry[] = null;\n\n VariableDefinitionType = VariableDefinitionType;\n\n constructor(\n private siteSupplierService: SiteSupplierService,\n private datetimePipe: DatetimePipe,\n private modalService: ModalService) { }\n\n ngOnInit() {\n this.initUploadModelArray();\n this.siteSupplierDocumentTypes = this.siteSupplierDocumentTypes.filter(x => x.documentKindId == this.documentKindId);\n\n if (this.inputFiles) {\n this.dropped(this.inputFiles);\n }\n }\n\n private initUploadModelArray() {\n this.model = [];\n }\n\n isCheckAnyItem(checkItemCount: number) {\n return this.model.filter(item => item.formGroup.controls['checked'].value == true).length >= checkItemCount;\n }\n\n addNewUploadModel(file: UploadFileInfo = null, title: string = null, versionDate: Date = null) {\n var newModel = {\n checked: false,\n formGroup: new FormGroup({\n checked: new FormControl(false),\n documentTypeMode: new FormControl(0),\n versionDate: new FormControl(versionDate),\n siteSupplierDocumentTypeTitle: new FormControl(title ?? (file ? getFilename(file.filename) : null), [Validators.required]),\n siteSupplierDocumentTypeId: new FormControl(null, []),\n }),\n variableFormGroups: new FormGroup({}),\n selectedFiles: file ? [file] : []\n } as SiteSupplierDocumentTypeUploadFormModel;\n this.variableList.forEach(v => newModel.variableFormGroups.addControl(v.key, new FormControl(v.value, v.mode == VariableDefinitionMode.Mandatory ? [Validators.required] : [])));\n this.model.push(newModel);\n }\n\n onRemoveFile(record: SiteSupplierDocumentTypeUploadFormModel, sortedFile: any) {\n var file = record.selectedFiles.find(x => {\n return sortedFile.guid == x.guid;\n });\n if (file == null) return;\n var index = record.selectedFiles.indexOf(file);\n if (index >= 0)\n record.selectedFiles.splice(index, 1);\n if (record.selectedFiles.length == 0)\n this.model.splice(this.model.indexOf(record), 1);\n }\n\n updateDocumentTypeMode(record: SiteSupplierDocumentTypeUploadFormModel, isNewDocument: boolean) {\n if (isNewDocument) {\n record.formGroup.controls.siteSupplierDocumentTypeId.setValue(null);\n record.formGroup.controls.siteSupplierDocumentTypeId.clearValidators();\n\n record.formGroup.controls.siteSupplierDocumentTypeTitle.setValue('');\n record.formGroup.controls.siteSupplierDocumentTypeTitle.setValidators([Validators.required]);\n }\n else {\n record.formGroup.controls.siteSupplierDocumentTypeTitle.setValue(null);\n record.formGroup.controls.siteSupplierDocumentTypeTitle.clearValidators();\n if (this.siteSupplierDocumentTypes.length > 0)\n record.formGroup.controls.siteSupplierDocumentTypeId.setValue(this.siteSupplierDocumentTypes[0].siteSupplierDocumentTypeId);\n else\n record.formGroup.controls.siteSupplierDocumentTypeId.setValue(null);\n record.formGroup.controls.siteSupplierDocumentTypeId.setValidators([Validators.required]);\n }\n record.formGroup.controls.siteSupplierDocumentTypeId.updateValueAndValidity();\n record.formGroup.controls.siteSupplierDocumentTypeTitle.updateValueAndValidity();\n record.formGroup.updateValueAndValidity();\n }\n\n reset() {\n this.initUploadModelArray();\n }\n\n formIsValid() {\n return this.model &&\n this.model.length &&\n this.model.every(item => item.selectedFiles?.length > 0 && item.formGroup.valid && item.variableFormGroups.valid);\n }\n\n groupCheckedItems() {\n let checkedItems = this.model.filter(d => d.formGroup.controls['checked'].value);\n if (checkedItems.length < 2)\n return;\n var mergedToItem = checkedItems[0];\n\n let files = [];\n for (let index = 1; index < checkedItems.length; index++) {\n if (checkedItems[index].selectedFiles)\n files.push(...checkedItems[index].selectedFiles);\n }\n\n if (!mergedToItem.selectedFiles)\n mergedToItem.selectedFiles = files;\n else\n mergedToItem.selectedFiles.push(...files);\n mergedToItem.formGroup.controls['checked'].setValue(false);\n\n for (let index = 1; index < checkedItems.length; index++) {\n this.model.splice(this.model.indexOf(checkedItems[index]), 1);\n }\n }\n\n unGroupCheckedItems() {\n let checkedItems = this.model.filter(d => d.formGroup.controls['checked'].value);\n if (checkedItems.length == 0)\n return;\n\n for (let item of checkedItems) {\n item.formGroup.controls['checked'].setValue(false);\n while (item.selectedFiles.length > 1) {\n var file = item.selectedFiles.splice(item.selectedFiles.length - 1, 1)[0];\n this.addNewUploadModel(\n file,\n item.formGroup.controls['siteSupplierDocumentTypeTitle'].value,\n item.formGroup.controls['versionDate'].value);\n }\n }\n }\n removeCheckedItems() {\n this.model = this.model.filter(d => !d.formGroup.controls['checked'].value);\n }\n\n lovalVariables?: WorkflowVariableValue[];\n upload() {\n var data = this.model.map(record => {\n\n let workflowVariableValues = [];\n this.variableList.forEach(variable => {\n workflowVariableValues.push({\n key: variable.key,\n value: record.variableFormGroups.value[variable.key]\n });\n });\n\n return {\n documentKindId: this.documentKindId,\n variables: workflowVariableValues,\n versionDate: record.formGroup.controls.versionDate.value ? this.datetimePipe.transform(record.formGroup.controls.versionDate.value, dateFormat) : null,\n title: record.formGroup.controls.siteSupplierDocumentTypeTitle.value,\n siteSupplierDocumentTypeId: record.formGroup.controls.siteSupplierDocumentTypeId.value,\n files: record.selectedFiles.map(x => {\n return {\n base64: x.base64.split(';base64,')[1],\n filename: x.filename,\n mimeType: x.mimeType,\n extension: x.extension,\n\n } as SiteSupplierDocumentTypeFileModel\n }),\n } as SiteSupplierDocumentTypeVersionModel;\n });\n this.inProgress = true;\n this.siteSupplierService.addSiteSupplierDocumentTypeVersionList(data, this.siteSupplierHashlink, this.siteSupplierId)\n .pipe(finalize(() => { this.inProgress = false }))\n .subscribe(res => {\n this.reset();\n this.updateFileDone.emit();\n }, err => {\n this.modalService.error(err);\n })\n }\n\n public files: NgxFileDropEntry[] = [];\n\n public dropped(files: NgxFileDropEntry[]) {\n\n this.files = files;\n for (const droppedFile of files) {\n\n // Is it a file?\n if (droppedFile.fileEntry.isFile) {\n const fileEntry = droppedFile.fileEntry as FileSystemFileEntry;\n fileEntry.file(async (file: File) => {\n if (file.size > MaxFileSize * 1024000) {\n this.modalService.error(`maximum file size is ${MaxFileSize}mb`);\n return;\n }\n\n var fileModel = {\n base64: (await toBase64(file)).toString(),\n extension: (getFileExtenstion(file.name)),\n filename: file.name,\n length: file.size,\n mimeType: file.type,\n guid: uuid4(),\n };\n this.addNewUploadModel(fileModel, null, this.currentDate);\n });\n }\n }\n }\n\n}\n\n\ninterface SiteSupplierDocumentTypeUploadFormModel {\n formGroup: FormGroup;\n selectedFiles: UploadFileInfo[];\n variableFormGroups: FormGroup;\n}\n\ninterface UploadFileInfo {\n base64: string;\n extension: string;\n filename: string;\n length: number;\n mimeType: string;\n guid: string;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'htmlNewLine'\n})\nexport class HtmlNewLinePipe implements PipeTransform {\n\n transform(value: string): string {\n return value ? value.replace(/\\n/g, '
      ') : value;\n }\n\n}\n"," 0\"\n type=\"checkbox\"\n [attr.checked]=\"checked ? 'checked' : null\"\n (change)=\"saveDocumentCheckedStatusOnCache($event)\">\n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n \n \n {{ document.title }}\n
      \n
      \n \n \n \n
      \n
      \n \n
      \n
      \n {{ document?.multiImageMode | multiImageModePipe }}\n
      \n
      \n
      Title
      \n
      Expiry Date
      \n
      \n
      \n
      \n
      \n
      \n\n\n\n
      \n
      \n 0\">\n
        \n
        \n\n","import { Component, EventEmitter, HostBinding, Input, OnInit, Output } from '@angular/core';\nimport { uuid4 } from 'src/app/helpers/uuid';\nimport { StorageService } from 'src/app/services/storage.service';\nimport { UserDocumentType } from \"../../../models/user-document-type\";\nimport { UserDocumentTypeService } from \"../../../services/user-document-type.service\";\nimport { OrderedEntity } from \"../../../models/ordered-entity\";\n\n@Component({\n selector: 'li[obc-document-type-viewer-item]',\n templateUrl: './document-type-viewer-item.component.html',\n styleUrls: ['./document-type-viewer-item.component.scss'],\n})\nexport class DocumentTypeViewerItemComponent implements OnInit {\n\n @Input() documents: UserDocumentType[] = [];\n @Input() document: UserDocumentType;\n @Input() canDelete: boolean;\n @Input() draggable: boolean;\n @Input() canAdd: boolean;\n @Input() canUpdate: boolean;\n checked: boolean = true;\n @Input() cacheUniqueId: string = '';\n opacity: number = 1;\n\n constructor(private userDocumentTypeService: UserDocumentTypeService,\n public storageService: StorageService,\n ) { }\n\n uuid = uuid4();\n\n @HostBinding('class.has-child') hasChild: boolean = false;\n\n children: UserDocumentType[] = [];\n\n ngOnInit(): void {\n\n if(this.document?.isAvailable === true)\n this.opacity = 1;\n else\n this.opacity = 0.5\n\n this.children = this.documents?.filter((item) => item.parentId == this.document.id);\n if(this.children?.length > 0)\n this.hasChild = true;\n\n let companyTree = JSON.parse(this.storageService.get(this.cacheUniqueId));\n if(companyTree && companyTree.find((item) => item == this.document?.id)) {\n this.checked = true;\n } else {\n this.checked = false;\n }\n }\n\n emitAddNew(document: UserDocumentType) {\n this.userDocumentTypeService.addDocumentTypeReplay.next(document);\n }\n emitUpdate(document: UserDocumentType) {\n this.userDocumentTypeService.updateDocumentTypeReplay.next(document);\n }\n emitDelete(document: UserDocumentType) {\n this.userDocumentTypeService.deleteDocumentTypeReplay.next(document);\n }\n\n saveDocumentCheckedStatusOnCache(value) {\n if(value) {\n let companyTree = JSON.parse(this.storageService.get(this.cacheUniqueId)) ?? [];\n if(!companyTree.find((item) => item == this.document?.id)) {\n companyTree.push(this.document.id);\n } else {\n companyTree = companyTree?.filter((item) => item != this.document.id);\n }\n this.storageService.set(this.cacheUniqueId, JSON.stringify(companyTree));\n }\n }\n\n @Output() orderedList: EventEmitter = new EventEmitter();\n onOrderedList(orderedList: OrderedEntity[]) {\n this.orderedList.emit(orderedList);\n }\n}\n","\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { finalize } from 'rxjs';\nimport { SupplierDocumentReviewMode } from 'src/app/enums/supplier-document-review-mode.enum';\nimport { ISiteSupplierDocumentTypeVersion } from 'src/app/models/supplier-document/site-supplier-document-type';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { IWorkflowStep } from 'src/app/workflow/IWorkflowStep';\nimport { SupplierDocumentReviewComponent } from '../../supplier-document-review.component';\nimport { WorkflowInfoViewModel } from 'src/app/models/workflow/workflow-info-viewmodel';\nimport { CommandView } from 'src/app/models/workflow/command-view';\nimport { FormDataModel } from 'src/app/models/form/form-data-model';\nimport { SaveStepViewModel } from 'src/app/models/workflow/continue-workflow-query-viewModel';\nimport { SupplierDocumentService } from 'src/app/services/supplier-document.service';\n\n@Component({\n selector: 'obc-supplier-document-review-workflow',\n templateUrl: './supplier-document-review-workflow.component.html',\n styleUrls: ['./supplier-document-review-workflow.component.scss']\n})\nexport class SupplierDocumentReviewWorkflowComponent implements OnInit, IWorkflowStep {\n\n @ViewChild('supplierDocument') supplierDocument: SupplierDocumentReviewComponent;\n\n isInitilize: boolean = false;\n inProgress: boolean;\n\n supplierId: number;\n siteId: number;\n siteSupplierId: number;\n supplierDocumentReviewMode: SupplierDocumentReviewMode;\n selectedSiteSupplierDocument: ISiteSupplierDocumentTypeVersion;\n _workflow: WorkflowInfoViewModel;\n get workflow(): WorkflowInfoViewModel {\n return this._workflow;\n }\n\n set workflow(value: WorkflowInfoViewModel) {\n this._workflow = value;\n }\n\n constructor(\n private siteSupplierService: SupplierDocumentService,\n private modalService: ModalService,\n private toastrService: ToastrService) { }\n\n ngOnInit(): void {\n }\n\n\n initWorkflow(workflow: WorkflowInfoViewModel): Promise | boolean {\n this.workflow = workflow;\n return new Promise((resolve, _) => {\n this.inProgress = true;\n this.siteSupplierService.getSiteSupplierDocumentVersionByWorkflowInstanceId(workflow.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n if (res && res.siteId) {\n this.selectedSiteSupplierDocument = {\n files: res.documentTypes[0].siteSupplierDocumentFiles,\n displayVersion: res.documentTypes[0].displayVersion,\n lastSupplierVersionId: res.documentTypes[0].siteSupplierDocumentVersionId,\n supplierDocumentTypeName: res.documentTypes[0].supplierDocumentTypeName,\n documentKindId: res.documentTypes[0].documentKindId,\n } as ISiteSupplierDocumentTypeVersion;\n\n this.siteId = res.siteId;\n this.supplierId = res.supplierId;\n this.siteSupplierId = res.siteSupplierId;\n this.supplierDocumentReviewMode = res.supplierDocumentReviewMode;\n this.isInitilize = true;\n resolve(true);\n }\n else {\n this.toastrService.warning(\"There is not workflow\");\n resolve(false);\n }\n }, err => {\n this.modalService.error(err);\n resolve(false);\n\n })\n });\n\n }\n\n validateStep(command: CommandView, note: string): boolean | Promise {\n if (this.workflow?.currentActivity?.formsToFill?.length > 0 && !this.supplierDocument?.formDataRenderer){\n this.toastrService.warning(\"Please select a valid form\");\n return false;\n }\n else if (this.workflow?.currentActivity?.formsToFill?.length == 0 || this.supplierDocument.isReviewFormValid)\n return true;\n else {\n this.toastrService.warning(\"Review Form is not valid\");\n return false;\n }\n }\n\n\n saveStep(command: CommandView, note: string): SaveStepViewModel | Promise {\n\n let formDataModel: FormDataModel;\n if (this.workflow?.currentActivity?.formsToFill?.length > 0) {\n formDataModel = this.supplierDocument.formDataRenderer.getFormResponse();\n formDataModel.siteSupplierDocumentVersionId = this.selectedSiteSupplierDocument.lastSupplierVersionId;\n }\n\n return {\n continue: true,\n data: formDataModel\n };\n\n }\n\n}\n","
        \n
        \n \n
        \n
        \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n
        \n
        \n
        \n\n \n
        \n \n
        \n
        \n\n \n \n \n \n
        ","import { Component, HostListener, OnInit, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { finalize } from 'rxjs';\nimport { SupplierDocumentReviewFormSelectionMode } from 'src/app/enums/supplier-documnet-review-form-selection-mode.enum';\nimport { FilledFormInfoViewModel } from 'src/app/models/filled-form-info-view-model';\nimport { ServerResultData } from 'src/app/models/server-result-data';\nimport { ISiteSupplierDocumentTypeVersion } from 'src/app/models/supplier-document/site-supplier-document-type';\nimport { FormService } from 'src/app/services/form.service';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { SiteSupplierService } from 'src/app/services/site-supplier.service';\nimport { IWorkflowStep } from 'src/app/workflow/IWorkflowStep';\nimport { WorkflowInfoViewModel } from 'src/app/models/workflow/workflow-info-viewmodel';\nimport { CommandView } from 'src/app/models/workflow/command-view';\nimport { SaveStepViewModel } from 'src/app/models/workflow/continue-workflow-query-viewModel';\nimport { FormDataDetailsComponent } from 'src/app/components/form-manage/form-data-details/form-data-details.component';\nimport { SupplierDocumentService } from 'src/app/services/supplier-document.service';\n\n@Component({\n selector: 'obc-supplier-document-detail-workflow',\n templateUrl: './supplier-document-detail-workflow.component.html',\n styleUrls: ['./supplier-document-detail-workflow.component.scss']\n})\nexport class SupplierDocumentDetailWorkflowComponent implements OnInit, IWorkflowStep {\n\n @ViewChild('supplierDocumentDetail') supplierDocumentDetail: FormDataDetailsComponent;\n\n selectedFormDataId?: number;\n isInitilize: boolean = false;\n inProgress: boolean;\n\n workflow: WorkflowInfoViewModel;\n\n showPicPanel: boolean;\n formDetail: FilledFormInfoViewModel;\n selectedSiteSupplierDocument: ISiteSupplierDocumentTypeVersion;\n formSelectionMode: SupplierDocumentReviewFormSelectionMode = SupplierDocumentReviewFormSelectionMode.withoutForm;\n SupplierDocumentReviewFromSelectionMode = SupplierDocumentReviewFormSelectionMode;\n\n constructor(\n private formService: FormService,\n private siteSupplierService: SupplierDocumentService,\n private modalService: ModalService,\n private toastrService: ToastrService,\n private router: Router) { }\n\n ngOnInit(): void {\n this.onResize();\n }\n\n showTabPage: boolean = false;\n @HostListener('window:resize', ['$event'])\n onResize(event?) {\n setTimeout(() => {\n this.showTabPage = false;\n if (window.innerWidth < 1200)\n this.showTabPage = true;\n\n this.showPicPanel = true;\n if (this.selectedSiteSupplierDocument == null || this.selectedSiteSupplierDocument.files == null || this.selectedSiteSupplierDocument.files.length == 0) {\n this.showPicPanel = false;\n }\n }, 500);\n }\n\n initWorkflow(workflow: WorkflowInfoViewModel): Promise | boolean {\n this.workflow = workflow;\n return new Promise((resolve, _) => {\n this.inProgress = true;\n\n //Get data of workflow\n this.siteSupplierService.getSiteSupplierDocumentVersionByWorkflowInstanceId(workflow.id)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(res => {\n if (res && res.siteId) {\n this.selectedFormDataId = res.formDataId;\n\n this.selectedSiteSupplierDocument = {\n files: res.documentTypes[0].siteSupplierDocumentFiles,\n displayVersion: res.documentTypes[0].displayVersion,\n lastSupplierVersionId: res.documentTypes[0].siteSupplierDocumentVersionId,\n supplierDocumentTypeName: res.documentTypes[0].supplierDocumentTypeName\n } as ISiteSupplierDocumentTypeVersion;\n\n if (this.selectedFormDataId) {\n this.formSelectionMode = SupplierDocumentReviewFormSelectionMode.withForm;\n\n this.formService\n .getFilledForm(this.selectedFormDataId)\n .subscribe(\n res => {\n if (res) {\n this.formDetail = res;\n this.isInitilize = true;\n this.onResize();\n\n resolve(true);\n } else {\n this.modalService.error('No Details Available');\n resolve(false);\n }\n }, err => {\n this.modalService.error(\"Request Failed\");\n resolve(false);\n }\n )\n }\n else {\n this.formSelectionMode = SupplierDocumentReviewFormSelectionMode.withoutForm;\n this.onResize();\n this.isInitilize = true;\n resolve(true);\n }\n }\n else {\n this.toastrService.warning(\"There is not workflow\");\n resolve(false);\n }\n }, err => {\n this.modalService.error(err);\n resolve(false);\n });\n });\n }\n\n validateStep(command: CommandView, note: string): boolean | Promise {\n return true;\n }\n\n saveStep(command: CommandView, note: string): SaveStepViewModel | Promise {\n return {\n continue: true,\n }\n }\n\n}","
        \n
        \n
        \n

        Workflow Instance History ({{workflowInstanceHistory?.workflowName}})

        \n
        \n \n
        \n
        \n
        \n \n
        \n
        \n
        \n
        \n
        \n {{d.title}}: {{d.value}}\n
        \n
        \n Current Step: {{workflowInstanceHistory?.currentActivity?.title}}\n
        \n
        \n
        \n
        \n History Records\n
        \n
        \n
        \n
        \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
        \n Step Title\n \n User\n \n Date\n \n Note\n
        {{index + 1}}\n {{item.activityTitle}}\n \n \n {{item.user?.fullName}} ({{item.user?.mobile}})\n \n {{item.resumedDate | datetime}}\n \n {{item.note}}\n
        {{workflowInstanceHistory?.activityList?.length+1}}\n {{workflowInstanceHistory?.currentActivity?.title}}\n \n Pending\n Pending\n \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n\n \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { finalize } from 'rxjs';\nimport { FormDataDetailViewModel } from 'src/app/models/form/form-data-detail-view-model';\nimport { GetWorkflowFilledFormModel } from 'src/app/models/supplier-document/get-workflow-filled-form-model ';\nimport { WorkflowHistoryViewModel } from 'src/app/models/workflow/workflow-history-view-model';\nimport { ModalService } from 'src/app/services/modal.service';\nimport { WorkflowService } from 'src/app/services/workflow.service';\n\n@Component({\n selector: 'obc-workflow-instance-history',\n templateUrl: './workflow-instance-history.component.html',\n styleUrls: ['./workflow-instance-history.component.scss']\n})\nexport class WorkflowInstanceHistoryComponent implements OnInit {\n @Input() workflowInstanceId: string;\n @Output() public hide = new EventEmitter();\n\n inProgress: boolean = false;\n workflowInstanceHistory: WorkflowHistoryViewModel = {};\n filledFormData: FormDataDetailViewModel;\n\n constructor(\n private modalService: ModalService,\n private workflowService: WorkflowService,\n ) { }\n\n ngOnInit(): void {\n this.getWorkflowInstanceHistory();\n }\n\n getWorkflowInstanceHistory() {\n this.inProgress = true;\n this.workflowService\n .getWorkflowInstanceHistory(this.workflowInstanceId)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe({\n next: (result) => {\n if (result != null) {\n this.workflowInstanceHistory = result;\n }\n },\n error: (error) => {\n }\n });\n }\n viewHistoryFilledForm(formDetails, formDataId: number) {\n this.inProgress = true;\n this.workflowService.getWorkflowFilledForm({ formId: formDataId, workflowInstanceId: this.workflowInstanceId } as GetWorkflowFilledFormModel)\n .pipe(finalize(() => this.inProgress = false))\n .subscribe(\n (result) => {\n this.filledFormData = result;\n this.modalService.show(formDetails, \"modal-lg\");\n });\n }\n}\n","\n \n
        \n

        \n Drag and drop your\n {{documentKindTitle}} files here\n
        \n or\n

        \n
        \n \n
        \n

        Supported file types\n include PDF and images.

        \n \n
        \n
        \n
        \n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NgxFileDropEntry } from 'ngx-file-drop';\n\n@Component({\n selector: 'obc-supplier-document-kind-uploder',\n templateUrl: './supplier-document-kind-uploder.component.html',\n styleUrls: ['./supplier-document-kind-uploder.component.scss']\n})\n\nexport class SupplierDocumentKindUploderComponent implements OnInit {\n\n @Input() documentKindTitle: string = null;\n @Input() showAddButton: boolean;\n @Input() showRequestButton: boolean;\n\n @Output() filesDragedOrSelected = new EventEmitter();\n @Output() addDocumentClicked = new EventEmitter();\n @Output() requestDocumentClicked = new EventEmitter();\n\n uploadFileModalRef = null;\n _siteSupplierHashlink = null;\n\n constructor() { }\n\n ngOnInit(): void { }\n\n dropped(files: NgxFileDropEntry[]) {\n this.filesDragedOrSelected.emit(files);\n }\n\n addClicked() {\n this.addDocumentClicked.emit();\n }\n\n requestClicked() {\n this.requestDocumentClicked.emit();\n }\n}\n","import { CompanyEmployeeComponent } from './components/site-permissions/company-employee/company-employee.component';\nimport { ToAnyPipe } from './pipes/to-any.pipe';\nimport { DicToArrayPipe } from './pipes/dic-to-array.pipe';\nimport { AnonymousCheckoutComponent } from './components/anonymous-check/anonymous-checkout/anonymous-checkout.component';\nimport { LandingPageComponent } from './components/landing-page/landing-page.component';\nimport { NoAccessComponent } from './components/no-access/no-access.component';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { LOCALE_ID, NgModule, Provider } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { SecureComponent } from './layout/secure/secure.component';\nimport { PublicComponent } from './layout/public/public.component';\nimport { SideBarComponent } from './layout/side-bar/side-bar.component';\nimport { TopBarComponent } from './layout/top-bar/top-bar.component';\nimport { SwitchComponent } from './custom-controls/switch/switch.component';\nimport { RadioGroupComponent } from './custom-controls/radio-group/radio-group.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { CompanyComponent } from './components/company/company.component';\nimport { SiteComponent } from './components/site/site-details/site.component';\nimport { UserComponent } from './components/user/user.component';\nimport { SignInComponent } from './components/sign-in/sign-in.component';\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\nimport { HttpHelperInterceptor } from './services/http-helper.interceptor';\nimport { LoginComponent } from './auth/login/login.component';\nimport { SignInService } from './services/sign-in.service';\nimport { ModalComponent } from './custom-controls/modal/modal.component';\nimport { ModalModule } from 'ngx-bootstrap/modal';\nimport { SiteQuestionsManageComponent } from './components/site/site-questions-manage/site-questions-manage.component';\nimport { SiteQuestionsComponent } from './components/site/site-questions/site-questions.component';\nimport { QuestionManagerComponent } from './components/question/question-manager/question-manager.component';\nimport { QuestionAddComponent } from './components/question/question-add/question-add.component';\nimport { EnumToArrayPipe } from './pipes/enum-to-array.pipe';\nimport { QuestionTypePipe } from './pipes/question-type.pipe';\nimport { QuestionMultiSelectComponent } from './components/question/question-multi-select/question-multi-select.component';\nimport { QuestionTextComponent } from './components/question/question-text/question-text.component';\nimport { QuestionBooleanComponent } from './components/question/question-boolean/question-boolean.component';\nimport { QuestinRenderModePipe } from './pipes/questin-render-mode.pipe';\nimport { QuestionSingleSelectComponent } from './components/question/question-single-select/question-single-select.component';\nimport { NgxBootstrapModule } from './shared-modules/ngx-bootstrap.module';\nimport { SiteAttendancePermissionComponent } from './components/site-permissions/site-attendance-permission/site-attendance-permission.component';\nimport { ImportSiteAttendancePermissionComponent } from './components/site-permissions/site-attendance-permission/import-site-attendance-permission/import-site-attendance-permission.component';\nimport { ManageSiteAttendancePermissionComponent } from './components/site-permissions/site-attendance-permission/manage-site-attendance-permission/manage-site-attendance-permission.component';\nimport { LoaderComponent } from './custom-controls/loader/loader.component';\nimport { QuestionAnswerComponent } from './components/question-answer/question-answer.component';\nimport { SiteActivityComponent } from './components/site-activity/site-activity.component';\nimport { SiteAttendanceComponent } from './components/site-attendance/site-attendance.component';\nimport { GoogleMapsModule } from '@angular/google-maps';\nimport { MapComponent } from './custom-controls/map/map.component';\nimport { TypeaheadModule } from 'ngx-bootstrap/typeahead';\nimport { UserActivityComponent } from './components/user-activity/user-activity.component';\nimport { UserDocumentTypesComponent } from './components/user-document-types/user-document-types.component';\nimport { ChartModule } from 'angular2-chartjs';\nimport { GodComponent } from './components/god/god.component';\nimport { ManageCompaniesComponent } from './components/god/manage-companies/manage-companies.component';\nimport { UserAutocompleteComponent } from './custom-controls/user-autocomplete/user-autocomplete.component';\nimport { DatetimePipe } from './pipes/datetime.pipe';\nimport { QuestionFileComponent } from './components/question/question-file/question-file.component';\nimport { SiteAttendanceBlockedUserComponent } from './components/site-permissions/site-attendance-blocked-user/site-attendance-blocked-user.component';\nimport { AccompanierModePipe } from './pipes/accompanier-mode.pipe';\nimport { AutomaticCheckinModePipe } from './pipes/automatic-checkin-mode.pipe';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { TooltipComponent } from './custom-controls/tooltip/tooltip.component';\nimport { ManageVideosComponent } from './components/manage-videos/manage-videos.component';\nimport { VideoPlayListButtonComponent } from './components/video-play-list-button/video-play-list-button.component';\nimport { LightBoxComponent } from './components/light-box/light-box.component';\nimport { VideoListComponent } from './components/video-list/video-list.component';\nimport { QuestionRendererComponent } from './components/question/renderer/question-renderer/question-renderer.component';\nimport { BooleanQuestionRendererComponent } from './components/question/renderer/boolean-question-renderer/boolean-question-renderer.component';\nimport { MultiSelectQuestionRendererComponent } from './components/question/renderer/multi-select-question-renderer/multi-select-question-renderer.component';\nimport { SingleSelectQuestionRendererComponent } from './components/question/renderer/single-select-question-renderer/single-select-question-renderer.component';\nimport { ManualCheckinComponent } from './components/manual-check/manual-checkin/manual-checkin.component';\nimport { ManualCheckoutComponent } from './components/manual-check/manual-checkout/manual-checkout.component';\nimport { ManualCheckComponent } from './components/manual-check/manual-check.component';\nimport { TextQuestionRendererComponent } from './components/question/renderer/text-question-renderer/text-question-renderer.component';\nimport { FileQuestionRendererComponent } from './components/question/renderer/file-question-renderer/file-question-renderer.component';\nimport { QuestionTriggersComponent } from './components/question/question-triggers/question-triggers.component';\nimport { NotFoundPageComponent } from './components/not-found-page/not-found-page.component';\nimport { ObjectToArrayPipe } from './pipes/object-to-array.pipe';\nimport { DescriptorComponent } from './custom-controls/descriptor/descriptor.component';\nimport { CompanyUserComponent } from './components/site-permissions/company-user/company-user.component';\nimport { MobilePipe } from './pipes/mobile.pipe';\nimport { ChartComponent } from './custom-controls/chart/chart.component';\nimport { WeekdayPipe } from './pipes/weekday.pipe';\nimport { FlaggedUserComponent } from './components/site-permissions/flagged-user/flagged-user.component';\nimport { CompanyOwnerComponent } from './components/company-owner/company-owner.component';\nimport { BillingComponent } from './components/company-owner/billing/billing.component';\nimport { UserProfileComponent } from './components/user-profile/user-profile.component';\nimport { ImageCropperModule } from 'ngx-image-cropper';\nimport { ChangePasswordComponent } from './components/change-password/change-password.component';\nimport { RegexPipe } from './pipes/regex.pipe';\nimport { CompanySettingsComponent } from './components/company-settings/company-settings.component';\nimport { CompanyTriggerActionComponent } from './components/company-settings/company-trigger-action/company-trigger-action.component';\nimport { EmailTemplateComponent } from './components/company-settings/company-trigger-action/email-template/email-template.component';\nimport { CompanyProfileComponent } from './components/company-settings/company-profile/company-profile.component';\nimport { FilterDataListComponent } from './custom-controls/filter-data-list/filter-data-list.component';\nimport { ManagePlansComponent } from './components/god/manage-plans/manage-plans.component';\nimport { SiteAutomationsComponent } from './components/company-owner/site-automations/site-automations.component';\nimport { AskQuestionPeriodModePipe } from './pipes/ask-question-period-mode.pipe';\nimport { ItemValuePipe } from './pipes/item-value.pipe';\nimport { ChipContainerComponent } from './custom-controls/chip-container/chip-container.component';\nimport { FilterPipe } from './pipes/filter.pipe';\nimport { EmergencyAlarmComponent } from './components/emergency-alarm/emergency-alarm.component';\nimport { QuestionExtendedTitleComponent } from './components/question/question-extended-title/question-extended-title.component';\nimport { DraggableDirective } from './directive/draggable.directive';\nimport { ResizableDirective } from './directive/resizable.directive';\nimport { CardDesignerComponent } from './components/designer/card-designer/card-designer.component';\nimport { DraggableElementPageComponent } from './components/designer/draggable-element-page/draggable-element-page.component';\nimport { AccompanyPersonComponent } from './components/accompany-person/accompany-person.component';\nimport { AnonymousComponent } from './layout/anonymouse/anonymous.component';\nimport { AnonymousCheckComponent } from './components/anonymous-check/anonymous-check.component';\nimport { AnonymousCheckinComponent } from './components/anonymous-check/anonymous-checkin/anonymous-checkin.component';\nimport { RequiredDocumentRendererComponent } from './components/question/renderer/required-document-renderer/required-document-renderer.component';\nimport { SuccessfullAnonymousCheckinComponent } from './components/anonymous-check/anonymous-checkin/successfull-anonymous-checkin/successfull-anonymous-checkin.component';\nimport { LayoutPageComponent } from './components/designer/layout-page/layout-page.component';\nimport { ManageIndustryTypesComponent } from './components/god/manage-industry-types/manage-industry-types.component';\nimport { QuestionDefaultModePipe } from './pipes/question-default-mode.pipe';\nimport { AnnouncementComponent } from './components/announcement-manager/announcement/announcement.component';\nimport { AnnouncementManagerComponent } from './components/announcement-manager/announcement-manager.component';\nimport { SiteAnnouncementComponent } from './components/announcement-manager/site-announcement/site-announcement.component';\nimport { CreateAnnouncementComponent } from './components/announcement-manager/create-announcement/create-announcement.component';\nimport { SiteAnnouncementManageComponent } from './components/site/site-announcement-manage/site-announcement-manage.component';\nimport { OrderByFuctionPipe, OrderByPipe } from './pipes/order-by.pipe';\nimport { UserContactInformationComponent } from './components/user-contact-information/user-contact-information.component';\nimport { RequiredFieldRendererComponent } from './components/required-field/required-field-renderer/required-field-renderer.component';\nimport { SummaryWidgetComponent } from './custom-controls/summary-widget/summary-widget.component';\nimport { DatePipe } from './pipes/date.pipe';\nimport { GenderPipe } from './pipes/gender.pipe';\nimport { MultiImageModePipe } from './pipes/multi-image-mode-pipe.pipe';\nimport { YesNoPipe } from './pipes/yes-no.pipe';\nimport { FilterByPropertyPipe } from './pipes/filter-by-property.pipe';\nimport { SortPipe } from './pipes/sort.pipe';\nimport { ManageVisitorTypeComponent } from './components/manage-visitor-type/manage-visitor-type.component';\nimport { ManageSiteVisitorTypeComponent } from './components/manage-site-visitor-type/manage-site-visitor-type.component';\nimport { ManageSiteQuestionVisitorTypeComponent } from './components/manage-site-question-visitor-type/manage-site-question-visitor-type.component';\nimport { ManageScannablesComponent } from './components/scannables/manage-scannables/manage-scannables.component';\nimport { ScannableGroupsComponent } from './components/scannables/scannable-groups/scannable-groups.component';\nimport { ScannableItemsComponent } from './components/scannables/scannable-items/scannable-items.component';\nimport { FileUploadComponent } from './custom-controls/file-upload/file-upload.component';\nimport { SiteScannableGroupComponent } from './components/scannables/site-scannable-group/site-scannable-group.component';\nimport { GroupByPipe } from './pipes/group-by.pipe';\nimport { ImageCropperFormControlComponent } from './custom-controls/image-cropper-form-control/image-cropper-form-control.component';\nimport { CompanyCategoryPipe } from './pipes/company-category.pipe';\nimport { AddRemoveQuestionAllSitesComponent } from './components/question/add-remove-question-all-sites/add-remove-question-all-sites.component';\nimport { SiteLocationVerifyComponent } from './components/site/site-location-verify/site-location-verify.component';\nimport { ImportSitesComponent } from './components/site/import-sites/import-sites.component';\nimport { CheckListFormControlComponent } from './custom-controls/check-list-form-control/check-list-form-control.component';\nimport { DurationSelectorComponent } from './custom-controls/duration-selector/duration-selector.component';\nimport { ArrayFormControlComponent } from './custom-controls/array-form-control/array-form-control.component';\nimport { NicyNullPipe } from './pipes/nicy-null.pipe';\nimport { HourMinuteSelectorComponent } from './custom-controls/hour-minute-selector/hour-minute-selector.component';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { MyScheduledReportsComponent } from './components/site-activity/my-scheduled-reports/my-scheduled-reports.component';\nimport { ReportDeliveryTypePipe } from './pipes/report-delivery-type.pipe';\nimport { ReportPeriodTypePipe } from './pipes/report-period-type.pipe';\nimport { NumberToWeekdayPipe } from './pipes/number-to-weekday.pipe';\nimport { FilterSiteByPermissionPipe } from './pipes/filter-site-by-permission.pipe';\nimport { SiteUserComponent } from './components/site-permissions/site-user/site-user.component';\nimport { UserBusinessComponent } from './custom-controls/user-business/user-business.component';\nimport { EmailListDirective } from './directive/email-list.directive';\nimport { SubscriptionTypePipePipe } from './pipes/subscription-type-pipe.pipe';\nimport { QuickSetupComponent } from './components/quick-setup/quick-setup.component';\nimport { AdditionalCompanyHostComponent } from './components/quick-setup/additional-company-host/additional-company-host.component';\nimport { MinimalAddSiteComponent } from './components/quick-setup/minimal-add-site/minimal-add-site.component';\nimport { ToFormGroupPipe } from './pipes/to-form-group.pipe';\nimport { AddressFormControlComponent } from './custom-controls/address-form-control/address-form-control.component';\nimport { AttendanceFieldRendererComponent } from './components/attendance-field-renderer/attendance-field-renderer.component';\nimport { AttendanceFieldComponent } from './components/attendance-field-renderer/attendance-field/attendance-field.component';\nimport { HostPushNotificationComponent } from './components/host-push-notification/host-push-notification.component';\nimport { FilteredAnnouncementComponent } from './components/site-activity/filtered-announcement/filtered-announcement.component';\nimport { DocumentExpiryStatusPipe } from './pipes/document-expiry-status.pipe';\nimport { DocumentReportComponent } from './components/document-report/document-report.component';\nimport { PaginationComponent } from './custom-controls/pagination/pagination.component';\nimport { SiteSelectorComponent } from './components/site-selector/site-selector.component';\nimport { ConditionalQuestionComponent } from './components/question/conditional-question/conditional-question.component';\nimport { AnswerSelectorComponent } from './custom-controls/answer-selector/answer-selector.component';\nimport { CompanySiteSelectorComponent } from './custom-controls/company-site-selector/company-site-selector.component';\nimport { PopoverFilterSimpleComponent } from './custom-controls/popover-filter/popover-filter-simple/popover-filter-simple.component';\nimport { FilterHeaderComponent } from './custom-controls/popover-filter/popover-filter-simple/filter-header/filter-header.component';\nimport { SortableTitleHeaderComponent } from './custom-controls/sortable-title-header/sortable-title-header.component';\nimport { FilterListRendererComponent } from './custom-controls/filter-list-renderer/filter-list-renderer.component';\nimport { AnnouncementModePipe } from './pipes/announcement-mode.pipe';\nimport { TableSettingComponent } from './custom-controls/grid/table-setting/table-setting.component';\nimport { DurationFormControlComponent } from './custom-controls/duration-form-control/duration-form-control.component';\nimport { DateTimePickerComponent } from './custom-controls/date-time-picker/date-time-picker.component';\nimport { InputDateTimePickerComponent } from './custom-controls/input-date-time-picker/input-date-time-picker.component';\nimport { AskModePipe } from './pipes/ask-mode.pipe';\nimport { CompanySupplierComponent } from './components/company-supplier/company-supplier.component';\nimport { EditCompanySupplierComponent } from './components/company-supplier/edit-company-supplier/edit-company-supplier.component';\nimport { CompanySupplierSelectorComponent } from './custom-controls/company-supplier/company-supplier-selector.component';\nimport { InductionModePipe } from './pipes/site-induction-mode.pipe';\nimport { InductionStatusComponent } from './custom-controls/induction-status/induction-status.component';\nimport { DataRetentionPolicyComponent } from './components/data-retention-policy/data-retention-policy.component';\nimport { SiteInductionManageComponent } from './components/site-induction-manage/site-induction-manage.component';\nimport { SiteInductionComponent } from './components/site/site-induction/site-induction.component';\nimport { InductionRendererComponent } from './components/question/induction-renderer/induction-renderer.component';\nimport { UserCardComponent } from './components/user-card/user-card.component';\nimport { AnnouncementRendererComponent } from './components/announcement-renderer/announcement-renderer.component';\nimport { AnnouncementItemRendererComponent } from './components/announcement-renderer/announcement-item-renderer/announcement-item-renderer.component';\nimport { QuestionSelectorComponent } from './components/question-selector/question-selector.component';\nimport { DocumentSelectorComponent } from './components/document-selector/document-selector.component';\nimport { AnnouncementSelectorComponent } from './components/announcement-selector/announcement-selector.component';\nimport { TextOperatorPipe } from './pipes/text-operator.pipe';\nimport { DraggableItemService, SortableModule } from 'ngx-bootstrap/sortable';\nimport { UserSelectorComponent } from './custom-controls/user-selector/user-selector.component';\nimport { RequiredDocumentListRendererComponent } from './components/question/renderer/required-document-list-renderer/required-document-list-renderer.component';\nimport { VisitorTypeSelectorComponent } from './components/visitor-type-selector/visitor-type-selector.component';\nimport { DisputeAttendanceComponent } from './components/dispute-attendance/dispute-attendance.component';\nimport { MarkdownEditorComponent } from './components/markdown-editor/markdown-editor.component';\nimport { QuestionTitleRendererComponent } from './components/question/renderer/question-title-renderer/question-title-renderer.component';\nimport { DisputeHistoryComponent } from './components/dispute-history/dispute-history.component';\nimport { SortableComponent } from './custom-controls/sortable/sortable.component';\nimport { ManageInventoryComponent } from './components/inventory/manage-inventory/manage-inventory.component';\nimport { ManageInventoryLocationsComponent } from './components/inventory/manage-inventory-locations/manage-inventory-locations.component';\nimport { ManageToolCategoriesComponent } from './components/inventory/manage-tool-categories/manage-tool-categories.component';\nimport { ManageToolStatusesComponent } from './components/inventory/manage-tool-statuses/manage-tool-statuses.component';\nimport { InventoryToolReportComponent } from './components/inventory/reports/inventory-tool-report/inventory-tool-report.component';\nimport { InventoryLocationSelectorComponent } from './components/inventory/inventory-location-selector/inventory-location-selector.component';\nimport { ToolAssignHistoryComponent } from './components/inventory/reports/tool-assign-history/tool-assign-history.component';\nimport { ToolImagesComponent } from './components/inventory/reports/tool-images/tool-images.component';\nimport { ToolDynamicFieldTypePipe } from './pipes/tool-dynamic-field-type.pipe';\nimport { UpsertInventoryAssetComponent } from './components/inventory/upsert-inventory-asset/upsert-inventory-asset.component';\nimport { ToolFieldRendererComponent } from './components/inventory/tool-field-renderers/tool-field-renderer/tool-field-renderer.component';\nimport { TextToolFieldRendererComponent } from './components/inventory/tool-field-renderers/text-tool-field-renderer/text-tool-field-renderer.component';\nimport { ImageToolFieldRendererComponent } from './components/inventory/tool-field-renderers/image-tool-field-renderer/image-tool-field-renderer.component';\nimport { FormManageComponent } from './components/form-manage/form-manage/form-manage.component';\nimport { CompanySiteScopePipe } from './pipes/company-site-scope.pipe';\nimport { SiteFormsComponent } from './components/site/site-forms/site-forms.component';\nimport { FormInjectorComponent } from './components/form-manage/form-injector/form-injector.component';\nimport { InventoryStatusTriggerEditorComponent } from './components/inventory/inventory-status-trigger-editor/inventory-status-trigger-editor.component';\nimport { InventoryStatusTriggersComponent } from './components/inventory/inventory-status-triggers/inventory-status-triggers.component';\nimport { ScheduleReportTypePipe } from './pipes/schedule-report-type.pipe';\nimport { InventoryDynamicFieldTriggersComponent } from './components/inventory/inventory-dynamic-filed-triggers/inventory-dynamic-field-triggers.component';\nimport { InventoryDynamicFieldTriggerEditorComponent } from './components/inventory/inventory-dynamic-field-trigger-editor/inventory-dynamic-field-trigger-editor.component';\nimport { SiteInductionStatusPipe } from './pipes/site-induction-status.pipe';\nimport { InductionManageComponent } from './components/induction/induction-manage/induction-manage.component';\nimport { UpsertInductionComponent } from './components/induction/upsert-induction/upsert-induction.component';\nimport { InductionSelectorComponent } from './components/induction/induction-selector/induction-selector.component';\nimport { InductionReportComponent } from './components/induction/induction-report/induction-report.component';\nimport { InductionFilledInfoComponent } from './components/induction/induction-filled-info/induction-filled-info.component';\nimport { SiteInductionDetailComponent } from './components/induction/site-induction-detail/site-induction-detail.component';\nimport { SimpleDocumentRendererComponent } from './components/simple-document-renderer/simple-document-renderer.component';\nimport { FormTitlePipe } from './pipes/form-title.pipe';\nimport { ManageSupplierDocumentTypeComponent } from './components/supplier-documents/manage-supplier-document-type/manage-supplier-document-type.component';\nimport { ManageSupplierDocumentsComponent } from './components/supplier-documents/manage-supplier-documents/manage-supplier-documents.component';\nimport { SiteSupplierDocumentUploaderComponent } from './components/supplier-documents/site-supplier-document-uploader/site-supplier-document-uploader.component';\nimport { SupplierDocumentsComponent } from './components/supplier-documents/supplier-documents.component';\nimport { SupplierDocumentSelectorComponent } from './custom-controls/supplier-document-selector/supplier-document-selector.component';\nimport { SupplierDocumentSignOffViewerComponent } from './components/supplier-documents/supplier-document-sign-off-viewer/supplier-document-sign-off-viewer.component';\nimport { ViewSiteSupplierDocumentVersionComponent } from './components/supplier-documents/view-site-supplier-document-version/view-site-supplier-document-version.component';\nimport { SupplierDocumentRendererComponent } from './components/supplier-documents/supplier-document-renderer/supplier-document-renderer.component';\nimport { SiteSupplierDocumentUploaderContainerComponent } from './components/supplier-documents/site-supplier-document-uploader-container/site-supplier-document-uploader-container.component';\nimport { SiteDocumentStatusPipe } from './pipes/site-document-status.pipe';\nimport { SiteAttendanceApprovalStatusComponent } from './custom-controls/site-attendance-approval-status/site-attendance-approval-status.component';\nimport { ClipboardBoxComponent } from './custom-controls/clipboard-box/clipboard-box.component';\nimport { SiteAttendanceApprovalStatusPipe } from './pipes/site-attendance-approval-status.pipe';\nimport { SupplierDocumentTypeStatusIconPipe } from './pipes/document-type-status-icon.pipe';\nimport { SupplierDocumentTypeStatusTooltipPipe } from './pipes/supplier-document-type-status-tooltip.pipe';\nimport { ManageRegionComponent } from './components/region/manage-region/manage-region.component';\nimport { RegionSelectorComponent } from './components/region-selector/region-selector.component';\nimport { ViewSiteSupplierDocumentVersionHistoryComponent } from './components/supplier-documents/view-site-supplier-document-version-history/view-site-supplier-document-version-history.component';\nimport { MyobPeriodTypePipe } from './pipes/myob-period-type.pipe';\nimport { TriggerSelectorComponent } from './components/trigger-selector/trigger-selector.component';\nimport { FormReportComponent } from './components/form-manage/form-report/form-report.component';\nimport { FormSelectorComponent } from './components/form-manage/form-selector/form-selector.component';\nimport { FormDataDetailsComponent } from './components/form-manage/form-data-details/form-data-details.component';\nimport { FileViewerComponent } from './components/file-viewer/file-viewer.component';\nimport { FormScopePipe } from './pipes/form-scope.pipe';\nimport { SupplierDocumentReviewComponent } from './components/supplier-documents/supplier-document-review/supplier-document-review.component';\nimport { FormDataRendererComponent } from './components/form-manage/form-data-renderer/form-data-renderer.component';\nimport { FormDetailsComponent } from './components/form-manage/form-details/form-details.component';\nimport { AnnouncementDisplayModePipe } from './pipes/announcement-display-mode.pipe';\nimport { ItemsMixtureComponent } from './components/items-mixture/items-mixture.component';\nimport { ItemsRendererComponent } from './components/items-renderer/items-renderer.component';\nimport { SingleQuestionRendererComponent } from './components/question/renderer/single-question-renderer/single-question-renderer.component';\nimport { SiteManagementComponent } from './components/site-management/site-management.component';\nimport { SiteQuestionsManagementComponent } from './components/site-management/site-questions-management/site-questions-management.component';\nimport { ToastrModule } from 'ngx-toastr';\nimport { AccordionHeaderComponent } from './components/site-management/accordion-header/accordion-header.component';\nimport { CompanyIntegrationsComponent } from './components/company-integrations/company-integrations.component';\nimport { MyobIntegrationComponent } from './components/company-integrations/myob-integration/myob-integration.component';\nimport { ProcoreIntegrationComponent } from './components/company-integrations/procore-integration/procore-integration.component';\nimport { CanDeactivateGuard } from './services/can-deactivate-guard.service';\nimport { CompanyInductionSelectorComponent } from './custom-controls/company-induction-selector/company-induction-selector.component';\nimport { SiteSupplierDocumentMultipleUploaderComponent } from './components/supplier-documents/site-supplier-document-multiple-uploader/site-supplier-document-multiple-uploader.component';\nimport { FormAskModePipe } from './pipes/form-ask-mode.pipe';\nimport { NgxFileDropModule } from 'ngx-file-drop';\nimport { SupplierDocumentReminderComponent } from './components/supplier-documents/supplier-document-reminder/supplier-document-reminder.component';\nimport { PendingToApproveListComponent } from './components/pending-approval/pending-to-approve-list/pending-to-approve-list.component';\nimport { ApproveEntityTypePipe } from './pipes/approve-entity-type.pipe';\nimport { SupplierDocumentDescriptionViewerComponent } from './components/supplier-documents/supplier-document-description-viewer/supplier-document-description-viewer.component';\nimport { HtmlNewLinePipe } from './pipes/html-new-line.pipe';\nimport { CompanyDocumentTypeComponent } from './components/company-settings/company-document-type/company-document-type.component';\nimport { OptionalMandatorySelectorComponent } from './custom-controls/optional-mandatory-selector/optional-mandatory-selector.component';\nimport { OptionalMandatoryPipe } from './pipes/optional-mandatory.pipe';\nimport { ProcoreExportSiteAttendanceAsTimeCardModePipePipe } from './pipes/procore-export-site-attendance-as-time-card-mode-pipe.pipe';\nimport { ProcoreExportSiteAttendanceAsVisitorLogModePipePipe } from './pipes/procore-export-site-attendance-as-visitor-log-mode-pipe.pipe';\nimport { ProcoreExportSiteAttendanceAsManpowerModePipe } from './pipes/procore-export-site-attendance-as-manpower-mode-pipe.pipe';\nimport { ProcoreConfigurationAccessCodeCallbackComponent } from './components/company-integrations/procore-configuration-access-code-callback/procore-configuration-access-code-callback.component';\nimport { MyobConfigurationAccessCodeCallbackComponent } from './components/company-integrations/myob-configuration-access-code-callback/myob-configuration-access-code-callback.component';\nimport { FormTypePipe } from './pipes/form-type.pipe';\nimport { FormApplyForPipe } from './pipes/form-apply-for.pipe';\nimport { AnonymousPermitComponent } from './components/anonymous-permit/anonymous-permit.component';\nimport { FilledFormStatusPipe } from './pipes/filled-form-status.pipe';\nimport { FormRegisterForPipe } from './pipes/form-register-for.pipe';\nimport { FormDataStatusPipe } from './pipes/form-data-status.pipe';\nimport { AutoCheckOutTypePipe } from './pipes/auto-check-out-type.pipe';\nimport { PermitStatusIconPipe } from './pipes/permit-status-icon.pipe';\nimport { PermitStatusTitlePipe } from './pipes/permit-status-title.pipe';\nimport { PermitStatusColorPipe } from './pipes/permit-status-color.pipe';\nimport { DelayAnswerModePipe } from './pipes/delay-answer-mode.pipe';\nimport { QuestionDateComponent } from './components/question/question-date/question-date.component';\nimport { DateQuestionLimitComponent } from './components/question/question-date/date-question-limit/date-question-limit.component';\nimport { DateQuestionRendererComponent } from './components/question/renderer/date-question-renderer/date-question-renderer.component';\nimport { DocumentAnswerRendererComponent } from './components/question-answer/document-answer-renderer/document-answer-renderer.component';\nimport { QuestionListAnswerRendererComponent } from './components/question-answer/question-list-answer-renderer/question-list-answer-renderer.component';\nimport { SupplierDocumentApprovalModePipe } from './pipes/supplier-document-approval-mode.pipe';\nimport { FilterByConditionPipe } from './pipes/filter-by-condition.pipe';\nimport { PreCheckInListComponent } from './components/pre-check-in-list/pre-check-in-list.component';\nimport { SignaturePadComponent } from './custom-controls/signature-pad/signature-pad.component';\nimport { ApproveStatusPipe } from './pipes/approve-status.pipe';\nimport { ApproveRejectComponent } from './components/pending-approval/approve-reject/approve-reject.component';\nimport { PermitOpenPolicyPipe } from './pipes/permit-open-policy.pipe';\nimport { PermitStatusPipe } from './pipes/permit-status.pipe';\nimport { PermitReportComponent } from './components/form-manage/permit/permit-report/permit-report.component';\nimport { DaysOfWeekPipe } from './pipes/days-of-week.pipe';\nimport { PermitScheduleSelectorComponent } from './components/permit-schedule-selector/permit-schedule-selector.component';\nimport { PermitScheduleItemComponent } from './components/permit-schedule-selector/permit-schedule-item/permit-schedule-item.component';\nimport { UpdatePermitStatusComponent } from './components/form-manage/permit/update-permit-status/update-permit-status.component';\nimport { PermitHistoryComponent } from './components/form-manage/permit/permit-history/permit-history.component';\nimport { TimePipe } from './pipes/time.pipe';\nimport { QRCodeCheckinModePipe } from './pipes/qrcode-checkin-mode.pipe';\nimport { CheckinLocationModePipe } from './pipes/checkin-location-mode.pipe';\nimport { SiteAnnouncementForceViewModePipe } from './pipes/site-announcement-force-view-mode.pipe';\nimport { QuestionAnswerFilterComponent } from './components/question-answer/question-answer-filter/question-answer-filter.component';\nimport { QuestionAnswerFilterRendererComponent } from './components/question-answer/question-answer-filter-renderer/question-answer-filter-renderer.component';\nimport { SiteAnnouncementDisplayTimePipe } from './pipes/site-announcement-display-time.pipe';\nimport { CheckinAnnouncementRendererComponent } from './components/announcement-renderer/checkin-announcement-renderer/checkin-announcement-renderer.component';\nimport { AccessControlWhiteListUsersComponent } from './components/access-control-white-list-users/access-control-white-list-users.component';\nimport { AccessControlInductionModePipe } from './pipes/access-control-induction-mode.pipe';\nimport { AccessControlAutomaticAttendanceModePipe } from './pipes/access-control-automatic-attendance-mode.pipe';\nimport { SupplierFormsComponent } from './components/supplier-forms/supplier-forms.component';\nimport { SupplierFormHistoryComponent } from './components/supplier-forms/supplier-form-history/supplier-form-history.component';\nimport { SupplierAnonymousFormsComponent } from './components/supplier-forms/supplier-anonymous-forms/supplier-anonymous-forms.component';\nimport { SupplierFillFormComponent } from './components/supplier-forms/supplier-fill-form/supplier-fill-form.component';\nimport { ExternalSitePermissionPipe } from './pipes/external-site-permission.pipe';\nimport { SupplierJoinToCompanyComponent } from './components/supplier-join-to-company/supplier-join-to-company.component';\nimport { SignaturePadQuestionRendererComponent } from './components/question/renderer/signature-pad-question-renderer/signature-pad-question-renderer.component';\nimport { QuestionSignaturePadComponent } from './components/question/question-signature-pad/question-signature-pad.component';\nimport { SecurityLogReportComponent } from './components/security-log-report/security-log-report.component';\nimport { SecurityLogTypePipe } from './pipes/security-log-type.pipe';\nimport { SiteAccessControlUnitManualComponent } from './components/site-access-control-unit-manual/site-access-control-unit-manual.component';\nimport { FormApprovalModePipe } from './pipes/form-approval-mode.pipe';\nimport { RegisterSiteAssetComponent } from './components/site-asset/register-site-asset/register-site-asset.component';\nimport { SiteAssetRequestApproveStatusPipe } from './pipes/site-asset-request-approve-status.pipe';\nimport { AssetCategorySelectorComponent } from './components/inventory/asset-category-selector/asset-category-selector.component';\nimport { ManageSiteAssetComponent } from './components/site-asset/manage-site-asset/manage-site-asset.component';\nimport { AssetOperatorModePipe } from './pipes/asset-operator-mode.pipe';\nimport { RegisterSiteAssetOperatorComponent } from './components/site-asset/register-site-asset-operator/register-site-asset-operator.component';\nimport { SiteAssetCheckinHistoryComponent } from './components/site-asset/site-asset-checkin-history/site-asset-checkin-history.component';\nimport { AssetAutoCompleteSelectorComponent } from './components/inventory/asset-auto-complete-selector/asset-auto-complete-selector.component';\nimport { SiteAssetQueryModePipe } from './pipes/site-asset-query-mode.pipe';\nimport { FilledFormEntityStatusColorPipe } from './pipes/filled-form-entity-status-color.pipe';\nimport { FilledFormEntityStatusIconPipe } from './pipes/filled-form-entity-status-icon.pipe';\nimport { SiteAssetCheckInOutComponent } from './components/site-asset/site-asset-check-in-out/site-asset-check-in-out.component';\nimport { TemplateCompanyAssetManagerComponent } from './components/inventory/template-company-asset-manager/template-company-asset-manager.component';\nimport { ListOfOperatorRegistrationModePipe } from './pipes/list-of-operator-registration-mode.pipe';\nimport { InductionAskModePipe } from './pipes/induction-ask-mode.pipe';\nimport { EnabledDisabledSwitchPipe } from './pipes/enabled-disabled-switch.pipe';\nimport { TemporarilyAssetIconComponent } from './custom-controls/temporarily-asset-icon/temporarily-asset-icon.component';\nimport { AssetSelectorComponent } from './components/inventory/asset-selector/asset-selector.component';\nimport { ItemSelectorComponent } from './custom-controls/item-selector/item-selector.component';\nimport { ManageGlobalDynamicFieldsComponent } from './components/inventory/manage-global-dynamic-fields/manage-global-dynamic-fields.component';\nimport { QuestionAssetFieldComponent } from './components/question/question-asset-field/question-asset-field.component';\nimport { MessageHistoryComponent } from './components/message-history/message-history.component';\nimport { NotificationSettingComponent } from './components/notification-setting/notification-setting.component';\nimport { NotificationCenterComponent } from './components/notification-center/notification-center.component';\nimport { PermissionContainerComponent } from './components/permission-container/permission-container.component';\nimport { ProcoreFolderStructureModePipe } from './pipes/procore-folder-structure-mode.pipe';\nimport { SupplierDocumentReviewModePipe } from './pipes/supplier-document-review-mode.pipe';\nimport { EvacuationReportComponent } from './components/evacuation-report/evacuation-report.component';\nimport { EvacuationModePipe } from './pipes/evacuation-mode.pipe';\nimport { EvacuationStatusPipe } from './pipes/evacuation-status.pipe';\nimport { EvacuationDetailsComponent } from './components/evacuation-report/evacuation-details/evacuation-details.component';\nimport { SiteSupplierDocumentVersionCommentsComponent } from './components/supplier-documents/site-supplier-document-version-comments/site-supplier-document-version-comments.component';\nimport { UserEditPhoneComponent } from './components/user-edit-phone/user-edit-phone.component';\nimport { UserInfoModalComponent } from './components/user-info-modal/user-info-modal.component';\nimport { FilledFormEditComponent } from './components/form-manage/filled-form-edit/filled-form-edit.component';\nimport { FormHistoryComponent } from './components/form-manage/form-history/form-history.component';\nimport { AssetOperatorModeSelectorComponent } from './components/site-asset/asset-operator-mode-selector/asset-operator-mode-selector.component';\nimport { SiteSelectorWithExternalComponent } from './components/site-selector-withexternal/site-selector-withexternal.component';\nimport { MultipleDragDropSortableComponent } from './components/items-mixture/multiple-drag-drop-sortable/multiple-drag-drop-sortable.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { DocumentTypeSelectorComponent } from './custom-controls/document-type/document-type-selector.component';\nimport { PreviewUpsertComponent } from './components/preview-upsert/preview-upsert.component';\nimport { BaseGridComponent } from './custom-controls/grid/base-grid.component';\nimport { SafePipe } from './pipes/safe-pipe';\nimport { OwlDateTimeComponent } from './custom-controls/owl-date-time/owl-date-time.component';\nimport { GridTemplateNameDirective } from './directive/grid-template-name.directive';\nimport { GridTemplateComponent } from './custom-controls/grid/grid-template/grid-template.component';\nimport { FilterAssetCategoryComponent } from './custom-controls/filter-asset-category/filter-asset-category.component';\nimport { AssetCategoryTypePipe } from './pipes/asset-category-type-pipe';\nimport { DynamicFieldsFilterComponent } from './components/inventory/dynamic-fields-filter/dynamic-fields-filter.component';\nimport { DynamicFieldsFilterRendererComponent } from './components/inventory/dynamic-fields-filter-renderer/dynamic-fields-filter-renderer.component';\nimport { AnnouncementFilterComponent } from './custom-controls/announcement-filter/announcement-filter.component';\nimport { SupplierDocumentReportComponent } from './components/supplier-documents/supplier-document-report/supplier-document-report.component';\nimport { SiteSupplierDocumentVersionStatusPipe } from './pipes/site-supplier-document-version-status.pipe';\nimport { PermissionsSettingsComponent } from './components/company-settings/permissions-settings/permissions-settings.component';\nimport { PermissionModePipe } from './pipes/permission-mode.pipe';\nimport { RoleSelectorComponent } from './components/role-selector/role-selector.component';\nimport { HandshqIntegrationComponent } from './components/company-integrations/handshq-integration/handshq-integration.component';\nimport { HandsHQSupplierDocumentApprovalModePipe } from './pipes/handshq-supplier-document-approval-mode.pipe';\nimport { EmergencyContactComponent } from './components/required-field/emergency-contact/emergency-contact.component';\nimport { EmergencyContactViewerComponent } from './components/emergency-contact-viewer/emergency-contact-viewer.component';\nimport { QuestionAnswerFileFormatPipe } from './pipes/question-answer-file-format.pipe';\nimport { FileTypePipe } from './pipes/file-type.pipe';\nimport { DocumentTypeViewerComponent } from './components/document-type-viewer/document-type-viewer.component';\nimport { DocumentTypeViewerItemComponent } from './components/document-type-viewer/document-type-viewer-item/document-type-viewer-item.component';\nimport { DocumentTypeViewerUlComponent } from './components/document-type-viewer/document-type-viewer-ul/document-type-viewer-ul.component';\nimport { DocumentTypeNestedSelectorComponent } from './components/document-type-nested-selector/document-type-nested-selector.component';\nimport { ProcoreSyncMonitoringComponent } from './components/procore-sync-monitoring/procore-sync-monitoring.component';\nimport { DropzoneFileComponent } from './components/question/renderer/dropzone-file/dropzone-file.component';\nimport { ContactInformationComponent } from './components/site-management/contact-information/contact-information.component';\nimport { AccessControlUnitProviderPipe } from './pipes/access-control-unit-provider.pipe';\nimport { BiostarConfigurationComponent } from './components/company-integrations/biostar-integration/biostar-configuration/biostar-configuration.component';\nimport { ManageGatesComponent } from './components/god/manage-gates/manage-gates.component';\nimport { QuestionProfileComponent } from './components/question/question-profile/question-profile.component';\nimport { QuestionProfileSubTypePipe } from './pipes/question-profile-sub-type.pipe';\nimport { OffsiteSupplierCollectionModePipe } from './pipes/offsite-supplier-collection-mode.pipe';\nimport { TemplateCompanyVisitorTypesComponent } from './components/template-company-visitor-types/template-company-visitor-types.component';\nimport { AnnouncementForceViewModeSelectorComponent } from './components/site/announcement-force-view-mode-selector/announcement-force-view-mode-selector.component';\nimport { EmergencyContactQuestionRendererComponent } from './components/question/renderer/emergency-contact-question-renderer/emergency-contact-question-renderer.component';\nimport { environment } from '../environments/environment';\nimport { RECAPTCHA_V3_SITE_KEY, RecaptchaV3Module } from 'ng-recaptcha';\nimport { TokenizePipe } from './pipes/tokenize.pipe';\nimport { TwoFactorVerificationModePipe } from './pipes/two-factor-verification-mode.pipe';\nimport { PermitStartDatePolicyPipe } from './pipes/permit-start-date-policy.pipe';\nimport { CompanySelectorComponent } from './components/company-selector/company-selector.component';\nimport { ProcoreForceToSyncComponent } from './components/god/procore-force-to-sync/procore-force-to-sync.component';\nimport { SpecificCompanySiteSelectorComponent } from './components/site-selector/company-site-selector/specific-company-site-selector.component';\nimport { ProcoreIntegrationTypePipe } from './pipes/procore-integration-type.pipe';\nimport { IntegrationOperationPipe } from './pipes/integration-operation.pipe';\nimport { PermitClosurePolicyPipe } from './pipes/permit-closure-policy.pipe';\nimport { AccessControlUnitDirectionPipe } from './pipes/access-control-unit-direction.pipe';\nimport { PdfViewerComponent } from './components/pdf-viewer/pdf-viewer.component';\nimport { NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer';\nimport { SupplierDocumentReviewPageComponent } from './components/supplier-documents/supplier-document-review-page/supplier-document-review-page.component';\nimport { IframeAutoHeightDirective } from './directive/iframe-auto-height.directive';\nimport { WorkflowEngineComponent } from './workflow/workflow-engine/workflow-engine.component';\nimport { ComponentLoaderDirective } from './workflow/ComponentLoaderDirective';\nimport { WorkflowCartableComponent } from './workflow/workflow-cartable/workflow-cartable.component';\nimport { SupplierDocumentReviewWorkflowComponent } from './components/supplier-documents/supplier-document-review/workflow/supplier-document-review-workflow/supplier-document-review-workflow.component';\nimport { SupplierDocumentDetailWorkflowComponent } from './components/supplier-documents/supplier-document-review/workflow/supplier-document-detail-workflow/supplier-document-detail-workflow.component';\nimport { WorkflowInstanceHistoryComponent } from './workflow/workflow-instance-history/workflow-instance-history.component';\nimport { OtherSiteSupplierDocumentReportComponent } from './components/other-site-supplier-document-report/other-site-supplier-document-report.component';\nimport { SupplierDocumentKindUploderComponent } from './components/supplier-documents/supplier-document-kind-uploder/supplier-document-kind-uploder.component';\nimport { WorkflowFormRendererComponent } from './workflow/workflow-form-renderer/workflow-form-renderer.component';\nimport { CompanyWorkflowTemplateComponent } from './components/god/company-workflow-template/company-workflow-template.component';\nimport { WorkflowTypePipe } from './pipes/workflow-type.pipe';\nimport { UpsertFormComponent } from './components/form-manage/upsert-form/upsert-form.component';\nimport { MessageTypePipe } from './pipes/message-type-filter.pipe';\nimport { ScheduledReportStatusPipe } from './pipes/scheduled-report-log-status.pipe';\nimport { CssSpinnerComponent } from './custom-controls/css-spinner/css-spinner.component';\nimport { ScheduleReportModePipe } from './pipes/schedule-report-mode.pipe';\nimport { ImportSourcePipe } from './pipes/import-source.pipe';\n\nexport const WORKFLOW_COMPONENT: { [key: string]: Provider } = {};\nWORKFLOW_COMPONENT['SupplierDocumentReviewWorkflowComponent'] =\n SupplierDocumentReviewWorkflowComponent;\nWORKFLOW_COMPONENT['SupplierDocumentDetailWorkflowComponent'] =\n SupplierDocumentDetailWorkflowComponent;\nimport { QuestionItemsRendererComponent } from './components/question/question-items-renderer/question-items-renderer.component';\nimport { DisplayStylePipe } from './pipes/display-style.pipe';\nimport { DisplayStyleCssClassPipe } from './pipes/display-style-css-class.pipe';\nimport { SiteBriefingReportComponent } from './components/form-manage/site-briefing-report/site-briefing-report.component';\nimport { SiteBriefingStatusPipe } from './pipes/site-briefing-status.pipe';\nimport { ExportCsvPopupComponent } from './custom-controls/export-csv-popup/export-csv-popup.component';\nimport { SupplierDocumentExpiryNotificationPeriodTypePipe } from './pipes/supplier-document-expiry-notification-period-type.pipe';\nimport { TextRenderTypePipe } from './pipes/text-render-type.pipe';\nimport { CompanyFeatureConfigurationComponent } from './components/company-Feature-Configuration/company-Feature-Configuration.component';\nimport { RichTextRendererComponent } from './components/question/renderer/rich-text-renderer/rich-text-renderer.component';\nimport { ExpiryModePipe } from './pipes/expiry-mode.pipe';\nimport { ExpiryUnitPipe } from './pipes/expiry-unit.pipe';\nimport { DocumentKindNamePipe } from './pipes/document-kind.pipe';\nimport { DocumentKindManagerComponent } from './components/god/document-kind-manager/document-kind-manager.component';\nimport { SupplierDocumentAccessModePipe } from './pipes/supplier-document-access-mode.pipe';\nimport { SupplierDocumentExpiryDateModePipe } from './pipes/supplier-document-expiry-date-mode.pipe';\nimport { SupplierDocumentSignOffModePipe } from './pipes/supplier-document-sign-off-mode.pipe';\nimport { SupplierDocumentCommentModePipe } from './pipes/supplier-document-comment-mode.pipe';\nimport { SupplierDocumentAmendmentModePipe } from './pipes/supplier-document-amendment-mode.pipe';\nimport { WorkflowRendererComponent } from './components/workflow-renderer/workflow-renderer.component';\nimport { DocumentKindAddEditComponent } from './components/document-kind-add-edit/document-kind-add-edit.component';\nimport { RequestRevisionComponent } from './components/pending-approval/request-revision/request-revision.component';\nimport { WorkflowVariablesRendererComponent } from './components/workflow-renderer/workflow-variables-renderer/workflow-variables-renderer.component';\nimport { WorkerProfileComponent } from './components/worker-profile/worker-profile-component/worker-profile.component';\nimport { SiteActivityReportComponent } from './components/site-activity/site-activity-report-component/site-activity-report-component/site-activity-report.component';\nimport { SupplierDocumentSignoffReportComponent } from './components/supplier-documents/supplier-document-signoff/supplier-document-signoff-report/supplier-document-signoff-report.component';\nimport { SiteBriefingSignoffComponent } from './components/site-briefings/site-briefing-signoff/site-briefing-signoff/site-briefing-signoff.component';\nimport { WorkerProfileCardReportComponent } from './components/worker-profile/worker-profile-cards/worker-profile-card-report/worker-profile-card-report.component';\nimport { WorkerProfileHistoryComponent } from './components/worker-profile/worker-profile-history/worker-profile-history/worker-profile-history.component';\nimport { WorkerProfileSubTypePipe } from './pipes/worker-profile-sub-type.pipe';\nimport { UserDirectoryComponent } from './components/worker-profile/user-directory/user-directory.component';\nimport { SiteBriefingFormViewerComponent } from './components/form-manage/site-briefing-form-viewer/site-briefing-form-viewer.component';\nimport { WorkerProfileCardHistoryComponent } from './components/worker-profile/worker-profile-cards/worker-profile-card-history/worker-profile-card-history.component';\nimport { ObjectToListKeyValuePipe } from './pipes/object-to-list-key-value.pipe';\nimport { WorkerProfileLogTypePipe } from './pipes/worker-profile-log-type.pipe';\nimport { NgxPendoModule } from 'ngx-pendo';\nimport { DocumentExpiryStatusDirective } from './directive/document-expiry-status.directive';\nimport { AccessControlSiteBriefingModePipe } from './pipes/access-control-sitebriefing-mode.pipe';\nimport { AccessControlSupplierDocumentModePipe } from './pipes/access-control-supplier-document-mode.pipe';\nimport { DropdownButtonComponent } from './custom-controls/dropdown-button/dropdown-button.component';\nimport { EvacuationSettingEditorComponent } from './components/evacuation-setting-editor/evacuation-setting-editor.component';\nimport { RadioFormGroupComponent } from './custom-controls/radio-form-group/radio-form-group.component';\nimport { ManageSmsProviderComponent } from './components/god/manage-sms-provider/manage-sms-provider.component';\nimport { ToggleSelectorComponent } from './components/god/manage-sms-provider/toggle-selector/toggle-selector.component';\nimport { TestMessageComponentComponent } from './components/god/manage-sms-provider/test-message-component/test-message-component.component';\nimport { WorkProfileTabComponent } from './components/worker-profile/work-profile-tab/work-profile-tab.component';\nimport { UserInformationComponent } from './components/question-answer/user-information/user-information.component';\nimport { UserDetailCardComponent } from './components/user-detail-card/user-detail-card.component';\nimport { ProcoreCommentModePipe } from './pipes/procore-comment-mode.pipe';\n\n@NgModule({\n declarations: [\n SupplierDocumentReviewWorkflowComponent,\n SupplierDocumentDetailWorkflowComponent,\n AppComponent,\n BaseGridComponent,\n SecureComponent,\n PublicComponent,\n SideBarComponent,\n TopBarComponent,\n SwitchComponent,\n RadioGroupComponent,\n DashboardComponent,\n CompanyComponent,\n SiteComponent,\n UserComponent,\n SignInComponent,\n LoginComponent,\n ModalComponent,\n ManageSiteAttendancePermissionComponent,\n DropdownButtonComponent,\n ImportSiteAttendancePermissionComponent,\n SiteAttendancePermissionComponent,\n QuestinRenderModePipe,\n QuestionBooleanComponent,\n QuestionTextComponent,\n QuestionMultiSelectComponent,\n QuestionSingleSelectComponent,\n QuestionTypePipe,\n QuestionAddComponent,\n QuestionManagerComponent,\n RadioFormGroupComponent,\n SiteQuestionsManageComponent,\n SiteQuestionsComponent,\n QuestionManagerComponent,\n QuestionAddComponent,\n EnumToArrayPipe,\n QuestionTypePipe,\n QuestionSingleSelectComponent,\n QuestionMultiSelectComponent,\n QuestionTextComponent,\n QuestionBooleanComponent,\n QuestinRenderModePipe,\n QuestionExtendedTitleComponent,\n AnonymousComponent,\n AnonymousCheckComponent,\n AnonymousCheckinComponent,\n SuccessfullAnonymousCheckinComponent,\n LoaderComponent,\n QuestionAnswerComponent,\n SiteActivityComponent,\n SiteAttendanceComponent,\n MapComponent,\n UserActivityComponent,\n UserDocumentTypesComponent,\n GodComponent,\n ManageCompaniesComponent,\n ManagePlansComponent,\n ManageIndustryTypesComponent,\n UserAutocompleteComponent,\n DatetimePipe,\n QuestionFileComponent,\n SiteAttendanceBlockedUserComponent,\n AccompanierModePipe,\n AutomaticCheckinModePipe,\n TooltipComponent,\n ManageVideosComponent,\n VideoPlayListButtonComponent,\n LightBoxComponent,\n VideoListComponent,\n QuestionRendererComponent,\n BooleanQuestionRendererComponent,\n SingleSelectQuestionRendererComponent,\n MultiSelectQuestionRendererComponent,\n TextQuestionRendererComponent,\n FileQuestionRendererComponent,\n RequiredDocumentRendererComponent,\n ManualCheckComponent,\n ManualCheckinComponent,\n ManualCheckoutComponent,\n QuestionTriggersComponent,\n NotFoundPageComponent,\n ObjectToArrayPipe,\n DescriptorComponent,\n CompanyUserComponent,\n MobilePipe,\n ChartComponent,\n WeekdayPipe,\n FlaggedUserComponent,\n CompanyOwnerComponent,\n BillingComponent,\n UserProfileComponent,\n ChangePasswordComponent,\n RegexPipe,\n CompanySettingsComponent,\n CompanyTriggerActionComponent,\n EmailTemplateComponent,\n CompanyProfileComponent,\n SiteAutomationsComponent,\n FilterDataListComponent,\n AskQuestionPeriodModePipe,\n ItemValuePipe,\n FilterPipe,\n ChipContainerComponent,\n EmergencyAlarmComponent,\n DraggableDirective,\n ResizableDirective,\n CardDesignerComponent,\n DraggableElementPageComponent,\n AccompanyPersonComponent,\n LayoutPageComponent,\n QuestionDefaultModePipe,\n ManageScannablesComponent,\n ScannableGroupsComponent,\n ScannableItemsComponent,\n FileUploadComponent,\n SiteScannableGroupComponent,\n AnnouncementManagerComponent,\n AnnouncementComponent,\n SiteAnnouncementComponent,\n CreateAnnouncementComponent,\n SiteAnnouncementManageComponent,\n OrderByPipe,\n UserContactInformationComponent,\n RequiredFieldRendererComponent,\n GenderPipe,\n DatePipe,\n SummaryWidgetComponent,\n MultiImageModePipe,\n FilterByPropertyPipe,\n YesNoPipe,\n SortPipe,\n ManageVisitorTypeComponent,\n ManageSiteVisitorTypeComponent,\n ManageSiteQuestionVisitorTypeComponent,\n CompanyCategoryPipe,\n AddRemoveQuestionAllSitesComponent,\n ImageCropperFormControlComponent,\n SiteLocationVerifyComponent,\n GroupByPipe,\n ImportSitesComponent,\n DurationSelectorComponent,\n ArrayFormControlComponent,\n NicyNullPipe,\n HourMinuteSelectorComponent,\n GroupByPipe,\n ImportSitesComponent,\n CheckListFormControlComponent,\n MyScheduledReportsComponent,\n ReportDeliveryTypePipe,\n ReportPeriodTypePipe,\n NumberToWeekdayPipe,\n UserBusinessComponent,\n FilterSiteByPermissionPipe,\n SiteUserComponent,\n NoAccessComponent,\n LandingPageComponent,\n AnonymousCheckoutComponent,\n EmailListDirective,\n SubscriptionTypePipePipe,\n ConditionalQuestionComponent,\n AnswerSelectorComponent,\n QuickSetupComponent,\n AdditionalCompanyHostComponent,\n MinimalAddSiteComponent,\n ToFormGroupPipe,\n AddressFormControlComponent,\n DicToArrayPipe,\n ToAnyPipe,\n AttendanceFieldRendererComponent,\n AttendanceFieldComponent,\n HostPushNotificationComponent,\n FilteredAnnouncementComponent,\n CompanyEmployeeComponent,\n DocumentReportComponent,\n DocumentExpiryStatusPipe,\n ProcoreIntegrationComponent,\n PaginationComponent,\n SiteSelectorComponent,\n AssetSelectorComponent,\n CompanySiteSelectorComponent,\n PopoverFilterSimpleComponent,\n FilterHeaderComponent,\n SortableTitleHeaderComponent,\n FilterListRendererComponent,\n AnnouncementModePipe,\n TableSettingComponent,\n DurationFormControlComponent,\n DateTimePickerComponent,\n InputDateTimePickerComponent,\n AskModePipe,\n CompanySiteScopePipe,\n TextOperatorPipe,\n CompanySupplierComponent,\n EditCompanySupplierComponent,\n CompanySupplierSelectorComponent,\n DocumentTypeSelectorComponent,\n InductionModePipe,\n InductionStatusComponent,\n DataRetentionPolicyComponent,\n SiteInductionManageComponent,\n InductionManageComponent,\n SiteInductionComponent,\n InductionRendererComponent,\n UserCardComponent,\n AnnouncementRendererComponent,\n AnnouncementItemRendererComponent,\n UpsertInductionComponent,\n QuestionSelectorComponent,\n DocumentSelectorComponent,\n AnnouncementSelectorComponent,\n InductionSelectorComponent,\n FormInjectorComponent,\n UserSelectorComponent,\n RequiredDocumentListRendererComponent,\n VisitorTypeSelectorComponent,\n DisputeAttendanceComponent,\n MarkdownEditorComponent,\n QuestionTitleRendererComponent,\n DisputeHistoryComponent,\n SortableComponent,\n ManageInventoryComponent,\n ManageInventoryLocationsComponent,\n ManageToolCategoriesComponent,\n ManageToolStatusesComponent,\n InventoryToolReportComponent,\n InventoryLocationSelectorComponent,\n ToolAssignHistoryComponent,\n ToolImagesComponent,\n ToolDynamicFieldTypePipe,\n UpsertInventoryAssetComponent,\n ToolFieldRendererComponent,\n TextToolFieldRendererComponent,\n ImageToolFieldRendererComponent,\n FormManageComponent,\n UpsertFormComponent,\n SiteFormsComponent,\n FormReportComponent,\n InventoryStatusTriggerEditorComponent,\n InventoryStatusTriggersComponent,\n ScheduleReportTypePipe,\n InventoryDynamicFieldTriggersComponent,\n InventoryDynamicFieldTriggerEditorComponent,\n InductionReportComponent,\n SiteInductionStatusPipe,\n InductionFilledInfoComponent,\n SiteInductionDetailComponent,\n SimpleDocumentRendererComponent,\n FormTitlePipe,\n SupplierDocumentsComponent,\n ManageSupplierDocumentTypeComponent,\n ManageSupplierDocumentsComponent,\n SupplierDocumentSelectorComponent,\n SupplierDocumentSignOffViewerComponent,\n SiteDocumentStatusPipe,\n ViewSiteSupplierDocumentVersionComponent,\n SiteSupplierDocumentUploaderComponent,\n SupplierDocumentRendererComponent,\n SiteSupplierDocumentUploaderContainerComponent,\n SiteAttendanceApprovalStatusComponent,\n ClipboardBoxComponent,\n SiteAttendanceApprovalStatusPipe,\n SupplierDocumentTypeStatusIconPipe,\n SupplierDocumentTypeStatusTooltipPipe,\n ViewSiteSupplierDocumentVersionHistoryComponent,\n FileViewerComponent,\n ManageRegionComponent,\n RegionSelectorComponent,\n ViewSiteSupplierDocumentVersionHistoryComponent,\n OrderByFuctionPipe,\n MyobIntegrationComponent,\n MyobConfigurationAccessCodeCallbackComponent,\n ProcoreConfigurationAccessCodeCallbackComponent,\n MyobPeriodTypePipe,\n FormSelectorComponent,\n FormDataDetailsComponent,\n TriggerSelectorComponent,\n FormScopePipe,\n SupplierDocumentReviewComponent,\n FormDataRendererComponent,\n FormDetailsComponent,\n AnnouncementDisplayModePipe,\n ItemsMixtureComponent,\n ItemsRendererComponent,\n SingleQuestionRendererComponent,\n SiteManagementComponent,\n SiteQuestionsManagementComponent,\n AccordionHeaderComponent,\n CompanyIntegrationsComponent,\n CompanyInductionSelectorComponent,\n FormAskModePipe,\n SiteSupplierDocumentMultipleUploaderComponent,\n SupplierDocumentReminderComponent,\n PendingToApproveListComponent,\n ApproveEntityTypePipe,\n SupplierDocumentDescriptionViewerComponent,\n HtmlNewLinePipe,\n CompanyDocumentTypeComponent,\n OptionalMandatorySelectorComponent,\n OptionalMandatoryPipe,\n ProcoreExportSiteAttendanceAsTimeCardModePipePipe,\n ProcoreExportSiteAttendanceAsVisitorLogModePipePipe,\n ProcoreExportSiteAttendanceAsManpowerModePipe,\n FormTypePipe,\n FormApplyForPipe,\n AnonymousPermitComponent,\n FilledFormStatusPipe,\n FormRegisterForPipe,\n FormDataStatusPipe,\n AutoCheckOutTypePipe,\n PermitStatusIconPipe,\n PermitStatusTitlePipe,\n PermitStatusColorPipe,\n DelayAnswerModePipe,\n QuestionDateComponent,\n DateQuestionLimitComponent,\n DateQuestionRendererComponent,\n DocumentAnswerRendererComponent,\n QuestionListAnswerRendererComponent,\n SupplierDocumentApprovalModePipe,\n FilterByConditionPipe,\n PreCheckInListComponent,\n SignaturePadComponent,\n ApproveStatusPipe,\n ApproveRejectComponent,\n PermitOpenPolicyPipe,\n PermitStatusPipe,\n PermitReportComponent,\n DaysOfWeekPipe,\n PermitScheduleSelectorComponent,\n PermitScheduleItemComponent,\n UpdatePermitStatusComponent,\n PermitHistoryComponent,\n TimePipe,\n QRCodeCheckinModePipe,\n CheckinLocationModePipe,\n SiteAnnouncementForceViewModePipe,\n QuestionAnswerFilterComponent,\n QuestionAnswerFilterRendererComponent,\n SiteAnnouncementDisplayTimePipe,\n TwoFactorVerificationModePipe,\n CheckinAnnouncementRendererComponent,\n AccessControlWhiteListUsersComponent,\n AccessControlInductionModePipe,\n AccessControlSiteBriefingModePipe,\n AccessControlSupplierDocumentModePipe,\n AccessControlAutomaticAttendanceModePipe,\n SupplierFormsComponent,\n SupplierFormHistoryComponent,\n SupplierAnonymousFormsComponent,\n SupplierFillFormComponent,\n ExternalSitePermissionPipe,\n SupplierJoinToCompanyComponent,\n SignaturePadQuestionRendererComponent,\n QuestionSignaturePadComponent,\n SecurityLogReportComponent,\n SecurityLogTypePipe,\n SiteAccessControlUnitManualComponent,\n FormApprovalModePipe,\n RegisterSiteAssetComponent,\n SiteAssetRequestApproveStatusPipe,\n AssetCategorySelectorComponent,\n ManageSiteAssetComponent,\n AssetOperatorModePipe,\n RegisterSiteAssetOperatorComponent,\n SiteAssetCheckinHistoryComponent,\n AssetAutoCompleteSelectorComponent,\n SiteAssetQueryModePipe,\n AssetCategoryTypePipe,\n FilledFormEntityStatusColorPipe,\n FilledFormEntityStatusIconPipe,\n SiteAssetCheckInOutComponent,\n TemplateCompanyAssetManagerComponent,\n ListOfOperatorRegistrationModePipe,\n InductionAskModePipe,\n EnabledDisabledSwitchPipe,\n TemporarilyAssetIconComponent,\n ItemSelectorComponent,\n ManageGlobalDynamicFieldsComponent,\n QuestionAssetFieldComponent,\n MessageHistoryComponent,\n NotificationSettingComponent,\n NotificationCenterComponent,\n PermissionContainerComponent,\n ProcoreFolderStructureModePipe,\n SupplierDocumentReviewModePipe,\n EvacuationReportComponent,\n EvacuationModePipe,\n EvacuationStatusPipe,\n EvacuationDetailsComponent,\n SiteSupplierDocumentVersionCommentsComponent,\n FilledFormEditComponent,\n FormHistoryComponent,\n AssetOperatorModeSelectorComponent,\n UserEditPhoneComponent,\n UserInfoModalComponent,\n SiteSelectorWithExternalComponent,\n MultipleDragDropSortableComponent,\n PreviewUpsertComponent,\n OwlDateTimeComponent,\n SafePipe,\n FilterAssetCategoryComponent,\n GridTemplateNameDirective,\n GridTemplateComponent,\n DynamicFieldsFilterComponent,\n DynamicFieldsFilterRendererComponent,\n AnnouncementFilterComponent,\n SupplierDocumentReportComponent,\n SiteSupplierDocumentVersionStatusPipe,\n PermissionsSettingsComponent,\n PermissionModePipe,\n RoleSelectorComponent,\n QuestionAnswerFileFormatPipe,\n FileTypePipe,\n DocumentTypeViewerComponent,\n DocumentTypeViewerItemComponent,\n DocumentTypeViewerUlComponent,\n DocumentTypeNestedSelectorComponent,\n HandshqIntegrationComponent,\n HandsHQSupplierDocumentApprovalModePipe,\n EmergencyContactComponent,\n EmergencyContactViewerComponent,\n QuestionProfileComponent,\n QuestionProfileSubTypePipe,\n DropzoneFileComponent,\n ProcoreSyncMonitoringComponent,\n ContactInformationComponent,\n AccessControlUnitProviderPipe,\n BiostarConfigurationComponent,\n ContactInformationComponent,\n AnnouncementForceViewModeSelectorComponent,\n OffsiteSupplierCollectionModePipe,\n ManageGatesComponent,\n TemplateCompanyVisitorTypesComponent,\n EmergencyContactQuestionRendererComponent,\n TokenizePipe,\n PermitStartDatePolicyPipe,\n ProcoreForceToSyncComponent,\n CompanySelectorComponent,\n SpecificCompanySiteSelectorComponent,\n ProcoreIntegrationTypePipe,\n IntegrationOperationPipe,\n PermitClosurePolicyPipe,\n AccessControlUnitDirectionPipe,\n PdfViewerComponent,\n SupplierDocumentReviewPageComponent,\n IframeAutoHeightDirective,\n QuestionItemsRendererComponent,\n DisplayStylePipe,\n DisplayStyleCssClassPipe,\n WorkflowEngineComponent,\n ComponentLoaderDirective,\n WorkflowCartableComponent,\n DocumentKindNamePipe,\n WorkflowInstanceHistoryComponent,\n OtherSiteSupplierDocumentReportComponent,\n SupplierDocumentKindUploderComponent,\n WorkflowFormRendererComponent,\n CompanyWorkflowTemplateComponent,\n WorkflowTypePipe,\n MessageTypePipe,\n SiteBriefingReportComponent,\n SiteBriefingStatusPipe,\n ScheduledReportStatusPipe,\n CssSpinnerComponent,\n ScheduleReportModePipe,\n ExportCsvPopupComponent,\n SupplierDocumentExpiryNotificationPeriodTypePipe,\n TextRenderTypePipe,\n RichTextRendererComponent,\n CompanyFeatureConfigurationComponent,\n CompanyFeatureConfigurationComponent,\n ExpiryModePipe,\n ExpiryUnitPipe,\n DocumentKindManagerComponent,\n SupplierDocumentAccessModePipe,\n SupplierDocumentExpiryDateModePipe,\n SupplierDocumentSignOffModePipe,\n SupplierDocumentCommentModePipe,\n SupplierDocumentAmendmentModePipe,\n WorkflowRendererComponent,\n DocumentKindAddEditComponent,\n RequestRevisionComponent,\n WorkflowVariablesRendererComponent,\n WorkerProfileComponent,\n SiteActivityReportComponent,\n InductionReportComponent,\n SupplierDocumentSignoffReportComponent,\n SiteBriefingSignoffComponent,\n WorkerProfileCardReportComponent,\n WorkerProfileHistoryComponent,\n WorkerProfileSubTypePipe,\n UserDirectoryComponent,\n SiteBriefingFormViewerComponent,\n WorkerProfileCardHistoryComponent,\n ObjectToListKeyValuePipe,\n WorkerProfileLogTypePipe,\n DocumentExpiryStatusDirective,\n ImportSourcePipe,\n EvacuationSettingEditorComponent,\n RadioFormGroupComponent,\n ManageSmsProviderComponent,\n ToggleSelectorComponent,\n TestMessageComponentComponent,\n WorkProfileTabComponent,\n UserInformationComponent,\n UserDetailCardComponent,\n ProcoreCommentModePipe,\n ],\n entryComponents: [\n UpsertInductionComponent,\n QuestionSelectorComponent,\n DocumentSelectorComponent,\n AnnouncementSelectorComponent,\n InductionSelectorComponent,\n FormInjectorComponent,\n ],\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n AppRoutingModule,\n HttpClientModule,\n ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),\n FormsModule,\n ModalModule.forRoot(),\n NgxBootstrapModule,\n GoogleMapsModule,\n ChartModule,\n TypeaheadModule.forRoot(),\n TooltipModule.forRoot(),\n SortableModule.forRoot(),\n ImageCropperModule,\n NgSelectModule,\n ToastrModule.forRoot(),\n NgxFileDropModule,\n DragDropModule,\n //SortablejsModule.forRoot({ animation: 250 }),\n RecaptchaV3Module,\n NgxExtendedPdfViewerModule,\n NgxPendoModule.forRoot({\n pendoApiKey: environment.pendoApiKey,\n pendoIdFormatter: (pendoId: string) => pendoId.toLowerCase(),\n }),\n ],\n exports: [NgxBootstrapModule],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: HttpHelperInterceptor,\n multi: true,\n },\n { provide: LOCALE_ID, useValue: 'en-AU' },\n { provide: RECAPTCHA_V3_SITE_KEY, useValue: environment.recaptcha.siteKey },\n SignInService,\n DraggableItemService,\n CanDeactivateGuard,\n DatetimePipe,\n DatePipe,\n WeekdayPipe,\n OrderByPipe,\n GenderPipe,\n MobilePipe,\n FormTypePipe,\n PermitStatusPipe,\n SiteInductionStatusPipe,\n TextOperatorPipe,\n EnumToArrayPipe,\n ApproveEntityTypePipe,\n AccessControlAutomaticAttendanceModePipe,\n AccessControlUnitProviderPipe,\n HtmlNewLinePipe,\n DocumentKindNamePipe,\n ],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n\ndeclare global {\n interface Navigator {\n msSaveBlob: (blob: Blob, fileName: string) => boolean;\n }\n}\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","var map = {\n\t\"./af\": 5733,\n\t\"./af.js\": 5733,\n\t\"./ar\": 4703,\n\t\"./ar-dz\": 9400,\n\t\"./ar-dz.js\": 9400,\n\t\"./ar-kw\": 999,\n\t\"./ar-kw.js\": 999,\n\t\"./ar-ly\": 7867,\n\t\"./ar-ly.js\": 7867,\n\t\"./ar-ma\": 3616,\n\t\"./ar-ma.js\": 3616,\n\t\"./ar-sa\": 130,\n\t\"./ar-sa.js\": 130,\n\t\"./ar-tn\": 5957,\n\t\"./ar-tn.js\": 5957,\n\t\"./ar.js\": 4703,\n\t\"./az\": 5582,\n\t\"./az.js\": 5582,\n\t\"./be\": 6443,\n\t\"./be.js\": 6443,\n\t\"./bg\": 710,\n\t\"./bg.js\": 710,\n\t\"./bm\": 3407,\n\t\"./bm.js\": 3407,\n\t\"./bn\": 5140,\n\t\"./bn-bd\": 1515,\n\t\"./bn-bd.js\": 1515,\n\t\"./bn.js\": 5140,\n\t\"./bo\": 3079,\n\t\"./bo.js\": 3079,\n\t\"./br\": 7156,\n\t\"./br.js\": 7156,\n\t\"./bs\": 823,\n\t\"./bs.js\": 823,\n\t\"./ca\": 3022,\n\t\"./ca.js\": 3022,\n\t\"./cs\": 1833,\n\t\"./cs.js\": 1833,\n\t\"./cv\": 7177,\n\t\"./cv.js\": 7177,\n\t\"./cy\": 8968,\n\t\"./cy.js\": 8968,\n\t\"./da\": 3742,\n\t\"./da.js\": 3742,\n\t\"./de\": 8499,\n\t\"./de-at\": 6650,\n\t\"./de-at.js\": 6650,\n\t\"./de-ch\": 9094,\n\t\"./de-ch.js\": 9094,\n\t\"./de.js\": 8499,\n\t\"./dv\": 2338,\n\t\"./dv.js\": 2338,\n\t\"./el\": 839,\n\t\"./el.js\": 839,\n\t\"./en-au\": 4800,\n\t\"./en-au.js\": 4800,\n\t\"./en-ca\": 8963,\n\t\"./en-ca.js\": 8963,\n\t\"./en-gb\": 3133,\n\t\"./en-gb.js\": 3133,\n\t\"./en-ie\": 6394,\n\t\"./en-ie.js\": 6394,\n\t\"./en-il\": 4766,\n\t\"./en-il.js\": 4766,\n\t\"./en-in\": 3925,\n\t\"./en-in.js\": 3925,\n\t\"./en-nz\": 462,\n\t\"./en-nz.js\": 462,\n\t\"./en-sg\": 8840,\n\t\"./en-sg.js\": 8840,\n\t\"./eo\": 1117,\n\t\"./eo.js\": 1117,\n\t\"./es\": 8351,\n\t\"./es-do\": 7233,\n\t\"./es-do.js\": 7233,\n\t\"./es-mx\": 4053,\n\t\"./es-mx.js\": 4053,\n\t\"./es-us\": 90,\n\t\"./es-us.js\": 90,\n\t\"./es.js\": 8351,\n\t\"./et\": 1285,\n\t\"./et.js\": 1285,\n\t\"./eu\": 5091,\n\t\"./eu.js\": 5091,\n\t\"./fa\": 5082,\n\t\"./fa.js\": 5082,\n\t\"./fi\": 2287,\n\t\"./fi.js\": 2287,\n\t\"./fil\": 293,\n\t\"./fil.js\": 293,\n\t\"./fo\": 6924,\n\t\"./fo.js\": 6924,\n\t\"./fr\": 3439,\n\t\"./fr-ca\": 2452,\n\t\"./fr-ca.js\": 2452,\n\t\"./fr-ch\": 5291,\n\t\"./fr-ch.js\": 5291,\n\t\"./fr.js\": 3439,\n\t\"./fy\": 9694,\n\t\"./fy.js\": 9694,\n\t\"./ga\": 7612,\n\t\"./ga.js\": 7612,\n\t\"./gd\": 2606,\n\t\"./gd.js\": 2606,\n\t\"./gl\": 8560,\n\t\"./gl.js\": 8560,\n\t\"./gom-deva\": 5134,\n\t\"./gom-deva.js\": 5134,\n\t\"./gom-latn\": 9951,\n\t\"./gom-latn.js\": 9951,\n\t\"./gu\": 3526,\n\t\"./gu.js\": 3526,\n\t\"./he\": 5894,\n\t\"./he.js\": 5894,\n\t\"./hi\": 3440,\n\t\"./hi.js\": 3440,\n\t\"./hr\": 8246,\n\t\"./hr.js\": 8246,\n\t\"./hu\": 5366,\n\t\"./hu.js\": 5366,\n\t\"./hy-am\": 1609,\n\t\"./hy-am.js\": 1609,\n\t\"./id\": 1424,\n\t\"./id.js\": 1424,\n\t\"./is\": 74,\n\t\"./is.js\": 74,\n\t\"./it\": 5598,\n\t\"./it-ch\": 9147,\n\t\"./it-ch.js\": 9147,\n\t\"./it.js\": 5598,\n\t\"./ja\": 4844,\n\t\"./ja.js\": 4844,\n\t\"./jv\": 3096,\n\t\"./jv.js\": 3096,\n\t\"./ka\": 8207,\n\t\"./ka.js\": 8207,\n\t\"./kk\": 4418,\n\t\"./kk.js\": 4418,\n\t\"./km\": 1813,\n\t\"./km.js\": 1813,\n\t\"./kn\": 5996,\n\t\"./kn.js\": 5996,\n\t\"./ko\": 1808,\n\t\"./ko.js\": 1808,\n\t\"./ku\": 8250,\n\t\"./ku.js\": 8250,\n\t\"./ky\": 5651,\n\t\"./ky.js\": 5651,\n\t\"./lb\": 6514,\n\t\"./lb.js\": 6514,\n\t\"./lo\": 8852,\n\t\"./lo.js\": 8852,\n\t\"./lt\": 5395,\n\t\"./lt.js\": 5395,\n\t\"./lv\": 8848,\n\t\"./lv.js\": 8848,\n\t\"./me\": 760,\n\t\"./me.js\": 760,\n\t\"./mi\": 1392,\n\t\"./mi.js\": 1392,\n\t\"./mk\": 969,\n\t\"./mk.js\": 969,\n\t\"./ml\": 9862,\n\t\"./ml.js\": 9862,\n\t\"./mn\": 4354,\n\t\"./mn.js\": 4354,\n\t\"./mr\": 8190,\n\t\"./mr.js\": 8190,\n\t\"./ms\": 4086,\n\t\"./ms-my\": 6785,\n\t\"./ms-my.js\": 6785,\n\t\"./ms.js\": 4086,\n\t\"./mt\": 9577,\n\t\"./mt.js\": 9577,\n\t\"./my\": 7131,\n\t\"./my.js\": 7131,\n\t\"./nb\": 6067,\n\t\"./nb.js\": 6067,\n\t\"./ne\": 1189,\n\t\"./ne.js\": 1189,\n\t\"./nl\": 8934,\n\t\"./nl-be\": 2006,\n\t\"./nl-be.js\": 2006,\n\t\"./nl.js\": 8934,\n\t\"./nn\": 3035,\n\t\"./nn.js\": 3035,\n\t\"./oc-lnc\": 9599,\n\t\"./oc-lnc.js\": 9599,\n\t\"./pa-in\": 2095,\n\t\"./pa-in.js\": 2095,\n\t\"./pl\": 2565,\n\t\"./pl.js\": 2565,\n\t\"./pt\": 2874,\n\t\"./pt-br\": 4450,\n\t\"./pt-br.js\": 4450,\n\t\"./pt.js\": 2874,\n\t\"./ro\": 5920,\n\t\"./ro.js\": 5920,\n\t\"./ru\": 7496,\n\t\"./ru.js\": 7496,\n\t\"./sd\": 1377,\n\t\"./sd.js\": 1377,\n\t\"./se\": 708,\n\t\"./se.js\": 708,\n\t\"./si\": 9805,\n\t\"./si.js\": 9805,\n\t\"./sk\": 5202,\n\t\"./sk.js\": 5202,\n\t\"./sl\": 3408,\n\t\"./sl.js\": 3408,\n\t\"./sq\": 9821,\n\t\"./sq.js\": 9821,\n\t\"./sr\": 8994,\n\t\"./sr-cyrl\": 4373,\n\t\"./sr-cyrl.js\": 4373,\n\t\"./sr.js\": 8994,\n\t\"./ss\": 4123,\n\t\"./ss.js\": 4123,\n\t\"./sv\": 8186,\n\t\"./sv.js\": 8186,\n\t\"./sw\": 8237,\n\t\"./sw.js\": 8237,\n\t\"./ta\": 1495,\n\t\"./ta.js\": 1495,\n\t\"./te\": 7659,\n\t\"./te.js\": 7659,\n\t\"./tet\": 4134,\n\t\"./tet.js\": 4134,\n\t\"./tg\": 6146,\n\t\"./tg.js\": 6146,\n\t\"./th\": 1378,\n\t\"./th.js\": 1378,\n\t\"./tk\": 8727,\n\t\"./tk.js\": 8727,\n\t\"./tl-ph\": 5239,\n\t\"./tl-ph.js\": 5239,\n\t\"./tlh\": 2031,\n\t\"./tlh.js\": 2031,\n\t\"./tr\": 7535,\n\t\"./tr.js\": 7535,\n\t\"./tzl\": 9527,\n\t\"./tzl.js\": 9527,\n\t\"./tzm\": 1873,\n\t\"./tzm-latn\": 4399,\n\t\"./tzm-latn.js\": 4399,\n\t\"./tzm.js\": 1873,\n\t\"./ug-cn\": 6978,\n\t\"./ug-cn.js\": 6978,\n\t\"./uk\": 2039,\n\t\"./uk.js\": 2039,\n\t\"./ur\": 3545,\n\t\"./ur.js\": 3545,\n\t\"./uz\": 4447,\n\t\"./uz-latn\": 1922,\n\t\"./uz-latn.js\": 1922,\n\t\"./uz.js\": 4447,\n\t\"./vi\": 7607,\n\t\"./vi.js\": 7607,\n\t\"./x-pseudo\": 2159,\n\t\"./x-pseudo.js\": 2159,\n\t\"./yo\": 4017,\n\t\"./yo.js\": 4017,\n\t\"./zh-cn\": 2086,\n\t\"./zh-cn.js\": 2086,\n\t\"./zh-hk\": 3409,\n\t\"./zh-hk.js\": 3409,\n\t\"./zh-mo\": 4318,\n\t\"./zh-mo.js\": 4318,\n\t\"./zh-tw\": 4355,\n\t\"./zh-tw.js\": 4355\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 6700;"],"sourceRoot":"webpack:///","file":"main.887b9f4adcf89c51.js"}